16#ifndef QGSLAYERTREEMODEL_H
17#define QGSLAYERTREEMODEL_H
20#include <QAbstractItemModel>
61 if ( sipCpp->inherits(
"QgsLayerTreeModel" ) )
62 sipType = sipType_QgsLayerTreeModel;
81 int rowCount(
const QModelIndex &parent = QModelIndex() )
const override;
82 int columnCount(
const QModelIndex &parent = QModelIndex() )
const override;
83 QModelIndex index(
int row,
int column,
const QModelIndex &parent = QModelIndex() )
const override;
84 QModelIndex parent(
const QModelIndex &child )
const override;
85 QVariant data(
const QModelIndex &index,
int role = Qt::DisplayRole )
const override;
86 Qt::ItemFlags flags(
const QModelIndex &index )
const override;
87 bool setData(
const QModelIndex &index,
const QVariant &value,
int role = Qt::EditRole )
override;
88 Qt::DropActions supportedDropActions()
const override;
89 QStringList mimeTypes()
const override;
90 QMimeData *mimeData(
const QModelIndexList &indexes )
const override;
91 bool dropMimeData(
const QMimeData *data, Qt::DropAction action,
int row,
int column,
const QModelIndex &parent )
override;
92 bool removeRows(
int row,
int count,
const QModelIndex &parent = QModelIndex() )
override;
100 ShowLegendAsTree = 0x0004,
101 DeferredLegendInvalidation = 0x0008,
102 UseEmbeddedWidgets = 0x0010,
103 UseTextFormatting = 0x0020,
106 AllowNodeReorder = 0x1000,
107 AllowNodeRename = 0x2000,
108 AllowNodeChangeVisibility = 0x4000,
109 AllowLegendChangeState = 0x8000,
110 ActionHierarchical = 0x10000,
111 UseThreadedHitTest = 0x20000,
118 void setFlag(
Flag f,
bool on =
true );
122 bool testFlag(
Flag f )
const;
137 QList<QgsLayerTreeNode *> indexes2nodes(
const QModelIndexList &list,
bool skipInternal =
false )
const;
156 QList<QgsLayerTreeModelLegendNode *> layerLegendNodes(
QgsLayerTreeLayer *nodeLayer,
bool skipNodeEmbeddedInParent =
false );
162 QList<QgsLayerTreeModelLegendNode *> layerOriginalLegendNodes(
QgsLayerTreeLayer *nodeLayer );
193 QModelIndex currentIndex()
const;
195 void setCurrentIndex(
const QModelIndex ¤tIndex );
198 void setLayerTreeNodeFont(
int nodeType,
const QFont &font );
200 QFont layerTreeNodeFont(
int nodeType )
const;
213 void setLegendFilterByScale(
double scale );
270 void setLegendMapViewData(
double mapUnitsPerPixel,
int dpi,
double scale );
276 void legendMapViewData(
double *mapUnitsPerPixel
SIP_OUT,
int *dpi
SIP_OUT,
double *scale
SIP_OUT ) const;
281 QMap<QString, QString> layerStyleOverrides() const;
286 void setLayerStyleOverrides( const QMap<QString, QString> &overrides );
326 void waitForHitTestBlocking();
336 bool hitTestInProgress() const;
344 void messageEmitted( const QString &message,
Qgis::MessageLevel level =
Qgis::MessageLevel::Info,
int duration = 5 );
354 void hitTestStarted();
364 void hitTestCompleted();
367 void nodeWillAddChildren(
QgsLayerTreeNode *node,
int indexFrom,
int indexTo );
368 void nodeAddedChildren(
QgsLayerTreeNode *node,
int indexFrom,
int indexTo );
369 void nodeWillRemoveChildren(
QgsLayerTreeNode *node,
int indexFrom,
int indexTo );
370 void nodeRemovedChildren();
379 void nodeCustomPropertyChanged(
QgsLayerTreeNode *node, const QString &key );
381 void nodeLayerLoaded();
382 void nodeLayerWillBeUnloaded();
383 void layerLegendChanged();
389 void layerFlagsChanged();
391 void layerNeedsUpdate();
393 void legendNodeDataChanged();
395 void invalidateLegendMapBasedData();
406 void connectToRootNode();
407 void disconnectFromRootNode();
410 void recursivelyEmitDataChanged( const QModelIndex &index = QModelIndex() );
416 void refreshScaleBasedLayers( const QModelIndex &index = QModelIndex(),
double previousScale = 0.0 );
418 static QIcon iconGroup();
423 QModelIndex indexOfParentLayerTreeNode(
QgsLayerTreeNode *parentNode ) const;
434 void legendCleanup();
435 void legendInvalidateMapBasedData();
451 QPersistentModelIndex mCurrentIndex;
453 int mAutoCollapseLegendNodesCount = -1;
469 QMap<QgsLayerTreeModelLegendNode *, QgsLayerTreeModelLegendNode *>
parents;
471 QMap<QgsLayerTreeModelLegendNode *, QList<QgsLayerTreeModelLegendNode *> >
children;
517 QHash<QgsLayerTreeLayer *, LayerLegendData>
mLegend;
529 double mLegendFilterByScale = 0;
537 double mLegendMapViewMupp = 0;
538 int mLegendMapViewDpi = 0;
539 double mLegendMapViewScale = 0;
545 void legendNodeSizeChanged();
546 void hitTestTaskCompleted();
549 void handleHitTestResults();
574 mRuleKey = QStringLiteral(
"embedded-widget-" ) + QUuid::createUuid().toString();
577 QVariant
data(
int role )
const override
The Qgis class provides global constants for use throughout the application.
Class for parsing and evaluation of expressions (formerly called "search strings").
A geometry is the spatial representation of a feature.
Contains settings relating to filtering the contents of QgsLayerTreeModel and views.
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.
@ NodeType
Type of node. Added in 3.16.
@ RuleKey
Rule key of the node (QString)
The QgsLayerTreeModel class is model implementation for Qt item views framework.
QTimer mDeferLegendInvalidationTimer
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.
std::unique_ptr< QgsLayerTreeFilterSettings > mFilterSettings
QMap< QString, QSet< QString > > mHitTestResults
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.
QSet< QgsScreenProperties > mTargetScreenProperties
QPointer< QgsMapHitTestTask > mHitTestTask
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.
This class is a base class for nodes in a layer tree.
Namespace with helper functions for layer tree operations.
Executes a QgsMapHitTest in a background thread.
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.
Stores properties relating to a screen.
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)
#define SIP_ENUM_BASETYPE(type)
Q_DECLARE_OPERATORS_FOR_FLAGS(QgsTextRendererUtils::CurvedTextFlags)
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.