QGIS API Documentation  2.4.0-Chugiak
 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 
34 class GUI_EXPORT QgsDataDefinedButton: public QToolButton
35 {
36  Q_OBJECT
37  Q_PROPERTY( QString usageInfo READ usageInfo WRITE setUsageInfo )
38 
39  public:
40  enum DataType
41  {
42  AnyType = 0,
43  String = 1,
44  Int = 2,
45  Double = 4
46  };
47  Q_DECLARE_FLAGS( DataTypes, DataType )
48 
49 
58  QgsDataDefinedButton( QWidget* parent = 0,
59  const QgsVectorLayer* vl = 0,
60  const QgsDataDefined* datadefined = 0,
61  DataTypes datatypes = AnyType,
62  QString description = QString( "" ) );
64 
73  void init( const QgsVectorLayer* vl,
74  const QgsDataDefined* datadefined = 0,
75  DataTypes datatypes = AnyType,
76  QString description = QString( "" ) );
77 
78  QMap< QString, QString > definedProperty() const { return mProperty; }
79 
83  bool isActive() { return mProperty.value( "active" ).toInt(); }
84 
88  bool useExpression() { return mProperty.value( "useexpr" ).toInt(); }
89 
93  QString getExpression() const { return mProperty.value( "expression" ); }
94 
98  QString getField() const { return mProperty.value( "field" ); }
99 
104  QString currentDefinition() const { return mCurrentDefinition; }
105 
110  const DataTypes& validDataTypes() const { return mDataTypes; }
111 
115  QString fullDescription() const { return mFullDescription; }
116 
120  QString usageInfo() const { return mUsageInfo; }
121 
125  void setUsageInfo( const QString& info ) { mUsageInfo = info; updateGui(); }
126 
130  void registerEnabledWidgets( QList<QWidget*> wdgts );
131 
135  void registerEnabledWidget( QWidget* wdgt );
136 
142  QList<QWidget*> registeredEnabledWidgets();
143 
147  void clearEnabledWidgets() { mEnabledWidgets.clear(); }
148 
152  void registerCheckedWidgets( QList<QWidget*> wdgts );
153 
157  void registerCheckedWidget( QWidget* wdgt );
158 
164  QList<QWidget*> registeredCheckedWidgets();
165 
169  void clearCheckedWidgets() { mCheckedWidgets.clear(); }
170 
174  static QString trString();
175  static QString boolDesc();
176  static QString anyStringDesc();
177  static QString intDesc();
178  static QString intPosDesc();
179  static QString intPosOneDesc();
180  static QString doubleDesc();
181  static QString doublePosDesc();
182  static QString doubleXYDesc();
183  static QString double180RotDesc();
184  static QString intTranspDesc();
185  static QString unitsMmMuDesc();
186  static QString unitsMmMuPercentDesc();
187  static QString colorNoAlphaDesc();
188  static QString colorAlphaDesc();
189  static QString textHorzAlignDesc();
190  static QString textVertAlignDesc();
191  static QString penJoinStyleDesc();
192  static QString blendModesDesc();
193  static QString svgPathDesc();
194 
195  public slots:
199  void setActive( bool active );
200 
204  void disableEnabledWidgets( bool disable );
205 
209  void checkCheckedWidgets( bool check );
210 
211  signals:
216  void dataDefinedChanged( const QString& definition );
217 
222  void dataDefinedActivated( bool active );
223 
224  protected:
225  void mouseReleaseEvent( QMouseEvent *event );
226 
230  void setUseExpression( bool use ) { mProperty.insert( "useexpr", use ? "1" : "0" ); }
231 
235  void setExpression( QString exp ) { mProperty.insert( "expression", exp ); }
236 
240  void setField( QString field ) { mProperty.insert( "field", field ); }
241 
242  private:
243  void showDescriptionDialog();
244  void showExpressionDialog();
245  void updateGui();
246 
249  QStringList mFieldNameList;
250  QStringList mFieldTypeList;
251  QMap< QString, QString > mProperty;
252  QList< QPointer<QWidget> > mEnabledWidgets;
253  QList< QPointer<QWidget> > mCheckedWidgets;
254 
255  QMenu* mDefineMenu;
257  QMenu* mFieldsMenu;
258 
259  QAction* mActionActive;
264  QAction* mActionCopyExpr;
266 
267  DataTypes mDataTypes;
271  QString mUsageInfo;
273 
274  static QIcon mIconDataDefine;
275  static QIcon mIconDataDefineOn;
276  static QIcon mIconDataDefineError;
280 
281  private slots:
282  void aboutToShowMenu();
283  void menuActionTriggered( QAction* action );
284 };
285 
286 Q_DECLARE_OPERATORS_FOR_FLAGS( QgsDataDefinedButton::DataTypes )
287 
288 
289 #endif // QGSDATADEFINEDBUTTON_H
static QIcon mIconDataDefineExpressionError
void clearEnabledWidgets()
Clears list of sibling widgets.
void setExpression(QString exp)
Set the current defined expression.
void setField(QString field)
Set the current defined field.
bool isActive()
Whether the current data definition or expression is to be used.
A container class for data source field mapping or expression.
void clearCheckedWidgets()
Clears list of checkable sibling widgets.
Container of fields for a vector layer.
Definition: qgsfield.h:161
bool useExpression()
Whether the current expression is to be used instead of field mapping.
QString fullDescription() const
The full definition description and current definition (internally generated on a contextual basis) ...
static QIcon mIconDataDefineExpression
QList< QPointer< QWidget > > mCheckedWidgets
QString getExpression() const
The current defined expression.
A button for defining data source field mappings or expressions.
static QIcon mIconDataDefineExpressionOn
const QgsVectorLayer * mVectorLayer
QString getField() const
The current defined field.
void setUseExpression(bool use)
Set whether the current expression is to be used instead of field mapping.
QString usageInfo() const
The usage information about this data definition.
const DataTypes & validDataTypes() const
The valid data types that will work for the definition (QVariant-coercible to expected type) Compared...
void setUsageInfo(const QString &info)
Set the usage information about this data definition.
QList< QPointer< QWidget > > mEnabledWidgets
QString currentDefinition() const
The current definition.
Represents a vector layer which manages a vector based data sets.
QMap< QString, QString > mProperty