QGIS API Documentation  2.12.0-Lyon
qgsrendererv2widget.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsrendererv2widget.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 QGSRENDERERV2WIDGET_H
16 #define QGSRENDERERV2WIDGET_H
17 
18 #include <QWidget>
19 #include <QMenu>
20 #include "qgssymbolv2.h"
21 #include "qgsdatadefined.h"
22 
23 class QgsVectorLayer;
24 class QgsStyleV2;
27 class QgsMapCanvas;
28 
39 class GUI_EXPORT QgsRendererV2Widget : public QWidget
40 {
41  Q_OBJECT
42  public:
44 
45  virtual ~QgsRendererV2Widget() {}
46 
48  virtual QgsFeatureRendererV2* renderer() = 0;
49 
51  void showSymbolLevelsDialog( QgsFeatureRendererV2* r );
52 
59  virtual void setMapCanvas( QgsMapCanvas* canvas );
60 
65  const QgsMapCanvas* mapCanvas() const;
66 
70  const QgsVectorLayer* vectorLayer() const { return mLayer; }
71 
72  protected:
79 
83  virtual void refreshSymbolView() {}
84 
85  protected slots:
86  void contextMenuViewCategories( const QPoint& p );
88  void changeSymbolColor();
90  void changeSymbolTransparency();
92  void changeSymbolUnit();
94  void changeSymbolWidth();
96  void changeSymbolSize();
98  void changeSymbolAngle();
99 
100  virtual void copy() {}
101  virtual void paste() {}
102 
103 };
104 
105 
107 
108 #include <QObject>
109 
110 class QMenu;
111 class QgsField;
112 class QgsFields;
113 
114 
120 {
121  Q_OBJECT
122 
123  public:
124 
125  Q_DECL_DEPRECATED QgsRendererV2DataDefinedMenus( QMenu* menu, QgsVectorLayer* layer, const QString& rotationField, const QString& sizeScaleField, QgsSymbolV2::ScaleMethod scaleMethod );
127 
128  void populateMenu( QMenu* menu, const QString& fieldName, QActionGroup *actionGroup );
129 #if 0
130  void updateMenu( QActionGroup* actionGroup, QString fieldName );
131 #endif
132  public slots:
133 
134  void rotationFieldSelected( QAction *a );
135  void sizeScaleFieldSelected( QAction *a );
136  void scaleMethodSelected( QAction *a );
137 
138  signals:
139 
140  void rotationFieldChanged( QString fldName );
141  void sizeScaleFieldChanged( QString fldName );
142  void scaleMethodChanged( QgsSymbolV2::ScaleMethod scaleMethod );
143 
144  protected:
151 };
152 
154 
155 #include "ui_widget_set_dd_value.h"
156 #include "qgssizescalewidget.h"
157 
161 class GUI_EXPORT QgsDataDefinedValueDialog : public QDialog, public Ui::QgsDataDefinedValueDialog
162 {
163  Q_OBJECT
164 
165  public:
171  QgsDataDefinedValueDialog( const QList<QgsSymbolV2*>& symbolList, QgsVectorLayer * layer, const QString & label );
173 
180  virtual void setMapCanvas( QgsMapCanvas* canvas );
181 
186  const QgsMapCanvas* mapCanvas() const;
187 
191  const QgsVectorLayer* vectorLayer() const { return mLayer; }
192 
193  public slots:
194  void dataDefinedChanged();
195 
196  protected:
197  QgsDataDefined symbolDataDefined() const;
198  void init( const QString & description ); // needed in children ctor to call virtual
199 
200  virtual QgsDataDefined symbolDataDefined( const QgsSymbolV2 * ) const = 0;
201  virtual double value( const QgsSymbolV2 * ) const = 0;
202  virtual void setDataDefined( QgsSymbolV2* symbol, const QgsDataDefined& dd ) = 0;
203 
207 };
208 
210 {
211  Q_OBJECT
212  public:
214  : QgsDataDefinedValueDialog( symbolList, layer, tr( "Size" ) )
215  {
216  init( tr( "Symbol size" ) );
217  if ( symbolList.length() && mLayer )
218  mDDBtn->setAssistant( tr( "Size Assistant..." ), new QgsSizeScaleWidget( mLayer, static_cast<const QgsMarkerSymbolV2*>( symbolList[0] ) ) );
219  }
220 
221  protected:
222  QgsDataDefined symbolDataDefined( const QgsSymbolV2 * symbol ) const override;
223 
224  double value( const QgsSymbolV2 * symbol ) const override { return static_cast<const QgsMarkerSymbolV2*>( symbol )->size(); }
225 
226  void setDataDefined( QgsSymbolV2* symbol, const QgsDataDefined& dd ) override;
227 };
228 
230 {
231  Q_OBJECT
232  public:
234  : QgsDataDefinedValueDialog( symbolList, layer, tr( "Rotation" ) )
235  {
236  init( tr( "Symbol rotation" ) );
237  }
238 
239  protected:
240  QgsDataDefined symbolDataDefined( const QgsSymbolV2 * symbol ) const override;
241 
242  double value( const QgsSymbolV2 * symbol ) const override { return static_cast<const QgsMarkerSymbolV2*>( symbol )->angle(); }
243 
244  void setDataDefined( QgsSymbolV2* symbol, const QgsDataDefined& dd ) override;
245 };
246 
247 
249 {
250  Q_OBJECT
251  public:
253  : QgsDataDefinedValueDialog( symbolList, layer, tr( "Width" ) )
254  {
255  init( tr( "Symbol width" ) );
256  }
257 
258  protected:
259  QgsDataDefined symbolDataDefined( const QgsSymbolV2 * symbol ) const override;
260 
261  double value( const QgsSymbolV2 * symbol ) const override { return static_cast<const QgsLineSymbolV2*>( symbol )->width(); }
262 
263  void setDataDefined( QgsSymbolV2* symbol, const QgsDataDefined& dd ) override;
264 };
265 
266 
267 
268 #endif // QGSRENDERERV2WIDGET_H
double value(const QgsSymbolV2 *symbol) const override
virtual QList< QgsSymbolV2 * > selectedSymbols()
Subclasses may provide the capability of changing multiple symbols at once by implementing the follow...
QgsDataDefinedRotationDialog(const QList< QgsSymbolV2 * > &symbolList, QgsVectorLayer *layer)
A container class for data source field mapping or expression.
void init(const QString &description)
int length() const
QgsMapCanvas * mMapCanvas
Q_DECL_DEPRECATED QgsRendererV2DataDefinedMenus(QMenu *menu, QgsVectorLayer *layer, const QString &rotationField, const QString &sizeScaleField, QgsSymbolV2::ScaleMethod scaleMethod)
Container of fields for a vector layer.
Definition: qgsfield.h:177
QgsDataDefinedSizeDialog(const QList< QgsSymbolV2 * > &symbolList, QgsVectorLayer *layer)
void populateMenu(QMenu *menu, const QString &fieldName, QActionGroup *actionGroup)
QString tr(const char *sourceText, const char *disambiguation, int n)
Map canvas is a class for displaying all GIS data types on a canvas.
Definition: qgsmapcanvas.h:107
QgsDataDefinedWidthDialog(const QList< QgsSymbolV2 * > &symbolList, QgsVectorLayer *layer)
double value(const QgsSymbolV2 *symbol) const override
QgsDataDefined symbolDataDefined() const
int width() const
QSize size() const
Utility class for providing GUI for data-defined rendering.
Utility classes for "en masse" size definition.
QgsVectorLayer * mLayer
const QgsVectorLayer * vectorLayer() const
Returns the vector layer associated with the widget.
void rotationFieldChanged(QString fldName)
double value(const QgsSymbolV2 *symbol) const override
Encapsulate a field in an attribute table or data source.
Definition: qgsfield.h:40
void scaleMethodChanged(QgsSymbolV2::ScaleMethod scaleMethod)
double ANALYSIS_EXPORT angle(Point3D *p1, Point3D *p2, Point3D *p3, Point3D *p4)
Calculates the angle between two segments (in 2 dimension, z-values are ignored)
QList< QgsSymbolV2 * > mSymbolList
const QgsVectorLayer * vectorLayer() const
Returns the vector layer associated with the widget.
ScaleMethod
Scale method.
Definition: qgssymbolv2.h:78
virtual void setDataDefined(QgsSymbolV2 *symbol, const QgsDataDefined &dd)=0
void sizeScaleFieldChanged(QString fldName)
Base class for renderer settings widgets.
virtual void refreshSymbolView()
Represents a vector layer which manages a vector based data sets.
#define tr(sourceText)