27 #include <QInputDialog>
37 MapThemeLayerRecord layerRec( nodeLayer->
layer() );
38 layerRec.isVisible = nodeLayer->
isVisible();
39 layerRec.usingCurrentStyle =
true;
41 layerRec.expandedLayerNode = nodeLayer->
isExpanded();
42 layerRec.expandedLegendItems = qgis::listToSet( nodeLayer->
customProperty( QStringLiteral(
"expandedLegendNodes" ) ).toStringList() );
45 bool hasCheckableItems =
false;
46 bool someItemsUnchecked =
false;
47 QSet<QString> checkedItems;
48 const QList<QgsLayerTreeModelLegendNode *> layerLegendNodes = model->
layerLegendNodes( nodeLayer,
true );
53 hasCheckableItems =
true;
55 if (
legendNode->
data( Qt::CheckStateRole ).toInt() == Qt::Checked )
58 someItemsUnchecked =
true;
62 if ( hasCheckableItems && someItemsUnchecked )
64 layerRec.usingLegendItems =
true;
65 layerRec.checkedLegendItems = checkedItems;
75 lst.prepend( node->
name() );
78 return lst.join(
'/' );
83 const QList<QgsLayerTreeNode *> constChildren = parent->
children();
90 rec.mExpandedGroupNodes.insert( _groupId( node ) );
92 rec.mCheckedGroupNodes.insert( _groupId( node ) );
98 rec.mLayerRecords << createThemeLayerRecord( nodeLayer, model );
116 if ( lr.layer() == layer )
127 MapThemeLayerRecord layerRec;
128 const bool recordExists = findRecordForLayer( nodeLayer->
layer(), rec, layerRec );
144 if ( layerRec.usingCurrentStyle )
150 if ( layerRec.usingLegendItems )
153 const QList<QgsLayerTreeModelLegendNode *> constLayerLegendNodes = model->
layerLegendNodes( nodeLayer,
true );
157 Qt::CheckState shouldHaveState = layerRec.checkedLegendItems.contains( ruleKey ) ? Qt::Checked : Qt::Unchecked;
159 legendNode->
data( Qt::CheckStateRole ).toInt() != shouldHaveState )
166 const QList<QgsLayerTreeModelLegendNode *> constLayerLegendNodes = model->
layerLegendNodes( nodeLayer,
true );
178 nodeLayer->
setExpanded( layerRec.expandedLayerNode );
179 nodeLayer->
setCustomProperty( QStringLiteral(
"expandedLegendNodes" ), QStringList( qgis::setToList( layerRec.expandedLegendItems ) ) );
186 const QList<QgsLayerTreeNode *> constChildren = parent->
children();
230 return QList< QgsMapLayer * >();
240 if ( allLayers.isEmpty() )
243 return visibleLayers;
247 QList< QgsMapLayer * > orderedVisibleLayers;
250 if ( visibleLayers.contains( layer ) )
251 orderedVisibleLayers << layer;
253 return orderedVisibleLayers;
260 return mMapThemes.contains( name );
265 mMapThemes.insert( name, state );
267 reconnectToLayersStyleManager();
274 if ( !mMapThemes.contains( name ) )
277 mMapThemes[name] = state;
279 reconnectToLayersStyleManager();
286 if ( !mMapThemes.contains( name ) || mMapThemes.contains( newName ) )
291 insert( newName, newState );
299 if ( !mMapThemes.contains( name ) )
302 mMapThemes.remove( name );
304 reconnectToLayersStyleManager();
312 reconnectToLayersStyleManager();
318 return mMapThemes.keys();
323 QStringList layerIds;
325 for (
QgsMapLayer *layer : constMapThemeVisibleLayers )
327 layerIds << layer->
id();
334 QList<QgsMapLayer *> layers;
335 const QList<MapThemeLayerRecord> recs = mMapThemes.value( name ).mLayerRecords;
337 if ( layerOrder.isEmpty() )
340 const QList<MapThemeLayerRecord> records { mMapThemes.value( name ).mLayerRecords };
343 if ( layerRec.isVisible && layerRec.layer() )
344 layers << layerRec.layer();
353 if ( layerRec.isVisible && layerRec.layer() == layer )
354 layers << layerRec.layer();
363 void QgsMapThemeCollection::applyMapThemeCheckedLegendNodesToLayer(
const MapThemeLayerRecord &layerRec,
QgsMapLayer *layer )
366 if ( !vlayer || !vlayer->
renderer() )
373 bool someNodesUnchecked = layerRec.usingLegendItems;
379 bool shouldBeChecked = someNodesUnchecked ? layerRec.checkedLegendItems.contains( item.ruleKey() ) :
true;
380 if ( checked != shouldBeChecked )
388 QMap<QString, QString> styleOverrides;
389 if ( !mMapThemes.contains( presetName ) )
390 return styleOverrides;
392 const QList<MapThemeLayerRecord> records {mMapThemes.value( presetName ).mLayerRecords};
395 if ( !layerRec.layer() )
398 if ( layerRec.usingCurrentStyle )
405 applyMapThemeCheckedLegendNodesToLayer( layerRec, layer );
410 styleOverrides[layer->
id()] = layerStyle.
xmlData();
413 return styleOverrides;
416 void QgsMapThemeCollection::reconnectToLayersStyleManager()
420 QSet<QgsMapLayer *> layers;
421 for (
const MapThemeRecord &rec : qgis::as_const( mMapThemes ) )
423 for (
const MapThemeLayerRecord &layerRec : qgis::as_const( rec.mLayerRecords ) )
425 if (
auto *lLayer = layerRec.layer() )
430 const QSet<QgsMapLayer *> constLayers = layers;
441 QDomElement visPresetsElem = doc.firstChildElement( QStringLiteral(
"qgis" ) ).firstChildElement( QStringLiteral(
"visibility-presets" ) );
442 if ( visPresetsElem.isNull() )
445 QDomElement visPresetElem = visPresetsElem.firstChildElement( QStringLiteral(
"visibility-preset" ) );
446 while ( !visPresetElem.isNull() )
448 QHash<QString, MapThemeLayerRecord> layerRecords;
450 bool expandedStateInfo =
false;
451 if ( visPresetElem.hasAttribute( QStringLiteral(
"has-expanded-info" ) ) )
452 expandedStateInfo = visPresetElem.attribute( QStringLiteral(
"has-expanded-info" ) ).toInt();
454 bool checkedStateInfo =
false;
455 if ( visPresetElem.hasAttribute( QStringLiteral(
"has-checked-group-info" ) ) )
456 checkedStateInfo = visPresetElem.attribute( QStringLiteral(
"has-checked-group-info" ) ).toInt();
458 QString presetName = visPresetElem.attribute( QStringLiteral(
"name" ) );
459 QDomElement visPresetLayerElem = visPresetElem.firstChildElement( QStringLiteral(
"layer" ) );
460 while ( !visPresetLayerElem.isNull() )
462 QString layerID = visPresetLayerElem.attribute( QStringLiteral(
"id" ) );
466 layerRecords[layerID].isVisible = visPresetLayerElem.attribute( QStringLiteral(
"visible" ), QStringLiteral(
"1" ) ).toInt();
468 if ( visPresetLayerElem.hasAttribute( QStringLiteral(
"style" ) ) )
470 layerRecords[layerID].usingCurrentStyle =
true;
471 layerRecords[layerID].currentStyle = visPresetLayerElem.attribute( QStringLiteral(
"style" ) );
474 if ( visPresetLayerElem.hasAttribute( QStringLiteral(
"expanded" ) ) )
475 layerRecords[layerID].expandedLayerNode = visPresetLayerElem.attribute( QStringLiteral(
"expanded" ) ).toInt();
477 visPresetLayerElem = visPresetLayerElem.nextSiblingElement( QStringLiteral(
"layer" ) );
480 QDomElement checkedLegendNodesElem = visPresetElem.firstChildElement( QStringLiteral(
"checked-legend-nodes" ) );
481 while ( !checkedLegendNodesElem.isNull() )
483 QSet<QString> checkedLegendNodes;
485 QDomElement checkedLegendNodeElem = checkedLegendNodesElem.firstChildElement( QStringLiteral(
"checked-legend-node" ) );
486 while ( !checkedLegendNodeElem.isNull() )
488 checkedLegendNodes << checkedLegendNodeElem.attribute( QStringLiteral(
"id" ) );
489 checkedLegendNodeElem = checkedLegendNodeElem.nextSiblingElement( QStringLiteral(
"checked-legend-node" ) );
492 QString layerID = checkedLegendNodesElem.attribute( QStringLiteral(
"id" ) );
493 if ( mProject->
mapLayer( layerID ) )
495 layerRecords[layerID].usingLegendItems =
true;
496 layerRecords[layerID].checkedLegendItems = checkedLegendNodes;
498 checkedLegendNodesElem = checkedLegendNodesElem.nextSiblingElement( QStringLiteral(
"checked-legend-nodes" ) );
501 QSet<QString> expandedGroupNodes;
502 if ( expandedStateInfo )
505 QDomElement expandedLegendNodesElem = visPresetElem.firstChildElement( QStringLiteral(
"expanded-legend-nodes" ) );
506 while ( !expandedLegendNodesElem.isNull() )
508 QSet<QString> expandedLegendNodes;
510 QDomElement expandedLegendNodeElem = expandedLegendNodesElem.firstChildElement( QStringLiteral(
"expanded-legend-node" ) );
511 while ( !expandedLegendNodeElem.isNull() )
513 expandedLegendNodes << expandedLegendNodeElem.attribute( QStringLiteral(
"id" ) );
514 expandedLegendNodeElem = expandedLegendNodeElem.nextSiblingElement( QStringLiteral(
"expanded-legend-node" ) );
517 QString layerID = expandedLegendNodesElem.attribute( QStringLiteral(
"id" ) );
518 if ( mProject->
mapLayer( layerID ) )
520 layerRecords[layerID].expandedLegendItems = expandedLegendNodes;
522 expandedLegendNodesElem = expandedLegendNodesElem.nextSiblingElement( QStringLiteral(
"expanded-legend-nodes" ) );
526 QDomElement expandedGroupNodesElem = visPresetElem.firstChildElement( QStringLiteral(
"expanded-group-nodes" ) );
527 if ( !expandedGroupNodesElem.isNull() )
529 QDomElement expandedGroupNodeElem = expandedGroupNodesElem.firstChildElement( QStringLiteral(
"expanded-group-node" ) );
530 while ( !expandedGroupNodeElem.isNull() )
532 expandedGroupNodes << expandedGroupNodeElem.attribute( QStringLiteral(
"id" ) );
533 expandedGroupNodeElem = expandedGroupNodeElem.nextSiblingElement( QStringLiteral(
"expanded-group-node" ) );
538 QSet<QString> checkedGroupNodes;
539 if ( checkedStateInfo )
542 QDomElement checkedGroupNodesElem = visPresetElem.firstChildElement( QStringLiteral(
"checked-group-nodes" ) );
543 if ( !checkedGroupNodesElem.isNull() )
545 QDomElement checkedGroupNodeElem = checkedGroupNodesElem.firstChildElement( QStringLiteral(
"checked-group-node" ) );
546 while ( !checkedGroupNodeElem.isNull() )
548 checkedGroupNodes << checkedGroupNodeElem.attribute( QStringLiteral(
"id" ) );
549 checkedGroupNodeElem = checkedGroupNodeElem.nextSiblingElement( QStringLiteral(
"checked-group-node" ) );
560 mMapThemes.insert( presetName, rec );
563 visPresetElem = visPresetElem.nextSiblingElement( QStringLiteral(
"visibility-preset" ) );
566 reconnectToLayersStyleManager();
572 QDomElement visPresetsElem = doc.createElement( QStringLiteral(
"visibility-presets" ) );
574 QList< QString > keys = mMapThemes.keys();
576 std::sort( keys.begin(), keys.end() );
578 for (
const QString &grpName : qgis::as_const( keys ) )
581 QDomElement visPresetElem = doc.createElement( QStringLiteral(
"visibility-preset" ) );
582 visPresetElem.setAttribute( QStringLiteral(
"name" ), grpName );
584 visPresetElem.setAttribute( QStringLiteral(
"has-expanded-info" ), QStringLiteral(
"1" ) );
586 visPresetElem.setAttribute( QStringLiteral(
"has-checked-group-info" ), QStringLiteral(
"1" ) );
589 if ( !layerRec.layer() )
591 QString layerID = layerRec.layer()->id();
592 QDomElement layerElem = doc.createElement( QStringLiteral(
"layer" ) );
593 layerElem.setAttribute( QStringLiteral(
"id" ), layerID );
594 layerElem.setAttribute( QStringLiteral(
"visible" ), layerRec.isVisible ? QStringLiteral(
"1" ) : QStringLiteral(
"0" ) );
595 if ( layerRec.usingCurrentStyle )
596 layerElem.setAttribute( QStringLiteral(
"style" ), layerRec.currentStyle );
597 visPresetElem.appendChild( layerElem );
599 if ( layerRec.usingLegendItems )
601 QDomElement checkedLegendNodesElem = doc.createElement( QStringLiteral(
"checked-legend-nodes" ) );
602 checkedLegendNodesElem.setAttribute( QStringLiteral(
"id" ), layerID );
603 for (
const QString &checkedLegendNode : qgis::as_const( layerRec.checkedLegendItems ) )
605 QDomElement checkedLegendNodeElem = doc.createElement( QStringLiteral(
"checked-legend-node" ) );
606 checkedLegendNodeElem.setAttribute( QStringLiteral(
"id" ), checkedLegendNode );
607 checkedLegendNodesElem.appendChild( checkedLegendNodeElem );
609 visPresetElem.appendChild( checkedLegendNodesElem );
614 layerElem.setAttribute( QStringLiteral(
"expanded" ), layerRec.expandedLayerNode ? QStringLiteral(
"1" ) : QStringLiteral(
"0" ) );
616 QDomElement expandedLegendNodesElem = doc.createElement( QStringLiteral(
"expanded-legend-nodes" ) );
617 expandedLegendNodesElem.setAttribute( QStringLiteral(
"id" ), layerID );
618 for (
const QString &expandedLegendNode : qgis::as_const( layerRec.expandedLegendItems ) )
620 QDomElement expandedLegendNodeElem = doc.createElement( QStringLiteral(
"expanded-legend-node" ) );
621 expandedLegendNodeElem.setAttribute( QStringLiteral(
"id" ), expandedLegendNode );
622 expandedLegendNodesElem.appendChild( expandedLegendNodeElem );
624 visPresetElem.appendChild( expandedLegendNodesElem );
630 QDomElement checkedGroupElems = doc.createElement( QStringLiteral(
"checked-group-nodes" ) );
632 for (
const QString &groupId : checkedGroupNodes )
634 QDomElement checkedGroupElem = doc.createElement( QStringLiteral(
"checked-group-node" ) );
635 checkedGroupElem.setAttribute( QStringLiteral(
"id" ), groupId );
636 checkedGroupElems.appendChild( checkedGroupElem );
638 visPresetElem.appendChild( checkedGroupElems );
643 QDomElement expandedGroupElems = doc.createElement( QStringLiteral(
"expanded-group-nodes" ) );
645 for (
const QString &groupId : expandedGroupNodes )
647 QDomElement expandedGroupElem = doc.createElement( QStringLiteral(
"expanded-group-node" ) );
648 expandedGroupElem.setAttribute( QStringLiteral(
"id" ), groupId );
649 expandedGroupElems.appendChild( expandedGroupElem );
651 visPresetElem.appendChild( expandedGroupElems );
654 visPresetsElem.appendChild( visPresetElem );
657 doc.firstChildElement( QStringLiteral(
"qgis" ) ).appendChild( visPresetsElem );
660 void QgsMapThemeCollection::registryLayersRemoved(
const QStringList &layerIDs )
664 QSet< QString > changedThemes;
665 MapThemeRecordMap::iterator it = mMapThemes.begin();
666 for ( ; it != mMapThemes.end(); ++it )
668 MapThemeRecord &rec = it.value();
669 for (
int i = 0; i < rec.mLayerRecords.count(); ++i )
671 MapThemeLayerRecord &layerRec = rec.mLayerRecords[i];
672 if ( layerRec.layer() && layerIDs.contains( layerRec.layer()->id() ) )
674 rec.mLayerRecords.removeAt( i-- );
675 changedThemes << it.key();
680 for (
const QString &theme : qgis::as_const( changedThemes ) )
687 void QgsMapThemeCollection::layerStyleRenamed(
const QString &oldName,
const QString &newName )
693 QSet< QString > changedThemes;
695 MapThemeRecordMap::iterator it = mMapThemes.begin();
696 for ( ; it != mMapThemes.end(); ++it )
698 MapThemeRecord &rec = it.value();
699 for (
int i = 0; i < rec.mLayerRecords.count(); ++i )
701 MapThemeLayerRecord &layerRec = rec.mLayerRecords[i];
702 if ( layerRec.layer() == styleMgr->
layer() )
704 if ( layerRec.currentStyle == oldName )
706 layerRec.currentStyle = newName;
707 changedThemes << it.key();
713 for (
const QString &theme : qgis::as_const( changedThemes ) )
722 for (
int i = 0; i < mLayerRecords.length(); ++i )
724 if ( mLayerRecords.at( i ).layer() == layer )
725 mLayerRecords.removeAt( i );
731 mLayerRecords.append( record );
736 QHash<QgsMapLayer *, MapThemeLayerRecord> validSet;
739 if (
auto *lLayer = layerRec.layer() )
740 validSet.insert( lLayer, layerRec );
virtual QgsLegendSymbolList legendSymbolItems() const
Returns a list of symbology items for the legend.
virtual bool legendSymbolItemsCheckable() const
items of symbology items in legend should be checkable
virtual bool legendSymbolItemChecked(const QString &key)
items of symbology items in legend is checked
virtual void checkLegendSymbolItem(const QString &key, bool state=true)
item in symbology was checked
Layer tree group node serves as a container for layers and further groups.
Layer tree node points to a map layer.
QgsMapLayer * layer() const
Returns the map layer associated with this node.
The QgsLegendRendererItem class is abstract interface for legend items returned from QgsMapLayerLegen...
virtual QVariant data(int role) const =0
Returns data associated with the item. Must be implemented in derived class.
@ RuleKeyRole
Rule key of the node (QString)
virtual Qt::ItemFlags flags() const
Returns item flags associated with the item. Default implementation returns Qt::ItemIsEnabled.
virtual bool setData(const QVariant &value, int role)
Sets some data associated with the item. Default implementation does nothing and returns false.
The QgsLayerTreeModel class is model implementation for Qt item views framework.
QList< QgsLayerTreeModelLegendNode * > layerLegendNodes(QgsLayerTreeLayer *nodeLayer, bool skipNodeEmbeddedInParent=false)
Returns filtered list of active legend nodes attached to a particular layer node (by default it retur...
This class is a base class for nodes in a layer tree.
bool isVisible() const
Returns whether a node is really visible (ie checked and all its ancestors checked as well)
void setCustomProperty(const QString &key, const QVariant &value)
Sets a custom property for the node. Properties are stored in a map and saved in project file.
QVariant customProperty(const QString &key, const QVariant &defaultValue=QVariant()) const
Read a custom property from layer. Properties are stored in a map and saved in project file.
void setExpanded(bool expanded)
Sets whether the node should be shown as expanded or collapsed in GUI.
virtual QString name() const =0
Returns name of the node.
QgsLayerTreeNode * parent()
Gets pointer to the parent. If parent is nullptr, the node is a root node.
QList< QgsLayerTreeNode * > children()
Gets list of children of the node. Children are owned by the parent.
bool isExpanded() const
Returns whether the node should be shown as expanded or collapsed in GUI.
void setItemVisibilityChecked(bool checked)
Check or uncheck a node (independently of its ancestors or children)
QList< QgsMapLayer * > checkedLayers() const
Returns a list of any checked layers which belong to this node or its children.
bool itemVisibilityChecked() const
Returns whether a node is checked (independently of its ancestors or children)
void setItemVisibilityCheckedParentRecursive(bool checked)
Check or uncheck a node and all its parents.
QList< QgsMapLayer * > layerOrder() const
The order in which layers will be rendered on the canvas.
static bool isLayer(const QgsLayerTreeNode *node)
Check whether the node is a valid layer node.
static QgsLayerTreeLayer * toLayer(QgsLayerTreeNode *node)
Cast node to a layer.
static bool isGroup(QgsLayerTreeNode *node)
Check whether the node is a valid group node.
static QgsLayerTreeGroup * toGroup(QgsLayerTreeNode *node)
Cast node to a group.
The class stores information about one class/rule of a vector layer renderer in a unified way that ca...
Management of styles for use with one map layer.
QString currentStyle() const
Returns name of the current style.
bool setCurrentStyle(const QString &name)
Set a different style as the current style - will apply it to the layer.
QgsMapLayer * layer() const
Gets pointer to the associated map layer.
void styleRenamed(const QString &oldName, const QString &newName)
Emitted when a style has been renamed.
Restore overridden layer style on destruction.
void setOverrideStyle(const QString &style)
Temporarily apply a different style to the layer.
Stores style information (renderer, opacity, labeling, diagrams etc.) applicable to a map layer.
void readFromLayer(QgsMapLayer *layer)
Store layer's active style information in the instance.
QString xmlData() const
Returns XML content of the style.
Base class for all map layer types.
QString id() const
Returns the layer's unique ID, which is used to access this layer from QgsProject.
QgsMapLayerStyleManager * styleManager() const
Gets access to the layer's style manager.
Individual record of a visible layer in a map theme record.
void setLayer(QgsMapLayer *layer)
Sets the map layer for this record.
Individual map theme record of visible layers and styles.
void setExpandedGroupNodes(const QSet< QString > &expandedGroupNodes)
Sets a set of group identifiers for group nodes that should have expanded state.
void removeLayerRecord(QgsMapLayer *layer)
Removes a record for layer if present.
void setCheckedGroupNodes(const QSet< QString > &checkedGroupNodes)
Sets a set of group identifiers for group nodes that should have checked state.
void setHasExpandedStateInfo(bool hasInfo)
Sets whether the map theme contains valid expanded/collapsed state of nodes.
QSet< QString > checkedGroupNodes() const
Returns a set of group identifiers for group nodes that should have checked state (other group nodes ...
bool hasExpandedStateInfo() const
Returns whether information about expanded/collapsed state of nodes has been recorded and thus whethe...
void setLayerRecords(const QList< QgsMapThemeCollection::MapThemeLayerRecord > &records)
Sets layer records for the theme.
void setHasCheckedStateInfo(bool hasInfo)
Sets whether the map theme contains valid checked/unchecked state of group nodes.
QHash< QgsMapLayer *, QgsMapThemeCollection::MapThemeLayerRecord > validLayerRecords() const
Returns set with only records for valid layers.
void addLayerRecord(const QgsMapThemeCollection::MapThemeLayerRecord &record)
Add a new record for a layer.
bool hasCheckedStateInfo() const
Returns whether information about checked/unchecked state of groups has been recorded and thus whethe...
QSet< QString > expandedGroupNodes() const
Returns a set of group identifiers for group nodes that should have expanded state (other group nodes...
void mapThemesChanged()
Emitted when map themes within the collection are changed.
static QgsMapThemeCollection::MapThemeRecord createThemeFromCurrentState(QgsLayerTreeGroup *root, QgsLayerTreeModel *model)
Static method to create theme from the current state of layer visibilities in layer tree,...
void insert(const QString &name, const QgsMapThemeCollection::MapThemeRecord &state)
Inserts a new map theme to the collection.
bool renameMapTheme(const QString &name, const QString &newName)
Renames the existing map theme called name to newName.
void mapThemeRenamed(const QString &name, const QString &newName)
Emitted when a map theme within the collection is renamed.
void clear()
Removes all map themes from the collection.
bool hasMapTheme(const QString &name) const
Returns whether a map theme with a matching name exists.
QList< QgsMapLayer * > mapThemeVisibleLayers(const QString &name) const
Returns the list of layers that are visible for the specified map theme.
void removeMapTheme(const QString &name)
Removes an existing map theme from collection.
QgsMapThemeCollection::MapThemeRecord mapThemeState(const QString &name) const
Returns the recorded state of a map theme.
void setProject(QgsProject *project)
QList< QgsMapLayer * > masterLayerOrder() const
Returns the master layer order (this will always match the project's QgsProject::layerOrder() ).
void applyTheme(const QString &name, QgsLayerTreeGroup *root, QgsLayerTreeModel *model)
Apply theme given by its name and modify layer tree, current style of layers and checked legend items...
QMap< QString, QString > mapThemeStyleOverrides(const QString &name)
Gets layer style overrides (for QgsMapSettings) of the visible layers for given map theme.
QList< QgsMapLayer * > masterVisibleLayers() const
Returns the master list of visible layers.
QStringList mapThemeVisibleLayerIds(const QString &name) const
Returns the list of layer IDs that are visible for the specified map theme.
void update(const QString &name, const QgsMapThemeCollection::MapThemeRecord &state)
Updates a map theme within the collection.
void mapThemeChanged(const QString &theme)
Emitted when a map theme changes definition.
QgsMapThemeCollection(QgsProject *project=nullptr)
Create map theme collection that handles themes of the given project.
void writeXml(QDomDocument &doc)
Writes the map theme collection state to XML.
void projectChanged()
Emitted when the project changes.
void readXml(const QDomDocument &doc)
Reads the map theme collection state from XML.
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
Q_INVOKABLE QgsMapLayer * mapLayer(const QString &layerId) const
Retrieve a pointer to a registered layer by layer ID.
void layersWillBeRemoved(const QStringList &layerIds)
Emitted when one or more layers are about to be removed from the registry.
QgsLayerTree * layerTreeRoot() const
Returns pointer to the root (invisible) node of the project's layer tree.
Represents a vector layer which manages a vector based data sets.
QgsFeatureRenderer * renderer()
Returns the feature renderer used for rendering the features in the layer in 2D map views.
QgsLayerTreeModelLegendNode * legendNode(const QString &rule, QgsLayerTreeModel &model)