QGIS API Documentation 4.1.0-Master (467af3bbe65)
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 <QSettings>
27#include <QString>
28
29using namespace Qt::StringLiterals;
30
32
33
34static const inline QMetaEnum sSettingsTypeMetaEnum = QMetaEnum::fromType<Qgis::SettingsType>() SIP_SKIP;
35
36
48class CORE_EXPORT QgsSettingsEntryBase
49{
50#ifdef SIP_RUN
52 if ( dynamic_cast< QgsSettingsEntryVariant * >( sipCpp ) )
53 sipType = sipType_QgsSettingsEntryVariant;
54 else if ( dynamic_cast< QgsSettingsEntryString * >( sipCpp ) )
55 sipType = sipType_QgsSettingsEntryString;
56 else if ( dynamic_cast< QgsSettingsEntryStringList * >( sipCpp ) )
57 sipType = sipType_QgsSettingsEntryStringList;
58 else if ( dynamic_cast< QgsSettingsEntryVariantMap * >( sipCpp ) )
59 sipType = sipType_QgsSettingsEntryVariantMap;
60 else if ( dynamic_cast< QgsSettingsEntryBool * >( sipCpp ) )
61 sipType = sipType_QgsSettingsEntryBool;
62 else if ( dynamic_cast< QgsSettingsEntryInteger * >( sipCpp ) )
63 sipType = sipType_QgsSettingsEntryInteger;
64 else if ( dynamic_cast< QgsSettingsEntryDouble * >( sipCpp ) )
65 sipType = sipType_QgsSettingsEntryDouble;
66 else if ( dynamic_cast< QgsSettingsEntryColor * >( sipCpp ) )
67 sipType = sipType_QgsSettingsEntryColor;
68 else if ( dynamic_cast< QgsSettingsEntryBase * >( sipCpp ) )
69 sipType = sipType_QgsSettingsEntryBase;
70 else
71 sipType = NULL;
73#endif
74
75 public:
76
93 static void setupUserSettings( const QString &profilePath ) SIP_SKIP;
94
105 static QSettings &userSettings() SIP_SKIP;
106
111 static QStringList dynamicKeyPartToList( const QString &dynamicKeyPart );
112
123 const QString &key, const QString &section, const QVariant &defaultValue = QVariant(), const QString &description = QString(), Qgis::SettingsOptions options = Qgis::SettingsOptions()
124 )
125 : mName( key )
126 , mKey( u"%1/%2"_s.arg( section, key ) )
127 , mDefaultValue( defaultValue )
128 , mDescription( description )
129 , mOptions( options )
130 {}
131
145 const QString &name, QgsSettingsTreeNode *parent, const QVariant &defaultValue = QVariant(), const QString &description = QString(), Qgis::SettingsOptions options = Qgis::SettingsOptions()
147
148 virtual ~QgsSettingsEntryBase();
149
155 virtual QString typeId() const;
156
161 QString name() const { return mName; }
162
168 QString key( const QString &dynamicKeyPart = QString() ) const;
169
175 QString key( const QStringList &dynamicKeyPartList ) const;
176
186 bool keyIsValid( const QString &key ) const;
187
193 QString definitionKey() const;
194
198 bool hasDynamicKey() const;
199
204 Qgis::SettingsOptions options() const { return mOptions; }
205
211 bool exists( const QString &dynamicKeyPart = QString() ) const;
212
218 bool exists( const QStringList &dynamicKeyPartList ) const;
219
225 Qgis::SettingsOrigin origin( const QStringList &dynamicKeyPartList ) const;
226
232 void remove( const QString &dynamicKeyPart = QString() ) const;
233
239 void remove( const QStringList &dynamicKeyPartList ) const;
240
245 Q_DECL_DEPRECATED int section() const;
246
253 bool setVariantValue( const QVariant &value, const QString &dynamicKeyPart = QString() ) const;
254
261 bool setVariantValue( const QVariant &value, const QStringList &dynamicKeyPartList ) const;
262
264 QVariant valueAsVariant( const QString &dynamicKeyPart = QString() ) const;
265
267 QVariant valueAsVariant( const QStringList &dynamicKeyPartList ) const;
268
273 QVariant valueAsVariantWithDefaultOverride( const QVariant &defaultValueOverride, const QString &dynamicKeyPart = QString() ) const;
274
282 QVariant valueAsVariantWithDefaultOverride( const QVariant &defaultValueOverride, const QStringList &dynamicKeyPartList ) const;
283
288 Q_DECL_DEPRECATED QVariant valueAsVariant( const QString &dynamicKeyPart, bool useDefaultValueOverride, const QVariant &defaultValueOverride ) const SIP_DEPRECATED;
289
294 Q_DECL_DEPRECATED QVariant valueAsVariant( const QStringList &dynamicKeyPartList, bool useDefaultValueOverride, const QVariant &defaultValueOverride ) const SIP_DEPRECATED;
295
296
300 QVariant defaultValueAsVariant() const;
301
306 // This cannot be pure virtual otherwise SIP is failing
307
311 QString description() const;
312
318 QVariant formerValueAsVariant( const QString &dynamicKeyPart ) const;
319
325 QVariant formerValueAsVariant( const QStringList &dynamicKeyPartList ) const;
326
334 bool copyValueFromKey( const QString &key, bool removeSettingAtKey = false ) const { return copyValueFromKey( key, {}, removeSettingAtKey ); }
335
344 bool copyValueFromKey( const QString &key, const QStringList &dynamicKeyPartList, bool removeSettingAtKey = false ) const;
345
352 void copyValueToKey( const QString &key, const QStringList &dynamicKeyPartList = QStringList() ) const;
353
362 void copyValueToKeyIfChanged( const QString &key, const QStringList &dynamicKeyPartList = QStringList() ) const;
363
368 QgsSettingsTreeNode *parent() const { return mParentTreeElement; }
369
371 virtual bool checkValueVariant( const QVariant &value ) const
372 {
373 Q_UNUSED( value )
374 return true;
375 }
376
382 bool hasChanged() const { return mHasChanged; }
383
384 private:
385 QString formerValuekey( const QStringList &dynamicKeyPartList ) const;
386
387 QString completeKeyPrivate( const QString &key, const QStringList &dynamicKeyPartList ) const;
388
389 QgsSettingsTreeNode *mParentTreeElement = nullptr;
390 QString mName;
391 QString mKey;
392 QVariant mDefaultValue;
393 QString mDescription;
394 Qgis::SettingsOptions mOptions;
395 mutable bool mHasChanged = false;
396};
397
408{
409 public:
427
437 QgsSettingsEntryBaseTemplate( const QString &key, const QString &section, const QVariant &defaultValue, const QString &description = QString(), Qgis::SettingsOptions options = Qgis::SettingsOptions() )
439 {}
440
441
442 Qgis::SettingsType settingsType() const override = 0;
443
449 T value( const QString &dynamicKeyPart = QString() ) const { return this->convertFromVariant( valueAsVariant( dynamicKeyPart ) ); }
450
456 T value( const QStringList &dynamicKeyPartList ) const { return this->convertFromVariant( valueAsVariant( dynamicKeyPartList ) ); }
457
458
460 inline T valueWithDefaultOverride( const T &defaultValueOverride, const QString &dynamicKeyPart = QString() ) const
461 {
462 return this->convertFromVariant( valueAsVariantWithDefaultOverride( convertToVariant( defaultValueOverride ), dynamicKeyPart ) );
463 }
464
466 inline T valueWithDefaultOverride( const T &defaultValueOverride, const QStringList &dynamicKeyPartList ) const
467 {
468 return this->convertFromVariant( valueAsVariantWithDefaultOverride( convertToVariant( defaultValueOverride ), dynamicKeyPartList ) );
469 }
470
477 bool setValue( const T &value, const QString &dynamicKeyPart = QString() ) const { return setValuePrivate( value, dynamicKeyPartToList( dynamicKeyPart ) ); }
478
485 bool setValue( const T &value, const QStringList &dynamicKeyPartList ) const { return setValuePrivate( value, dynamicKeyPartList ); }
486
489
494 T formerValue( const QString &dynamicKeyPart = QString() ) const { return convertFromVariant( formerValueAsVariant( dynamicKeyPart ) ); }
495
500 T formerValue( const QStringList &dynamicKeyPartList ) const { return convertFromVariant( formerValueAsVariant( dynamicKeyPartList ) ); }
501
502 bool checkValueVariant( const QVariant &value ) const override { return checkValuePrivate( convertFromVariant( value ) ); }
503
505 virtual T convertFromVariant( const QVariant &value ) const = 0;
506
507 protected:
509 virtual bool setValuePrivate( const T &value, const QStringList &dynamicKeyPartList ) const
510 {
511 if ( checkValuePrivate( value ) )
512 return QgsSettingsEntryBase::setVariantValue( convertToVariant( value ), dynamicKeyPartList );
513 else
514 return false;
515 }
516
518 virtual QVariant convertToVariant( const T &value ) const { return QVariant::fromValue( value ); }
519
521 virtual bool checkValuePrivate( const T &value ) const
522 {
523 Q_UNUSED( value )
524 return true;
525 }
526};
527
528
529#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:4708
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.
static QSettings & userSettings()
Returns a reference to the thread-local QSettings instance used internally by all QgsSettingsEntry op...
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.
static void setupUserSettings(const QString &profilePath)
Configures QSettings to use IniFormat at the given profilePath so that each thread's QSettings instan...
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