QGIS API Documentation 3.99.0-Master (d270888f95f)
Loading...
Searching...
No Matches
qgslayertreeembeddedconfigwidget.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgslayertreeembeddedconfigwidget.cpp
3 --------------------------------------
4 Date : May 2016
5 Copyright : (C) 2016 by Martin Dobias
6 Email : wonder dot sk at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
17
18#include "qgsgui.h"
20#include "qgsmaplayer.h"
21
22#include <QStandardItemModel>
23#include <QString>
24#include <QStringListModel>
25
26#include "moc_qgslayertreeembeddedconfigwidget.cpp"
27
28using namespace Qt::StringLiterals;
29
31 : QWidget( parent )
32
33{
34 setupUi( this );
35}
36
38{
39 mLayer = layer;
40
41 connect( mBtnAdd, &QAbstractButton::clicked, this, &QgsLayerTreeEmbeddedConfigWidget::onAddClicked );
42 connect( mBtnRemove, &QAbstractButton::clicked, this, &QgsLayerTreeEmbeddedConfigWidget::onRemoveClicked );
43
44 QStandardItemModel *modelAvailable = new QStandardItemModel( this );
45 QStandardItemModel *modelUsed = new QStandardItemModel( this );
46
47 // populate available
48 const auto constProviders = QgsGui::layerTreeEmbeddedWidgetRegistry()->providers();
49 for ( const QString &providerId : constProviders )
50 {
52 if ( provider->supportsLayer( mLayer ) )
53 {
54 QStandardItem *item = new QStandardItem( provider->name() );
55 item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable );
56 item->setData( provider->id(), Qt::UserRole + 1 );
57 modelAvailable->appendRow( item );
58 }
59 }
60 mListAvailable->setModel( modelAvailable );
61
62 // populate used
63 const int widgetsCount = layer->customProperty( u"embeddedWidgets/count"_s, 0 ).toInt();
64 for ( int i = 0; i < widgetsCount; ++i )
65 {
66 const QString providerId = layer->customProperty( u"embeddedWidgets/%1/id"_s.arg( i ) ).toString();
67 if ( QgsLayerTreeEmbeddedWidgetProvider *provider = QgsGui::layerTreeEmbeddedWidgetRegistry()->provider( providerId ) )
68 {
69 QStandardItem *item = new QStandardItem( provider->name() );
70 item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable );
71 item->setData( provider->id(), Qt::UserRole + 1 );
72 modelUsed->appendRow( item );
73 }
74 }
75 mListUsed->setModel( modelUsed );
76}
77
78void QgsLayerTreeEmbeddedConfigWidget::onAddClicked()
79{
80 if ( !mListAvailable->currentIndex().isValid() )
81 return;
82
83 const QString providerId = mListAvailable->model()->data( mListAvailable->currentIndex(), Qt::UserRole + 1 ).toString();
85 if ( !provider )
86 return;
87
88 if ( QStandardItemModel *model = qobject_cast<QStandardItemModel *>( mListUsed->model() ) )
89 {
90 QStandardItem *item = new QStandardItem( provider->name() );
91 item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable );
92 item->setData( provider->id(), Qt::UserRole + 1 );
93 model->appendRow( item );
94 }
95}
96
97void QgsLayerTreeEmbeddedConfigWidget::onRemoveClicked()
98{
99 if ( !mListUsed->currentIndex().isValid() )
100 return;
101
102 const int row = mListUsed->currentIndex().row();
103 mListUsed->model()->removeRow( row );
104}
105
107{
108 if ( !mLayer )
109 return;
110
111 // clear old properties
112 const int widgetsCount = mLayer->customProperty( u"embeddedWidgets/count"_s, 0 ).toInt();
113 for ( int i = 0; i < widgetsCount; ++i )
114 {
115 mLayer->removeCustomProperty( u"embeddedWidgets/%1/id"_s.arg( i ) );
116 }
117
118 // setup new properties
119 const int newCount = mListUsed->model()->rowCount();
120 mLayer->setCustomProperty( u"embeddedWidgets/count"_s, newCount );
121 for ( int i = 0; i < newCount; ++i )
122 {
123 const QString providerId = mListUsed->model()->data( mListUsed->model()->index( i, 0 ), Qt::UserRole + 1 ).toString();
124 mLayer->setCustomProperty( u"embeddedWidgets/%1/id"_s.arg( i ), providerId );
125 }
126}
static QgsLayerTreeEmbeddedWidgetRegistry * layerTreeEmbeddedWidgetRegistry()
Returns the global layer tree embedded widget registry, used for registering widgets that may be embe...
Definition qgsgui.cpp:144
void applyToLayer()
Store changes made in the widget to the layer.
QgsLayerTreeEmbeddedConfigWidget(QWidget *parent=nullptr)
A widget to configure layer tree embedded widgets for a particular map layer.
void setLayer(QgsMapLayer *layer)
Initialize widget with a map layer.
Provider interface to be implemented in order to introduce new kinds of embedded widgets for use in l...
virtual QString id() const =0
Unique name of the provider (among other providers).
virtual QString name() const =0
Human readable name - may be translatable with tr().
virtual bool supportsLayer(QgsMapLayer *layer)=0
Whether it makes sense to use this widget for a particular layer.
QStringList providers() const
Returns list of all registered providers.
QgsLayerTreeEmbeddedWidgetProvider * provider(const QString &providerId) const
Gets provider object from the provider's ID.
Base class for all map layer types.
Definition qgsmaplayer.h:83
Q_INVOKABLE QVariant customProperty(const QString &value, const QVariant &defaultValue=QVariant()) const
Read a custom property from layer.