Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Show layers in layout widget
  • Loading branch information
nyalldawson committed Jan 18, 2023
1 parent f58e870 commit 7098bf4
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 2 deletions.
35 changes: 35 additions & 0 deletions src/gui/layout/qgslayoutelevationprofilewidget.cpp
Expand Up @@ -25,10 +25,15 @@
#include "qgsvectorlayer.h"
#include "qgsnumericformatselectorwidget.h"
#include "qgslayout.h"
#include "qgslayertree.h"
#include "qgslayertreeregistrybridge.h"
#include "qgselevationprofilelayertreeview.h"

QgsLayoutElevationProfileWidget::QgsLayoutElevationProfileWidget( QgsLayoutItemElevationProfile *profile )
: QgsLayoutItemBaseWidget( nullptr, profile )
, mProfile( profile )
, mLayerTree( new QgsLayerTree() )
, mLayerTreeBridge( new QgsLayerTreeRegistryBridge( mLayerTree.get(), mProfile->layout() ? mProfile->layout()->project() : QgsProject::instance(), this ) )
{
Q_ASSERT( mProfile );

Expand All @@ -39,6 +44,9 @@ QgsLayoutElevationProfileWidget::QgsLayoutElevationProfileWidget( QgsLayoutItemE
mItemPropertiesWidget = new QgsLayoutItemPropertiesWidget( this, profile );
mainLayout->addWidget( mItemPropertiesWidget );

connect( mLayerTree.get(), &QgsLayerTree::layerOrderChanged, this, &QgsLayoutElevationProfileWidget::updateItemLayers );
connect( mLayerTree.get(), &QgsLayerTreeGroup::visibilityChanged, this, &QgsLayoutElevationProfileWidget::updateItemLayers );

mSpinMinDistance->setClearValue( 0 );
connect( mSpinMinDistance, qOverload< double >( &QDoubleSpinBox::valueChanged ), this, [ = ]( double value )
{
Expand Down Expand Up @@ -363,6 +371,15 @@ QgsLayoutElevationProfileWidget::QgsLayoutElevationProfileWidget( QgsLayoutItemE
registerDataDefinedButton( mDDBtnTopMargin, QgsLayoutObject::MarginTop );
registerDataDefinedButton( mDDBtnBottomMargin, QgsLayoutObject::MarginBottom );

mLayerTreeView = new QgsElevationProfileLayerTreeView( mLayerTree.get() );

QVBoxLayout *vl = new QVBoxLayout();
vl->setContentsMargins( 0, 0, 0, 0 );
vl->addWidget( mLayerTreeView );
mTreeViewContainer->setLayout( vl );

mLayerTreeView->populateInitialLayers( mProfile->layout() && mProfile->layout()->project() ? mProfile->layout()->project() : QgsProject::instance() );

setGuiElementValues();

mDistanceAxisMajorLinesSymbolButton->registerExpressionContextGenerator( mProfile );
Expand Down Expand Up @@ -497,3 +514,21 @@ void QgsLayoutElevationProfileWidget::setGuiElementValues()

mBlockChanges--;
}

void QgsLayoutElevationProfileWidget::updateItemLayers()
{
if ( mBlockChanges )
return;

QList<QgsMapLayer *> layers;
const QList< QgsMapLayer * > layerOrder = mLayerTree->layerOrder();
layers.reserve( layerOrder.size() );
for ( QgsMapLayer *layer : layerOrder )
{
if ( mLayerTree->findLayer( layer )->isVisible() )
layers << layer;
}

mProfile->setLayers( layers );
mProfile->update();
}
7 changes: 7 additions & 0 deletions src/gui/layout/qgslayoutelevationprofilewidget.h
Expand Up @@ -28,6 +28,8 @@
#include <functional>
#include <QPointer>

class QgsElevationProfileLayerTreeView;

/**
* \ingroup gui
* \brief A widget for layout elevation profile item settings.
Expand All @@ -51,6 +53,7 @@ class GUI_EXPORT QgsLayoutElevationProfileWidget: public QgsLayoutItemBaseWidget
private slots:

void setGuiElementValues();
void updateItemLayers();

private:

Expand All @@ -59,6 +62,10 @@ class GUI_EXPORT QgsLayoutElevationProfileWidget: public QgsLayoutItemBaseWidget
QPointer< QgsLayoutItemElevationProfile > mProfile = nullptr;

QgsLayoutItemPropertiesWidget *mItemPropertiesWidget = nullptr;

std::unique_ptr< QgsLayerTree > mLayerTree;
QgsLayerTreeRegistryBridge *mLayerTreeBridge = nullptr;
QgsElevationProfileLayerTreeView *mLayerTreeView = nullptr;
};

#endif //QGSLAYOUTELEVATIONPROFILEWIDGET_H
23 changes: 21 additions & 2 deletions src/ui/layout/qgslayoutelevationprofilewidgetbase.ui
Expand Up @@ -60,12 +60,31 @@
<property name="geometry">
<rect>
<x>0</x>
<y>-285</y>
<y>0</y>
<width>490</width>
<height>966</height>
<height>1267</height>
</rect>
</property>
<layout class="QVBoxLayout" name="mainLayout">
<item>
<widget class="QgsCollapsibleGroupBoxBasic" name="groupBox">
<property name="title">
<string>Layers</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QWidget" name="mTreeViewContainer" native="true">
<property name="minimumSize">
<size>
<width>0</width>
<height>250</height>
</size>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QgsCollapsibleGroupBoxBasic" name="groupChartRanges">
<property name="title">
Expand Down

0 comments on commit 7098bf4

Please sign in to comment.