bool QgsComposerAttributeTable::readXML( const QDomElement& itemElem, const QDomDocument& doc ) { if ( itemElem.isNull() ) { return false; } //read general table properties if ( !tableReadXML( itemElem, doc ) ) { return false; } mShowOnlyVisibleFeatures = itemElem.attribute( "showOnlyVisibleFeatures", "1" ).toInt(); mFilterFeatures = itemElem.attribute( "filterFeatures", "false" ) == "true" ? true : false; mFeatureFilter = itemElem.attribute( "featureFilter", "" ); //composer map int composerMapId = itemElem.attribute( "composerMap", "-1" ).toInt(); if ( composerMapId == -1 ) { mComposerMap = 0; } if ( composition() ) { mComposerMap = composition()->getComposerMapById( composerMapId ); } else { mComposerMap = 0; } if ( mComposerMap ) { //if we have found a valid map item, listen out to extent changes on it and refresh the table QObject::connect( mComposerMap, SIGNAL( extentChanged() ), this, SLOT( refreshAttributes() ) ); } //vector layer QString layerId = itemElem.attribute( "vectorLayer", "not_existing" ); if ( layerId == "not_existing" ) { mVectorLayer = 0; } else { QgsMapLayer* ml = QgsMapLayerRegistry::instance()->mapLayer( layerId ); if ( ml ) { mVectorLayer = dynamic_cast<QgsVectorLayer*>( ml ); if ( mVectorLayer ) { //if we have found a valid vector layer, listen for modifications on it and refresh the table QObject::connect( mVectorLayer, SIGNAL( layerModified() ), this, SLOT( refreshAttributes() ) ); } } } //restore display attribute map. This is required to upgrade pre 2.4 projects. QSet<int> displayAttributes; QDomNodeList displayAttributeList = itemElem.elementsByTagName( "displayAttributes" ); if ( displayAttributeList.size() > 0 ) { QDomElement displayAttributesElem = displayAttributeList.at( 0 ).toElement(); QDomNodeList attributeEntryList = displayAttributesElem.elementsByTagName( "attributeEntry" ); for ( int i = 0; i < attributeEntryList.size(); ++i ) { QDomElement attributeEntryElem = attributeEntryList.at( i ).toElement(); int index = attributeEntryElem.attribute( "index", "-1" ).toInt(); if ( index != -1 ) { displayAttributes.insert( index ); } } setDisplayAttributes( displayAttributes, false ); } //restore alias map. This is required to upgrade pre 2.4 projects. QMap<int, QString> fieldAliasMap; QDomNodeList aliasMapNodeList = itemElem.elementsByTagName( "attributeAliasMap" ); if ( aliasMapNodeList.size() > 0 ) { QDomElement attributeAliasMapElem = aliasMapNodeList.at( 0 ).toElement(); QDomNodeList aliasMepEntryList = attributeAliasMapElem.elementsByTagName( "aliasEntry" ); for ( int i = 0; i < aliasMepEntryList.size(); ++i ) { QDomElement aliasEntryElem = aliasMepEntryList.at( i ).toElement(); int key = aliasEntryElem.attribute( "key", "-1" ).toInt(); QString value = aliasEntryElem.attribute( "value", "" ); fieldAliasMap.insert( key, value ); } restoreFieldAliasMap( fieldAliasMap ); } //restore sort columns. This is required to upgrade pre 2.4 projects. QDomElement sortColumnsElem = itemElem.firstChildElement( "sortColumns" ); if ( !sortColumnsElem.isNull() && mVectorLayer ) { QDomNodeList columns = sortColumnsElem.elementsByTagName( "column" ); const QgsFields& fields = mVectorLayer->pendingFields(); for ( int i = 0; i < columns.size(); ++i ) { QDomElement columnElem = columns.at( i ).toElement(); int attribute = columnElem.attribute( "index" ).toInt(); Qt::SortOrder order = columnElem.attribute( "ascending" ) == "true" ? Qt::AscendingOrder : Qt::DescendingOrder; //find corresponding column QList<QgsComposerTableColumn*>::iterator columnIt = mColumns.begin(); for ( ; columnIt != mColumns.end(); ++columnIt ) { if (( *columnIt )->attribute() == fields[attribute].name() ) { ( *columnIt )->setSortByRank( i + 1 ); ( *columnIt )->setSortOrder( order ); break; } } } } //must be done here because tableReadXML->setSceneRect changes mMaximumNumberOfFeatures mMaximumNumberOfFeatures = itemElem.attribute( "maxFeatures", "5" ).toInt(); refreshAttributes(); emit itemChanged(); return true; }
bool QgsComposerAttributeTable::readXML( const QDomElement& itemElem, const QDomDocument& doc ) { if ( itemElem.isNull() ) { return false; } mShowOnlyVisibleFeatures = itemElem.attribute( "showOnlyVisibleFeatures", "1" ).toInt(); mFilterFeatures = itemElem.attribute( "filterFeatures", "false" ) == "true" ? true : false; mFeatureFilter = itemElem.attribute( "featureFilter", "" ); //composer map int composerMapId = itemElem.attribute( "composerMap", "-1" ).toInt(); if ( composerMapId == -1 ) { mComposerMap = 0; } if ( composition() ) { mComposerMap = composition()->getComposerMapById( composerMapId ); } else { mComposerMap = 0; } if ( mComposerMap ) { //if we have found a valid map item, listen out to extent changes on it and refresh the table QObject::connect( mComposerMap, SIGNAL( extentChanged() ), this, SLOT( refreshAttributes() ) ); } //vector layer QString layerId = itemElem.attribute( "vectorLayer", "not_existing" ); if ( layerId == "not_existing" ) { mVectorLayer = 0; } else { QgsMapLayer* ml = QgsMapLayerRegistry::instance()->mapLayer( layerId ); if ( ml ) { mVectorLayer = dynamic_cast<QgsVectorLayer*>( ml ); if ( mVectorLayer ) { //if we have found a valid vector layer, listen for modifications on it and refresh the table QObject::connect( mVectorLayer, SIGNAL( layerModified() ), this, SLOT( refreshAttributes() ) ); } } } //restore display attribute map mDisplayAttributes.clear(); QDomNodeList displayAttributeList = itemElem.elementsByTagName( "displayAttributes" ); if ( displayAttributeList.size() > 0 ) { QDomElement displayAttributesElem = displayAttributeList.at( 0 ).toElement(); QDomNodeList attributeEntryList = displayAttributesElem.elementsByTagName( "attributeEntry" ); for ( int i = 0; i < attributeEntryList.size(); ++i ) { QDomElement attributeEntryElem = attributeEntryList.at( i ).toElement(); int index = attributeEntryElem.attribute( "index", "-1" ).toInt(); if ( index != -1 ) { mDisplayAttributes.insert( index ); } } } //restore alias map mFieldAliasMap.clear(); QDomNodeList aliasMapNodeList = itemElem.elementsByTagName( "attributeAliasMap" ); if ( aliasMapNodeList.size() > 0 ) { QDomElement attributeAliasMapElem = aliasMapNodeList.at( 0 ).toElement(); QDomNodeList aliasMepEntryList = attributeAliasMapElem.elementsByTagName( "aliasEntry" ); for ( int i = 0; i < aliasMepEntryList.size(); ++i ) { QDomElement aliasEntryElem = aliasMepEntryList.at( i ).toElement(); int key = aliasEntryElem.attribute( "key", "-1" ).toInt(); QString value = aliasEntryElem.attribute( "value", "" ); mFieldAliasMap.insert( key, value ); } } //restore sort columns mSortInformation.clear(); QDomElement sortColumnsElem = itemElem.firstChildElement( "sortColumns" ); if ( !sortColumnsElem.isNull() ) { QDomNodeList columns = sortColumnsElem.elementsByTagName( "column" ); for ( int i = 0; i < columns.size(); ++i ) { QDomElement columnElem = columns.at( i ).toElement(); int attribute = columnElem.attribute( "index" ).toInt(); bool ascending = columnElem.attribute( "ascending" ) == "true" ? true : false; mSortInformation.push_back( qMakePair( attribute, ascending ) ); } } bool success = tableReadXML( itemElem, doc ); //must be done here because tableReadXML->setSceneRect changes mMaximumNumberOfFeatures mMaximumNumberOfFeatures = itemElem.attribute( "maxFeatures", "5" ).toInt(); refreshAttributes(); emit itemChanged(); return success; }
bool QgsComposerTextTable::readXML( const QDomElement& itemElem, const QDomDocument& doc ) { //todo: read headers and text entries return tableReadXML( itemElem, doc ); }