20#include "moc_qgselevationprofilelayertreeview.cpp" 
   34#include <QContextMenuEvent> 
   52    case Qt::DecorationRole:
 
   63          std::unique_ptr<QgsSymbol> symbol;
 
   64          switch ( layer->type() )
 
   71              switch ( elevationProperties->
type() )
 
   79                      symbol.reset( markerSymbol->clone() );
 
   87                      symbol.reset( fillSymbol->clone() );
 
   95                      symbol.reset( lineSymbol->clone() );
 
  103                      if ( renderer->symbol()->type() == symbol->type() )
 
  106                        symbol.reset( renderer->symbol()->clone() );
 
  111                        symbol->setColor( renderer->symbol()->color() );
 
  112                        symbol->setOpacity( renderer->symbol()->opacity() );
 
  129                        symbol.reset( lineSymbol->clone() );
 
  136                        symbol.reset( fillSymbol->clone() );
 
  153                    symbol.reset( lineSymbol->clone() );
 
  160                    symbol.reset( fillSymbol->clone() );
 
  175                    symbol.reset( lineSymbol->clone() );
 
  182                    symbol.reset( fillSymbol->clone() );
 
  207    case Qt::ToolTipRole:
 
  215          QString title = !layer->metadata().title().isEmpty() ? layer->metadata().title() : !layer->serverProperties()->title().isEmpty()     ? layer->serverProperties()->title()
 
  216                                                                                           : !layer->serverProperties()->shortName().isEmpty() ? layer->serverProperties()->shortName()
 
  219          title = 
"<b>" + title.toHtmlEscaped() + 
"</b>";
 
  224          const QString elevationPropertiesSummary = layer->elevationProperties() ? layer->elevationProperties()->htmlSummary() : QString();
 
  225          if ( !elevationPropertiesSummary.isEmpty() )
 
  226            parts << elevationPropertiesSummary;
 
  228          return parts.join( QLatin1String( 
"<br/>" ) );
 
 
  244    if ( role == Qt::CheckStateRole )
 
  246      const bool checked = 
static_cast<Qt::CheckState
>( value.toInt() ) == Qt::Checked;
 
  249        layer->setCustomProperty( QStringLiteral( 
"_include_in_elevation_profiles" ), checked );
 
 
  259  if ( action == Qt::IgnoreAction )
 
  262  if ( !
data->hasFormat( QStringLiteral( 
"application/qgis.layertreemodeldata" ) ) )
 
  266  if ( action == Qt::MoveAction )
 
  268    const QString source = 
data->data( QStringLiteral( 
"application/qgis.layertree.source" ) );
 
  269    if ( source.isEmpty() || source != QStringLiteral( 
":0x%1" ).arg( 
reinterpret_cast<quintptr
>( 
this ), 2 * QT_POINTER_SIZE, 16, QLatin1Char( 
'0' ) ) )
 
  275  return QgsLayerTreeModel::canDropMimeData( 
data, action, row, column, 
parent );
 
 
  280  if ( action == Qt::IgnoreAction )
 
  283  if ( !
data->hasFormat( QStringLiteral( 
"application/qgis.layertreemodeldata" ) ) )
 
  287  const QString source = 
data->data( QStringLiteral( 
"application/qgis.layertree.source" ) );
 
  288  if ( source.isEmpty() || source != QStringLiteral( 
":0x%1" ).arg( 
reinterpret_cast<quintptr
>( 
this ), 2 * QT_POINTER_SIZE, 16, QLatin1Char( 
'0' ) ) )
 
  290    if ( action == Qt::CopyAction )
 
  292      QByteArray encodedLayerTreeData = 
data->data( QStringLiteral( 
"application/qgis.layertreemodeldata" ) );
 
  294      QDomDocument layerTreeDoc;
 
  295      if ( !layerTreeDoc.setContent( QString::fromUtf8( encodedLayerTreeData ) ) )
 
  298      QDomElement rootLayerTreeElem = layerTreeDoc.documentElement();
 
  299      if ( rootLayerTreeElem.tagName() != QLatin1String( 
"layer_tree_model_data" ) )
 
  302      QList<QgsMapLayer *> layersToAdd;
 
  304      QDomElement elem = rootLayerTreeElem.firstChildElement();
 
  305      while ( !elem.isNull() )
 
  310          if ( 
QgsMapLayer *layer = qobject_cast<QgsLayerTreeLayer *>( node.get() )->layer() )
 
  312            layersToAdd << layer;
 
  315        elem = elem.nextSiblingElement();
 
  318      if ( !layersToAdd.empty() )
 
 
  337    mimeData->setData( QStringLiteral( 
"application/qgis.restrictlayertreemodelsubclass" ), 
"QgsElevationProfileLayerTreeModel" );
 
 
  348  : QSortFilterProxyModel( parent )
 
  351  setSourceModel( mModel );
 
  352  setDynamicSortFilter( 
true );
 
 
  357  const QModelIndex sourceIndex = mModel->
