Skip to content

Commit 75e5da3

Browse files
committed
Integrate into layer dialogs, save in layer's properties
1 parent c780949 commit 75e5da3

12 files changed

+392
-125
lines changed

src/app/qgsapplayertreeviewmenuprovider.cpp

-26
Original file line numberDiff line numberDiff line change
@@ -237,9 +237,6 @@ QMenu* QgsAppLayerTreeViewMenuProvider::createContextMenu()
237237
duplicateLayersAction->setEnabled( false );
238238
}
239239

240-
QAction* embeddedAction = menu->addAction( tr( "Embedded widgets..."), this, SLOT( editEmbeddedWidgets() ) );
241-
embeddedAction->setProperty( "layerId", layer->id() );
242-
243240
addCustomLayerActions( menu, layer );
244241

245242
if ( layer && QgsProject::instance()->layerIsEmbedded( layer->id() ).isEmpty() )
@@ -558,26 +555,3 @@ void QgsAppLayerTreeViewMenuProvider::setSymbolLegendNodeColor( const QColor &co
558555
newSymbol->setColor( color );
559556
node->setSymbol( newSymbol );
560557
}
561-
562-
#include "qgslayertreeembeddedconfigwidget.h"
563-
void QgsAppLayerTreeViewMenuProvider::editEmbeddedWidgets()
564-
{
565-
QAction* action = qobject_cast< QAction*>( sender() );
566-
if ( !action )
567-
return;
568-
569-
QString layerId = action->property( "layerId" ).toString();
570-
QgsLayerTreeLayer* nodeLayer = QgsProject::instance()->layerTreeRoot()->findLayer( layerId );
571-
if ( !nodeLayer )
572-
return;
573-
574-
QDialog d;
575-
QgsLayerTreeEmbeddedConfigWidget* widget = new QgsLayerTreeEmbeddedConfigWidget(nodeLayer, &d);
576-
577-
QLayout* l = new QVBoxLayout(&d);
578-
l->addWidget(widget);
579-
d.setLayout(l);
580-
d.exec();
581-
582-
mView->layerTreeModel()->refreshLayerLegend( nodeLayer );
583-
}

src/app/qgsapplayertreeviewmenuprovider.h

-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ class QgsAppLayerTreeViewMenuProvider : public QObject, public QgsLayerTreeViewM
6969
void setVectorSymbolColor( const QColor &color );
7070
void editSymbolLegendNodeSymbol();
7171
void setSymbolLegendNodeColor( const QColor &color );
72-
void editEmbeddedWidgets();
7372
};
7473

7574
#endif // QGSAPPLAYERTREEVIEWMENUPROVIDER_H

src/app/qgsrasterlayerproperties.cpp

+11
Original file line numberDiff line numberDiff line change
@@ -797,6 +797,12 @@ void QgsRasterLayerProperties::sync()
797797

798798
mLayerLegendUrlLineEdit->setText( mRasterLayer->legendUrl() );
799799
mLayerLegendUrlFormatComboBox->setCurrentIndex( mLayerLegendUrlFormatComboBox->findText( mRasterLayer->legendUrlFormat() ) );
800+
801+
/*
802+
* Legend Tab
803+
*/
804+
mLegendConfigEmbeddedWidget->setLayer( mRasterLayer );
805+
800806
} // QgsRasterLayerProperties::sync()
801807

