16 #ifndef QGSLAYERTREEMODEL_H
17 #define QGSLAYERTREEMODEL_H
19 #include "qgis_core.h"
20 #include <QAbstractItemModel>
60 if ( sipCpp->inherits(
"QgsLayerTreeModel" ) )
61 sipType = sipType_QgsLayerTreeModel;
80 int rowCount(
const QModelIndex &parent = QModelIndex() )
const override;
81 int columnCount(
const QModelIndex &parent = QModelIndex() )
const override;
82 QModelIndex index(
int row,
int column,
const QModelIndex &parent = QModelIndex() )
const override;
83 QModelIndex parent(
const QModelIndex &child )
const override;
84 QVariant data(
const QModelIndex &index,
int role = Qt::DisplayRole )
const override;
85 Qt::ItemFlags flags(
const QModelIndex &index )
const override;
86 bool setData(
const QModelIndex &index,
const QVariant &value,
int role = Qt::EditRole )
override;
87 Qt::DropActions supportedDropActions()
const override;
88 QStringList mimeTypes()
const override;
89 QMimeData *mimeData(
const QModelIndexList &indexes )
const override;
90 bool dropMimeData(
const QMimeData *data, Qt::DropAction action,
int row,
int column,
const QModelIndex &parent )
override;
91 bool removeRows(
int row,
int count,
const QModelIndex &parent = QModelIndex() )
override;
99 ShowLegendAsTree = 0x0004,
100 DeferredLegendInvalidation = 0x0008,
101 UseEmbeddedWidgets = 0x0010,
102 UseTextFormatting = 0x0020,
105 AllowNodeReorder = 0x1000,
106 AllowNodeRename = 0x2000,
107 AllowNodeChangeVisibility = 0x4000,
108 AllowLegendChangeState = 0x8000,
109 ActionHierarchical = 0x10000,
111 Q_DECLARE_FLAGS( Flags, Flag )
114 void setFlags( QgsLayerTreeModel::Flags f );
116 void setFlag( Flag f,
bool on =
true );
120 bool testFlag( Flag f )
const;
135 QList<QgsLayerTreeNode *> indexes2nodes(
const QModelIndexList &list,
bool skipInternal =
false )
const;
157 QList<QgsLayerTreeModelLegendNode *> layerLegendNodes(
QgsLayerTreeLayer *nodeLayer,
bool skipNodeEmbeddedInParent =
false );
164 QList<QgsLayerTreeModelLegendNode *> layerOriginalLegendNodes(
QgsLayerTreeLayer *nodeLayer );
198 QModelIndex currentIndex()
const;
200 void setCurrentIndex(
const QModelIndex ¤tIndex );
203 void setLayerTreeNodeFont(
int nodeType,
const QFont &font );
205 QFont layerTreeNodeFont(
int nodeType )
const;
219 void setLegendFilterByScale(
double scale );
259 void setLegendMapViewData(
double mapUnitsPerPixel,
int dpi,
double scale );
266 void legendMapViewData(
double *mapUnitsPerPixel
SIP_OUT,
int *dpi
SIP_OUT,
double *scale
SIP_OUT )
const;
272 QMap<QString, QString> layerStyleOverrides()
const;
278 void setLayerStyleOverrides(
const QMap<QString, QString> &overrides );
300 void nodeWillAddChildren(
QgsLayerTreeNode *node,
int indexFrom,
int indexTo );
301 void nodeAddedChildren(
QgsLayerTreeNode *node,
int indexFrom,
int indexTo );
302 void nodeWillRemoveChildren(
QgsLayerTreeNode *node,
int indexFrom,
int indexTo );
303 void nodeRemovedChildren();
313 void nodeCustomPropertyChanged(
QgsLayerTreeNode *node,
const QString &key );
315 void nodeLayerLoaded();
316 void nodeLayerWillBeUnloaded();
317 void layerLegendChanged();
323 void layerFlagsChanged();
325 void layerNeedsUpdate();
327 void legendNodeDataChanged();
329 void invalidateLegendMapBasedData();
340 void connectToRootNode();
341 void disconnectFromRootNode();
344 void recursivelyEmitDataChanged(
const QModelIndex &index = QModelIndex() );
351 void refreshScaleBasedLayers(
const QModelIndex &index = QModelIndex(),
double previousScale = 0.0 );
353 static QIcon iconGroup();
356 QList<QgsLayerTreeModelLegendNode *> filterLegendNodes(
const QList<QgsLayerTreeModelLegendNode *> &nodes );
358 QModelIndex indexOfParentLayerTreeNode(
QgsLayerTreeNode *parentNode )
const;
369 void legendCleanup();
370 void legendInvalidateMapBasedData();
396 QMap<QgsLayerTreeModelLegendNode *, QgsLayerTreeModelLegendNode *>
parents;
398 QMap<QgsLayerTreeModelLegendNode *, QList<QgsLayerTreeModelLegendNode *> >
children;
444 QHash<QgsLayerTreeLayer *, LayerLegendData>
mLegend;
470 void legendNodeSizeChanged();
499 mRuleKey = QStringLiteral(
"embedded-widget-" ) + QUuid::createUuid().toString();
502 QVariant
data(
int role )
const override
504 if ( role == RuleKeyRole )
MessageLevel
Level for messages This will be used both for message log and message bar in application.
Class for parsing and evaluation of expressions (formerly called "search strings").
A geometry is the spatial representation of a feature.
Layer tree group node serves as a container for layers and further groups.
Layer tree node points to a map layer.
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.
@ EmbeddedWidget
Embedded widget placeholder node type.
@ NodeTypeRole
Type of node. Added in 3.16.
The QgsLayerTreeModel class is model implementation for Qt item views framework.
QTimer mDeferLegendInvalidationTimer
double mLegendFilterByScale
scale denominator for filtering of legend nodes (<= 0 means no filtering)
int autoCollapseLegendNodes() const
Returns at what number of legend nodes the layer node should be collapsed. -1 means no auto-collapse ...
double legendFilterByScale() const
Returns the scale which restricts the legend nodes which are visible.
double mLegendMapViewScale
std::unique_ptr< QgsMapSettings > mLegendFilterMapSettings
std::unique_ptr< QgsMapHitTest > mLegendFilterHitTest
bool mLegendFilterUsesExtent
whether to use map filtering
void setAutoCollapseLegendNodes(int nodeCount)
Sets at what number of legend nodes the layer node should be collapsed. Setting -1 disables the auto-...
QHash< QgsLayerTreeLayer *, LayerLegendData > mLegend
Per layer data about layer's legend nodes.
const QgsMapSettings * legendFilterMapSettings() const
Returns the current map settings used for the current legend filter (or nullptr if none is enabled)
QPersistentModelIndex mCurrentIndex
Current index - will be underlined.
void messageEmitted(const QString &message, Qgis::MessageLevel level=Qgis::Info, int duration=5)
Emits a message than can be displayed to the user in a GUI class.
int mAutoCollapseLegendNodesCount
Minimal number of nodes when legend should be automatically collapsed. -1 = disabled.
double mLegendMapViewMupp
QMap< QString, QString > mLayerStyleOverrides
Overrides of map layers' styles: key = layer ID, value = style XML.
QSet< QgsLayerTreeLayer * > mInvalidatedNodes
Keep track of layer nodes for which the legend size needs to be recalculated.
Flags mFlags
Sets of flags for the model.
This class is a base class for nodes in a layer tree.
Namespace with helper functions for layer tree operations.
Class that runs a hit test with given map settings.
The QgsMapSettings class contains configuration for rendering of the map.
Contains information about the context of a rendering operation.
int scaleIconSize(int standardSize)
Scales an icon size to compensate for display pixel density, making the icon size hi-dpi friendly,...
QgsLayerTreeModelLegendNode * legendNode(const QString &rule, QgsLayerTreeModel &model)
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
Q_DECLARE_OPERATORS_FOR_FLAGS(QgsField::ConfigurationFlags) CORE_EXPORT QDataStream &operator<<(QDataStream &out
Writes the field to stream out. QGIS version compatibility is not guaranteed.
Structure that stores all data associated with one map layer.
LayerLegendData()=default
QList< QgsLayerTreeModelLegendNode * > originalNodes
Data structure for storage of legend nodes.
QList< QgsLayerTreeModelLegendNode * > activeNodes
Active legend nodes.
Structure that stores tree representation of map layer's legend.
QMap< QgsLayerTreeModelLegendNode *, QgsLayerTreeModelLegendNode * > parents
Pointer to parent for each active node. Top-level nodes have nullptr parent. Pointers are not owned.
QMap< QgsLayerTreeModelLegendNode *, QList< QgsLayerTreeModelLegendNode * > > children
List of children for each active node. Top-level nodes are under nullptr key. Pointers are not owned.