index( sourceRow, 0, sourceParent );
 
  360    switch ( node->nodeType() )
 
  366          if ( 
QgsMapLayer *layer = layerTreeLayer->layer() )
 
  369            if ( !layer->elevationProperties() || !layer->elevationProperties()->hasElevation() )
 
  387      if ( 
QgsVectorLayer *layer = qobject_cast<QgsVectorLayer *>( layerTreeLayer->layer() ) )
 
  389        if ( !qgis::down_cast<QgsVectorLayerElevationProperties *>( layer->elevationProperties() )->respectLayerSymbology() )
 
 
  413  : QTreeView( parent )
 
  414  , mLayerTree( rootNode )
 
  420  setHeaderHidden( 
true );
 
  422  setDragEnabled( 
true );
 
  423  setAcceptDrops( 
true );
 
  424  setDropIndicatorShown( 
true );
 
  425  setExpandsOnDoubleClick( 
false );
 
  428  header()->setStretchLastSection( 
false );
 
  429  header()->setSectionResizeMode( QHeaderView::ResizeToContents );
 
  432  setVerticalScrollMode( QAbstractItemView::ScrollPerPixel );
 
  434  setDefaultDropAction( Qt::MoveAction );
 
  436  setModel( mProxyModel );
 
 
  445      return layerTreeLayerNode->layer();
 
 
  460  std::reverse( sortedLayers.begin(), sortedLayers.end() );
 
  461  for ( 
QgsMapLayer *layer : std::as_const( sortedLayers ) )
 
  465    if ( layer->customProperty( QStringLiteral( 
"_include_in_elevation_profiles" ) ).isValid() )
 
  467      node->
setItemVisibilityChecked( layer->customProperty( QStringLiteral( 
"_include_in_elevation_profiles" ) ).toBool() );
 
  471      node->
setItemVisibilityChecked( layer->elevationProperties() && layer->elevationProperties()->showByDefaultInElevationProfilePlots() );
 
 
  483  header()->setMinimumSectionSize( viewport()->width() );
 
  484  QTreeView::resizeEvent( event );
 
 
@ Group
Composite group layer. Added in QGIS 3.24.
 
@ Plugin
Plugin based layer.
 
@ TiledScene
Tiled scene layer. Added in QGIS 3.34.
 
@ Annotation
Contains freeform, georeferenced annotations. Added in QGIS 3.16.
 
@ VectorTile
Vector tile layer. Added in QGIS 3.14.
 
@ Mesh
Mesh layer. Added in QGIS 3.2.
 
@ PointCloud
Point cloud layer. Added in QGIS 3.18.
 
@ ContinuousSurface
The features should be treated as representing values on a continuous surface (eg contour lines)
 
@ IndividualFeatures
Treat each feature as an individual object (eg buildings)
 
@ Line
The elevation surface will be rendered using a line symbol.
 
@ FillBelow
The elevation surface will be rendered using a fill symbol below the surface level.
 
@ FillAbove
The elevation surface will be rendered using a fill symbol above the surface level.
 
A layer tree model subclass for elevation profiles.
 
bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override
 
void addLayers(const QList< QgsMapLayer * > &layers)
Emitted when layers should be added to the profile, e.g.
 
QgsElevationProfileLayerTreeModel(QgsLayerTree *rootNode, QObject *parent=nullptr)
Construct a new tree model with given layer tree (root node must not be nullptr).
 
bool setData(const QModelIndex &index, const QVariant &value, int role=Qt::EditRole) override
 
QMimeData * mimeData(const QModelIndexList &indexes) const override
 
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
 
bool canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const override
 
A proxy model for elevation profiles.
 
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override
 
QgsElevationProfileLayerTreeProxyModel(QgsElevationProfileLayerTreeModel *model, QObject *parent=nullptr)
Constructor for QgsElevationProfileLayerTreeProxyModel.
 
QgsElevationProfileLayerTreeProxyModel * proxyModel()
Returns the view's proxy model.
 
QgsMapLayer * indexToLayer(const QModelIndex &index)
Converts a view index to a map layer.
 
QgsElevationProfileLayerTreeView(QgsLayerTree *rootNode, QWidget *parent=nullptr)
Construct a new tree view with given layer tree (root node must not be nullptr).
 
void resizeEvent(QResizeEvent *event) override
 
void addLayers(const QList< QgsMapLayer * > &layers)
Emitted when layers should be added to the profile, e.g.
 
void populateInitialLayers(QgsProject *project)
Initially populates the tree view using layers from a project.
 
A fill symbol type, for rendering Polygon and MultiPolygon geometries.
 
QgsLayerTreeLayer * addLayer(QgsMapLayer *layer)
Append a new layer node for given map layer.
 
Layer tree node points to a map layer.
 
An abstract interface for legend items returned from QgsMapLayerLegend implementation.
 
QgsLayerTreeLayer * layerNode() const
Returns pointer to the parent layer node.
 
