QGIS API Documentation 3.99.0-Master (7d2ca374f2d)
Loading...
Searching...
No Matches
qgssettingsentryenumflag.h
Go to the documentation of this file.
1/***************************************************************************
2 qgssettingsentryenumflag.cpp
3 --------------------------------------
4 Date : February 2022
5 Copyright : (C) 2022 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 QGSSETTINGSENTRYENUMFLAG_H
17#define QGSSETTINGSENTRYENUMFLAG_H
18
19
20#include "qgis.h"
21#include "qgslogger.h"
22#include "qgssettingsentry.h"
23
24#include <QString>
25
26#define SIP_NO_FILE
27
28using namespace Qt::StringLiterals;
29
39template <typename T>
41{
42 public:
43
59 parent,
60 QMetaEnum::fromType<T>().isFlag() ? qgsFlagValueToKeys( defaultValue ) : qgsEnumValueToKey( defaultValue ),
62 options )
63 {
64 mMetaEnum = QMetaEnum::fromType<T>();
65 Q_ASSERT( mMetaEnum.isValid() );
66 if ( !mMetaEnum.isValid() )
67 QgsDebugError( u"Invalid metaenum. Enum/Flag probably misses Q_ENUM/Q_FLAG declaration. Settings key: '%1'"_s.arg( this->key() ) );
68 }
69
82 QgsSettingsEntryEnumFlag( const QString &key, const QString &section, T defaultValue, const QString &description = QString(), Qgis::SettingsOptions options = Qgis::SettingsOptions() )
84 section,
85 QMetaEnum::fromType<T>().isFlag() ? qgsFlagValueToKeys( defaultValue ) : qgsEnumValueToKey( defaultValue ),
87 options )
88 {
89 mMetaEnum = QMetaEnum::fromType<T>();
90 Q_ASSERT( mMetaEnum.isValid() );
91 if ( !mMetaEnum.isValid() )
92 QgsDebugError( u"Invalid metaenum. Enum/Flag probably misses Q_ENUM/Q_FLAG declaration. Settings key: '%1'"_s.arg( this->key() ) );
93 }
94
95 QVariant convertToVariant( const T &value ) const override
96 {
97 if ( mMetaEnum.isFlag() )
98 return qgsFlagValueToKeys( value );
99 else
100 return qgsEnumValueToKey( value );
101 }
102
103
107 T convertFromVariant( const QVariant &value ) const override
108 {
109 if ( !mMetaEnum.isValid() )
110 {
111 QgsDebugError( u"Invalid metaenum. Enum/Flag probably misses Q_ENUM/Q_FLAG declaration. Settings key: '%1'"_s.arg( this->key() ) );
112 return T();
113 }
114
115 bool ok = false;
116 T enumFlagValue;
117 if ( !mMetaEnum.isFlag() )
118 enumFlagValue = qgsEnumKeyToValue( value.toString(), mDefaultValue, true, &ok );
119 else
120 enumFlagValue = qgsFlagKeysToValue( value.toString(), mDefaultValue, true, &ok );
121
122 if ( !ok )
123 {
124 QgsDebugError( u"Invalid enum/flag key/s '%1' for settings key '%2'"_s.arg( value.toString(), this->key() ) );
125 return T();
126 }
127
128 return enumFlagValue;
129 }
130
137 bool setValuePrivate( const T &value, const QStringList &dynamicKeyPartList ) const override
138 {
139 if ( !mMetaEnum.isValid() )
140 {
141 QgsDebugError( u"Invalid metaenum. Enum/Flag probably misses Q_ENUM/Q_FLAG declaration. Settings key: '%1'"_s.arg( this->key( dynamicKeyPartList ) ) );
142 return false;
143 }
144
145 QVariant variantValue;
146 bool ok = true;
147
148 if ( this->options().testFlag( Qgis::SettingsOption::SaveEnumFlagAsInt ) )
149 {
150 variantValue = static_cast<int>( value );
151 }
152 else
153 {
154 if ( !mMetaEnum.isFlag() )
155 variantValue = qgsEnumValueToKey( value, &ok );
156 else
157 variantValue = qgsFlagValueToKeys( value, &ok );
158 }
159
160 if ( ok )
161 return this->setVariantValue( variantValue, dynamicKeyPartList );
162 else
163 return false;
164 }
165
167 {
169 }
170
171 QString typeId() const override
172 {
173 return u"%1-%2"_s.arg( this->QgsSettingsEntryBase::typeId(), QMetaEnum::fromType<T>().name() );
174 }
175
176 private:
177 T mDefaultValue;
178 QMetaEnum mMetaEnum;
179
180};
181
182#endif // QGSSETTINGSENTRYENUMFLAG_H
@ SaveEnumFlagAsInt
The enum/flag will be saved as an integer value instead of text.
Definition qgis.h:747
SettingsType
Types of settings entries.
Definition qgis.h:656
@ EnumFlag
Enum or Flag.
Definition qgis.h:665
QFlags< SettingsOption > SettingsOptions
Definition qgis.h:750
QgsSettingsEntryBaseTemplate(const QString &name, QgsSettingsTreeNode *parent, const QVariant &defaultValue, const QString &description=QString(), Qgis::SettingsOptions options=Qgis::SettingsOptions())
Constructor for QgsSettingsEntryByReference.
T defaultValue() const
Returns settings default value.
T value(const QString &dynamicKeyPart=QString()) const
Returns settings value.
virtual QString typeId() const
Returns the id of the type of settings This can be re-implemented in a custom implementation of a set...
Qgis::SettingsOptions options() const
Returns the settings options.
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.
bool setVariantValue(const QVariant &value, const QString &dynamicKeyPart=QString()) const
Set settings value.
QString name() const
Returns the name of the settings.
QString key(const QString &dynamicKeyPart=QString()) const
Returns settings entry key.
QVariant convertToVariant(const T &value) const override
Converts the value to a variant.
Qgis::SettingsType settingsType() const override
Returns the settings entry type.
bool setValuePrivate(const T &value, const QStringList &dynamicKeyPartList) const override
Set settings value.
QgsSettingsEntryEnumFlag(const QString &name, QgsSettingsTreeNode *parent, T defaultValue, const QString &description=QString(), Qgis::SettingsOptions options=Qgis::SettingsOptions())
Constructor for QgsSettingsEntryEnumFlagBase.
QgsSettingsEntryEnumFlag(const QString &key, const QString &section, T defaultValue, const QString &description=QString(), Qgis::SettingsOptions options=Qgis::SettingsOptions())
Constructor for QgsSettingsEntryEnumFlagBase.
T convertFromVariant(const QVariant &value) const override
Returns settings default value.
QString typeId() const override
Returns the id of the type of settings This can be re-implemented in a custom implementation of a set...
A tree node for the settings tree to help organizing and introspecting the tree.
T qgsEnumKeyToValue(const QString &key, const T &defaultValue, bool tryValueAsKey=true, bool *returnOk=nullptr)
Returns the value corresponding to the given key of an enum.
Definition qgis.h:7160
QString qgsEnumValueToKey(const T &value, bool *returnOk=nullptr)
Returns the value for the given key of an enum.
Definition qgis.h:7141
QString qgsFlagValueToKeys(const T &value, bool *returnOk=nullptr)
Returns the value for the given keys of a flag.
Definition qgis.h:7199
T qgsFlagKeysToValue(const QString &keys, const T &defaultValue, bool tryValueAsKey=true, bool *returnOk=nullptr)
Returns the value corresponding to the given keys of a flag.
Definition qgis.h:7221
#define QgsDebugError(str)
Definition qgslogger.h:59