QGIS API Documentation 3.27.0-Master (75dc696944)
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"
29
30class QgsVectorLayer;
31class QgsMapCanvas;
32class QgsSymbol;
33
50class 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:90
Definition for a property.
Definition: qgsproperty.h:47
DataType
Valid data types required by property.
Definition: qgsproperty.h:85
@ DataTypeString
Property requires a string value.
Definition: qgsproperty.h:92
A button for controlling property overrides which may apply to a widget.
const QgsVectorLayer * vectorLayer() const
Returns the vector layer associated with the button.
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 ...
QString usageInfo() const
Returns usage information for the property.
A store for object properties.
Definition: qgsproperty.h:231
Abstract base class for all rendered symbols.
Definition: qgssymbol.h:93
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.