802808
/*
@@ -806,6 +812,11 @@ void QgsRasterLayerProperties::sync()
806812
*/
807813
void QgsRasterLayerProperties::apply()
808814
{
815+
/*
816+
* Legend Tab
817+
*/
818+
mLegendConfigEmbeddedWidget->applyToLayer();
819+
809820
QgsDebugMsg( "apply processing symbology tab" );
810821
/*
811822
* Symbology Tab

src/app/qgsvectorlayerproperties.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,9 @@ QgsVectorLayerProperties::QgsVectorLayerProperties(
251251
diagLayout->addWidget( diagramPropertiesDialog );
252252
mDiagramFrame->setLayout( diagLayout );
253253

254+
// Legend tab
255+
mLegendConfigEmbeddedWidget->setLayer( mLayer );
256+
254257
// WMS Name as layer short name
255258
mLayerShortNameLineEdit->setText( mLayer->shortName() );
256259
// WMS Name validator
@@ -535,6 +538,9 @@ void QgsVectorLayerProperties::apply()
535538
labelingDialog->writeSettingsToLayer();
536539
}
537540

541+
// apply legend settings
542+
mLegendConfigEmbeddedWidget->applyToLayer();
543+
538544
//
539545
// Set up sql subset query if applicable
540546
//

src/core/layertree/qgslayertreemodel.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1186,7 +1186,7 @@ void QgsLayerTreeModel::addLegendToLayer( QgsLayerTreeLayer* nodeL )
11861186

11871187
if ( testFlag( UseEmbeddedWidgets ) )
11881188
{
1189-
int widgetsCount = nodeL->customProperty( "embeddedWidgets/count", 0 ).toInt();
1189+
int widgetsCount = ml->customProperty( "embeddedWidgets/count", 0 ).toInt();
11901190
while ( widgetsCount > 0 )
11911191
{
11921192
lstNew.insert( 0, new EmbeddedWidgetLegendNode( nodeL ) );

src/core/layertree/qgslayertreenode.h

-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ class QDomElement;
5858
* - "embedded_project" - path to the external project (embedded root node only)
5959
* - "legend/..." - properties for legend appearance customization
6060
* - "expandedLegendNodes" - list of layer's legend nodes' rules in expanded state
61-
* - "embeddedWidgets/..." - properties for embedded widgets (layer node only)
6261
*
6362
* @see also QgsLayerTree, QgsLayerTreeLayer, QgsLayerTreeGroup
6463
* @note added in 2.4

src/gui/layertree/qgslayertreeembeddedconfigwidget.cpp

+21-14
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,21 @@
11
#include "qgslayertreeembeddedconfigwidget.h"
22

3-
#include "qgslayertree.h"
3+
#include "qgsmaplayer.h"
44
#include "qgslayertreeembeddedwidgetregistry.h"
55

66
#include <QStringListModel>
77
#include <QStandardItemModel>
88

9-
QgsLayerTreeEmbeddedConfigWidget::QgsLayerTreeEmbeddedConfigWidget( QgsLayerTreeLayer* nodeLayer, QWidget* parent )
9+
QgsLayerTreeEmbeddedConfigWidget::QgsLayerTreeEmbeddedConfigWidget( QWidget* parent )
1010
: QWidget( parent )
11-
, mNodeLayer( nodeLayer )
11+
, mLayer( nullptr )
1212
{
1313
setupUi( this );
14+
}
15+
16+
void QgsLayerTreeEmbeddedConfigWidget::setLayer( QgsMapLayer* layer )
17+
{
18+
mLayer = layer;
1419

1520
connect( mBtnAdd, SIGNAL( clicked( bool ) ), this, SLOT( onAddClicked() ) );
1621
connect( mBtnRemove, SIGNAL( clicked( bool ) ), this, SLOT( onRemoveClicked() ) );
@@ -23,19 +28,21 @@ QgsLayerTreeEmbeddedConfigWidget::QgsLayerTreeEmbeddedConfigWidget( QgsLayerTree
2328
{
2429
QgsLayerTreeEmbeddedWidgetProvider* provider = QgsLayerTreeEmbeddedWidgetRegistry::instance()->provider( providerId );
2530
QStandardItem* item = new QStandardItem( provider->name() );
31+
item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable );
2632
item->setData( provider->id(), Qt::UserRole + 1 );
2733
modelAvailable->appendRow( item );
2834
}
2935
mListAvailable->setModel( modelAvailable );
3036

3137
// populate used
32-
int widgetsCount = nodeLayer->customProperty( "embeddedWidgets/count", 0 ).toInt();
38+
int widgetsCount = layer->customProperty( "embeddedWidgets/count", 0 ).toInt();
3339
for ( int i = 0; i < widgetsCount; ++i )
3440
{
35-
QString providerId = nodeLayer->customProperty( QString( "embeddedWidgets/%1/id" ).arg( i ) ).toString();
41+
QString providerId = layer->customProperty( QString( "embeddedWidgets/%1/id" ).arg( i ) ).toString();
3642
if ( QgsLayerTreeEmbeddedWidgetProvider* provider = QgsLayerTreeEmbeddedWidgetRegistry::instance()->provider( providerId ) )
3743
{
3844
QStandardItem* item = new QStandardItem( provider->name() );
45+
item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable );
3946
item->setData( provider->id(), Qt::UserRole + 1 );
4047
modelUsed->appendRow( item );
4148
}
@@ -56,11 +63,10 @@ void QgsLayerTreeEmbeddedConfigWidget::onAddClicked()
5663
if ( QStandardItemModel* model = qobject_cast<QStandardItemModel*>( mListUsed->model() ) )
5764
{
5865
QStandardItem* item = new QStandardItem( provider->name() );
66+
item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable );
5967
item->setData( provider->id(), Qt::UserRole + 1 );
6068
model->appendRow( item );
6169
}
62-
63-
updateCustomProperties();
6470
}
6571

6672
void QgsLayerTreeEmbeddedConfigWidget::onRemoveClicked()
@@ -70,25 +76,26 @@ void QgsLayerTreeEmbeddedConfigWidget::onRemoveClicked()
7076

7177
int row = mListUsed->currentIndex().row();
7278
mListUsed->model()->removeRow( row );
73-
74-
updateCustomProperties();
7579
}
7680

77-
void QgsLayerTreeEmbeddedConfigWidget::updateCustomProperties()
81+
void QgsLayerTreeEmbeddedConfigWidget::applyToLayer()
7882
{
83+
if ( !mLayer )
84+
return;
85+
7986
// clear old properties
80-
int widgetsCount = mNodeLayer->customProperty( "embeddedWidgets/count", 0 ).toInt();
87+
int widgetsCount = mLayer->customProperty( "embeddedWidgets/count", 0 ).toInt();
8188
for ( int i = 0; i < widgetsCount; ++i )
8289
{
83-
mNodeLayer->removeCustomProperty( QString( "embeddedWidgets/%1/id" ).arg( i ) );
90+
mLayer->removeCustomProperty( QString( "embeddedWidgets/%1/id" ).arg( i ) );
8491
}
8592

8693
// setup new properties
8794
int newCount = mListUsed->model()->rowCount();
88-
mNodeLayer->setCustomProperty( "embeddedWidgets/count", newCount );
95+
mLayer->setCustomProperty( "embeddedWidgets/count", newCount );
8996
for ( int i = 0; i < newCount; ++i )
9097
{
9198
QString providerId = mListUsed->model()->data( mListUsed->model()->index( i, 0 ), Qt::UserRole + 1 ).toString();
92-
mNodeLayer->setCustomProperty( QString( "embeddedWidgets/%1/id" ).arg( i ), providerId );
99+
mLayer->setCustomProperty( QString( "embeddedWidgets/%1/id" ).arg( i ), providerId );
93100
}
94101
}

src/gui/layertree/qgslayertreeembeddedconfigwidget.h

+7-6
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,24 @@
33

44
#include "ui_qgslayertreeembeddedconfigwidget.h"
55

6-
class QgsLayerTreeLayer;
6+
class QgsMapLayer;
77

88
class GUI_EXPORT QgsLayerTreeEmbeddedConfigWidget : public QWidget, protected Ui::QgsLayerTreeEmbeddedConfigWidget
99
{
1010
Q_OBJECT
1111
public:
12-
QgsLayerTreeEmbeddedConfigWidget( QgsLayerTreeLayer* nodeLayer, QWidget* parent = nullptr );
12+
QgsLayerTreeEmbeddedConfigWidget( QWidget* parent = nullptr );
13+
14+
void setLayer( QgsMapLayer* layer );
15+
16+
void applyToLayer();
1317

1418
private slots:
1519
void onAddClicked();
1620
void onRemoveClicked();
1721

1822
private:
19-
void updateCustomProperties();
20-
21-
private:
22-
QgsLayerTreeLayer* mNodeLayer;
23+
QgsMapLayer* mLayer;
2324
};
2425

2526
#endif // QGSLAYERTREEEMBEDDEDCONFIGWIDGET_H

src/gui/layertree/qgslayertreeview.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -137,12 +137,12 @@ void QgsLayerTreeView::modelRowsInserted( const QModelIndex& index, int start, i
137137
QgsLayerTreeLayer* nodeLayer = QgsLayerTree::toLayer( parentNode );
138138
if ( QgsMapLayer* layer = nodeLayer->layer() )
139139
{
140-
int widgetsCount = nodeLayer->customProperty( "embeddedWidgets/count", 0 ).toInt();
140+
int widgetsCount = layer->customProperty( "embeddedWidgets/count", 0 ).toInt();
141141
QList<QgsLayerTreeModelLegendNode*> legendNodes = layerTreeModel()->layerLegendNodes( nodeLayer );
142142
for ( int i = 0; i < widgetsCount; ++i )
143143
{
144144
// TODO: check that the legend nodes are actually the placeholders for embedded widgets
145-
QString providerId = nodeLayer->customProperty( QString( "embeddedWidgets/%1/id" ).arg( i ) ).toString();
145+
QString providerId = layer->customProperty( QString( "embeddedWidgets/%1/id" ).arg( i ) ).toString();
146146
if ( QgsLayerTreeEmbeddedWidgetProvider* provider = QgsLayerTreeEmbeddedWidgetRegistry::instance()->provider( providerId ) )
147147
{
148148
QModelIndex index = layerTreeModel()->legendNode2index( legendNodes[i] );

src/ui/qgslayertreeembeddedconfigwidget.ui

+11-1
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,21 @@
5151
<property name="text">
5252
<string>-&gt;</string>
5353
</property>
54+
<property name="icon">
55+
<iconset resource="../../images/images.qrc">
56+
<normaloff>:/images/themes/default/mActionArrowRight.png</normaloff>:/images/themes/default/mActionArrowRight.png</iconset>
57+
</property>
5458
</widget>
5559
</item>
5660
<item>
5761
<widget class="QToolButton" name="mBtnRemove">
5862
<property name="text">
5963
<string>&lt;-</string>
6064
</property>
65+
<property name="icon">
66+
<iconset resource="../../images/images.qrc">
67+
<normaloff>:/images/themes/default/mActionArrowLeft.png</normaloff>:/images/themes/default/mActionArrowLeft.png</iconset>
68+
</property>
6169
</widget>
6270
</item>
6371
<item>
@@ -80,6 +88,8 @@
8088
</item>
8189
</layout>
8290
</widget>
83-
<resources/>
91+
<resources>
92+
<include location="../../images/images.qrc"/>
93+
</resources>
8494
<connections/>
8595
</ui>

0 commit comments

Comments
 (0)