QGIS API Documentation 4.3.0-Master (e0370aa57ef)
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 <QHash>
27#include <QSettings>
28#include <QString>
29
30using namespace Qt::StringLiterals;
31
33
34
35static const inline QMetaEnum sSettingsTypeMetaEnum = QMetaEnum::fromType<Qgis::SettingsType>() SIP_SKIP;
36
37
49class CORE_EXPORT QgsSettingsEntryBase
50{
51#ifdef SIP_RUN
53 if ( dynamic_cast< QgsSettingsEntryVariant * >( sipCpp ) )
54 sipType = sipType_QgsSettingsEntryVariant;
55 else if ( dynamic_cast< QgsSettingsEntryString * >( sipCpp ) )
56 sipType = sipType_QgsSettingsEntryString;
57 else if ( dynamic_cast< QgsSettingsEntryStringList * >( sipCpp ) )
58 sipType = sipType_QgsSettingsEntryStringList;
59 else if ( dynamic_cast< QgsSettingsEntryVariantMap * >( sipCpp ) )
60 sipType = sipType_QgsSettingsEntryVariantMap;
61 else if ( dynamic_cast< QgsSettingsEntryBool * >( sipCpp ) )
62 sipType = sipType_QgsSettingsEntryBool;
63 else if ( dynamic_cast< QgsSettingsEntryInteger * >( sipCpp ) )
64 sipType = sipType_QgsSettingsEntryInteger;
65 else if ( dynamic_cast< QgsSettingsEntryDouble * >( sipCpp ) )
66 sipType = sipType_QgsSettingsEntryDouble;
67 else if ( dynamic_cast< QgsSettingsEntryColor * >( sipCpp ) )
68 sipType = sipType_QgsSettingsEntryColor;
69 else if ( dynamic_cast< QgsSettingsEntryBase * >( sipCpp ) )
70 sipType = sipType_QgsSettingsEntryBase;
71 else
72 sipType = NULL;
74#endif
75
76 public:
77
90 static bool setGlobalSettingsPath( const QString &path );
91
97 static bool hasGlobalDefault( const QString &key ) SIP_SKIP;
98
105 static QVariant globalDefault( const QString &key ) SIP_SKIP;
106
118 static QStringList globalChildGroups( const QString &prefix ) SIP_SKIP;
119
136 static void setupUserSettings( const QString &profilePath ) SIP_SKIP;
137
148 static QSettings &userSettings() SIP_SKIP;
149
154 static QStringList dynamicKeyPartToList( const QString &dynamicKeyPart );
155
166 const QString &key, const QString &section, const QVariant &defaultValue = QVariant(), const QString &description = QString(), Qgis::SettingsOptions options = Qgis::SettingsOptions()
167 )
168 : mName( key )
169 , mKey( u"%1/%2"_s.arg( section, key ) )
170 , mDefaultValue( defaultValue )
171 , mDescription( description )
172 , mOptions( options )
173 {}
174
188 const QString &name, QgsSettingsTreeNode *parent, const QVariant &defaultValue = QVariant(), const QString &description = QString(), Qgis::SettingsOptions options = Qgis::SettingsOptions()
190
191 virtual ~QgsSettingsEntryBase();
192
198 virtual QString typeId() const;
199
204 QString name() const { return mName; }
205
211 QString key( const QString &dynamicKeyPart = QString() ) const;
212
218 QString key( const QStringList &dynamicKeyPartList ) const;
219
229 bool keyIsValid( const QString &key ) const;
230
236 QString definitionKey() const;
237
241 bool hasDynamicKey() const;
242
247 Qgis::SettingsOptions options() const { return mOptions; }
248
254 bool exists( const QString &dynamicKeyPart = QString() ) const;
255
261 bool exists( const QStringList &dynamicKeyPartList ) const;
262
270 Qgis::SettingsOrigin origin( const QStringList &dynamicKeyPartList ) const;
271
277 void remove( const QString &dynamicKeyPart = QString() ) const;
278
284 void remove( const QStringList &dynamicKeyPartList ) const;
285
290 Q_DECL_DEPRECATED int section() const;
291
298 bool setVariantValue( const QVariant &value, const QString &dynamicKeyPart = QString() ) const;
299
306 bool setVariantValue( const QVariant &value, const QStringList &dynamicKeyPartList ) const;
307
309 QVariant valueAsVariant( const QString &dynamicKeyPart = QString() ) const;
310
312 QVariant valueAsVariant( const QStringList &dynamicKeyPartList ) const;
313
318 QVariant valueAsVariantWithDefaultOverride( const QVariant &defaultValueOverride, const QString &dynamicKeyPart = QString() ) const;
319
327 QVariant valueAsVariantWithDefaultOverride( const QVariant &defaultValueOverride, const QStringList &dynamicKeyPartList ) const;
328
333 Q_DECL_DEPRECATED QVariant valueAsVariant( const QString &dynamicKeyPart, bool useDefaultValueOverride, const QVariant &defaultValueOverride ) const SIP_DEPRECATED;
334
339 Q_DECL_DEPRECATED QVariant valueAsVariant( const QStringList &dynamicKeyPartList, bool useDefaultValueOverride, const QVariant &defaultValueOverride ) const SIP_DEPRECATED;
340
341
345 QVariant defaultValueAsVariant() const;
346
351 // This cannot be pure virtual otherwise SIP is failing
352
356 QString description() const;
357
363 QVariant formerValueAsVariant( const QString &dynamicKeyPart ) const;
364
370 QVariant formerValueAsVariant( const QStringList &dynamicKeyPartList ) const;
371
379 bool copyValueFromKey( const QString &key, bool removeSettingAtKey = false ) const { return copyValueFromKey( key, {}, removeSettingAtKey ); }
380
389 bool copyValueFromKey( const QString &key, const QStringList &dynamicKeyPartList, bool removeSettingAtKey = false ) const;
390
397 void copyValueToKey( const QString &key, const QStringList &dynamicKeyPartList = QStringList() ) const;
398
407 void copyValueToKeyIfChanged( const QString &key, const QStringList &dynamicKeyPartList = QStringList() ) const;
408
413 QgsSettingsTreeNode *parent() const { return mParentTreeElement; }
414
416 virtual bool checkValueVariant( const QVariant &value ) const
417 {
418 Q_UNUSED( value )
419 return true;
420 }
421
427 bool hasChanged() const { return mHasChanged; }
428
429 private:
430 QVariant valueFromSettingsWithGlobalDefault( const QString &resolvedKey, const QVariant &defaultValue ) const SIP_SKIP;
431 QString formerValuekey( const QStringList &dynamicKeyPartList ) const;
432
433 QString completeKeyPrivate( const QString &key, const QStringList &dynamicKeyPartList ) const;
434
435 static QString sanitizeGlobalKey( const QString &key );
436
437 static QHash<QString, QVariant> sGlobalDefaults;
438
439 QgsSettingsTreeNode *mParentTreeElement = nullptr;
440 QString mName;
441 QString mKey;
442 QVariant mDefaultValue;
443 QString mDescription;
444 Qgis::SettingsOptions mOptions;
445 mutable bool mHasChanged = false;
446};
447
458{
459 public:
477
487 QgsSettingsEntryBaseTemplate( const QString &key, const QString &section, const QVariant &defaultValue, const QString &description = QString(), Qgis::SettingsOptions options = Qgis::SettingsOptions() )
489 {}
490
491
492 Qgis::SettingsType settingsType() const override = 0;
493
499 T value( const QString &dynamicKeyPart = QString() ) const { return this->convertFromVariant( valueAsVariant( dynamicKeyPart ) ); }
500
506 T value( const QStringList &dynamicKeyPartList ) const { return this->convertFromVariant( valueAsVariant( dynamicKeyPartList ) ); }
507
508
510 inline T valueWithDefaultOverride( const T &defaultValueOverride, const QString &dynamicKeyPart = QString() ) const
511 {
512 return this->convertFromVariant( valueAsVariantWithDefaultOverride( convertToVariant( defaultValueOverride ), dynamicKeyPart ) );
513 }
514
516 inline T valueWithDefaultOverride( const T &defaultValueOverride, const QStringList &dynamicKeyPartList ) const
517 {
518 return this->convertFromVariant( valueAsVariantWithDefaultOverride( convertToVariant( defaultValueOverride ), dynamicKeyPartList ) );
519 }
520
527 bool setValue( const T &value, const QString &dynamicKeyPart = QString() ) const { return setValuePrivate( value, dynamicKeyPartToList( dynamicKeyPart ) ); }
528
535 bool setValue( const T &value, const QStringList &dynamicKeyPartList ) const { return setValuePrivate( value, dynamicKeyPartList ); }
536
539
544 T formerValue( const QString &dynamicKeyPart = QString() ) const { return convertFromVariant( formerValueAsVariant( dynamicKeyPart ) ); }
545
550 T formerValue( const QStringList &dynamicKeyPartList ) const { return convertFromVariant( formerValueAsVariant( dynamicKeyPartList ) ); }
551
552 bool checkValueVariant( const QVariant &value ) const override { return checkValuePrivate( convertFromVariant( value ) ); }
553
555 virtual T convertFromVariant( const QVariant &value ) const = 0;
556
557 protected:
559 virtual bool setValuePrivate( const T &value, const QStringList &dynamicKeyPartList ) const
560 {
561 if ( checkValuePrivate( value ) )
562 return QgsSettingsEntryBase::setVariantValue( convertToVariant( value ), dynamicKeyPartList );
563 else
564 return false;
565 }
566
568 virtual QVariant convertToVariant( const T &value ) const { return QVariant::fromValue( value ); }
569
571 virtual bool checkValuePrivate( const T &value ) const
572 {
573 Q_UNUSED( value )
574 return true;
575 }
576};
577
578
579#endif // QGSSETTINGSENTRY_H
SettingsType
Types of settings entries.
Definition qgis.h:696
@ Custom
Custom implementation.
Definition qgis.h:697
QFlags< SettingsOption > SettingsOptions
Definition qgis.h:790
SettingsOrigin
The setting origin describes where a setting is stored.
Definition qgis.h:4977
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.
static bool setGlobalSettingsPath(const QString &path)
Sets the path to the global settings INI file and loads all keys into an in-memory hash for use as de...
bool copyValueFromKey(const QString &key, bool removeSettingAtKey=false) const
Copies the value from a given key if it exists.
static QStringList globalChildGroups(const QString &prefix)
Returns the list of child group names found under prefix in the global defaults hash.
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.
static bool hasGlobalDefault(const QString &key)
Returns true if the global settings INI file contains a value for the given key.
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 QVariant globalDefault(const QString &key)
Returns the global default value for the given key, or an invalid QVariant if not found.
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:203
#define SIP_DEPRECATED
Definition qgis_sip.h:113
#define SIP_SKIP
Definition qgis_sip.h:138
#define SIP_THROW(name,...)
Definition qgis_sip.h:215
#define SIP_END
Definition qgis_sip.h:220