QGIS API Documentation  3.21.0-Master (5b68dc587e)
qgspropertyoverridebutton.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgspropertyoverridebutton.h
3  ---------------------------
4  Date : January 2017
5  Copyright : (C) 2017 by Nyall Dawson
6  Email : nyall dot dawson 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 QGSPROPERTYOVERRIDEBUTTON_H
16 #define QGSPROPERTYOVERRIDEBUTTON_H
17 
18 #include "qgis_gui.h"
19 #include "qgis_sip.h"
20 #include <QDialog>
21 #include <QFlags>
22 #include <QMap>
23 #include <QPointer>
24 #include <QToolButton>
25 #include "qgsproperty.h"
26 #include "qgspropertycollection.h"
27 #include "qgsexpressioncontext.h"
29 
30 class QgsVectorLayer;
31 class QgsMapCanvas;
32 class QgsSymbol;
33 
50 class GUI_EXPORT QgsPropertyOverrideButton: public QToolButton
51 {
52  Q_OBJECT
53  Q_PROPERTY( QString usageInfo READ usageInfo WRITE setUsageInfo )
54  Q_PROPERTY( bool active READ isActive WRITE setActive )
55 
56  public:
57 
63  QgsPropertyOverrideButton( QWidget *parent SIP_TRANSFERTHIS = nullptr,
64  const QgsVectorLayer *layer = nullptr );
65 
74  void init( int propertyKey,
75  const QgsProperty &property,
76  const QgsPropertiesDefinition &definitions,
77  const QgsVectorLayer *layer = nullptr,
78  bool auxiliaryStorageEnabled = false );
79 
88  void init( int propertyKey,
89  const QgsProperty &property,
90  const QgsPropertyDefinition &definition,
91  const QgsVectorLayer *layer = nullptr,
92  bool auxiliaryStorageEnabled = false );
93 
102  void init( int propertyKey,
103  const QgsAbstractPropertyCollection &collection,
104  const QgsPropertiesDefinition &definitions,
105  const QgsVectorLayer *layer = nullptr,
106  bool auxiliaryStorageEnabled = false );
107 
113  QgsProperty toProperty() const;
114 
118  void setToProperty( const QgsProperty &property );
119 
123  int propertyKey() const { return mPropertyKey; }
124 
128  bool isActive() const { return mProperty && mProperty.isActive(); }
129 
135  QgsPropertyDefinition::DataType validDataType() const { return mDataTypes; }
136 
141  QString fullDescription() const { return mFullDescription; }
142 
147  QString usageInfo() const { return mUsageInfo; }
148 
153  void setUsageInfo( const QString &info ) { mUsageInfo = info; updateGui(); }
154 
160  void setVectorLayer( const QgsVectorLayer *layer );
161 
167  const QgsVectorLayer *vectorLayer() const { return mVectorLayer; }
168 
174  void registerCheckedWidget( QWidget *widget, bool natural = true );
175 
181  void registerEnabledWidget( QWidget *widget, bool natural = true );
182 
188  void registerVisibleWidget( QWidget *widget, bool natural = true );
189 
194  void registerExpressionWidget( QWidget *widget );
195 
200  void registerExpressionContextGenerator( QgsExpressionContextGenerator *generator );
201 
211  void registerLinkedWidget( QWidget *widget );
212 
218  void updateFieldLists();
219 
225  void setSymbol( std::shared_ptr< QgsSymbol > symbol ) { mSymbol = symbol; } SIP_SKIP
226 
227  public slots:
228 
232  void setActive( bool active );
233 
234 
236 
237  // exposed to Python for testing only
238  void aboutToShowMenu();
239  void menuActionTriggered( QAction *action );
240 
242 
243  signals:
244 
246  void changed();
247 
249  void activated( bool isActive );
250 
253 
254  protected:
255  void mouseReleaseEvent( QMouseEvent *event ) override;
256 
257  private:
258 
259  void showDescriptionDialog();
260  void showExpressionDialog();
261  void showAssistant();
262  void updateGui();
263 
268  void setActivePrivate( bool active );
269 
270 
271  int mPropertyKey = -1;
272 
273  const QgsVectorLayer *mVectorLayer = nullptr;
274 
275  QStringList mFieldNameList;
276  QStringList mFieldDisplayNameList;
277  QList< QIcon > mFieldIcons;
278 
279  QString mExpressionString;
280  QString mFieldName;
281 
282  QMenu *mDefineMenu = nullptr;
283  QAction *mActionDataTypes = nullptr;
284  QMenu *mFieldsMenu = nullptr;
285  QMenu *mVariablesMenu = nullptr;
286  QAction *mActionVariables = nullptr;
287  QMenu *mColorsMenu = nullptr;
288  QAction *mActionColors = nullptr;
289 
290  QAction *mActionActive = nullptr;
291  QAction *mActionDescription = nullptr;
292  QAction *mActionExpDialog = nullptr;
293  QAction *mActionExpression = nullptr;
294  QAction *mActionPasteExpr = nullptr;
295  QAction *mActionCopyExpr = nullptr;
296  QAction *mActionClearExpr = nullptr;
297  QAction *mActionAssistant = nullptr;
298  QAction *mActionCreateAuxiliaryField = nullptr;
299 
300  QgsPropertyDefinition mDefinition;
301 
303  QString mDataTypesString;
304  QString mInputDescription;
305  QString mFullDescription;
306  QString mUsageInfo;
307 
308  QgsExpressionContextGenerator *mExpressionContextGenerator = nullptr;
309 
310  enum SiblingType
311  {
312  SiblingCheckState,
313  SiblingEnableState,
314  SiblingVisibility,
315  SiblingExpressionText,
316  SiblingLinkedWidget,
317  };
318  struct SiblingWidget
319  {
320  SiblingWidget( const QPointer<QWidget> &widgetPointer, SiblingType siblingType, bool natural = true )
321  : mWidgetPointer( widgetPointer )
322  , mSiblingType( siblingType )
323  , mNatural( natural )
324  {}
325  QPointer<QWidget> mWidgetPointer;
326  SiblingType mSiblingType;
327  bool mNatural;
328  };
329  QList< SiblingWidget > mSiblingWidgets;
330 
332  QgsProperty mProperty;
333 
334  bool mAuxiliaryStorageEnabled = false;
335 
336  std::shared_ptr< QgsSymbol > mSymbol;
337 
338  private slots:
339 
340  void showHelp();
341  void updateSiblingWidgets( bool state );
342 };
343 
344 #endif // QGSPROPERTYOVERRIDEBUTTON_H
Abstract base class for QgsPropertyCollection like objects.
Abstract interface for generating an expression context.
Map canvas is a class for displaying all GIS data types on a canvas.
Definition: qgsmapcanvas.h:88
Definition for a property.
Definition: qgsproperty.h:48
DataType
Valid data types required by property.
Definition: qgsproperty.h:86
@ DataTypeString
Property requires a string value.
Definition: qgsproperty.h:93
A button for controlling property overrides which may apply to a widget.
void setUsageInfo(const QString &info)
Set the usage information for the property.
bool isActive() const
Returns true if the button has an active property.
void changed()
Emitted when property definition changes.
void activated(bool isActive)
Emitted when the activated status of the widget changes.
void setSymbol(std::shared_ptr< QgsSymbol > symbol)
Sets a symbol which can be used for previews inside the widget or in any dialog created by the widget...
int propertyKey() const
Returns the property key linked to the button.
QgsPropertyDefinition::DataType validDataType() const
Returns the data type which the widget will accept.
void createAuxiliaryField()
Emitted when creating a new auxiliary field.
QString fullDescription() const
Returns the full definition description and current definition (internally generated on a contextual ...
const QgsVectorLayer * vectorLayer() const
Returns the vector layer associated with the button.
QString usageInfo() const
Returns usage information for the property.
A store for object properties.
Definition: qgsproperty.h:232
Abstract base class for all rendered symbols.
Definition: qgssymbol.h:38
Represents a vector layer which manages a vector based data sets.
#define SIP_TRANSFERTHIS
Definition: qgis_sip.h:53
#define SIP_SKIP
Definition: qgis_sip.h:126
QMap< int, QgsPropertyDefinition > QgsPropertiesDefinition
Definition of available properties.