QGIS API Documentation 3.40.0-Bratislava (b56115d8743)
Loading...
Searching...
No Matches
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"
28
29class QgsVectorLayer;
30class QgsMapCanvas;
31class QgsSymbol;
32
48class GUI_EXPORT QgsPropertyOverrideButton: public QToolButton
49{
50 Q_OBJECT
51 Q_PROPERTY( QString usageInfo READ usageInfo WRITE setUsageInfo )
52 Q_PROPERTY( bool active READ isActive WRITE setActive )
53
54 public:
55
61 QgsPropertyOverrideButton( QWidget *parent SIP_TRANSFERTHIS = nullptr,
62 const QgsVectorLayer *layer = nullptr );
63
72 void init( int propertyKey,
73 const QgsProperty &property,
74 const QgsPropertiesDefinition &definitions,
75 const QgsVectorLayer *layer = nullptr,
76 bool auxiliaryStorageEnabled = false );
77
86 void init( int propertyKey,
87 const QgsProperty &property,
88 const QgsPropertyDefinition &definition,
89 const QgsVectorLayer *layer = nullptr,
90 bool auxiliaryStorageEnabled = false );
91
100 void init( int propertyKey,
101 const QgsAbstractPropertyCollection &collection,
102 const QgsPropertiesDefinition &definitions,
103 const QgsVectorLayer *layer = nullptr,
104 bool auxiliaryStorageEnabled = false );
105
111 QgsProperty toProperty() const;
112
116 void setToProperty( const QgsProperty &property );
117
121 int propertyKey() const { return mPropertyKey; }
122
126 bool isActive() const { return mProperty && mProperty.isActive(); }
127
133 QgsPropertyDefinition::DataType validDataType() const { return mDataTypes; }
134
139 QString fullDescription() const { return mFullDescription; }
140
145 QString usageInfo() const { return mUsageInfo; }
146
151 void setUsageInfo( const QString &info ) { mUsageInfo = info; updateGui(); }
152
158 void setVectorLayer( const QgsVectorLayer *layer );
159
165 const QgsVectorLayer *vectorLayer() const { return mVectorLayer; }
166
172 void registerCheckedWidget( QWidget *widget, bool natural = true );
173
179 void registerEnabledWidget( QWidget *widget, bool natural = true );
180
186 void registerVisibleWidget( QWidget *widget, bool natural = true );
187
192 void registerExpressionWidget( QWidget *widget );
193
198 void registerExpressionContextGenerator( QgsExpressionContextGenerator *generator );
199
209 void registerLinkedWidget( QWidget *widget );
210
215 void updateFieldLists();
216
222 void setSymbol( std::shared_ptr< QgsSymbol > symbol ) { mSymbol = symbol; } SIP_SKIP
223
224 public slots:
225
229 void setActive( bool active );
230
231
233
234 // exposed to Python for testing only
235 void aboutToShowMenu();
236 void menuActionTriggered( QAction *action );
237
239
240 signals:
241
243 void changed();
244
246 void activated( bool isActive );
247
250
251 protected:
252 void mouseReleaseEvent( QMouseEvent *event ) override;
253
254 private:
255
256 void showDescriptionDialog();
257 void showExpressionDialog();
258 void showAssistant();
259 void updateGui();
260
265 void setActivePrivate( bool active );
266
267 // Returns color name if current expression is a reference to a color
268 QString getColor() const;
269
270 int mPropertyKey = -1;
271
272 const QgsVectorLayer *mVectorLayer = nullptr;
273
274 QStringList mFieldNameList;
275 QStringList mFieldDisplayNameList;
276 QList< QIcon > mFieldIcons;
277
278 QString mExpressionString;
279 QString mFieldName;
280
281 QMenu *mDefineMenu = nullptr;
282 QAction *mActionDataTypes = nullptr;
283 QMenu *mFieldsMenu = nullptr;
284 QMenu *mVariablesMenu = nullptr;
285 QAction *mActionVariables = nullptr;
286 QMenu *mColorsMenu = nullptr;
287 QAction *mActionColors = nullptr;
288
289 QAction *mActionActive = nullptr;
290 QAction *mActionDescription = nullptr;
291 QAction *mActionExpDialog = nullptr;
292 QAction *mActionExpression = nullptr;
293 QAction *mActionPasteExpr = nullptr;
294 QAction *mActionCopyExpr = nullptr;
295 QAction *mActionClearExpr = nullptr;
296 QAction *mActionAssistant = nullptr;
297 QAction *mActionCreateAuxiliaryField = nullptr;
298
299 QgsPropertyDefinition mDefinition;
300
302 QString mDataTypesString;
303 QString mInputDescription;
304 QString mFullDescription;
305 QString mUsageInfo;
306
307 QgsExpressionContextGenerator *mExpressionContextGenerator = nullptr;
308
309 enum SiblingType
310 {
311 SiblingCheckState,
312 SiblingEnableState,
313 SiblingVisibility,
314 SiblingExpressionText,
315 SiblingLinkedWidget,
316 };
317 struct SiblingWidget
318 {
319 SiblingWidget( const QPointer<QWidget> &widgetPointer, SiblingType siblingType, bool natural = true )
320 : mWidgetPointer( widgetPointer )
321 , mSiblingType( siblingType )
322 , mNatural( natural )
323 {}
324 QPointer<QWidget> mWidgetPointer;
325 SiblingType mSiblingType;
326 bool mNatural;
327 };
328 QList< SiblingWidget > mSiblingWidgets;
329
331 QgsProperty mProperty;
332
333 bool mAuxiliaryStorageEnabled = false;
334
335 std::shared_ptr< QgsSymbol > mSymbol;
336
337 private slots:
338
339 void showHelp();
340 void updateSiblingWidgets( bool state );
341};
342
343#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 for a property.
Definition qgsproperty.h:45
DataType
Valid data types required by property.
Definition qgsproperty.h:83
@ DataTypeString
Property requires a string value.
Definition qgsproperty.h:90
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...
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.
Abstract base class for all rendered symbols.
Definition qgssymbol.h:231
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.