QGIS API Documentation 3.43.0-Master (c67cf405802)
qgssettingsentry.h
Go to the documentation of this file.
1/***************************************************************************
2 qgssettingsentry.h
3 --------------------------------------
4 Date : February 2021
5 Copyright : (C) 2021 by Damiano Lombardi
6 Email : damiano at opengis dot ch
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 QGSSETTINGSENTRY_H
17#define QGSSETTINGSENTRY_H
18
19#include <QString>
20#include <QColor>
21#include <limits>
22
23#include "qgis.h"
24#include "qgis_core.h"
25#include "qgis_sip.h"
26
27
29
30
31static const inline QMetaEnum sSettingsTypeMetaEnum = QMetaEnum::fromType<Qgis::SettingsType>() SIP_SKIP;
32
33
45class CORE_EXPORT QgsSettingsEntryBase
46{
47
48#ifdef SIP_RUN
50 if ( dynamic_cast< QgsSettingsEntryVariant * >( sipCpp ) )
51 sipType = sipType_QgsSettingsEntryVariant;
52 else if ( dynamic_cast< QgsSettingsEntryString * >( sipCpp ) )
53 sipType = sipType_QgsSettingsEntryString;
54 else if ( dynamic_cast< QgsSettingsEntryStringList * >( sipCpp ) )
55 sipType = sipType_QgsSettingsEntryStringList;
56 else if ( dynamic_cast< QgsSettingsEntryVariantMap * >( sipCpp ) )
57 sipType = sipType_QgsSettingsEntryVariantMap;
58 else if ( dynamic_cast< QgsSettingsEntryBool * >( sipCpp ) )
59 sipType = sipType_QgsSettingsEntryBool;
60 else if ( dynamic_cast< QgsSettingsEntryInteger * >( sipCpp ) )
61 sipType = sipType_QgsSettingsEntryInteger;
62 else if ( dynamic_cast< QgsSettingsEntryDouble * >( sipCpp ) )
63 sipType = sipType_QgsSettingsEntryDouble;
64 else if ( dynamic_cast< QgsSettingsEntryColor * >( sipCpp ) )
65 sipType = sipType_QgsSettingsEntryColor;
66 else if ( dynamic_cast< QgsSettingsEntryBase * >( sipCpp ) )
67 sipType = sipType_QgsSettingsEntryBase;
68 else
69 sipType = NULL;
71#endif
72
73 public:
74
79 static QStringList dynamicKeyPartToList( const QString &dynamicKeyPart );
80
90 QgsSettingsEntryBase( const QString &key,
91 const QString &section,
92 const QVariant &defaultValue = QVariant(),
93 const QString &description = QString(),
95 : mName( key )
96 , mKey( QStringLiteral( "%1/%2" ).arg( section, key ) )
97 , mDefaultValue( defaultValue )
98 , mDescription( description )
99 , mOptions( options )
100 {}
101
114 QgsSettingsEntryBase( const QString &name,
116 const QVariant &defaultValue = QVariant(),
117 const QString &description = QString(),
119
120 virtual ~QgsSettingsEntryBase();
121
127 virtual QString typeId() const;
128
133 QString name() const {return mName;}
134
140 QString key( const QString &dynamicKeyPart = QString() ) const;
141
147 QString key( const QStringList &dynamicKeyPartList ) const;
148
158 bool keyIsValid( const QString &key ) const;
159
165 QString definitionKey() const;
166
170 bool hasDynamicKey() const;
171
176 Qgis::SettingsOptions options() const {return mOptions;}
177
183 bool exists( const QString &dynamicKeyPart = QString() ) const;
184
190 bool exists( const QStringList &dynamicKeyPartList ) const;
191
197 Qgis::SettingsOrigin origin( const QStringList &dynamicKeyPartList ) const;
198
204 void remove( const QString &dynamicKeyPart = QString() ) const;
205
211 void remove( const QStringList &dynamicKeyPartList ) const;
212
217 Q_DECL_DEPRECATED int section() const;
218
225 bool setVariantValue( const QVariant &value, const QString &dynamicKeyPart = QString() ) const;
226
233 bool setVariantValue( const QVariant &value, const QStringList &dynamicKeyPartList ) const;
234
236 QVariant valueAsVariant( const QString &dynamicKeyPart = QString() ) const;
237
239 QVariant valueAsVariant( const QStringList &dynamicKeyPartList ) const;
240
245 QVariant valueAsVariantWithDefaultOverride( const QVariant &defaultValueOverride, const QString &dynamicKeyPart = QString() ) const;
246
254 QVariant valueAsVariantWithDefaultOverride( const QVariant &defaultValueOverride, const QStringList &dynamicKeyPartList ) const;
255
260 Q_DECL_DEPRECATED QVariant valueAsVariant( const QString &dynamicKeyPart, bool useDefaultValueOverride, const QVariant &defaultValueOverride ) const SIP_DEPRECATED;
261
266 Q_DECL_DEPRECATED QVariant valueAsVariant( const QStringList &dynamicKeyPartList, bool useDefaultValueOverride, const QVariant &defaultValueOverride ) const SIP_DEPRECATED;
267
268
272 QVariant defaultValueAsVariant() const;
273
278 // This cannot be pure virtual otherwise SIP is failing
279
283 QString description() const;
284
290 QVariant formerValueAsVariant( const QString &dynamicKeyPart ) const;
291
297 QVariant formerValueAsVariant( const QStringList &dynamicKeyPartList ) const;
298
306 bool copyValueFromKey( const QString &key, bool removeSettingAtKey = false ) const {return copyValueFromKey( key, {}, removeSettingAtKey );}
307
316 bool copyValueFromKey( const QString &key, const QStringList &dynamicKeyPartList, bool removeSettingAtKey = false ) const;
317
324 void copyValueToKey( const QString &key, const QStringList &dynamicKeyPartList = QStringList() ) const;
325
334 void copyValueToKeyIfChanged( const QString &key, const QStringList &dynamicKeyPartList = QStringList() ) const;
335
340 QgsSettingsTreeNode *parent() const {return mParentTreeElement;}
341
343 virtual bool checkValueVariant( const QVariant &value ) const
344 {
345 Q_UNUSED( value )
346 return true;
347 }
348
354 bool hasChanged() const { return mHasChanged; }
355
356 private:
357 QString formerValuekey( const QStringList &dynamicKeyPartList ) const;
358
359 QString completeKeyPrivate( const QString &key, const QStringList &dynamicKeyPartList ) const;
360
361 QgsSettingsTreeNode *mParentTreeElement = nullptr;
362 QString mName;
363 QString mKey;
364 QVariant mDefaultValue;
365 QString mDescription;
366 Qgis::SettingsOptions mOptions;
367 mutable bool mHasChanged = false;
368};
369
379template<class T>
381{
382 public:
383
403
414 const QString &section,
415 const QVariant &defaultValue,
416 const QString &description = QString(),
419 {}
420
421
422 virtual Qgis::SettingsType settingsType() const override = 0;
423
429 T value( const QString &dynamicKeyPart = QString() ) const { return this->convertFromVariant( valueAsVariant( dynamicKeyPart ) );}
430
436 T value( const QStringList &dynamicKeyPartList ) const { return this->convertFromVariant( valueAsVariant( dynamicKeyPartList ) );}
437
438
440 inline T valueWithDefaultOverride( const T &defaultValueOverride, const QString &dynamicKeyPart = QString() ) const
441 {
442 return this->convertFromVariant( valueAsVariantWithDefaultOverride( convertToVariant( defaultValueOverride ), dynamicKeyPart ) );
443 }
444
446 inline T valueWithDefaultOverride( const T &defaultValueOverride, const QStringList &dynamicKeyPartList ) const
447 {
448 return this->convertFromVariant( valueAsVariantWithDefaultOverride( convertToVariant( defaultValueOverride ), dynamicKeyPartList ) );
449 }
450
457 bool setValue( const T &value, const QString &dynamicKeyPart = QString() ) const
458 {
459 return setValuePrivate( value, dynamicKeyPartToList( dynamicKeyPart ) );
460 }
461
468 bool setValue( const T &value, const QStringList &dynamicKeyPartList ) const
469 {
470 return setValuePrivate( value, dynamicKeyPartList );
471 }
472
475
480 T formerValue( const QString &dynamicKeyPart = QString() ) const {return convertFromVariant( formerValueAsVariant( dynamicKeyPart ) );}
481
486 T formerValue( const QStringList &dynamicKeyPartList ) const {return convertFromVariant( formerValueAsVariant( dynamicKeyPartList ) );}
487
488 bool checkValueVariant( const QVariant &value ) const override
489 {
491 }
492
494 virtual T convertFromVariant( const QVariant &value ) const = 0;
495
496 protected:
498 virtual bool setValuePrivate( const T &value, const QStringList &dynamicKeyPartList ) const
499 {
500 if ( checkValuePrivate( value ) )
501 return QgsSettingsEntryBase::setVariantValue( convertToVariant( value ), dynamicKeyPartList );
502 else
503 return false;
504 }
505
507 virtual QVariant convertToVariant( const T &value ) const
508 {
509 return QVariant::fromValue( value );
510 }
511
513 virtual bool checkValuePrivate( const T &value ) const
514 {
515 Q_UNUSED( value )
516 return true;
517 }
518};
519
520
521
522
523#endif // QGSSETTINGSENTRY_H
SettingsType
Types of settings entries.
Definition qgis.h:599
@ Custom
Custom implementation.
QFlags< SettingsOption > SettingsOptions
Definition qgis.h:693
SettingsOrigin
The setting origin describes where a setting is stored.
Definition qgis.h:4315
Base abstract class for settings entries with typed get and set methods.
QgsSettingsEntryBaseTemplate(const QString &name, QgsSettingsTreeNode *parent, const QVariant &defaultValue, const QString &description=QString(), Qgis::SettingsOptions options=Qgis::SettingsOptions())
Constructor for QgsSettingsEntryByReference.
virtual bool setValuePrivate(const T &value, const QStringList &dynamicKeyPartList) const
Sets the settings value with an optional list of dynamic parts.
T valueWithDefaultOverride(const T &defaultValueOverride, const QString &dynamicKeyPart=QString()) const
Returns the settings value with a defaultValueOverride and with an optional dynamicKeyPart.
T defaultValue() const
Returns settings default value.
virtual T convertFromVariant(const QVariant &value) const =0
Converts the variant value to the value type of the setting.
virtual Qgis::SettingsType settingsType() const override=0
Returns the settings entry type.
T value(const QString &dynamicKeyPart=QString()) const
Returns settings value.
QgsSettingsEntryBaseTemplate(const QString &key, const QString &section, const QVariant &defaultValue, const QString &description=QString(), Qgis::SettingsOptions options=Qgis::SettingsOptions())
Constructor for QgsSettingsEntryByReference.
virtual QVariant convertToVariant(const T &value) const
Converts the value to a variant.
bool checkValueVariant(const QVariant &value) const override
Returns true if the given value is valid towards the setting definition.
T value(const QStringList &dynamicKeyPartList) const
Returns settings value.
bool setValue(const T &value, const QString &dynamicKeyPart=QString()) const
Set settings value.
bool setValue(const T &value, const QStringList &dynamicKeyPartList) const
Set settings value.
virtual bool checkValuePrivate(const T &value) const
Check if the value is valid.
T formerValue(const QString &dynamicKeyPart=QString()) const
Returns the former value.
T valueWithDefaultOverride(const T &defaultValueOverride, const QStringList &dynamicKeyPartList) const
Returns the settings value with a defaultValueOverride for the dynamicKeyPartList.
T formerValue(const QStringList &dynamicKeyPartList) const
Returns the former value Returns the current value (or default) if there is no former value.
Represents a settings entry and provides methods for reading and writing settings values.
bool copyValueFromKey(const QString &key, bool removeSettingAtKey=false) const
Copies the value from a given key if it exists.
Qgis::SettingsOptions options() const
Returns the settings options.
bool hasChanged() const
Returns true if the setting was changed during the current QGIS session.
QVariant defaultValueAsVariant() const
Returns settings default value.
QString description() const
Returns the settings entry description.
QgsSettingsTreeNode * parent() const
Returns the parent tree element.
Q_DECL_DEPRECATED int section() const
Returns settings section.
virtual bool checkValueVariant(const QVariant &value) const
Returns true if the given value is valid towards the setting definition.
bool setVariantValue(const QVariant &value, const QString &dynamicKeyPart=QString()) const
Set settings value.
QString name() const
Returns the name of the settings.
QVariant formerValueAsVariant(const QString &dynamicKeyPart) const
Returns the former value of the settings if it has been enabled in the options.
QVariant valueAsVariant(const QString &dynamicKeyPart=QString()) const
Returns settings value with.
QString key(const QString &dynamicKeyPart=QString()) const
Returns settings entry key.
static QStringList dynamicKeyPartToList(const QString &dynamicKeyPart)
Transforms a dynamic key part string to list.
QVariant valueAsVariantWithDefaultOverride(const QVariant &defaultValueOverride, const QString &dynamicKeyPart=QString()) const
Returns settings value with a defaultValueOverride.
virtual Qgis::SettingsType settingsType() const
Returns the settings entry type.
QgsSettingsEntryBase(const QString &key, const QString &section, const QVariant &defaultValue=QVariant(), const QString &description=QString(), Qgis::SettingsOptions options=Qgis::SettingsOptions())
Constructor for QgsSettingsEntryBase.
A boolean settings entry.
A color settings entry.
A double settings entry.
An integer settings entry.
A string list settings entry.
A string settings entry.
A string list settings entry.
A variant settings entry.
Custom exception class for settings related exceptions.
A tree node for the settings tree to help organizing and introspecting the tree.
QString key() const
Returns the key of the node (without its parents)
QgsSettingsTreeNode * parent() const
Returns the parent of the node or nullptr if it does not exists.
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
Definition qgis_sip.h:191
#define SIP_DEPRECATED
Definition qgis_sip.h:106
#define SIP_SKIP
Definition qgis_sip.h:126
#define SIP_THROW(name,...)
Definition qgis_sip.h:203
#define SIP_END
Definition qgis_sip.h:208