QGIS API Documentation 4.1.0-Master (60fea48833c)
Loading...
Searching...
No Matches
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 <limits>
20
21#include "qgis.h"
22#include "qgis_core.h"
23#include "qgis_sip.h"
24
25#include <QColor>
26#include <QString>
27
28using namespace Qt::StringLiterals;
29
31
32
33static const inline QMetaEnum sSettingsTypeMetaEnum = QMetaEnum::fromType<Qgis::SettingsType>() SIP_SKIP;
34
35
47class CORE_EXPORT QgsSettingsEntryBase
48{
49#ifdef SIP_RUN
51 if ( dynamic_cast< QgsSettingsEntryVariant * >( sipCpp ) )
52 sipType = sipType_QgsSettingsEntryVariant;
53 else if ( dynamic_cast< QgsSettingsEntryString * >( sipCpp ) )
54 sipType = sipType_QgsSettingsEntryString;
55 else if ( dynamic_cast< QgsSettingsEntryStringList * >( sipCpp ) )
56 sipType = sipType_QgsSettingsEntryStringList;
57 else if ( dynamic_cast< QgsSettingsEntryVariantMap * >( sipCpp ) )
58 sipType = sipType_QgsSettingsEntryVariantMap;
59 else if ( dynamic_cast< QgsSettingsEntryBool * >( sipCpp ) )
60 sipType = sipType_QgsSettingsEntryBool;
61 else if ( dynamic_cast< QgsSettingsEntryInteger * >( sipCpp ) )
62 sipType = sipType_QgsSettingsEntryInteger;
63 else if ( dynamic_cast< QgsSettingsEntryDouble * >( sipCpp ) )
64 sipType = sipType_QgsSettingsEntryDouble;
65 else if ( dynamic_cast< QgsSettingsEntryColor * >( sipCpp ) )
66 sipType = sipType_QgsSettingsEntryColor;
67 else if ( dynamic_cast< QgsSettingsEntryBase * >( sipCpp ) )
68 sipType = sipType_QgsSettingsEntryBase;
69 else
70 sipType = NULL;
72#endif
73
74 public:
75
80 static QStringList dynamicKeyPartToList( const QString &dynamicKeyPart );
81
92 const QString &key, const QString &section, const QVariant &defaultValue = QVariant(), const QString &description = QString(), Qgis::SettingsOptions options = Qgis::SettingsOptions()
93 )
94 : mName( key )
95 , mKey( u"%1/%2"_s.arg( section, key ) )
96 , mDefaultValue( defaultValue )
97 , mDescription( description )
98 , mOptions( options )
99 {}
100
114 const QString &name, QgsSettingsTreeNode *parent, const QVariant &defaultValue = QVariant(), const QString &description = QString(), Qgis::SettingsOptions options = Qgis::SettingsOptions()
116
117 virtual ~QgsSettingsEntryBase();
118
124 virtual QString typeId() const;
125
130 QString name() const { return mName; }
131
137 QString key( const QString &dynamicKeyPart = QString() ) const;
138
144 QString key( const QStringList &dynamicKeyPartList ) const;
145
155 bool keyIsValid( const QString &key ) const;
156
162 QString definitionKey() const;
163
167 bool hasDynamicKey() const;
168
173 Qgis::SettingsOptions options() const { return mOptions; }
174
180 bool exists( const QString &dynamicKeyPart = QString() ) const;
181
187 bool exists( const QStringList &dynamicKeyPartList ) const;
188
194 Qgis::SettingsOrigin origin( const QStringList &dynamicKeyPartList ) const;
195
201 void remove( const QString &dynamicKeyPart = QString() ) const;
202
208 void remove( const QStringList &dynamicKeyPartList ) const;
209
214 Q_DECL_DEPRECATED int section() const;
215
222 bool setVariantValue( const QVariant &value, const QString &dynamicKeyPart = QString() ) const;
223
230 bool setVariantValue( const QVariant &value, const QStringList &dynamicKeyPartList ) const;
231
233 QVariant valueAsVariant( const QString &dynamicKeyPart = QString() ) const;
234
236 QVariant valueAsVariant( const QStringList &dynamicKeyPartList ) const;
237
242 QVariant valueAsVariantWithDefaultOverride( const QVariant &defaultValueOverride, const QString &dynamicKeyPart = QString() ) const;
243
251 QVariant valueAsVariantWithDefaultOverride( const QVariant &defaultValueOverride, const QStringList &dynamicKeyPartList ) const;
252
257 Q_DECL_DEPRECATED QVariant valueAsVariant( const QString &dynamicKeyPart, bool useDefaultValueOverride, const QVariant &defaultValueOverride ) const SIP_DEPRECATED;
258
263 Q_DECL_DEPRECATED QVariant valueAsVariant( const QStringList &dynamicKeyPartList, bool useDefaultValueOverride, const QVariant &defaultValueOverride ) const SIP_DEPRECATED;
264
265
269 QVariant defaultValueAsVariant() const;
270
275 // This cannot be pure virtual otherwise SIP is failing
276
280 QString description() const;
281
287 QVariant formerValueAsVariant( const QString &dynamicKeyPart ) const;
288
294 QVariant formerValueAsVariant( const QStringList &dynamicKeyPartList ) const;
295
303 bool copyValueFromKey( const QString &key, bool removeSettingAtKey = false ) const { return copyValueFromKey( key, {}, removeSettingAtKey ); }
304
313 bool copyValueFromKey( const QString &key, const QStringList &dynamicKeyPartList, bool removeSettingAtKey = false ) const;
314
321 void copyValueToKey( const QString &key, const QStringList &dynamicKeyPartList = QStringList() ) const;
322
331 void copyValueToKeyIfChanged( const QString &key, const QStringList &dynamicKeyPartList = QStringList() ) const;
332
337 QgsSettingsTreeNode *parent() const { return mParentTreeElement; }
338
340 virtual bool checkValueVariant( const QVariant &value ) const
341 {
342 Q_UNUSED( value )
343 return true;
344 }
345
351 bool hasChanged() const { return mHasChanged; }
352
353 private:
354 QString formerValuekey( const QStringList &dynamicKeyPartList ) const;
355
356 QString completeKeyPrivate( const QString &key, const QStringList &dynamicKeyPartList ) const;
357
358 QgsSettingsTreeNode *mParentTreeElement = nullptr;
359 QString mName;
360 QString mKey;
361 QVariant mDefaultValue;
362 QString mDescription;
363 Qgis::SettingsOptions mOptions;
364 mutable bool mHasChanged = false;
365};
366
377{
378 public:
396
406 QgsSettingsEntryBaseTemplate( const QString &key, const QString &section, const QVariant &defaultValue, const QString &description = QString(), Qgis::SettingsOptions options = Qgis::SettingsOptions() )
408 {}
409
410
411 Qgis::SettingsType settingsType() const override = 0;
412
418 T value( const QString &dynamicKeyPart = QString() ) const { return this->convertFromVariant( valueAsVariant( dynamicKeyPart ) ); }
419
425 T value( const QStringList &dynamicKeyPartList ) const { return this->convertFromVariant( valueAsVariant( dynamicKeyPartList ) ); }
426
427
429 inline T valueWithDefaultOverride( const T &defaultValueOverride, const QString &dynamicKeyPart = QString() ) const
430 {
431 return this->convertFromVariant( valueAsVariantWithDefaultOverride( convertToVariant( defaultValueOverride ), dynamicKeyPart ) );
432 }
433
435 inline T valueWithDefaultOverride( const T &defaultValueOverride, const QStringList &dynamicKeyPartList ) const
436 {
437 return this->convertFromVariant( valueAsVariantWithDefaultOverride( convertToVariant( defaultValueOverride ), dynamicKeyPartList ) );
438 }
439
446 bool setValue( const T &value, const QString &dynamicKeyPart = QString() ) const { return setValuePrivate( value, dynamicKeyPartToList( dynamicKeyPart ) ); }
447
454 bool setValue( const T &value, const QStringList &dynamicKeyPartList ) const { return setValuePrivate( value, dynamicKeyPartList ); }
455
458
463 T formerValue( const QString &dynamicKeyPart = QString() ) const { return convertFromVariant( formerValueAsVariant( dynamicKeyPart ) ); }
464
469 T formerValue( const QStringList &dynamicKeyPartList ) const { return convertFromVariant( formerValueAsVariant( dynamicKeyPartList ) ); }
470
471 bool checkValueVariant( const QVariant &value ) const override { return checkValuePrivate( convertFromVariant( value ) ); }
472
474 virtual T convertFromVariant( const QVariant &value ) const = 0;
475
476 protected:
478 virtual bool setValuePrivate( const T &value, const QStringList &dynamicKeyPartList ) const
479 {
480 if ( checkValuePrivate( value ) )
481 return QgsSettingsEntryBase::setVariantValue( convertToVariant( value ), dynamicKeyPartList );
482 else
483 return false;
484 }
485
487 virtual QVariant convertToVariant( const T &value ) const { return QVariant::fromValue( value ); }
488
490 virtual bool checkValuePrivate( const T &value ) const
491 {
492 Q_UNUSED( value )
493 return true;
494 }
495};
496
497
498#endif // QGSSETTINGSENTRY_H
SettingsType
Types of settings entries.
Definition qgis.h:661
@ Custom
Custom implementation.
Definition qgis.h:662
QFlags< SettingsOption > SettingsOptions
Definition qgis.h:755
SettingsOrigin
The setting origin describes where a setting is stored.
Definition qgis.h:4609
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.
Qgis::SettingsType settingsType() const override=0
Returns the settings entry type.
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.
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:198
#define SIP_DEPRECATED
Definition qgis_sip.h:113
#define SIP_SKIP
Definition qgis_sip.h:133
#define SIP_THROW(name,...)
Definition qgis_sip.h:210
#define SIP_END
Definition qgis_sip.h:215