A model representing the layer tree, including layers and groups of layers.
 
bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override
 
bool setData(const QModelIndex &index, const QVariant &value, int role=Qt::EditRole) override
 
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
 
QModelIndex parent(const QModelIndex &child) const override
 
void setFlag(Flag f, bool on=true)
Enable or disable a model flag.
 
QgsRenderContext * createTemporaryRenderContext() const
Returns a temporary render context.
 
QgsLayerTreeNode * index2node(const QModelIndex &index) const
Returns layer tree node for given index.
 
QMimeData * mimeData(const QModelIndexList &indexes) const override
 
static int scaleIconSize(int standardSize)
Scales an layer tree model icon size to compensate for display pixel density, making the icon size hi...
 
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
 
static QgsLayerTreeModelLegendNode * index2legendNode(const QModelIndex &index)
Returns legend node for given index.
 
@ AllowNodeChangeVisibility
Allow user to set node visibility with a checkbox.
 
@ ShowLegendAsTree
For legends that support it, will show them in a tree instead of a list (needs also ShowLegend)....
 
@ AllowNodeReorder
Allow reordering with drag'n'drop.
 
@ AllowLegendChangeState
Allow check boxes for legend nodes (if supported by layer's legend)
 
Base class for nodes in a layer tree.
 
@ NodeGroup
Container of other groups and layers.
 
@ NodeLayer
Leaf node pointing to a layer.
 
static QgsLayerTreeNode * readXml(QDomElement &element, const QgsReadWriteContext &context)
Read layer tree from XML.
 
NodeType nodeType() const
Find out about type of the node. It is usually shorter to use convenience functions from QgsLayerTree...
 
void setItemVisibilityChecked(bool checked)
Check or uncheck a node (independently of its ancestors or children)
 
Namespace with helper functions for layer tree operations.
 
static QgsLayerTreeLayer * toLayer(QgsLayerTreeNode *node)
Cast node to a layer.
 
static bool isLayer(const QgsLayerTreeNode *node)
Check whether the node is a valid layer node.
 
A line symbol type, for rendering LineString and MultiLineString geometries.
 
static QList< QgsMapLayer * > sortLayersByType(const QList< QgsMapLayer * > &layers, const QList< Qgis::LayerType > &order)
Sorts a list of map layers by their layer type, respecting the order of types specified.
 
Base class for all map layer types.
 
A marker symbol type, for rendering Point and MultiPoint geometries.
 
Mesh layer specific subclass of QgsMapLayerElevationProperties.
 
Qgis::ProfileSurfaceSymbology profileSymbology() const
Returns the symbology option used to render the mesh profile in elevation profile plots.
 
QgsLineSymbol * profileLineSymbol() const
Returns the line symbol used to render the mesh profile in elevation profile plots.
 
QgsFillSymbol * profileFillSymbol() const
Returns the fill symbol used to render the mesh profile in elevation profile plots.
 
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
 
static QgsProject * instance()
Returns the QgsProject singleton instance.
 
QVector< T > layers() const
Returns a list of registered map layers with a specified layer type.
 
Raster layer specific subclass of QgsMapLayerElevationProperties.
 
QgsLineSymbol * profileLineSymbol() const
Returns the line symbol used to render the raster profile in elevation profile plots.
 
Qgis::ProfileSurfaceSymbology profileSymbology() const
Returns the symbology option used to render the raster profile in elevation profile plots.
 
QgsFillSymbol * profileFillSymbol() const
Returns the fill symbol used to render the raster profile in elevation profile plots.
 
A feature renderer which renders all features with the same symbol.
 
static QPixmap symbolPreviewPixmap(const QgsSymbol *symbol, QSize size, int padding=0, QgsRenderContext *customContext=nullptr, bool selected=false, const QgsExpressionContext *expressionContext=nullptr, const QgsLegendPatchShape *shape=nullptr, const QgsScreenProperties &screen=QgsScreenProperties())
Returns a pixmap preview for a color ramp.
 
Vector layer specific subclass of QgsMapLayerElevationProperties.
 
QgsFillSymbol * profileFillSymbol() const
Returns the symbol used to render polygons for the layer in elevation profile plots.
 
Qgis::VectorProfileType type() const
Returns the type of profile the layer represents.
 
QgsLineSymbol * profileLineSymbol() const
Returns the symbol used to render lines for the layer in elevation profile plots.
 
QgsMarkerSymbol * profileMarkerSymbol() const
Returns the symbol used to render points for the layer in elevation profile plots.
 
Qgis::ProfileSurfaceSymbology profileSymbology() const
Returns the symbology option used to render the vector profile in elevation profile plots.
 
bool respectLayerSymbology() const
Returns true if layer symbology should be respected when rendering elevation profile plots.
 
bool extrusionEnabled() const
Returns true if extrusion is enabled.
 
Represents a vector layer which manages a vector based dataset.
 
Q_INVOKABLE Qgis::GeometryType geometryType() const
Returns point, line or polygon.