mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-24 00:47:57 -05:00
move read/write XML for QgsMapThemeCollection::MapThemeRecord inside class
This commit is contained in:
parent
f7b21861e2
commit
3e085e496b
@ -9,3 +9,7 @@ try:
|
||||
QgsMapThemeCollection.__signal_arguments__ = {'mapThemeChanged': ['theme: str'], 'mapThemeRenamed': ['name: str', 'newName: str']}
|
||||
except NameError:
|
||||
pass
|
||||
try:
|
||||
QgsMapThemeCollection.MapThemeRecord.readXml = staticmethod(QgsMapThemeCollection.MapThemeRecord.readXml)
|
||||
except NameError:
|
||||
pass
|
||||
|
@ -61,6 +61,7 @@ Sets the map layer for this record
|
||||
QSet<QString> expandedLegendItems;
|
||||
|
||||
bool expandedLayerNode;
|
||||
|
||||
};
|
||||
|
||||
class MapThemeRecord
|
||||
@ -158,6 +159,30 @@ Sets a set of group identifiers for group nodes that should have expanded state.
|
||||
Sets a set of group identifiers for group nodes that should have checked state. See :py:func:`~MapThemeRecord.checkedGroupNodes`.
|
||||
|
||||
.. versionadded:: 3.10.1
|
||||
%End
|
||||
|
||||
static MapThemeRecord readXml( const QDomElement &element, const QgsProject *project );
|
||||
%Docstring
|
||||
Reads the map theme record from XML
|
||||
|
||||
:param element: DOM element
|
||||
:param project: the QGIS project
|
||||
|
||||
.. seealso:: :py:func:`writeXml`
|
||||
|
||||
.. versionadded:: 3.42
|
||||
%End
|
||||
|
||||
void writeXml( QDomElement element, QDomDocument &document ) const;
|
||||
%Docstring
|
||||
Writes the map theme record to XML.
|
||||
|
||||
:param element: DOM element
|
||||
:param document: DOM document
|
||||
|
||||
.. seealso:: :py:func:`readXml`
|
||||
|
||||
.. versionadded:: 3.42
|
||||
%End
|
||||
|
||||
};
|
||||
@ -251,7 +276,7 @@ Reads the map theme collection state from XML
|
||||
.. seealso:: :py:func:`writeXml`
|
||||
%End
|
||||
|
||||
void writeXml( QDomDocument &doc );
|
||||
void writeXml( QDomDocument &doc ) const;
|
||||
%Docstring
|
||||
Writes the map theme collection state to XML.
|
||||
|
||||
|
@ -9,3 +9,7 @@ try:
|
||||
QgsMapThemeCollection.__signal_arguments__ = {'mapThemeChanged': ['theme: str'], 'mapThemeRenamed': ['name: str', 'newName: str']}
|
||||
except NameError:
|
||||
pass
|
||||
try:
|
||||
QgsMapThemeCollection.MapThemeRecord.readXml = staticmethod(QgsMapThemeCollection.MapThemeRecord.readXml)
|
||||
except NameError:
|
||||
pass
|
||||
|
@ -61,6 +61,7 @@ Sets the map layer for this record
|
||||
QSet<QString> expandedLegendItems;
|
||||
|
||||
bool expandedLayerNode;
|
||||
|
||||
};
|
||||
|
||||
class MapThemeRecord
|
||||
@ -158,6 +159,30 @@ Sets a set of group identifiers for group nodes that should have expanded state.
|
||||
Sets a set of group identifiers for group nodes that should have checked state. See :py:func:`~MapThemeRecord.checkedGroupNodes`.
|
||||
|
||||
.. versionadded:: 3.10.1
|
||||
%End
|
||||
|
||||
static MapThemeRecord readXml( const QDomElement &element, const QgsProject *project );
|
||||
%Docstring
|
||||
Reads the map theme record from XML
|
||||
|
||||
:param element: DOM element
|
||||
:param project: the QGIS project
|
||||
|
||||
.. seealso:: :py:func:`writeXml`
|
||||
|
||||
.. versionadded:: 3.42
|
||||
%End
|
||||
|
||||
void writeXml( QDomElement element, QDomDocument &document ) const;
|
||||
%Docstring
|
||||
Writes the map theme record to XML.
|
||||
|
||||
:param element: DOM element
|
||||
:param document: DOM document
|
||||
|
||||
.. seealso:: :py:func:`readXml`
|
||||
|
||||
.. versionadded:: 3.42
|
||||
%End
|
||||
|
||||
};
|
||||
@ -251,7 +276,7 @@ Reads the map theme collection state from XML
|
||||
.. seealso:: :py:func:`writeXml`
|
||||
%End
|
||||
|
||||
void writeXml( QDomDocument &doc );
|
||||
void writeXml( QDomDocument &doc ) const;
|
||||
%Docstring
|
||||
Writes the map theme collection state to XML.
|
||||
|
||||
|
@ -444,121 +444,10 @@ void QgsMapThemeCollection::readXml( const QDomDocument &doc )
|
||||
QDomElement visPresetElem = visPresetsElem.firstChildElement( QStringLiteral( "visibility-preset" ) );
|
||||
while ( !visPresetElem.isNull() )
|
||||
{
|
||||
QHash<QString, MapThemeLayerRecord> layerRecords; // key = layer ID
|
||||
|
||||
bool expandedStateInfo = false;
|
||||
if ( visPresetElem.hasAttribute( QStringLiteral( "has-expanded-info" ) ) )
|
||||
expandedStateInfo = visPresetElem.attribute( QStringLiteral( "has-expanded-info" ) ).toInt();
|
||||
|
||||
bool checkedStateInfo = false;
|
||||
if ( visPresetElem.hasAttribute( QStringLiteral( "has-checked-group-info" ) ) )
|
||||
checkedStateInfo = visPresetElem.attribute( QStringLiteral( "has-checked-group-info" ) ).toInt();
|
||||
|
||||
QString presetName = visPresetElem.attribute( QStringLiteral( "name" ) );
|
||||
QDomElement visPresetLayerElem = visPresetElem.firstChildElement( QStringLiteral( "layer" ) );
|
||||
while ( !visPresetLayerElem.isNull() )
|
||||
{
|
||||
QString layerID = visPresetLayerElem.attribute( QStringLiteral( "id" ) );
|
||||
if ( QgsMapLayer *layer = mProject->mapLayer( layerID ) )
|
||||
{
|
||||
layerRecords[layerID] = MapThemeLayerRecord( layer );
|
||||
layerRecords[layerID].isVisible = visPresetLayerElem.attribute( QStringLiteral( "visible" ), QStringLiteral( "1" ) ).toInt();
|
||||
|
||||
if ( visPresetLayerElem.hasAttribute( QStringLiteral( "style" ) ) )
|
||||
{
|
||||
layerRecords[layerID].usingCurrentStyle = true;
|
||||
layerRecords[layerID].currentStyle = visPresetLayerElem.attribute( QStringLiteral( "style" ) );
|
||||
}
|
||||
|
||||
if ( visPresetLayerElem.hasAttribute( QStringLiteral( "expanded" ) ) )
|
||||
layerRecords[layerID].expandedLayerNode = visPresetLayerElem.attribute( QStringLiteral( "expanded" ) ).toInt();
|
||||
}
|
||||
visPresetLayerElem = visPresetLayerElem.nextSiblingElement( QStringLiteral( "layer" ) );
|
||||
}
|
||||
|
||||
QDomElement checkedLegendNodesElem = visPresetElem.firstChildElement( QStringLiteral( "checked-legend-nodes" ) );
|
||||
while ( !checkedLegendNodesElem.isNull() )
|
||||
{
|
||||
QSet<QString> checkedLegendNodes;
|
||||
|
||||
QDomElement checkedLegendNodeElem = checkedLegendNodesElem.firstChildElement( QStringLiteral( "checked-legend-node" ) );
|
||||
while ( !checkedLegendNodeElem.isNull() )
|
||||
{
|
||||
checkedLegendNodes << checkedLegendNodeElem.attribute( QStringLiteral( "id" ) );
|
||||
checkedLegendNodeElem = checkedLegendNodeElem.nextSiblingElement( QStringLiteral( "checked-legend-node" ) );
|
||||
}
|
||||
|
||||
QString layerID = checkedLegendNodesElem.attribute( QStringLiteral( "id" ) );
|
||||
if ( mProject->mapLayer( layerID ) ) // only use valid IDs
|
||||
{
|
||||
layerRecords[layerID].usingLegendItems = true;
|
||||
layerRecords[layerID].checkedLegendItems = checkedLegendNodes;
|
||||
}
|
||||
checkedLegendNodesElem = checkedLegendNodesElem.nextSiblingElement( QStringLiteral( "checked-legend-nodes" ) );
|
||||
}
|
||||
|
||||
QSet<QString> expandedGroupNodes;
|
||||
if ( expandedStateInfo )
|
||||
{
|
||||
// expanded state of legend nodes
|
||||
QDomElement expandedLegendNodesElem = visPresetElem.firstChildElement( QStringLiteral( "expanded-legend-nodes" ) );
|
||||
while ( !expandedLegendNodesElem.isNull() )
|
||||
{
|
||||
QSet<QString> expandedLegendNodes;
|
||||
|
||||
QDomElement expandedLegendNodeElem = expandedLegendNodesElem.firstChildElement( QStringLiteral( "expanded-legend-node" ) );
|
||||
while ( !expandedLegendNodeElem.isNull() )
|
||||
{
|
||||
expandedLegendNodes << expandedLegendNodeElem.attribute( QStringLiteral( "id" ) );
|
||||
expandedLegendNodeElem = expandedLegendNodeElem.nextSiblingElement( QStringLiteral( "expanded-legend-node" ) );
|
||||
}
|
||||
|
||||
QString layerID = expandedLegendNodesElem.attribute( QStringLiteral( "id" ) );
|
||||
if ( mProject->mapLayer( layerID ) ) // only use valid IDs
|
||||
{
|
||||
layerRecords[layerID].expandedLegendItems = expandedLegendNodes;
|
||||
}
|
||||
expandedLegendNodesElem = expandedLegendNodesElem.nextSiblingElement( QStringLiteral( "expanded-legend-nodes" ) );
|
||||
}
|
||||
|
||||
// expanded state of group nodes
|
||||
QDomElement expandedGroupNodesElem = visPresetElem.firstChildElement( QStringLiteral( "expanded-group-nodes" ) );
|
||||
if ( !expandedGroupNodesElem.isNull() )
|
||||
{
|
||||
QDomElement expandedGroupNodeElem = expandedGroupNodesElem.firstChildElement( QStringLiteral( "expanded-group-node" ) );
|
||||
while ( !expandedGroupNodeElem.isNull() )
|
||||
{
|
||||
expandedGroupNodes << expandedGroupNodeElem.attribute( QStringLiteral( "id" ) );
|
||||
expandedGroupNodeElem = expandedGroupNodeElem.nextSiblingElement( QStringLiteral( "expanded-group-node" ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QSet<QString> checkedGroupNodes;
|
||||
if ( checkedStateInfo )
|
||||
{
|
||||
// expanded state of legend nodes
|
||||
QDomElement checkedGroupNodesElem = visPresetElem.firstChildElement( QStringLiteral( "checked-group-nodes" ) );
|
||||
if ( !checkedGroupNodesElem.isNull() )
|
||||
{
|
||||
QDomElement checkedGroupNodeElem = checkedGroupNodesElem.firstChildElement( QStringLiteral( "checked-group-node" ) );
|
||||
while ( !checkedGroupNodeElem.isNull() )
|
||||
{
|
||||
checkedGroupNodes << checkedGroupNodeElem.attribute( QStringLiteral( "id" ) );
|
||||
checkedGroupNodeElem = checkedGroupNodeElem.nextSiblingElement( QStringLiteral( "checked-group-node" ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MapThemeRecord rec;
|
||||
rec.setLayerRecords( layerRecords.values() );
|
||||
rec.setHasExpandedStateInfo( expandedStateInfo );
|
||||
rec.setExpandedGroupNodes( expandedGroupNodes );
|
||||
rec.setHasCheckedStateInfo( checkedStateInfo );
|
||||
rec.setCheckedGroupNodes( checkedGroupNodes );
|
||||
QgsMapThemeCollection::MapThemeRecord rec = QgsMapThemeCollection::MapThemeRecord::readXml( visPresetElem, mProject );
|
||||
mMapThemes.insert( presetName, rec );
|
||||
emit mapThemeChanged( presetName );
|
||||
|
||||
visPresetElem = visPresetElem.nextSiblingElement( QStringLiteral( "visibility-preset" ) );
|
||||
}
|
||||
|
||||
@ -566,7 +455,7 @@ void QgsMapThemeCollection::readXml( const QDomDocument &doc )
|
||||
emit mapThemesChanged();
|
||||
}
|
||||
|
||||
void QgsMapThemeCollection::writeXml( QDomDocument &doc )
|
||||
void QgsMapThemeCollection::writeXml( QDomDocument &doc ) const
|
||||
{
|
||||
QDomElement visPresetsElem = doc.createElement( QStringLiteral( "visibility-presets" ) );
|
||||
|
||||
@ -578,77 +467,9 @@ void QgsMapThemeCollection::writeXml( QDomDocument &doc )
|
||||
{
|
||||
const MapThemeRecord &rec = mMapThemes.value( grpName );
|
||||
QDomElement visPresetElem = doc.createElement( QStringLiteral( "visibility-preset" ) );
|
||||
|
||||
visPresetElem.setAttribute( QStringLiteral( "name" ), grpName );
|
||||
if ( rec.hasExpandedStateInfo() )
|
||||
visPresetElem.setAttribute( QStringLiteral( "has-expanded-info" ), QStringLiteral( "1" ) );
|
||||
if ( rec.hasCheckedStateInfo() )
|
||||
visPresetElem.setAttribute( QStringLiteral( "has-checked-group-info" ), QStringLiteral( "1" ) );
|
||||
for ( const MapThemeLayerRecord &layerRec : std::as_const( rec.mLayerRecords ) )
|
||||
{
|
||||
if ( !layerRec.layer() )
|
||||
continue;
|
||||
QString layerID = layerRec.layer()->id();
|
||||
QDomElement layerElem = doc.createElement( QStringLiteral( "layer" ) );
|
||||
layerElem.setAttribute( QStringLiteral( "id" ), layerID );
|
||||
layerElem.setAttribute( QStringLiteral( "visible" ), layerRec.isVisible ? QStringLiteral( "1" ) : QStringLiteral( "0" ) );
|
||||
if ( layerRec.usingCurrentStyle )
|
||||
layerElem.setAttribute( QStringLiteral( "style" ), layerRec.currentStyle );
|
||||
visPresetElem.appendChild( layerElem );
|
||||
|
||||
if ( layerRec.usingLegendItems )
|
||||
{
|
||||
QDomElement checkedLegendNodesElem = doc.createElement( QStringLiteral( "checked-legend-nodes" ) );
|
||||
checkedLegendNodesElem.setAttribute( QStringLiteral( "id" ), layerID );
|
||||
for ( const QString &checkedLegendNode : std::as_const( layerRec.checkedLegendItems ) )
|
||||
{
|
||||
QDomElement checkedLegendNodeElem = doc.createElement( QStringLiteral( "checked-legend-node" ) );
|
||||
checkedLegendNodeElem.setAttribute( QStringLiteral( "id" ), checkedLegendNode );
|
||||
checkedLegendNodesElem.appendChild( checkedLegendNodeElem );
|
||||
}
|
||||
visPresetElem.appendChild( checkedLegendNodesElem );
|
||||
}
|
||||
|
||||
if ( rec.hasExpandedStateInfo() )
|
||||
{
|
||||
layerElem.setAttribute( QStringLiteral( "expanded" ), layerRec.expandedLayerNode ? QStringLiteral( "1" ) : QStringLiteral( "0" ) );
|
||||
|
||||
QDomElement expandedLegendNodesElem = doc.createElement( QStringLiteral( "expanded-legend-nodes" ) );
|
||||
expandedLegendNodesElem.setAttribute( QStringLiteral( "id" ), layerID );
|
||||
for ( const QString &expandedLegendNode : std::as_const( layerRec.expandedLegendItems ) )
|
||||
{
|
||||
QDomElement expandedLegendNodeElem = doc.createElement( QStringLiteral( "expanded-legend-node" ) );
|
||||
expandedLegendNodeElem.setAttribute( QStringLiteral( "id" ), expandedLegendNode );
|
||||
expandedLegendNodesElem.appendChild( expandedLegendNodeElem );
|
||||
}
|
||||
visPresetElem.appendChild( expandedLegendNodesElem );
|
||||
}
|
||||
}
|
||||
|
||||
if ( rec.hasCheckedStateInfo() )
|
||||
{
|
||||
QDomElement checkedGroupElems = doc.createElement( QStringLiteral( "checked-group-nodes" ) );
|
||||
const QSet<QString> checkedGroupNodes = rec.checkedGroupNodes();
|
||||
for ( const QString &groupId : checkedGroupNodes )
|
||||
{
|
||||
QDomElement checkedGroupElem = doc.createElement( QStringLiteral( "checked-group-node" ) );
|
||||
checkedGroupElem.setAttribute( QStringLiteral( "id" ), groupId );
|
||||
checkedGroupElems.appendChild( checkedGroupElem );
|
||||
}
|
||||
visPresetElem.appendChild( checkedGroupElems );
|
||||
}
|
||||
|
||||
if ( rec.hasExpandedStateInfo() )
|
||||
{
|
||||
QDomElement expandedGroupElems = doc.createElement( QStringLiteral( "expanded-group-nodes" ) );
|
||||
const QSet<QString> expandedGroupNodes = rec.expandedGroupNodes();
|
||||
for ( const QString &groupId : expandedGroupNodes )
|
||||
{
|
||||
QDomElement expandedGroupElem = doc.createElement( QStringLiteral( "expanded-group-node" ) );
|
||||
expandedGroupElem.setAttribute( QStringLiteral( "id" ), groupId );
|
||||
expandedGroupElems.appendChild( expandedGroupElem );
|
||||
}
|
||||
visPresetElem.appendChild( expandedGroupElems );
|
||||
}
|
||||
rec.writeXml( visPresetElem, doc );
|
||||
|
||||
visPresetsElem.appendChild( visPresetElem );
|
||||
}
|
||||
@ -741,6 +562,197 @@ QHash<QgsMapLayer *, QgsMapThemeCollection::MapThemeLayerRecord> QgsMapThemeColl
|
||||
return validSet;
|
||||
}
|
||||
|
||||
QgsMapThemeCollection::MapThemeRecord QgsMapThemeCollection::MapThemeRecord::readXml( const QDomElement &element, const QgsProject *project )
|
||||
{
|
||||
QHash<QString, MapThemeLayerRecord> layerRecords; // key = layer ID
|
||||
|
||||
bool expandedStateInfo = false;
|
||||
if ( element.hasAttribute( QStringLiteral( "has-expanded-info" ) ) )
|
||||
expandedStateInfo = element.attribute( QStringLiteral( "has-expanded-info" ) ).toInt();
|
||||
|
||||
bool checkedStateInfo = false;
|
||||
if ( element.hasAttribute( QStringLiteral( "has-checked-group-info" ) ) )
|
||||
checkedStateInfo = element.attribute( QStringLiteral( "has-checked-group-info" ) ).toInt();
|
||||
|
||||
QDomElement visPresetLayerElem = element.firstChildElement( QStringLiteral( "layer" ) );
|
||||
while ( !visPresetLayerElem.isNull() )
|
||||
{
|
||||
QString layerID = visPresetLayerElem.attribute( QStringLiteral( "id" ) );
|
||||
if ( QgsMapLayer *layer = project->mapLayer( layerID ) )
|
||||
{
|
||||
layerRecords[layerID] = MapThemeLayerRecord( layer );
|
||||
layerRecords[layerID].isVisible = visPresetLayerElem.attribute( QStringLiteral( "visible" ), QStringLiteral( "1" ) ).toInt();
|
||||
|
||||
if ( visPresetLayerElem.hasAttribute( QStringLiteral( "style" ) ) )
|
||||
{
|
||||
layerRecords[layerID].usingCurrentStyle = true;
|
||||
layerRecords[layerID].currentStyle = visPresetLayerElem.attribute( QStringLiteral( "style" ) );
|
||||
}
|
||||
|
||||
if ( visPresetLayerElem.hasAttribute( QStringLiteral( "expanded" ) ) )
|
||||
layerRecords[layerID].expandedLayerNode = visPresetLayerElem.attribute( QStringLiteral( "expanded" ) ).toInt();
|
||||
}
|
||||
visPresetLayerElem = visPresetLayerElem.nextSiblingElement( QStringLiteral( "layer" ) );
|
||||
}
|
||||
|
||||
QDomElement checkedLegendNodesElem = element.firstChildElement( QStringLiteral( "checked-legend-nodes" ) );
|
||||
while ( !checkedLegendNodesElem.isNull() )
|
||||
{
|
||||
QSet<QString> checkedLegendNodes;
|
||||
|
||||
QDomElement checkedLegendNodeElem = checkedLegendNodesElem.firstChildElement( QStringLiteral( "checked-legend-node" ) );
|
||||
while ( !checkedLegendNodeElem.isNull() )
|
||||
{
|
||||
checkedLegendNodes << checkedLegendNodeElem.attribute( QStringLiteral( "id" ) );
|
||||
checkedLegendNodeElem = checkedLegendNodeElem.nextSiblingElement( QStringLiteral( "checked-legend-node" ) );
|
||||
}
|
||||
|
||||
QString layerID = checkedLegendNodesElem.attribute( QStringLiteral( "id" ) );
|
||||
if ( project->mapLayer( layerID ) ) // only use valid IDs
|
||||
{
|
||||
layerRecords[layerID].usingLegendItems = true;
|
||||
layerRecords[layerID].checkedLegendItems = checkedLegendNodes;
|
||||
}
|
||||
checkedLegendNodesElem = checkedLegendNodesElem.nextSiblingElement( QStringLiteral( "checked-legend-nodes" ) );
|
||||
}
|
||||
|
||||
QSet<QString> expandedGroupNodes;
|
||||
if ( expandedStateInfo )
|
||||
{
|
||||
// expanded state of legend nodes
|
||||
QDomElement expandedLegendNodesElem = element.firstChildElement( QStringLiteral( "expanded-legend-nodes" ) );
|
||||
while ( !expandedLegendNodesElem.isNull() )
|
||||
{
|
||||
QSet<QString> expandedLegendNodes;
|
||||
|
||||
QDomElement expandedLegendNodeElem = expandedLegendNodesElem.firstChildElement( QStringLiteral( "expanded-legend-node" ) );
|
||||
while ( !expandedLegendNodeElem.isNull() )
|
||||
{
|
||||
expandedLegendNodes << expandedLegendNodeElem.attribute( QStringLiteral( "id" ) );
|
||||
expandedLegendNodeElem = expandedLegendNodeElem.nextSiblingElement( QStringLiteral( "expanded-legend-node" ) );
|
||||
}
|
||||
|
||||
QString layerID = expandedLegendNodesElem.attribute( QStringLiteral( "id" ) );
|
||||
if ( project->mapLayer( layerID ) ) // only use valid IDs
|
||||
{
|
||||
layerRecords[layerID].expandedLegendItems = expandedLegendNodes;
|
||||
}
|
||||
expandedLegendNodesElem = expandedLegendNodesElem.nextSiblingElement( QStringLiteral( "expanded-legend-nodes" ) );
|
||||
}
|
||||
|
||||
// expanded state of group nodes
|
||||
QDomElement expandedGroupNodesElem = element.firstChildElement( QStringLiteral( "expanded-group-nodes" ) );
|
||||
if ( !expandedGroupNodesElem.isNull() )
|
||||
{
|
||||
QDomElement expandedGroupNodeElem = expandedGroupNodesElem.firstChildElement( QStringLiteral( "expanded-group-node" ) );
|
||||
while ( !expandedGroupNodeElem.isNull() )
|
||||
{
|
||||
expandedGroupNodes << expandedGroupNodeElem.attribute( QStringLiteral( "id" ) );
|
||||
expandedGroupNodeElem = expandedGroupNodeElem.nextSiblingElement( QStringLiteral( "expanded-group-node" ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QSet<QString> checkedGroupNodes;
|
||||
if ( checkedStateInfo )
|
||||
{
|
||||
// expanded state of legend nodes
|
||||
QDomElement checkedGroupNodesElem = element.firstChildElement( QStringLiteral( "checked-group-nodes" ) );
|
||||
if ( !checkedGroupNodesElem.isNull() )
|
||||
{
|
||||
QDomElement checkedGroupNodeElem = checkedGroupNodesElem.firstChildElement( QStringLiteral( "checked-group-node" ) );
|
||||
while ( !checkedGroupNodeElem.isNull() )
|
||||
{
|
||||
checkedGroupNodes << checkedGroupNodeElem.attribute( QStringLiteral( "id" ) );
|
||||
checkedGroupNodeElem = checkedGroupNodeElem.nextSiblingElement( QStringLiteral( "checked-group-node" ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MapThemeRecord rec;
|
||||
rec.setLayerRecords( layerRecords.values() );
|
||||
rec.setHasExpandedStateInfo( expandedStateInfo );
|
||||
rec.setExpandedGroupNodes( expandedGroupNodes );
|
||||
rec.setHasCheckedStateInfo( checkedStateInfo );
|
||||
rec.setCheckedGroupNodes( checkedGroupNodes );
|
||||
|
||||
return rec;
|
||||
}
|
||||
|
||||
void QgsMapThemeCollection::MapThemeRecord::writeXml( QDomElement element, QDomDocument &document ) const
|
||||
{
|
||||
if ( hasExpandedStateInfo() )
|
||||
element.setAttribute( QStringLiteral( "has-expanded-info" ), QStringLiteral( "1" ) );
|
||||
if ( hasCheckedStateInfo() )
|
||||
element.setAttribute( QStringLiteral( "has-checked-group-info" ), QStringLiteral( "1" ) );
|
||||
for ( const MapThemeLayerRecord &layerRec : std::as_const( mLayerRecords ) )
|
||||
{
|
||||
if ( !layerRec.layer() )
|
||||
continue;
|
||||
QString layerID = layerRec.layer()->id();
|
||||
QDomElement layerElem = document.createElement( QStringLiteral( "layer" ) );
|
||||
layerElem.setAttribute( QStringLiteral( "id" ), layerID );
|
||||
layerElem.setAttribute( QStringLiteral( "visible" ), layerRec.isVisible ? QStringLiteral( "1" ) : QStringLiteral( "0" ) );
|
||||
if ( layerRec.usingCurrentStyle )
|
||||
layerElem.setAttribute( QStringLiteral( "style" ), layerRec.currentStyle );
|
||||
element.appendChild( layerElem );
|
||||
|
||||
if ( layerRec.usingLegendItems )
|
||||
{
|
||||
QDomElement checkedLegendNodesElem = document.createElement( QStringLiteral( "checked-legend-nodes" ) );
|
||||
checkedLegendNodesElem.setAttribute( QStringLiteral( "id" ), layerID );
|
||||
for ( const QString &checkedLegendNode : std::as_const( layerRec.checkedLegendItems ) )
|
||||
{
|
||||
QDomElement checkedLegendNodeElem = document.createElement( QStringLiteral( "checked-legend-node" ) );
|
||||
checkedLegendNodeElem.setAttribute( QStringLiteral( "id" ), checkedLegendNode );
|
||||
checkedLegendNodesElem.appendChild( checkedLegendNodeElem );
|
||||
}
|
||||
element.appendChild( checkedLegendNodesElem );
|
||||
}
|
||||
|
||||
if ( hasExpandedStateInfo() )
|
||||
{
|
||||
layerElem.setAttribute( QStringLiteral( "expanded" ), layerRec.expandedLayerNode ? QStringLiteral( "1" ) : QStringLiteral( "0" ) );
|
||||
|
||||
QDomElement expandedLegendNodesElem = document.createElement( QStringLiteral( "expanded-legend-nodes" ) );
|
||||
expandedLegendNodesElem.setAttribute( QStringLiteral( "id" ), layerID );
|
||||
for ( const QString &expandedLegendNode : std::as_const( layerRec.expandedLegendItems ) )
|
||||
{
|
||||
QDomElement expandedLegendNodeElem = document.createElement( QStringLiteral( "expanded-legend-node" ) );
|
||||
expandedLegendNodeElem.setAttribute( QStringLiteral( "id" ), expandedLegendNode );
|
||||
expandedLegendNodesElem.appendChild( expandedLegendNodeElem );
|
||||
}
|
||||
element.appendChild( expandedLegendNodesElem );
|
||||
}
|
||||
}
|
||||
|
||||
if ( hasCheckedStateInfo() )
|
||||
{
|
||||
QDomElement checkedGroupElems = document.createElement( QStringLiteral( "checked-group-nodes" ) );
|
||||
const QSet<QString> _checkedGroupNodes = checkedGroupNodes();
|
||||
for ( const QString &groupId : _checkedGroupNodes )
|
||||
{
|
||||
QDomElement checkedGroupElem = document.createElement( QStringLiteral( "checked-group-node" ) );
|
||||
checkedGroupElem.setAttribute( QStringLiteral( "id" ), groupId );
|
||||
checkedGroupElems.appendChild( checkedGroupElem );
|
||||
}
|
||||
element.appendChild( checkedGroupElems );
|
||||
}
|
||||
|
||||
if ( hasExpandedStateInfo() )
|
||||
{
|
||||
QDomElement expandedGroupElems = document.createElement( QStringLiteral( "expanded-group-nodes" ) );
|
||||
const QSet<QString> _expandedGroupNodes = expandedGroupNodes();
|
||||
for ( const QString &groupId : _expandedGroupNodes )
|
||||
{
|
||||
QDomElement expandedGroupElem = document.createElement( QStringLiteral( "expanded-group-node" ) );
|
||||
expandedGroupElem.setAttribute( QStringLiteral( "id" ), groupId );
|
||||
expandedGroupElems.appendChild( expandedGroupElem );
|
||||
}
|
||||
element.appendChild( expandedGroupElems );
|
||||
}
|
||||
}
|
||||
|
||||
void QgsMapThemeCollection::MapThemeLayerRecord::setLayer( QgsMapLayer *layer )
|
||||
{
|
||||
mLayer = layer;
|
||||
|
@ -105,6 +105,7 @@ class CORE_EXPORT QgsMapThemeCollection : public QObject
|
||||
* \since QGIS 3.2
|
||||
*/
|
||||
bool expandedLayerNode = false;
|
||||
|
||||
private:
|
||||
//! Weak pointer to the layer
|
||||
QgsWeakMapLayerPointer mLayer;
|
||||
@ -203,6 +204,24 @@ class CORE_EXPORT QgsMapThemeCollection : public QObject
|
||||
*/
|
||||
void setCheckedGroupNodes( const QSet<QString> &checkedGroupNodes ) { mCheckedGroupNodes = checkedGroupNodes; }
|
||||
|
||||
/**
|
||||
* Reads the map theme record from XML
|
||||
* \param element DOM element
|
||||
* \param project the QGIS project
|
||||
* \see writeXml
|
||||
* \since QGIS 3.42
|
||||
*/
|
||||
static MapThemeRecord readXml( const QDomElement &element, const QgsProject *project );
|
||||
|
||||
/**
|
||||
* Writes the map theme record to XML.
|
||||
* \param element DOM element
|
||||
* \param document DOM document
|
||||
* \see readXml
|
||||
* \since QGIS 3.42
|
||||
*/
|
||||
void writeXml( QDomElement element, QDomDocument &document ) const;
|
||||
|
||||
private:
|
||||
//! Layer-specific records for the theme. Only visible layers are listed.
|
||||
QList<MapThemeLayerRecord> mLayerRecords;
|
||||
@ -309,7 +328,7 @@ class CORE_EXPORT QgsMapThemeCollection : public QObject
|
||||
* \param doc DOM document
|
||||
* \see readXml
|
||||
*/
|
||||
void writeXml( QDomDocument &doc );
|
||||
void writeXml( QDomDocument &doc ) const;
|
||||
|
||||
/**
|
||||
* Static method to create theme from the current state of layer visibilities in layer tree,
|
||||
|
Loading…
x
Reference in New Issue
Block a user