void QgsComposerArrow::setArrowHeadWidth( double width ) { mArrowHeadWidth = width; setStartMarker( mStartMarkerFile ); setEndMarker( mEndMarkerFile ); adaptItemSceneRect(); }
void QgsComposerArrow::setArrowHeadOutlineWidth( const double width ) { mArrowHeadOutlineWidth = width; mPen.setWidthF( mArrowHeadOutlineWidth ); adaptItemSceneRect(); }
void QgsComposerArrow::setOutlineWidth( double width ) { if ( mLineSymbol ) { mLineSymbol->setWidth( width ); } mArrowHeadOutlineWidth = width; mPen.setWidthF( mArrowHeadOutlineWidth ); adaptItemSceneRect(); }
QgsComposerArrow::QgsComposerArrow( QPointF startPoint, QPointF stopPoint, QgsComposition* c ) : QgsComposerItem( c ) , mStartPoint( startPoint ) , mStopPoint( stopPoint ) , mMarkerMode( DefaultMarker ) , mArrowHeadOutlineWidth( 1.0 ) , mArrowHeadOutlineColor( Qt::black ) , mArrowHeadFillColor( Qt::black ) , mBoundsBehaviour( 24 ) , mLineSymbol( nullptr ) { mStartXIdx = mStopPoint.x() < mStartPoint.x(); mStartYIdx = mStopPoint.y() < mStartPoint.y(); init(); adaptItemSceneRect(); }
void QgsComposerArrow::setEndMarker( const QString& svgPath ) { QSvgRenderer r; mEndMarkerFile = svgPath; if ( svgPath.isEmpty() || !r.load( svgPath ) ) { mStopArrowHeadHeight = 0; } else { //calculate mArrowHeadHeight from svg file and mArrowHeadWidth QRect viewBox = r.viewBox(); mStopArrowHeadHeight = mArrowHeadWidth / viewBox.width() * viewBox.height(); } adaptItemSceneRect(); }
bool QgsComposerArrow::readXml( const QDomElement& itemElem, const QDomDocument& doc ) { mArrowHeadWidth = itemElem.attribute( QStringLiteral( "arrowHeadWidth" ), QStringLiteral( "2.0" ) ).toDouble(); mArrowHeadFillColor = QgsSymbolLayerUtils::decodeColor( itemElem.attribute( QStringLiteral( "arrowHeadFillColor" ), QStringLiteral( "0,0,0,255" ) ) ); mArrowHeadOutlineColor = QgsSymbolLayerUtils::decodeColor( itemElem.attribute( QStringLiteral( "arrowHeadOutlineColor" ), QStringLiteral( "0,0,0,255" ) ) ); mArrowHeadOutlineWidth = itemElem.attribute( QStringLiteral( "outlineWidth" ), QStringLiteral( "1.0" ) ).toDouble(); setStartMarker( itemElem.attribute( QStringLiteral( "startMarkerFile" ), QLatin1String( "" ) ) ); setEndMarker( itemElem.attribute( QStringLiteral( "endMarkerFile" ), QLatin1String( "" ) ) ); mMarkerMode = QgsComposerArrow::MarkerMode( itemElem.attribute( QStringLiteral( "markerMode" ), QStringLiteral( "0" ) ).toInt() ); //if bounds behaviour version is not set, default to 2.2 behaviour mBoundsBehaviour = itemElem.attribute( QStringLiteral( "boundsBehaviourVersion" ), QStringLiteral( "22" ) ).toInt(); //arrow style QDomElement styleElem = itemElem.firstChildElement( QStringLiteral( "lineStyle" ) ); if ( !styleElem.isNull() ) { QDomElement lineStyleElem = styleElem.firstChildElement( QStringLiteral( "symbol" ) ); if ( !lineStyleElem.isNull() ) { delete mLineSymbol; mLineSymbol = QgsSymbolLayerUtils::loadSymbol<QgsLineSymbol>( lineStyleElem ); } } else { //old project file, read arrow width and color delete mLineSymbol; QgsStringMap properties; properties.insert( QStringLiteral( "width" ), itemElem.attribute( QStringLiteral( "outlineWidth" ), QStringLiteral( "1.0" ) ) ); if ( mBoundsBehaviour == 22 ) { //if arrow was created in versions prior to 2.4, use the old rendering style properties.insert( QStringLiteral( "capstyle" ), QStringLiteral( "flat" ) ); } else { properties.insert( QStringLiteral( "capstyle" ), QStringLiteral( "square" ) ); } int red = 0; int blue = 0; int green = 0; int alpha = 255; QDomNodeList arrowColorList = itemElem.elementsByTagName( QStringLiteral( "ArrowColor" ) ); if ( !arrowColorList.isEmpty() ) { QDomElement arrowColorElem = arrowColorList.at( 0 ).toElement(); red = arrowColorElem.attribute( QStringLiteral( "red" ), QStringLiteral( "0" ) ).toInt(); green = arrowColorElem.attribute( QStringLiteral( "green" ), QStringLiteral( "0" ) ).toInt(); blue = arrowColorElem.attribute( QStringLiteral( "blue" ), QStringLiteral( "0" ) ).toInt(); alpha = arrowColorElem.attribute( QStringLiteral( "alpha" ), QStringLiteral( "255" ) ).toInt(); mArrowHeadFillColor = QColor( red, green, blue, alpha ); mArrowHeadOutlineColor = QColor( red, green, blue, alpha ); } properties.insert( QStringLiteral( "color" ), QStringLiteral( "%1,%2,%3,%4" ).arg( red ).arg( green ).arg( blue ).arg( alpha ) ); mLineSymbol = QgsLineSymbol::createSimple( properties ); } mPen.setColor( mArrowHeadOutlineColor ); mPen.setWidthF( mArrowHeadOutlineWidth ); mBrush.setColor( mArrowHeadFillColor ); //restore general composer item properties //needs to be before start point / stop point because setSceneRect() QDomNodeList composerItemList = itemElem.elementsByTagName( QStringLiteral( "ComposerItem" ) ); if ( !composerItemList.isEmpty() ) { QDomElement composerItemElem = composerItemList.at( 0 ).toElement(); _readXml( composerItemElem, doc ); } //start point QDomNodeList startPointList = itemElem.elementsByTagName( QStringLiteral( "StartPoint" ) ); if ( !startPointList.isEmpty() ) { QDomElement startPointElem = startPointList.at( 0 ).toElement(); mStartPoint.setX( startPointElem.attribute( QStringLiteral( "x" ), QStringLiteral( "0.0" ) ).toDouble() ); mStartPoint.setY( startPointElem.attribute( QStringLiteral( "y" ), QStringLiteral( "0.0" ) ).toDouble() ); } //stop point QDomNodeList stopPointList = itemElem.elementsByTagName( QStringLiteral( "StopPoint" ) ); if ( !stopPointList.isEmpty() ) { QDomElement stopPointElem = stopPointList.at( 0 ).toElement(); mStopPoint.setX( stopPointElem.attribute( QStringLiteral( "x" ), QStringLiteral( "0.0" ) ).toDouble() ); mStopPoint.setY( stopPointElem.attribute( QStringLiteral( "y" ), QStringLiteral( "0.0" ) ).toDouble() ); } mStartXIdx = mStopPoint.x() < mStartPoint.x(); mStartYIdx = mStopPoint.y() < mStartPoint.y(); adaptItemSceneRect(); emit itemChanged(); return true; }
void QgsComposerArrow::setMarkerMode( MarkerMode mode ) { mMarkerMode = mode; adaptItemSceneRect(); }