QGIS API Documentation  3.12.1-BucureČ™ti (121cc00ff0)
qgsrendererwidget.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsrendererwidget.h
3  ---------------------
4  begin : November 2009
5  copyright : (C) 2009 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 #ifndef QGSRENDERERWIDGET_H
16 #define QGSRENDERERWIDGET_H
17 
18 #include <QWidget>
19 #include <QMenu>
20 #include <QStackedWidget>
21 #include "qgssymbol.h"
22 #include "qgspanelwidget.h"
23 #include "qgssymbolwidgetcontext.h"
24 #include "qgssymbollayer.h"
25 
28 class QgsVectorLayer;
29 class QgsStyle;
30 class QgsFeatureRenderer;
31 class QgsMapCanvas;
32 
44 class GUI_EXPORT QgsRendererWidget : public QgsPanelWidget
45 {
46  Q_OBJECT
47  public:
48  QgsRendererWidget( QgsVectorLayer *layer, QgsStyle *style );
49 
51  virtual QgsFeatureRenderer *renderer() = 0;
52 
54  void showSymbolLevelsDialog( QgsFeatureRenderer *r );
55 
62  virtual void setContext( const QgsSymbolWidgetContext &context );
63 
69  QgsSymbolWidgetContext context() const;
70 
75  const QgsVectorLayer *vectorLayer() const { return mLayer; }
76 
80  void applyChanges();
81 
82  void setDockMode( bool dockMode ) override;
83 
84  signals:
85 
91  void layerVariablesChanged();
92 
96  void symbolLevelsChanged();
97 
98  protected:
99  QgsVectorLayer *mLayer = nullptr;
100  QgsStyle *mStyle = nullptr;
101  QMenu *contextMenu = nullptr;
102  QAction *mCopyAction = nullptr;
103  QAction *mPasteAction = nullptr;
104 
109  QAction *mCopySymbolAction = nullptr;
110 
115  QAction *mPasteSymbolAction = nullptr;
116 
119 
123  virtual QList<QgsSymbol *> selectedSymbols() { return QList<QgsSymbol *>(); }
124  virtual void refreshSymbolView() {}
125 
131  QgsDataDefinedSizeLegendWidget *createDataDefinedSizeLegendWidget( const QgsMarkerSymbol *symbol, const QgsDataDefinedSizeLegend *ddsLegend ) SIP_FACTORY;
132 
133  protected slots:
134  void contextMenuViewCategories( QPoint p );
136  void changeSymbolColor();
138  void changeSymbolOpacity();
140  void changeSymbolUnit();
142  void changeSymbolWidth();
144  void changeSymbolSize();
146  void changeSymbolAngle();
147 
148 
149  virtual void copy() {}
150  virtual void paste() {}
151 
157  virtual void pasteSymbolToSelection();
158 
159  private slots:
160 
161  void copySymbol();
162 
163  private:
164 
169  virtual void apply() SIP_FORCE;
170 
171 
172 };
173 
174 
176 
177 #include <QObject>
178 
179 class QMenu;
180 class QgsField;
181 class QgsFields;
182 
183 #include "ui_widget_set_dd_value.h"
184 #include "qgis_gui.h"
185 
186 
191 class GUI_EXPORT QgsDataDefinedValueDialog : public QDialog, public Ui::QgsDataDefinedValueBaseDialog, private QgsExpressionContextGenerator
192 {
193 
194  Q_OBJECT
195 
196  public:
197 
204  QgsDataDefinedValueDialog( const QList<QgsSymbol *> &symbolList, QgsVectorLayer *layer, const QString &label );
205 
212  void setContext( const QgsSymbolWidgetContext &context );
213 
219  QgsSymbolWidgetContext context() const;
220 
225  const QgsVectorLayer *vectorLayer() const { return mLayer; }
226 
227  public slots:
228  void dataDefinedChanged();
229 
230  protected:
231 
237  void init( int propertyKey ); // needed in children ctor to call virtual
238 
239  private:
240  QgsProperty symbolDataDefined() const SIP_FORCE;
241 
242  virtual QgsProperty symbolDataDefined( const QgsSymbol * ) const = 0 SIP_FORCE;
243  virtual double value( const QgsSymbol * ) const = 0 SIP_FORCE;
244  virtual void setDataDefined( QgsSymbol *symbol, const QgsProperty &dd ) = 0 SIP_FORCE;
245 
246  QList<QgsSymbol *> mSymbolList;
247  QgsVectorLayer *mLayer = nullptr;
248 
249  QgsSymbolWidgetContext mContext;
250 
252 };
253 
259 {
260  Q_OBJECT
261  public:
262  QgsDataDefinedSizeDialog( const QList<QgsSymbol *> &symbolList, QgsVectorLayer *layer )
263  : QgsDataDefinedValueDialog( symbolList, layer, tr( "Size" ) )
264  {
266  if ( !symbolList.isEmpty() && symbolList.at( 0 ) && vectorLayer() )
267  {
268  mAssistantSymbol.reset( static_cast<const QgsMarkerSymbol *>( symbolList.at( 0 ) )->clone() );
269  mDDBtn->setSymbol( mAssistantSymbol );
270  }
271  }
272 
273  protected:
274  QgsProperty symbolDataDefined( const QgsSymbol *symbol ) const override;
275 
276  double value( const QgsSymbol *symbol ) const override { return static_cast<const QgsMarkerSymbol *>( symbol )->size(); }
277 
278  void setDataDefined( QgsSymbol *symbol, const QgsProperty &dd ) override;
279 
280  private:
281 
282  std::shared_ptr< QgsMarkerSymbol > mAssistantSymbol;
283 };
284 
290 {
291  Q_OBJECT
292  public:
293  QgsDataDefinedRotationDialog( const QList<QgsSymbol *> &symbolList, QgsVectorLayer *layer )
294  : QgsDataDefinedValueDialog( symbolList, layer, tr( "Rotation" ) )
295  {
297  }
298 
299  protected:
300  QgsProperty symbolDataDefined( const QgsSymbol *symbol ) const override;
301 
302  double value( const QgsSymbol *symbol ) const override { return static_cast<const QgsMarkerSymbol *>( symbol )->angle(); }
303 
304  void setDataDefined( QgsSymbol *symbol, const QgsProperty &dd ) override;
305 };
306 
312 {
313  Q_OBJECT
314  public:
315  QgsDataDefinedWidthDialog( const QList<QgsSymbol *> &symbolList, QgsVectorLayer *layer )
316  : QgsDataDefinedValueDialog( symbolList, layer, tr( "Width" ) )
317  {
319  }
320 
321  protected:
322  QgsProperty symbolDataDefined( const QgsSymbol *symbol ) const override;
323 
324  double value( const QgsSymbol *symbol ) const override { return static_cast<const QgsLineSymbol *>( symbol )->width(); }
325 
326  void setDataDefined( QgsSymbol *symbol, const QgsProperty &dd ) override;
327 };
328 
329 
330 
331 #endif // QGSRENDERERWIDGET_H
double value(const QgsSymbol *symbol) const override
Abstract base class for all rendered symbols.
Definition: qgssymbol.h:62
virtual void refreshSymbolView()
Base class for renderer settings widgets.
double value(const QgsSymbol *symbol) const override
QgsDataDefinedSizeLegendWidget(const QgsDataDefinedSizeLegend *ddsLegend, const QgsProperty &ddSize, QgsMarkerSymbol *overrideSymbol, QgsMapCanvas *canvas=nullptr, QWidget *parent=nullptr)
Creates the dialog and initializes the content to what is passed in the legend configuration (may be ...
Container of fields for a vector layer.
Definition: qgsfields.h:42
Base class for any widget that can be shown as a inline panel.
Map canvas is a class for displaying all GIS data types on a canvas.
Definition: qgsmapcanvas.h:75
double ANALYSIS_EXPORT angle(QgsPoint *p1, QgsPoint *p2, QgsPoint *p3, QgsPoint *p4)
Calculates the angle between two segments (in 2 dimension, z-values are ignored)
Definition: MathUtils.cpp:786
A marker symbol type, for rendering Point and MultiPoint geometries.
Definition: qgssymbol.h:895
A line symbol type, for rendering LineString and MultiLineString geometries.
Definition: qgssymbol.h:1095
virtual void setDockMode(bool dockMode)
Set the widget in dock mode which tells the widget to emit panel widgets and not open dialogs...
Utility classes for "en masse" size definition.
virtual QgsExpressionContext createExpressionContext() const =0
This method needs to be reimplemented in all classes which implement this interface and return an exp...
Contains settings which reflect the context in which a symbol (or renderer) widget is shown...
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
const QgsVectorLayer * vectorLayer() const
Returns the vector layer associated with the widget.
#define SIP_FORCE
Definition: qgis_sip.h:131
#define SIP_FACTORY
Definition: qgis_sip.h:76
Encapsulate a field in an attribute table or data source.
Definition: qgsfield.h:49
A store for object properties.
Definition: qgsproperty.h:229
virtual void paste()
virtual void copy()
Abstract interface for generating an expression context.
double value(const QgsSymbol *symbol) const override
const QgsVectorLayer * vectorLayer() const
Returns the vector layer associated with the widget.
QgsSymbolWidgetContext mContext
Context in which widget is shown.
virtual QList< QgsSymbol * > selectedSymbols()
Subclasses may provide the capability of changing multiple symbols at once by implementing the follow...
void init(int propertyKey)
Should be called in the constructor of child classes.
QgsDataDefinedRotationDialog(const QList< QgsSymbol *> &symbolList, QgsVectorLayer *layer)
QgsDataDefinedSizeDialog(const QList< QgsSymbol *> &symbolList, QgsVectorLayer *layer)
QgsDataDefinedWidthDialog(const QList< QgsSymbol *> &symbolList, QgsVectorLayer *layer)
Represents a vector layer which manages a vector based data sets.
Object that keeps configuration of appearance of marker symbol&#39;s data-defined size in legend...