QGIS API Documentation 4.1.0-Master (5bf3c20f3c9)
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 <QGroupBox>
30#include <QLineEdit>
31#include <QSpinBox>
32#include <QTableWidget>
33
34//TODO variant map
35
36class QgsColorButton;
37
44template<class T, class V, class U> class QgsSettingsEditorWidgetWrapperTemplate : public QgsSettingsEditorWidgetWrapper
45{
46 public:
48 QgsSettingsEditorWidgetWrapperTemplate( QObject *parent = nullptr )
50 {}
51
52 QString id() const override = 0;
53
54 bool setWidgetFromSetting() const override
55 {
56 if ( mSetting )
58
59 QgsDebugError( "editor is not configured" );
60 return false;
61 }
62
63 bool setSettingFromWidget() const override = 0;
64
65 bool setWidgetFromVariant( const QVariant &value ) const override { return setWidgetValue( mSetting->convertFromVariant( value ) ); }
66
68 virtual bool setWidgetValue( const U &value ) const = 0;
69
70 QVariant variantValueFromWidget() const override { return QVariant::fromValue( valueFromWidget() ); };
71
73 virtual U valueFromWidget() const = 0;
74
76 V *editor() const { return mEditor; }
77
79 const T *setting() const { return mSetting; }
80
81 QgsSettingsEditorWidgetWrapper *createWrapper( QObject *parent = nullptr ) const override = 0;
82
83 protected:
84 QWidget *createEditorPrivate( QWidget *parent = nullptr ) const override
85 {
86 V *editor = new V( parent );
87 editor->setAutoFillBackground( true );
88 return editor;
89 }
90
92 {
93 mSetting = static_cast<const T *>( setting );
94 Q_ASSERT( mSetting );
95 mEditor = qobject_cast<V *>( editor );
96 if ( mEditor )
97 {
99 return true;
100 }
101 return false;
102 }
103
106
107 const T *mSetting = nullptr;
108 V *mEditor = nullptr;
109};
110
111
118class GUI_EXPORT QgsSettingsStringLineEditWrapper : public QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryString, QLineEdit, QString>
119{
120 Q_OBJECT
121 public:
123 QgsSettingsStringLineEditWrapper( QObject *parent = nullptr );
124
126 QgsSettingsStringLineEditWrapper( QWidget *editor, const QgsSettingsEntryBase *setting, const QStringList &dynamicKeyPartList = QStringList() );
127
128
129 QgsSettingsEditorWidgetWrapper *createWrapper( QObject *parent = nullptr ) const override { return new QgsSettingsStringLineEditWrapper( parent ); }
130
131 QString id() const override;
132
133 bool setSettingFromWidget() const override;
134
135 QString valueFromWidget() const override;
136
137 bool setWidgetValue( const QString &value ) const override;
138
139 void enableAutomaticUpdatePrivate() override;
140};
141
142
149class GUI_EXPORT QgsSettingsStringComboBoxWrapper : public QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryString, QComboBox, QString>
150{
151 Q_OBJECT
152 public:
154 enum class Mode : int
155 {
156 Text,
157 Data
158 };
159
161 QgsSettingsStringComboBoxWrapper( QObject *parent = nullptr );
162
164 QgsSettingsStringComboBoxWrapper( QWidget *editor, const QgsSettingsEntryBase *setting, const QStringList &dynamicKeyPartList = QStringList() );
165
167 QgsSettingsStringComboBoxWrapper( QWidget *editor, const QgsSettingsEntryBase *setting, Mode mode, const QStringList &dynamicKeyPartList = QStringList() );
168
173 QgsSettingsStringComboBoxWrapper( QWidget *editor, const QgsSettingsEntryBase *setting, Mode mode, int role, const QStringList &dynamicKeyPartList = QStringList() );
174
175 QgsSettingsEditorWidgetWrapper *createWrapper( QObject *parent = nullptr ) const override { return new QgsSettingsStringComboBoxWrapper( parent ); }
176
177 QString id() const override;
178
179 bool setSettingFromWidget() const override;
180
181 QString valueFromWidget() const override;
182
183 bool setWidgetValue( const QString &value ) const override;
184
185 void enableAutomaticUpdatePrivate() override;
186
187 private:
188 Mode mMode = Mode::Text;
189 int mDataRole = Qt::UserRole; // Default to UserRole, can be changed in the constructor
190};
191
192
199class GUI_EXPORT QgsSettingsBoolCheckBoxWrapper : public QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryBool, QCheckBox, bool>
200{
201 Q_OBJECT
202 public:
204 QgsSettingsBoolCheckBoxWrapper( QObject *parent = nullptr );
205
207 QgsSettingsBoolCheckBoxWrapper( QWidget *editor, const QgsSettingsEntryBase *setting, const QStringList &dynamicKeyPartList = QStringList() );
208
209 QgsSettingsEditorWidgetWrapper *createWrapper( QObject *parent = nullptr ) const override { return new QgsSettingsBoolCheckBoxWrapper( parent ); }
210
211 QString id() const override;
212
213 bool setSettingFromWidget() const override;
214
215 bool valueFromWidget() const override;
216
217 bool setWidgetValue( const bool &value ) const override;
218
219 void enableAutomaticUpdatePrivate() override;
220};
221
228class GUI_EXPORT QgsSettingsBoolGroupBoxWrapper : public QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryBool, QGroupBox, bool>
229{
230 Q_OBJECT
231 public:
233 QgsSettingsBoolGroupBoxWrapper( QObject *parent = nullptr );
234
236 QgsSettingsBoolGroupBoxWrapper( QWidget *editor, const QgsSettingsEntryBase *setting, const QStringList &dynamicKeyPartList = QStringList() );
237
238 QgsSettingsEditorWidgetWrapper *createWrapper( QObject *parent = nullptr ) const override { return new QgsSettingsBoolGroupBoxWrapper( parent ); }
239
240 QString id() const override;
241
242 bool setSettingFromWidget() const override;
243
244 bool valueFromWidget() const override;
245
246 bool setWidgetValue( const bool &value ) const override;
247
248 void enableAutomaticUpdatePrivate() override;
249
250 protected:
252};
253
260class GUI_EXPORT QgsSettingsIntegerSpinBoxWrapper : public QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryInteger, QSpinBox, int>
261{
262 Q_OBJECT
263 public:
265 QgsSettingsIntegerSpinBoxWrapper( QObject *parent = nullptr );
266
268 QgsSettingsIntegerSpinBoxWrapper( QWidget *editor, const QgsSettingsEntryBase *setting, const QStringList &dynamicKeyPartList = QStringList() );
269
270 QgsSettingsEditorWidgetWrapper *createWrapper( QObject *parent = nullptr ) const override { return new QgsSettingsIntegerSpinBoxWrapper( parent ); }
271
272 QString id() const override;
273
274 bool setSettingFromWidget() const override;
275
276 int valueFromWidget() const override;
277
278 bool setWidgetValue( const int &value ) const override;
279
280 void enableAutomaticUpdatePrivate() override;
281};
282
283
290class GUI_EXPORT QgsSettingsDoubleSpinBoxWrapper : public QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryDouble, QDoubleSpinBox, double>
291{
292 Q_OBJECT
293 public:
295 QgsSettingsDoubleSpinBoxWrapper( QObject *parent = nullptr );
296
298 QgsSettingsDoubleSpinBoxWrapper( QWidget *editor, const QgsSettingsEntryBase *setting, const QStringList &dynamicKeyPartList = QStringList() );
299
300 QgsSettingsEditorWidgetWrapper *createWrapper( QObject *parent = nullptr ) const override { return new QgsSettingsDoubleSpinBoxWrapper( parent ); }
301
302 QString id() const override;
303
304 bool setSettingFromWidget() const override;
305
306 double valueFromWidget() const override;
307
308 bool setWidgetValue( const double &value ) const override;
309
310 void enableAutomaticUpdatePrivate() override;
311};
312
313
320class GUI_EXPORT QgsSettingsColorButtonWrapper : public QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryColor, QgsColorButton, QColor>
321{
322 Q_OBJECT
323 public:
325 QgsSettingsColorButtonWrapper( QObject *parent = nullptr );
326
328 QgsSettingsColorButtonWrapper( QWidget *editor, const QgsSettingsEntryBase *setting, const QStringList &dynamicKeyPartList = QStringList() );
329
330 QgsSettingsEditorWidgetWrapper *createWrapper( QObject *parent = nullptr ) const override { return new QgsSettingsColorButtonWrapper( parent ); }
331
332 QString id() const override;
333
334 bool setSettingFromWidget() const override;
335
336 QColor valueFromWidget() const override;
337
338 bool setWidgetValue( const QColor &value ) const override;
339
341
342 void enableAutomaticUpdatePrivate() override;
343};
344
345
347// * \ingroup gui
348// * \brief This class is a factory of editor for boolean settings
349// *
350// * \since QGIS 3.32
351// */
352//class GUI_EXPORT QgsSettingsStringListEditorWidgetWrapper : public QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryStringList, QTableWidget, QStringList>
353//{
354// public:
355// QgsSettingsStringListEditorWidgetWrapper()
356// : QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryStringList, QTableWidget, QStringList>() {}
357
358// QString id() const override;
359
360// bool setWidgetFromSetting() const override;
361
362// bool setSettingFromWidget() const override;
363
364// QStringList valueFromWidget() const override;
365//};
366
367#if defined( _MSC_VER )
368#ifndef SIP_RUN
375#endif
376#endif
377
378
379#endif // QGSSETTINGSEDITORWIDGETWRAPPERIMPL_H
A cross platform button subclass for selecting colors.
QgsSettingsBoolCheckBoxWrapper(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.
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.
QgsSettingsBoolGroupBoxWrapper(QObject *parent=nullptr)
Constructor of the factory.
QgsSettingsColorButtonWrapper(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.
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.
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.
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.
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(QObject *parent=nullptr)
Constructor of the factory.
A factory for editors of string settings with a combo box.
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.
Mode
Mode to determine if the value is hold in the combo box text or data.
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:59