QGIS API Documentation  2.6.0-Brighton
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
qgsdatadefinedbutton.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsdatadefinedbutton.h - Data defined selector button
3  --------------------------------------
4  Date : 27-April-2013
5  Copyright : (C) 2013 by Larry Shaffer
6  Email : larrys at dakcarto 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 QGSDATADEFINEDBUTTON_H
16 #define QGSDATADEFINEDBUTTON_H
17 
18 #include <qgsfield.h>
19 #include <qgsdatadefined.h>
20 
21 #include <QFlags>
22 #include <QMap>
23 #include <QPointer>
24 #include <QToolButton>
25 
26 class QgsVectorLayer;
27 
33 class GUI_EXPORT QgsDataDefinedButton: public QToolButton
34 {
35  Q_OBJECT
36  Q_PROPERTY( QString usageInfo READ usageInfo WRITE setUsageInfo )
37 
38  public:
39  enum DataType
40  {
41  String = 1,
42  Int = 2,
43  Double = 4,
44  AnyType = String | Int | Double
45  };
46  Q_DECLARE_FLAGS( DataTypes, DataType )
47 
48 
57  QgsDataDefinedButton( QWidget* parent = 0,
58  const QgsVectorLayer* vl = 0,
59  const QgsDataDefined* datadefined = 0,
60  DataTypes datatypes = AnyType,
61  QString description = QString( "" ) );
63 
72  void init( const QgsVectorLayer* vl,
73  const QgsDataDefined* datadefined = 0,
74  DataTypes datatypes = AnyType,
75  QString description = QString( "" ) );
76 
77  QMap< QString, QString > definedProperty() const { return mProperty; }
78 
82  bool isActive() { return mProperty.value( "active" ).toInt(); }
83 
87  bool useExpression() { return mProperty.value( "useexpr" ).toInt(); }
88 
92  QString getExpression() const { return mProperty.value( "expression" ); }
93 
97  QString getField() const { return mProperty.value( "field" ); }
98 
103  QString currentDefinition() const { return mCurrentDefinition; }
104 
109  const DataTypes& validDataTypes() const { return mDataTypes; }
110 
114  QString fullDescription() const { return mFullDescription; }
115 
119  QString usageInfo() const { return mUsageInfo; }
120 
124  void setUsageInfo( const QString& info ) { mUsageInfo = info; updateGui(); }
125 
129  void registerEnabledWidgets( QList<QWidget*> wdgts );
130 
134  void registerEnabledWidget( QWidget* wdgt );
135 
141  QList<QWidget*> registeredEnabledWidgets();
142 
146  void clearEnabledWidgets() { mEnabledWidgets.clear(); }
147 
151  void registerCheckedWidgets( QList<QWidget*> wdgts );
152 
156  void registerCheckedWidget( QWidget* wdgt );
157 
163  QList<QWidget*> registeredCheckedWidgets();
164 
168  void clearCheckedWidgets() { mCheckedWidgets.clear(); }
169 
173  static QString trString();
174  static QString boolDesc();
175  static QString anyStringDesc();
176  static QString intDesc();
177  static QString intPosDesc();
178  static QString intPosOneDesc();
179  static QString doubleDesc();
180  static QString doublePosDesc();
181  static QString doubleXYDesc();
182  static QString double180RotDesc();
183  static QString intTranspDesc();
184  static QString unitsMmMuDesc();
185  static QString unitsMmMuPercentDesc();
186  static QString colorNoAlphaDesc();
187  static QString colorAlphaDesc();
188  static QString textHorzAlignDesc();
189  static QString textVertAlignDesc();
190  static QString penJoinStyleDesc();
191  static QString blendModesDesc();
192  static QString svgPathDesc();
193  static QString paperSizeDesc();
194  static QString paperOrientationDesc();
195 
196  public slots:
200  void setActive( bool active );
201 
205  void disableEnabledWidgets( bool disable );
206 
210  void checkCheckedWidgets( bool check );
211 
212  signals:
217  void dataDefinedChanged( const QString& definition );
218 
223  void dataDefinedActivated( bool active );
224 
225  protected:
226  void mouseReleaseEvent( QMouseEvent *event );
227 
231  void setUseExpression( bool use ) { mProperty.insert( "useexpr", use ? "1" : "0" ); }
232 
236  void setExpression( QString exp ) { mProperty.insert( "expression", exp ); }
237 
241  void setField( QString field ) { mProperty.insert( "field", field ); }
242 
243  private:
244  void showDescriptionDialog();
245  void showExpressionDialog();
246  void updateGui();
247 
248  const QgsVectorLayer* mVectorLayer;
249  QgsFields mFields;
250  QStringList mFieldNameList;
251  QStringList mFieldTypeList;
252  QMap< QString, QString > mProperty;
253  QList< QPointer<QWidget> > mEnabledWidgets;
254  QList< QPointer<QWidget> > mCheckedWidgets;
255 
256  QMenu* mDefineMenu;
257  QAction* mActionDataTypes;
258  QMenu* mFieldsMenu;
259 
260  QAction* mActionActive;
261  QAction* mActionDescription;
262  QAction* mActionExpDialog;
263  QAction* mActionExpression;
264  QAction* mActionPasteExpr;
265  QAction* mActionCopyExpr;
266  QAction* mActionClearExpr;
267 
268  DataTypes mDataTypes;
269  QString mDataTypesString;
270  QString mInputDescription;
271  QString mFullDescription;
272  QString mUsageInfo;
273  QString mCurrentDefinition;
274 
275  static QIcon mIconDataDefine;
276  static QIcon mIconDataDefineOn;
277  static QIcon mIconDataDefineError;
278  static QIcon mIconDataDefineExpression;
279  static QIcon mIconDataDefineExpressionOn;
280  static QIcon mIconDataDefineExpressionError;
281 
282  private slots:
283  void aboutToShowMenu();
284  void menuActionTriggered( QAction* action );
285 };
286 
287 Q_DECLARE_OPERATORS_FOR_FLAGS( QgsDataDefinedButton::DataTypes )
288 
289 
290 #endif // QGSDATADEFINEDBUTTON_H