bool TrackFileReader::read(const QString &path, QList<Track*> *tracks, std::string *whyNot) const { bool success = false; QFile theFile(path); if (!theFile.exists()) { if (whyNot) { QString tmpWhyNot = QString("'%0' doesn't exist").arg(path); *whyNot = tmpWhyNot.toStdString(); } success = false; } else if (FitFileReader::IsFitFile(path)) { success = _readFit(path, tracks, whyNot); } else { success = _readXml(theFile, tracks, whyNot); } /* Make sure all the tracks return their source file path */ if (success) { Track *track; foreach(track, *tracks) track->sourceFilePath = path; } return success; }
bool QgsComposerNodesItem::readXml( const QDomElement& itemElem, const QDomDocument& doc ) { // restore general composer item properties const QDomNodeList composerItemList = itemElem.elementsByTagName( QStringLiteral( "ComposerItem" ) ); if ( !composerItemList.isEmpty() ) { QDomElement composerItemElem = composerItemList.at( 0 ).toElement(); if ( !qgsDoubleNear( composerItemElem.attribute( QStringLiteral( "rotation" ), QStringLiteral( "0" ) ).toDouble(), 0.0 ) ) setItemRotation( composerItemElem.attribute( QStringLiteral( "rotation" ), QStringLiteral( "0" ) ).toDouble() ); _readXml( composerItemElem, doc ); } // restore style QDomElement styleSymbolElem = itemElem.firstChildElement( QStringLiteral( "symbol" ) ); if ( !styleSymbolElem.isNull() ) _readXmlStyle( styleSymbolElem ); // restore nodes mPolygon.clear(); QDomNodeList nodesList = itemElem.elementsByTagName( QStringLiteral( "node" ) ); for ( int i = 0; i < nodesList.size(); i++ ) { QDomElement nodeElem = nodesList.at( i ).toElement(); QPointF newPt; newPt.setX( nodeElem.attribute( QStringLiteral( "x" ) ).toDouble() ); newPt.setY( nodeElem.attribute( QStringLiteral( "y" ) ).toDouble() ); mPolygon.append( newPt ); } emit itemChanged(); return true; }
void QgsSvgAnnotationItem::readXml( const QDomDocument& doc, const QDomElement& itemElem ) { QString filePath = QgsProject::instance()->readPath( itemElem.attribute( "file" ) ); setFilePath( filePath ); QDomElement annotationElem = itemElem.firstChildElement( "AnnotationItem" ); if ( !annotationElem.isNull() ) { _readXml( doc, annotationElem ); } }
void QgsTextAnnotationItem::readXml( const QDomDocument& doc, const QDomElement& itemElem ) { delete mDocument; mDocument = new QTextDocument; mDocument->setHtml( itemElem.attribute( "document", QObject::tr( "" ) ) ); QDomElement annotationElem = itemElem.firstChildElement( "AnnotationItem" ); if ( !annotationElem.isNull() ) { _readXml( doc, annotationElem ); } }
bool QgsComposerFrame::readXml( const QDomElement& itemElem, const QDomDocument& doc ) { double x = itemElem.attribute( "sectionX" ).toDouble(); double y = itemElem.attribute( "sectionY" ).toDouble(); double width = itemElem.attribute( "sectionWidth" ).toDouble(); double height = itemElem.attribute( "sectionHeight" ).toDouble(); mSection = QRectF( x, y, width, height ); mHidePageIfEmpty = itemElem.attribute( "hidePageIfEmpty", "0" ).toInt(); mHideBackgroundIfEmpty = itemElem.attribute( "hideBackgroundIfEmpty", "0" ).toInt(); QDomElement composerItem = itemElem.firstChildElement( "ComposerItem" ); if ( composerItem.isNull() ) { return false; } return _readXml( composerItem, doc ); }
void QgsHtmlAnnotation::readXml( const QDomElement &itemElem, const QgsReadWriteContext &context ) { mHtmlFile = itemElem.attribute( QStringLiteral( "htmlfile" ), QString() ); QDomElement annotationElem = itemElem.firstChildElement( QStringLiteral( "AnnotationItem" ) ); if ( !annotationElem.isNull() ) { _readXml( annotationElem, context ); } // upgrade old layer if ( !mapLayer() && itemElem.hasAttribute( QStringLiteral( "vectorLayer" ) ) ) { setMapLayer( QgsProject::instance()->mapLayer( itemElem.attribute( QStringLiteral( "vectorLayer" ) ) ) ); } if ( mWebPage ) { setSourceFile( mHtmlFile ); } }
void QgsFormAnnotation::readXml( const QDomElement &itemElem, const QgsReadWriteContext &context ) { mDesignerForm = itemElem.attribute( QStringLiteral( "designerForm" ), QString() ); QDomElement annotationElem = itemElem.firstChildElement( QStringLiteral( "AnnotationItem" ) ); if ( !annotationElem.isNull() ) { _readXml( annotationElem, context ); } // upgrade old layer if ( !mapLayer() && itemElem.hasAttribute( QStringLiteral( "vectorLayer" ) ) ) { setMapLayer( QgsProject::instance()->mapLayer( itemElem.attribute( QStringLiteral( "vectorLayer" ) ) ) ); } mDesignerWidget.reset( createDesignerWidget( mDesignerForm ) ); if ( mDesignerWidget && fillSymbol() ) { QgsFillSymbol *newFill = fillSymbol()->clone(); newFill->setColor( mDesignerWidget->palette().color( QPalette::Window ) ); setFillSymbol( newFill ); } }
bool QgsComposerHtml::readXml( const QDomElement& itemElem, const QDomDocument& doc, bool ignoreFrames ) { if ( !ignoreFrames ) { deleteFrames(); } //first create the frames if ( !_readXml( itemElem, doc, ignoreFrames ) ) { return false; } bool contentModeOK; mContentMode = static_cast< QgsComposerHtml::ContentMode >( itemElem.attribute( "contentMode" ).toInt( &contentModeOK ) ); if ( !contentModeOK ) { mContentMode = QgsComposerHtml::Url; } mEvaluateExpressions = itemElem.attribute( "evaluateExpressions", "true" ) == "true" ? true : false; mUseSmartBreaks = itemElem.attribute( "useSmartBreaks", "true" ) == "true" ? true : false; mMaxBreakDistance = itemElem.attribute( "maxBreakDistance", "10" ).toDouble(); mHtml = itemElem.attribute( "html" ); mUserStylesheet = itemElem.attribute( "stylesheet" ); mEnableUserStylesheet = itemElem.attribute( "stylesheetEnabled", "false" ) == "true" ? true : false; //finally load the set url QString urlString = itemElem.attribute( "url" ); if ( !urlString.isEmpty() ) { mUrl = urlString; } loadHtml( true ); //since frames had to be created before, we need to emit a changed signal to refresh the widget emit changed(); return true; }
bool QgsComposerShape::readXml( const QDomElement& itemElem, const QDomDocument& doc ) { mShape = QgsComposerShape::Shape( itemElem.attribute( "shapeType", "0" ).toInt() ); mCornerRadius = itemElem.attribute( "cornerRadius", "0" ).toDouble(); //restore general composer item properties QDomNodeList composerItemList = itemElem.elementsByTagName( "ComposerItem" ); if ( !composerItemList.isEmpty() ) { QDomElement composerItemElem = composerItemList.at( 0 ).toElement(); //rotation if ( !qgsDoubleNear( composerItemElem.attribute( "rotation", "0" ).toDouble(), 0.0 ) ) { //check for old (pre 2.1) rotation attribute setItemRotation( composerItemElem.attribute( "rotation", "0" ).toDouble() ); } _readXml( composerItemElem, doc ); } QDomElement shapeStyleSymbolElem = itemElem.firstChildElement( "symbol" ); if ( !shapeStyleSymbolElem.isNull() ) { delete mShapeStyleSymbol; mShapeStyleSymbol = QgsSymbolLayerUtils::loadSymbol<QgsFillSymbolV2>( shapeStyleSymbolElem ); } else { //upgrade project file from 2.0 to use symbolV2 styling delete mShapeStyleSymbol; QgsStringMap properties; properties.insert( "color", QgsSymbolLayerUtils::encodeColor( brush().color() ) ); if ( hasBackground() ) { properties.insert( "style", "solid" ); } else { properties.insert( "style", "no" ); } if ( hasFrame() ) { properties.insert( "style_border", "solid" ); } else { properties.insert( "style_border", "no" ); } properties.insert( "color_border", QgsSymbolLayerUtils::encodeColor( pen().color() ) ); properties.insert( "width_border", QString::number( pen().widthF() ) ); //for pre 2.0 projects, shape color and outline were specified in a different element... QDomNodeList outlineColorList = itemElem.elementsByTagName( "OutlineColor" ); if ( !outlineColorList.isEmpty() ) { QDomElement frameColorElem = outlineColorList.at( 0 ).toElement(); bool redOk, greenOk, blueOk, alphaOk, widthOk; int penRed, penGreen, penBlue, penAlpha; double penWidth; penWidth = itemElem.attribute( "outlineWidth" ).toDouble( &widthOk ); penRed = frameColorElem.attribute( "red" ).toDouble( &redOk ); penGreen = frameColorElem.attribute( "green" ).toDouble( &greenOk ); penBlue = frameColorElem.attribute( "blue" ).toDouble( &blueOk ); penAlpha = frameColorElem.attribute( "alpha" ).toDouble( &alphaOk ); if ( redOk && greenOk && blueOk && alphaOk && widthOk ) { properties.insert( "color_border", QgsSymbolLayerUtils::encodeColor( QColor( penRed, penGreen, penBlue, penAlpha ) ) ); properties.insert( "width_border", QString::number( penWidth ) ); } } QDomNodeList fillColorList = itemElem.elementsByTagName( "FillColor" ); if ( !fillColorList.isEmpty() ) { QDomElement fillColorElem = fillColorList.at( 0 ).toElement(); bool redOk, greenOk, blueOk, alphaOk; int fillRed, fillGreen, fillBlue, fillAlpha; fillRed = fillColorElem.attribute( "red" ).toDouble( &redOk ); fillGreen = fillColorElem.attribute( "green" ).toDouble( &greenOk ); fillBlue = fillColorElem.attribute( "blue" ).toDouble( &blueOk ); fillAlpha = fillColorElem.attribute( "alpha" ).toDouble( &alphaOk ); if ( redOk && greenOk && blueOk && alphaOk ) { properties.insert( "color", QgsSymbolLayerUtils::encodeColor( QColor( fillRed, fillGreen, fillBlue, fillAlpha ) ) ); properties.insert( "style", "solid" ); } } if ( itemElem.hasAttribute( "transparentFill" ) ) { //old style (pre 2.0) of specifying that shapes had no fill bool hasOldTransparentFill = itemElem.attribute( "transparentFill", "0" ).toInt(); if ( hasOldTransparentFill ) { properties.insert( "style", "no" ); } } mShapeStyleSymbol = QgsFillSymbolV2::createSimple( properties ); } emit itemChanged(); return true; }
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; }
bool QgsComposerLegend::readXml( const QDomElement &itemElem, const QDomDocument &doc ) { if ( itemElem.isNull() ) { return false; } //read general properties mTitle = itemElem.attribute( QStringLiteral( "title" ) ); mSettings.setTitle( mTitle ); if ( !itemElem.attribute( QStringLiteral( "titleAlignment" ) ).isEmpty() ) { mSettings.setTitleAlignment( static_cast< Qt::AlignmentFlag >( itemElem.attribute( QStringLiteral( "titleAlignment" ) ).toInt() ) ); } int colCount = itemElem.attribute( QStringLiteral( "columnCount" ), QStringLiteral( "1" ) ).toInt(); if ( colCount < 1 ) colCount = 1; mColumnCount = colCount; mSettings.setColumnCount( mColumnCount ); mSettings.setSplitLayer( itemElem.attribute( QStringLiteral( "splitLayer" ), QStringLiteral( "0" ) ).toInt() == 1 ); mSettings.setEqualColumnWidth( itemElem.attribute( QStringLiteral( "equalColumnWidth" ), QStringLiteral( "0" ) ).toInt() == 1 ); QDomNodeList stylesNodeList = itemElem.elementsByTagName( QStringLiteral( "styles" ) ); if ( !stylesNodeList.isEmpty() ) { QDomNode stylesNode = stylesNodeList.at( 0 ); for ( int i = 0; i < stylesNode.childNodes().size(); i++ ) { QDomElement styleElem = stylesNode.childNodes().at( i ).toElement(); QgsLegendStyle style; style.readXml( styleElem, doc ); QString name = styleElem.attribute( QStringLiteral( "name" ) ); QgsLegendStyle::Style s; if ( name == QLatin1String( "title" ) ) s = QgsLegendStyle::Title; else if ( name == QLatin1String( "group" ) ) s = QgsLegendStyle::Group; else if ( name == QLatin1String( "subgroup" ) ) s = QgsLegendStyle::Subgroup; else if ( name == QLatin1String( "symbol" ) ) s = QgsLegendStyle::Symbol; else if ( name == QLatin1String( "symbolLabel" ) ) s = QgsLegendStyle::SymbolLabel; else continue; setStyle( s, style ); } } //font color QColor fontClr; fontClr.setNamedColor( itemElem.attribute( QStringLiteral( "fontColor" ), QStringLiteral( "#000000" ) ) ); mSettings.setFontColor( fontClr ); //spaces mSettings.setBoxSpace( itemElem.attribute( QStringLiteral( "boxSpace" ), QStringLiteral( "2.0" ) ).toDouble() ); mSettings.setColumnSpace( itemElem.attribute( QStringLiteral( "columnSpace" ), QStringLiteral( "2.0" ) ).toDouble() ); mSettings.setSymbolSize( QSizeF( itemElem.attribute( QStringLiteral( "symbolWidth" ), QStringLiteral( "7.0" ) ).toDouble(), itemElem.attribute( QStringLiteral( "symbolHeight" ), QStringLiteral( "14.0" ) ).toDouble() ) ); mSettings.setWmsLegendSize( QSizeF( itemElem.attribute( QStringLiteral( "wmsLegendWidth" ), QStringLiteral( "50" ) ).toDouble(), itemElem.attribute( QStringLiteral( "wmsLegendHeight" ), QStringLiteral( "25" ) ).toDouble() ) ); mSettings.setLineSpacing( itemElem.attribute( QStringLiteral( "lineSpacing" ), QStringLiteral( "1.0" ) ).toDouble() ); mSettings.setDrawRasterStroke( itemElem.attribute( QStringLiteral( "rasterBorder" ), QStringLiteral( "1" ) ) != QLatin1String( "0" ) ); mSettings.setRasterStrokeColor( QgsSymbolLayerUtils::decodeColor( itemElem.attribute( QStringLiteral( "rasterBorderColor" ), QStringLiteral( "0,0,0" ) ) ) ); mSettings.setRasterStrokeWidth( itemElem.attribute( QStringLiteral( "rasterBorderWidth" ), QStringLiteral( "0" ) ).toDouble() ); mSettings.setWrapChar( itemElem.attribute( QStringLiteral( "wrapChar" ) ) ); mSizeToContents = itemElem.attribute( QStringLiteral( "resizeToContents" ), QStringLiteral( "1" ) ) != QLatin1String( "0" ); //composer map mLegendFilterByMap = itemElem.attribute( QStringLiteral( "legendFilterByMap" ), QStringLiteral( "0" ) ).toInt(); if ( !itemElem.attribute( QStringLiteral( "map" ) ).isEmpty() ) { setComposerMap( mComposition->getComposerMapById( itemElem.attribute( QStringLiteral( "map" ) ).toInt() ) ); } mFilterOutAtlas = itemElem.attribute( QStringLiteral( "legendFilterByAtlas" ), QStringLiteral( "0" ) ).toInt(); // QGIS >= 2.6 QDomElement layerTreeElem = itemElem.firstChildElement( QStringLiteral( "layer-tree" ) ); if ( layerTreeElem.isNull() ) layerTreeElem = itemElem.firstChildElement( QStringLiteral( "layer-tree-group" ) ); if ( !layerTreeElem.isNull() ) { std::unique_ptr< QgsLayerTree > tree( QgsLayerTree::readXml( layerTreeElem ) ); if ( mComposition ) tree->resolveReferences( mComposition->project(), true ); setCustomLayerTree( tree.release() ); } else setCustomLayerTree( nullptr ); //restore general composer item properties QDomNodeList composerItemList = itemElem.elementsByTagName( QStringLiteral( "ComposerItem" ) ); if ( !composerItemList.isEmpty() ) { QDomElement composerItemElem = composerItemList.at( 0 ).toElement(); _readXml( composerItemElem, doc ); } // < 2.0 projects backward compatibility >>>>> //title font QString titleFontString = itemElem.attribute( QStringLiteral( "titleFont" ) ); if ( !titleFontString.isEmpty() ) { rstyle( QgsLegendStyle::Title ).rfont().fromString( titleFontString ); } //group font QString groupFontString = itemElem.attribute( QStringLiteral( "groupFont" ) ); if ( !groupFontString.isEmpty() ) { rstyle( QgsLegendStyle::Group ).rfont().fromString( groupFontString ); } //layer font QString layerFontString = itemElem.attribute( QStringLiteral( "layerFont" ) ); if ( !layerFontString.isEmpty() ) { rstyle( QgsLegendStyle::Subgroup ).rfont().fromString( layerFontString ); } //item font QString itemFontString = itemElem.attribute( QStringLiteral( "itemFont" ) ); if ( !itemFontString.isEmpty() ) { rstyle( QgsLegendStyle::SymbolLabel ).rfont().fromString( itemFontString ); } if ( !itemElem.attribute( QStringLiteral( "groupSpace" ) ).isEmpty() ) { rstyle( QgsLegendStyle::Group ).setMargin( QgsLegendStyle::Top, itemElem.attribute( QStringLiteral( "groupSpace" ), QStringLiteral( "3.0" ) ).toDouble() ); } if ( !itemElem.attribute( QStringLiteral( "layerSpace" ) ).isEmpty() ) { rstyle( QgsLegendStyle::Subgroup ).setMargin( QgsLegendStyle::Top, itemElem.attribute( QStringLiteral( "layerSpace" ), QStringLiteral( "3.0" ) ).toDouble() ); } if ( !itemElem.attribute( QStringLiteral( "symbolSpace" ) ).isEmpty() ) { rstyle( QgsLegendStyle::Symbol ).setMargin( QgsLegendStyle::Top, itemElem.attribute( QStringLiteral( "symbolSpace" ), QStringLiteral( "2.0" ) ).toDouble() ); rstyle( QgsLegendStyle::SymbolLabel ).setMargin( QgsLegendStyle::Top, itemElem.attribute( QStringLiteral( "symbolSpace" ), QStringLiteral( "2.0" ) ).toDouble() ); } // <<<<<<< < 2.0 projects backward compatibility emit itemChanged(); return true; }
bool QgsComposerLabel::readXml( const QDomElement &itemElem, const QDomDocument &doc ) { if ( itemElem.isNull() ) { return false; } //restore label specific properties //text mText = itemElem.attribute( QStringLiteral( "labelText" ) ); //html state mHtmlState = itemElem.attribute( QStringLiteral( "htmlState" ) ).toInt(); //margin bool marginXOk = false; bool marginYOk = false; mMarginX = itemElem.attribute( QStringLiteral( "marginX" ) ).toDouble( &marginXOk ); mMarginY = itemElem.attribute( QStringLiteral( "marginY" ) ).toDouble( &marginYOk ); if ( !marginXOk || !marginYOk ) { //upgrade old projects where margins where stored in a single attribute double margin = itemElem.attribute( QStringLiteral( "margin" ), QStringLiteral( "1.0" ) ).toDouble(); mMarginX = margin; mMarginY = margin; } //Horizontal alignment mHAlignment = static_cast< Qt::AlignmentFlag >( itemElem.attribute( QStringLiteral( "halign" ) ).toInt() ); //Vertical alignment mVAlignment = static_cast< Qt::AlignmentFlag >( itemElem.attribute( QStringLiteral( "valign" ) ).toInt() ); //font QgsFontUtils::setFromXmlChildNode( mFont, itemElem, QStringLiteral( "LabelFont" ) ); //font color QDomNodeList fontColorList = itemElem.elementsByTagName( QStringLiteral( "FontColor" ) ); if ( !fontColorList.isEmpty() ) { QDomElement fontColorElem = fontColorList.at( 0 ).toElement(); int red = fontColorElem.attribute( QStringLiteral( "red" ), QStringLiteral( "0" ) ).toInt(); int green = fontColorElem.attribute( QStringLiteral( "green" ), QStringLiteral( "0" ) ).toInt(); int blue = fontColorElem.attribute( QStringLiteral( "blue" ), QStringLiteral( "0" ) ).toInt(); mFontColor = QColor( red, green, blue ); } else { mFontColor = QColor( 0, 0, 0 ); } //restore general composer item properties QDomNodeList composerItemList = itemElem.elementsByTagName( QStringLiteral( "ComposerItem" ) ); if ( !composerItemList.isEmpty() ) { QDomElement composerItemElem = composerItemList.at( 0 ).toElement(); //rotation if ( !qgsDoubleNear( composerItemElem.attribute( QStringLiteral( "rotation" ), QStringLiteral( "0" ) ).toDouble(), 0.0 ) ) { //check for old (pre 2.1) rotation attribute setItemRotation( composerItemElem.attribute( QStringLiteral( "rotation" ), QStringLiteral( "0" ) ).toDouble() ); } _readXml( composerItemElem, doc ); } emit itemChanged(); return true; }
bool QgsComposerScaleBar::readXml( const QDomElement& itemElem, const QDomDocument& doc ) { if ( itemElem.isNull() ) { return false; } mHeight = itemElem.attribute( QStringLiteral( "height" ), QStringLiteral( "5.0" ) ).toDouble(); mLabelBarSpace = itemElem.attribute( QStringLiteral( "labelBarSpace" ), QStringLiteral( "3.0" ) ).toDouble(); mBoxContentSpace = itemElem.attribute( QStringLiteral( "boxContentSpace" ), QStringLiteral( "1.0" ) ).toDouble(); mNumSegments = itemElem.attribute( QStringLiteral( "numSegments" ), QStringLiteral( "2" ) ).toInt(); mNumSegmentsLeft = itemElem.attribute( QStringLiteral( "numSegmentsLeft" ), QStringLiteral( "0" ) ).toInt(); mNumUnitsPerSegment = itemElem.attribute( QStringLiteral( "numUnitsPerSegment" ), QStringLiteral( "1.0" ) ).toDouble(); mSegmentSizeMode = static_cast<SegmentSizeMode>( itemElem.attribute( QStringLiteral( "segmentSizeMode" ), QStringLiteral( "0" ) ).toInt() ); mMinBarWidth = itemElem.attribute( QStringLiteral( "minBarWidth" ), QStringLiteral( "50" ) ).toInt(); mMaxBarWidth = itemElem.attribute( QStringLiteral( "maxBarWidth" ), QStringLiteral( "150" ) ).toInt(); mSegmentMillimeters = itemElem.attribute( QStringLiteral( "segmentMillimeters" ), QStringLiteral( "0.0" ) ).toDouble(); mNumMapUnitsPerScaleBarUnit = itemElem.attribute( QStringLiteral( "numMapUnitsPerScaleBarUnit" ), QStringLiteral( "1.0" ) ).toDouble(); mPen.setWidthF( itemElem.attribute( QStringLiteral( "outlineWidth" ), QStringLiteral( "0.3" ) ).toDouble() ); mUnitLabeling = itemElem.attribute( QStringLiteral( "unitLabel" ) ); mLineJoinStyle = QgsSymbolLayerUtils::decodePenJoinStyle( itemElem.attribute( QStringLiteral( "lineJoinStyle" ), QStringLiteral( "miter" ) ) ); mPen.setJoinStyle( mLineJoinStyle ); mLineCapStyle = QgsSymbolLayerUtils::decodePenCapStyle( itemElem.attribute( QStringLiteral( "lineCapStyle" ), QStringLiteral( "square" ) ) ); mPen.setCapStyle( mLineCapStyle ); if ( !QgsFontUtils::setFromXmlChildNode( mFont, itemElem, QStringLiteral( "scaleBarFont" ) ) ) { mFont.fromString( itemElem.attribute( QStringLiteral( "font" ), QLatin1String( "" ) ) ); } //colors //fill color QDomNodeList fillColorList = itemElem.elementsByTagName( QStringLiteral( "fillColor" ) ); if ( !fillColorList.isEmpty() ) { QDomElement fillColorElem = fillColorList.at( 0 ).toElement(); bool redOk, greenOk, blueOk, alphaOk; int fillRed, fillGreen, fillBlue, fillAlpha; fillRed = fillColorElem.attribute( QStringLiteral( "red" ) ).toDouble( &redOk ); fillGreen = fillColorElem.attribute( QStringLiteral( "green" ) ).toDouble( &greenOk ); fillBlue = fillColorElem.attribute( QStringLiteral( "blue" ) ).toDouble( &blueOk ); fillAlpha = fillColorElem.attribute( QStringLiteral( "alpha" ) ).toDouble( &alphaOk ); if ( redOk && greenOk && blueOk && alphaOk ) { mBrush.setColor( QColor( fillRed, fillGreen, fillBlue, fillAlpha ) ); } } else { mBrush.setColor( QColor( itemElem.attribute( QStringLiteral( "brushColor" ), QStringLiteral( "#000000" ) ) ) ); } //fill color 2 QDomNodeList fillColor2List = itemElem.elementsByTagName( QStringLiteral( "fillColor2" ) ); if ( !fillColor2List.isEmpty() ) { QDomElement fillColor2Elem = fillColor2List.at( 0 ).toElement(); bool redOk, greenOk, blueOk, alphaOk; int fillRed, fillGreen, fillBlue, fillAlpha; fillRed = fillColor2Elem.attribute( QStringLiteral( "red" ) ).toDouble( &redOk ); fillGreen = fillColor2Elem.attribute( QStringLiteral( "green" ) ).toDouble( &greenOk ); fillBlue = fillColor2Elem.attribute( QStringLiteral( "blue" ) ).toDouble( &blueOk ); fillAlpha = fillColor2Elem.attribute( QStringLiteral( "alpha" ) ).toDouble( &alphaOk ); if ( redOk && greenOk && blueOk && alphaOk ) { mBrush2.setColor( QColor( fillRed, fillGreen, fillBlue, fillAlpha ) ); } } else { mBrush2.setColor( QColor( itemElem.attribute( QStringLiteral( "brush2Color" ), QStringLiteral( "#ffffff" ) ) ) ); } //stroke color QDomNodeList strokeColorList = itemElem.elementsByTagName( QStringLiteral( "strokeColor" ) ); if ( !strokeColorList.isEmpty() ) { QDomElement strokeColorElem = strokeColorList.at( 0 ).toElement(); bool redOk, greenOk, blueOk, alphaOk; int strokeRed, strokeGreen, strokeBlue, strokeAlpha; strokeRed = strokeColorElem.attribute( QStringLiteral( "red" ) ).toDouble( &redOk ); strokeGreen = strokeColorElem.attribute( QStringLiteral( "green" ) ).toDouble( &greenOk ); strokeBlue = strokeColorElem.attribute( QStringLiteral( "blue" ) ).toDouble( &blueOk ); strokeAlpha = strokeColorElem.attribute( QStringLiteral( "alpha" ) ).toDouble( &alphaOk ); if ( redOk && greenOk && blueOk && alphaOk ) { mPen.setColor( QColor( strokeRed, strokeGreen, strokeBlue, strokeAlpha ) ); } } else { mPen.setColor( QColor( itemElem.attribute( QStringLiteral( "penColor" ), QStringLiteral( "#000000" ) ) ) ); } //font color QDomNodeList textColorList = itemElem.elementsByTagName( QStringLiteral( "textColor" ) ); if ( !textColorList.isEmpty() ) { QDomElement textColorElem = textColorList.at( 0 ).toElement(); bool redOk, greenOk, blueOk, alphaOk; int textRed, textGreen, textBlue, textAlpha; textRed = textColorElem.attribute( QStringLiteral( "red" ) ).toDouble( &redOk ); textGreen = textColorElem.attribute( QStringLiteral( "green" ) ).toDouble( &greenOk ); textBlue = textColorElem.attribute( QStringLiteral( "blue" ) ).toDouble( &blueOk ); textAlpha = textColorElem.attribute( QStringLiteral( "alpha" ) ).toDouble( &alphaOk ); if ( redOk && greenOk && blueOk && alphaOk ) { mFontColor = QColor( textRed, textGreen, textBlue, textAlpha ); } } else { mFontColor.setNamedColor( itemElem.attribute( QStringLiteral( "fontColor" ), QStringLiteral( "#000000" ) ) ); } //style delete mStyle; mStyle = nullptr; QString styleString = itemElem.attribute( QStringLiteral( "style" ), QLatin1String( "" ) ); setStyle( tr( styleString.toLocal8Bit().data() ) ); mUnits = static_cast< ScaleBarUnits >( itemElem.attribute( QStringLiteral( "units" ) ).toInt() ); mAlignment = static_cast< Alignment >( itemElem.attribute( QStringLiteral( "alignment" ), QStringLiteral( "0" ) ).toInt() ); //map int mapId = itemElem.attribute( QStringLiteral( "mapId" ), QStringLiteral( "-1" ) ).toInt(); if ( mapId >= 0 ) { const QgsComposerMap* composerMap = mComposition->getComposerMapById( mapId ); mComposerMap = composerMap; if ( mComposerMap ) { connect( mComposerMap, SIGNAL( extentChanged() ), this, SLOT( updateSegmentSize() ) ); connect( mComposerMap, SIGNAL( destroyed( QObject* ) ), this, SLOT( invalidateCurrentMap() ) ); } } updateSegmentSize(); //restore general composer item properties QDomNodeList composerItemList = itemElem.elementsByTagName( QStringLiteral( "ComposerItem" ) ); if ( !composerItemList.isEmpty() ) { QDomElement composerItemElem = composerItemList.at( 0 ).toElement(); _readXml( composerItemElem, doc ); } return true; }
bool QgsComposerTableV2::readXml( const QDomElement &itemElem, const QDomDocument &doc, bool ignoreFrames ) { deleteFrames(); //first create the frames if ( !_readXml( itemElem, doc, ignoreFrames ) ) { return false; } if ( itemElem.isNull() ) { return false; } mEmptyTableMode = QgsComposerTableV2::EmptyTableMode( itemElem.attribute( QStringLiteral( "emptyTableMode" ), QStringLiteral( "0" ) ).toInt() ); mEmptyTableMessage = itemElem.attribute( QStringLiteral( "emptyTableMessage" ), tr( "No matching records" ) ); mShowEmptyRows = itemElem.attribute( QStringLiteral( "showEmptyRows" ), QStringLiteral( "0" ) ).toInt(); if ( !QgsFontUtils::setFromXmlChildNode( mHeaderFont, itemElem, QStringLiteral( "headerFontProperties" ) ) ) { mHeaderFont.fromString( itemElem.attribute( QStringLiteral( "headerFont" ), QLatin1String( "" ) ) ); } mHeaderFontColor = QgsSymbolLayerUtils::decodeColor( itemElem.attribute( QStringLiteral( "headerFontColor" ), QStringLiteral( "0,0,0,255" ) ) ); mHeaderHAlignment = QgsComposerTableV2::HeaderHAlignment( itemElem.attribute( QStringLiteral( "headerHAlignment" ), QStringLiteral( "0" ) ).toInt() ); mHeaderMode = QgsComposerTableV2::HeaderMode( itemElem.attribute( QStringLiteral( "headerMode" ), QStringLiteral( "0" ) ).toInt() ); if ( !QgsFontUtils::setFromXmlChildNode( mContentFont, itemElem, QStringLiteral( "contentFontProperties" ) ) ) { mContentFont.fromString( itemElem.attribute( QStringLiteral( "contentFont" ), QLatin1String( "" ) ) ); } mContentFontColor = QgsSymbolLayerUtils::decodeColor( itemElem.attribute( QStringLiteral( "contentFontColor" ), QStringLiteral( "0,0,0,255" ) ) ); mCellMargin = itemElem.attribute( QStringLiteral( "cellMargin" ), QStringLiteral( "1.0" ) ).toDouble(); mGridStrokeWidth = itemElem.attribute( QStringLiteral( "gridStrokeWidth" ), QStringLiteral( "0.5" ) ).toDouble(); mHorizontalGrid = itemElem.attribute( QStringLiteral( "horizontalGrid" ), QStringLiteral( "1" ) ).toInt(); mVerticalGrid = itemElem.attribute( QStringLiteral( "verticalGrid" ), QStringLiteral( "1" ) ).toInt(); mShowGrid = itemElem.attribute( QStringLiteral( "showGrid" ), QStringLiteral( "1" ) ).toInt(); mGridColor = QgsSymbolLayerUtils::decodeColor( itemElem.attribute( QStringLiteral( "gridColor" ), QStringLiteral( "0,0,0,255" ) ) ); mBackgroundColor = QgsSymbolLayerUtils::decodeColor( itemElem.attribute( QStringLiteral( "backgroundColor" ), QStringLiteral( "255,255,255,0" ) ) ); mWrapBehavior = QgsComposerTableV2::WrapBehavior( itemElem.attribute( QStringLiteral( "wrapBehavior" ), QStringLiteral( "0" ) ).toInt() ); //restore column specifications qDeleteAll( mColumns ); mColumns.clear(); QDomNodeList columnsList = itemElem.elementsByTagName( QStringLiteral( "displayColumns" ) ); if ( !columnsList.isEmpty() ) { QDomElement columnsElem = columnsList.at( 0 ).toElement(); QDomNodeList columnEntryList = columnsElem.elementsByTagName( QStringLiteral( "column" ) ); for ( int i = 0; i < columnEntryList.size(); ++i ) { QDomElement columnElem = columnEntryList.at( i ).toElement(); QgsComposerTableColumn *column = new QgsComposerTableColumn; column->readXml( columnElem ); mColumns.append( column ); } } //restore cell styles QDomNodeList stylesList = itemElem.elementsByTagName( QStringLiteral( "cellStyles" ) ); if ( !stylesList.isEmpty() ) { QDomElement stylesElem = stylesList.at( 0 ).toElement(); QMap< CellStyleGroup, QString >::const_iterator it = mCellStyleNames.constBegin(); for ( ; it != mCellStyleNames.constEnd(); ++it ) { QString styleName = it.value(); QDomNodeList styleList = stylesElem.elementsByTagName( styleName ); if ( !styleList.isEmpty() ) { QDomElement styleElem = styleList.at( 0 ).toElement(); QgsComposerTableStyle *style = mCellStyles.value( it.key() ); if ( style ) style->readXml( styleElem ); } } } return true; }