QGIS API Documentation 3.99.0-Master (2fe06baccd8)
Loading...
Searching...
No Matches
qgssettingseditorwidgetwrapperimpl.h
Go to the documentation of this file.
1/***************************************************************************
2 qgssettingseditorwidgetwrapperimpl.h
3 --------------------------------------
4 Date : February 2023
5 Copyright : (C) 2023 by Denis Rouzaud
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
16#ifndef QGSSETTINGSEDITORWIDGETWRAPPERIMPL_H
17#define QGSSETTINGSEDITORWIDGETWRAPPERIMPL_H
18
19#include "qgis_gui.h"
20#include "qgscolorbutton.h"
21#include "qgslogger.h"
24
25#include <QCheckBox>
26#include <QColor>
27#include <QComboBox>
28#include <QDoubleSpinBox>
29#include <QLineEdit>
30#include <QSpinBox>
31#include <QTableWidget>
32
33//TODO variant map
34
35class QgsColorButton;
36
43template<class T, class V, class U>
45{
46 public:
48 QgsSettingsEditorWidgetWrapperTemplate( QObject *parent = nullptr )
50
51 QString id() const override = 0;
52
53 bool setWidgetFromSetting() const override
54 {
55 if ( mSetting )
57
58 QgsDebugError( "editor is not configured" );
59 return false;
60 }
61
62 bool setSettingFromWidget() const override = 0;
63
64 bool setWidgetFromVariant( const QVariant &value ) const override
65 {
66 return setWidgetValue( mSetting->convertFromVariant( value ) );
67 }
68
70 virtual bool setWidgetValue( const U &value ) const = 0;
71
72 QVariant variantValueFromWidget() const override
73 {
74 return QVariant::fromValue( valueFromWidget() );
75 };
76
78 virtual U valueFromWidget() const = 0;
79
81 V *editor() const { return mEditor; }
82
84 const T *setting() const { return mSetting; }
85
86 QgsSettingsEditorWidgetWrapper *createWrapper( QObject *parent = nullptr ) const override = 0;
87
88 protected:
89 QWidget *createEditorPrivate( QWidget *parent = nullptr ) const override
90 {
91 V *editor = new V( parent );
92 editor->setAutoFillBackground( true );
93 return editor;
94 }
95
97 {
98 mSetting = static_cast<const T *>( setting );
99 Q_ASSERT( mSetting );
100 mEditor = qobject_cast<V *>( editor );
101 if ( mEditor )
102 {
104 return true;
105 }
106 return false;
107 }
108
111
112 const T *mSetting = nullptr;
113 V *mEditor = nullptr;
114};
115
116
123class GUI_EXPORT QgsSettingsStringLineEditWrapper : public QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryString, QLineEdit, QString>
124{
125 Q_OBJECT
126 public:
128 QgsSettingsStringLineEditWrapper( QObject *parent = nullptr )
129 : QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryString, QLineEdit, QString>( parent ) {}
130
134
135
136 QgsSettingsEditorWidgetWrapper *createWrapper( QObject *parent = nullptr ) const override { return new QgsSettingsStringLineEditWrapper( parent ); }
137
138 QString id() const override;
139
140 bool setSettingFromWidget() const override;
141
142 QString valueFromWidget() const override;
143
144 bool setWidgetValue( const QString &value ) const override;
145
146 void enableAutomaticUpdatePrivate() override;
147};
148
149
156class GUI_EXPORT QgsSettingsStringComboBoxWrapper : public QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryString, QComboBox, QString>
157{
158 Q_OBJECT
159 public:
161 enum class Mode : int
162 {
163 Text,
164 Data
165 };
166
168 QgsSettingsStringComboBoxWrapper( QObject *parent = nullptr )
169 : QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryString, QComboBox, QString>( parent ) {}
170
174
178
183 QgsSettingsStringComboBoxWrapper( QWidget *editor, const QgsSettingsEntryBase *setting, Mode mode, int role, const QStringList &dynamicKeyPartList = QStringList() )
184 : QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryString, QComboBox, QString>( editor ), mMode( mode ), mDataRole( role ) { configureEditor( editor, setting, dynamicKeyPartList ); }
185
186 QgsSettingsEditorWidgetWrapper *createWrapper( QObject *parent = nullptr ) const override { return new QgsSettingsStringComboBoxWrapper( parent ); }
187
188 QString id() const override;
189
190 bool setSettingFromWidget() const override;
191
192 QString valueFromWidget() const override;
193
194 bool setWidgetValue( const QString &value ) const override;
195
196 void enableAutomaticUpdatePrivate() override;
197
198 private:
199 Mode mMode = Mode::Text;
200 int mDataRole = Qt::UserRole; // Default to UserRole, can be changed in the constructor
201};
202
203
210class GUI_EXPORT QgsSettingsBoolCheckBoxWrapper : public QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryBool, QCheckBox, bool>
211{
212 Q_OBJECT
213 public:
215 QgsSettingsBoolCheckBoxWrapper( QObject *parent = nullptr )
216 : QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryBool, QCheckBox, bool>( parent ) {}
217
221
222 QgsSettingsEditorWidgetWrapper *createWrapper( QObject *parent = nullptr ) const override { return new QgsSettingsBoolCheckBoxWrapper( parent ); }
223
224 QString id() const override;
225
226 bool setSettingFromWidget() const override;
227
228 bool valueFromWidget() const override;
229
230 bool setWidgetValue( const bool &value ) const override;
231
232 void enableAutomaticUpdatePrivate() override;
233};
234
241class GUI_EXPORT QgsSettingsIntegerSpinBoxWrapper : public QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryInteger, QSpinBox, int>
242{
243 Q_OBJECT
244 public:
246 QgsSettingsIntegerSpinBoxWrapper( QObject *parent = nullptr )
248
252
253 QgsSettingsEditorWidgetWrapper *createWrapper( QObject *parent = nullptr ) const override { return new QgsSettingsIntegerSpinBoxWrapper( parent ); }
254
255 QString id() const override;
256
257 bool setSettingFromWidget() const override;
258
259 int valueFromWidget() const override;
260
261 bool setWidgetValue( const int &value ) const override;
262
263 void enableAutomaticUpdatePrivate() override;
264};
265
266
273class GUI_EXPORT QgsSettingsDoubleSpinBoxWrapper : public QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryDouble, QDoubleSpinBox, double>
274{
275 Q_OBJECT
276 public:
278 QgsSettingsDoubleSpinBoxWrapper( QObject *parent = nullptr )
279 : QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryDouble, QDoubleSpinBox, double>( parent ) {}
280
284
285 QgsSettingsEditorWidgetWrapper *createWrapper( QObject *parent = nullptr ) const override { return new QgsSettingsDoubleSpinBoxWrapper( parent ); }
286
287 QString id() const override;
288
289 bool setSettingFromWidget() const override;
290
291 double valueFromWidget() const override;
292
293 bool setWidgetValue( const double &value ) const override;
294
295 void enableAutomaticUpdatePrivate() override;
296};
297
298
305class GUI_EXPORT QgsSettingsColorButtonWrapper : public QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryColor, QgsColorButton, QColor>
306{
307 Q_OBJECT
308 public:
312
316
317 QgsSettingsEditorWidgetWrapper *createWrapper( QObject *parent = nullptr ) const override { return new QgsSettingsColorButtonWrapper( parent ); }
318
319 QString id() const override;
320
321 bool setSettingFromWidget() const override;
322
323 QColor valueFromWidget() const override;
324
325 bool setWidgetValue( const QColor &value ) const override;
326
328
329 void enableAutomaticUpdatePrivate() override;
330};
331
332
334// * \ingroup gui
335// * \brief This class is a factory of editor for boolean settings
336// *
337// * \since QGIS 3.32
338// */
339//class GUI_EXPORT QgsSettingsStringListEditorWidgetWrapper : public QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryStringList, QTableWidget, QStringList>
340//{
341// public:
342// QgsSettingsStringListEditorWidgetWrapper()
343// : QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryStringList, QTableWidget, QStringList>() {}
344
345// QString id() const override;
346
347// bool setWidgetFromSetting() const override;
348
349// bool setSettingFromWidget() const override;
350
351// QStringList valueFromWidget() const override;
352//};
353
354#if defined( _MSC_VER )
355#ifndef SIP_RUN
361#endif
362#endif
363
364
365#endif // QGSSETTINGSEDITORWIDGETWRAPPERIMPL_H
A cross platform button subclass for selecting colors.
QgsSettingsBoolCheckBoxWrapper(QObject *parent=nullptr)
Constructor of the factory.
QgsSettingsBoolCheckBoxWrapper(QWidget *editor, const QgsSettingsEntryBase *setting, const QStringList &dynamicKeyPartList=QStringList())
Constructor of the wrapper for a given setting and its widget editor.
QgsSettingsEditorWidgetWrapper * createWrapper(QObject *parent=nullptr) const override
Creates a new instance of the editor wrapper so it can be configured for a widget and a setting.
QgsSettingsColorButtonWrapper(QObject *parent=nullptr)
Constructor of the factory.
QgsSettingsColorButtonWrapper(QWidget *editor, const QgsSettingsEntryBase *setting, const QStringList &dynamicKeyPartList=QStringList())
Constructor of the wrapper for a given setting and its widget editor.
QgsSettingsEditorWidgetWrapper * createWrapper(QObject *parent=nullptr) const override
Creates a new instance of the editor wrapper so it can be configured for a widget and a setting.
QgsSettingsEditorWidgetWrapper * createWrapper(QObject *parent=nullptr) const override
Creates a new instance of the editor wrapper so it can be configured for a widget and a setting.
QgsSettingsDoubleSpinBoxWrapper(QObject *parent=nullptr)
Constructor of the factory.
QgsSettingsDoubleSpinBoxWrapper(QWidget *editor, const QgsSettingsEntryBase *setting, const QStringList &dynamicKeyPartList=QStringList())
Constructor of the wrapper for a given setting and its widget editor.
bool setSettingFromWidget() const override=0
Sets the setting value from the widget value The wrapper must be configured before calling this medth...
virtual void configureEditorPrivateImplementation()
To be re-implemented to implemeent type specific configuration (e.g. opacity for colors).
virtual bool setWidgetValue(const U &value) const =0
Sets the widget value.
bool configureEditorPrivate(QWidget *editor, const QgsSettingsEntryBase *setting) override
Configures an existing editor widget.
QVariant variantValueFromWidget() const override
Returns the value from the widget as a variant The wrapper must be configured before calling this med...
bool setWidgetFromSetting() const override
Sets the widget value from the setting value The wrapper must be configured before calling this medth...
QString id() const override=0
This id of the type of settings it handles.
QgsSettingsEditorWidgetWrapper * createWrapper(QObject *parent=nullptr) const override=0
Creates a new instance of the editor wrapper so it can be configured for a widget and a setting.
QWidget * createEditorPrivate(QWidget *parent=nullptr) const override
Creates the widgets.
virtual U valueFromWidget() const =0
Returns the widget value.
QgsSettingsEditorWidgetWrapperTemplate(QObject *parent=nullptr)
Constructor.
bool setWidgetFromVariant(const QVariant &value) const override
Sets the value of the widget The wrapper must be configured before calling this medthod.
QStringList dynamicKeyPartList() const
Returns the dynamic key parts.
bool configureEditor(QWidget *editor, const QgsSettingsEntryBase *setting, const QStringList &dynamicKeyPartList=QStringList())
Configures the editor according the setting.
virtual void enableAutomaticUpdatePrivate()=0
Enables automatic update, which causes the setting to be updated immediately when the widget value is...
QgsSettingsEditorWidgetWrapper(QObject *parent=nullptr)
Constructor.
Represents a settings entry and provides methods for reading and writing settings values.
A boolean settings entry.
A color settings entry.
A double settings entry.
An integer settings entry.
A string settings entry.
QgsSettingsEditorWidgetWrapper * createWrapper(QObject *parent=nullptr) const override
Creates a new instance of the editor wrapper so it can be configured for a widget and a setting.
QgsSettingsIntegerSpinBoxWrapper(QWidget *editor, const QgsSettingsEntryBase *setting, const QStringList &dynamicKeyPartList=QStringList())
Constructor of the wrapper for a given setting and its widget editor.
QgsSettingsIntegerSpinBoxWrapper(QObject *parent=nullptr)
Constructor of the factory.
QgsSettingsStringComboBoxWrapper(QWidget *editor, const QgsSettingsEntryBase *setting, Mode mode, const QStringList &dynamicKeyPartList=QStringList())
Constructor of the wrapper for a given setting and its widget editor.
QgsSettingsStringComboBoxWrapper(QObject *parent=nullptr)
Constructor of the factory.
QgsSettingsEditorWidgetWrapper * createWrapper(QObject *parent=nullptr) const override
Creates a new instance of the editor wrapper so it can be configured for a widget and a setting.
QgsSettingsStringComboBoxWrapper(QWidget *editor, const QgsSettingsEntryBase *setting, const QStringList &dynamicKeyPartList=QStringList())
Constructor of the wrapper for a given setting and its widget editor.
QgsSettingsStringComboBoxWrapper(QWidget *editor, const QgsSettingsEntryBase *setting, Mode mode, int role, const QStringList &dynamicKeyPartList=QStringList())
Constructor of the wrapper for a given setting and its widget editor.
Mode
Mode to determine if the value is hold in the combo box text or data.
QgsSettingsStringLineEditWrapper(QWidget *editor, const QgsSettingsEntryBase *setting, const QStringList &dynamicKeyPartList=QStringList())
Constructor of the wrapper for a given setting and its widget editor.
QgsSettingsStringLineEditWrapper(QObject *parent=nullptr)
Constructor of the factory.
QgsSettingsEditorWidgetWrapper * createWrapper(QObject *parent=nullptr) const override
Creates a new instance of the editor wrapper so it can be configured for a widget and a setting.
#define QgsDebugError(str)
Definition qgslogger.h:57