QGIS API Documentation 3.43.0-Master (b60ef06885e)
qgsrulebasedrendererwidget.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsrulebasedrendererwidget.h - Settings widget for rule-based renderer
3 ---------------------
4 begin : May 2010
5 copyright : (C) 2010 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
16#ifndef QGSRULEBASEDRENDERERWIDGET_H
17#define QGSRULEBASEDRENDERERWIDGET_H
18
19#include "qgsrendererwidget.h"
20#include "qgis_sip.h"
21
23class QMenu;
25
27
28#include <QAbstractItemModel>
29
30/* Features count for rule */
32{
33 int count; // number of features
34 int duplicateCount; // number of features present also in other rule(s)
35 // map of feature counts in other rules
36 QHash<QgsRuleBasedRenderer::Rule *, int> duplicateCountMap;
37};
38
51class GUI_EXPORT QgsRuleBasedRendererModel : public QAbstractItemModel
52{
53 Q_OBJECT
54
55 public:
59 QgsRuleBasedRendererModel( QgsRuleBasedRenderer *renderer, QObject *parent, QScreen *screen = nullptr );
60
61 Qt::ItemFlags flags( const QModelIndex &index ) const override;
62 QVariant data( const QModelIndex &index, int role = Qt::DisplayRole ) const override;
63 QVariant headerData( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const override;
64 int rowCount( const QModelIndex &parent = QModelIndex() ) const override;
65 int columnCount( const QModelIndex & = QModelIndex() ) const override;
66 QModelIndex index( int row, int column, const QModelIndex &parent = QModelIndex() ) const override;
67 QModelIndex parent( const QModelIndex &index ) const override;
68
69 // editing support
70 bool setData( const QModelIndex &index, const QVariant &value, int role = Qt::EditRole ) override;
71
72 // drag'n'drop support
73 Qt::DropActions supportedDropActions() const override;
74 QStringList mimeTypes() const override;
75 QMimeData *mimeData( const QModelIndexList &indexes ) const override;
76 bool dropMimeData( const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent ) override;
77
78 bool removeRows( int row, int count, const QModelIndex &parent = QModelIndex() ) override;
79
80 // new methods
81
82 QgsRuleBasedRenderer::Rule *ruleForIndex( const QModelIndex &index ) const;
83
84 void insertRule( const QModelIndex &parent, int before, QgsRuleBasedRenderer::Rule *newrule );
85 void updateRule( const QModelIndex &parent, int row );
86 // update rule and all its descendants
87 void updateRule( const QModelIndex &index );
88 void removeRule( const QModelIndex &index );
89
96 void setSymbol( const QModelIndex &index, QgsSymbol *symbol SIP_TRANSFER );
97
98 void willAddRules( const QModelIndex &parent, int count ); // call beginInsertRows
99 void finishedAddingRules(); // call endInsertRows
100
102 void setFeatureCounts( const QHash<QgsRuleBasedRenderer::Rule *, QgsRuleBasedRendererCount> &countMap ) SIP_SKIP;
103 void clearFeatureCounts();
104
105 protected:
106 QgsRuleBasedRenderer *mR = nullptr;
107 QHash<QgsRuleBasedRenderer::Rule *, QgsRuleBasedRendererCount> mFeatureCountMap;
108 QPointer<QScreen> mScreen;
109};
110
111
113
114#include "ui_qgsrulebasedrendererwidget.h"
115
121class GUI_EXPORT QgsRuleBasedRendererWidget : public QgsRendererWidget, private Ui::QgsRuleBasedRendererWidget
122{
123 Q_OBJECT
124
125 public:
126 static QgsRendererWidget *create( QgsVectorLayer *layer, QgsStyle *style, QgsFeatureRenderer *renderer ) SIP_FACTORY;
127
130
131 QgsFeatureRenderer *renderer() override;
132 void setDockMode( bool dockMode ) override;
133
134 public slots:
135
136 void addRule();
137 void editRule();
138 void editRule( const QModelIndex &index );
139 void removeRule();
140 void countFeatures();
141 void clearFeatureCounts() { mModel->clearFeatureCounts(); }
142
143 void refineRuleScales();
144 void refineRuleCategories();
145 void refineRuleRanges();
146
147 void setRenderingOrder();
148
149 void currentRuleChanged( const QModelIndex &current = QModelIndex(), const QModelIndex &previous = QModelIndex() );
150 void selectedRulesChanged();
151
152 void saveSectionWidth( int section, int oldSize, int newSize );
153 void restoreSectionWidths();
154
155 protected:
156 void refineRule( int type );
158 void refineRuleCategoriesGui();
160 void refineRuleRangesGui();
161 void refineRuleScalesGui( const QModelIndexList &index );
162
163 void setSymbolLevels( const QList<QgsLegendSymbolItem> &levels, bool enabled ) override;
164
165 QgsRuleBasedRenderer::Rule *currentRule();
166
167 QList<QgsSymbol *> selectedSymbols() override;
168 QgsRuleBasedRenderer::RuleList selectedRules();
169 void refreshSymbolView() override;
170 void keyPressEvent( QKeyEvent *event ) override;
171
172 std::unique_ptr<QgsRuleBasedRenderer> mRenderer;
173 QgsRuleBasedRendererModel *mModel = nullptr;
174
175 QMenu *mRefineMenu = nullptr;
176 QAction *mDeleteAction = nullptr;
177
179 QMenu *mContextMenu = nullptr;
180
181 protected slots:
182 void copy() override;
183 void paste() override;
184 void pasteSymbolToSelection() override;
185
186 private slots:
187 void refineRuleCategoriesAccepted( QgsPanelWidget *panel );
188 void refineRuleRangesAccepted( QgsPanelWidget *panel );
189 void ruleWidgetPanelAccepted( QgsPanelWidget *panel );
190 void liveUpdateRuleFromPanel();
191 void showContextMenu( QPoint p );
192};
193
195
196#include <QDialog>
197
198#include "ui_qgsrendererrulepropsdialogbase.h"
199#include "qgis_gui.h"
200
206class GUI_EXPORT QgsRendererRulePropsWidget : public QgsPanelWidget, private Ui::QgsRendererRulePropsWidget
207{
208 Q_OBJECT
209
210 public:
220
225 QgsRuleBasedRenderer::Rule *rule() { return mRule; }
226
227 public slots:
228
232 void testFilter();
233
237 void buildExpression();
238
242 void apply();
243
248 void setDockMode( bool dockMode ) override;
249
250 protected:
252 QgsVectorLayer *mLayer = nullptr;
253
254 QgsSymbolSelectorWidget *mSymbolSelector = nullptr;
255 QgsSymbol *mSymbol = nullptr; // a clone of original symbol
256
258};
259
265class GUI_EXPORT QgsRendererRulePropsDialog : public QDialog
266{
267 Q_OBJECT
268
269 public:
279
280 QgsRuleBasedRenderer::Rule *rule() { return mPropsWidget->rule(); }
281
282 public slots:
283 void testFilter();
284 void buildExpression();
285 void accept() override;
286
287 private slots:
288 void showHelp();
289
290 private:
291 QgsRendererRulePropsWidget *mPropsWidget = nullptr;
292 QDialogButtonBox *buttonBox = nullptr;
293};
294
295
296#endif // QGSRULEBASEDRENDERERWIDGET_H
Abstract base class for all 2D vector feature renderers.
Base class for any widget that can be shown as an inline panel.
A dialog for editing the details of a rule based renderer rule.
QgsRuleBasedRenderer::Rule * rule()
A widget for editing the details of a rule based renderer rule.
QgsRuleBasedRenderer::Rule * mRule
QgsRuleBasedRenderer::Rule * rule()
Returns the current set rule.
Base class for renderer settings widgets.
Tree model for a rule-based renderer's rules.
QHash< QgsRuleBasedRenderer::Rule *, QgsRuleBasedRendererCount > mFeatureCountMap
A widget for configuring a QgsRuleBasedRenderer.
std::unique_ptr< QgsRuleBasedRenderer > mRenderer
QgsRuleBasedRenderer::RuleList mCopyBuffer
Represents an individual rule for a rule-based renderer.
Rule based renderer.
QList< QgsRuleBasedRenderer::Rule * > RuleList
A database of saved style entities, including symbols, color ramps, text formats and others.
Definition qgsstyle.h:88
Symbol selector widget that can be used to select and build a symbol.
Contains settings which reflect the context in which a symbol (or renderer) widget is shown,...
Abstract base class for all rendered symbols.
Definition qgssymbol.h:231
Represents a vector layer which manages a vector based dataset.
#define SIP_TRANSFERTHIS
Definition qgis_sip.h:53
#define SIP_SKIP
Definition qgis_sip.h:126
#define SIP_TRANSFER
Definition qgis_sip.h:36
#define SIP_FACTORY
Definition qgis_sip.h:76
QHash< QgsRuleBasedRenderer::Rule *, int > duplicateCountMap