QGIS API Documentation 3.99.0-Master (d270888f95f)
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#define SIP_NO_FILE
20
21#include "qgis.h"
22#include "qgslogger.h"
23#include "qgssettingsentry.h"
24
25#include <QString>
26
27using namespace Qt::StringLiterals;
28
38template <typename T>
40{
41 public:
42
58 parent,
59 QMetaEnum::fromType<T>().isFlag() ? qgsFlagValueToKeys( defaultValue ) : qgsEnumValueToKey( defaultValue ),
61 options )
62 {
63 mMetaEnum = QMetaEnum::fromType<T>();
64 Q_ASSERT( mMetaEnum.isValid() );
65 if ( !mMetaEnum.isValid() )
66 QgsDebugError( u"Invalid metaenum. Enum/Flag probably misses Q_ENUM/Q_FLAG declaration. Settings key: '%1'"_s.arg( this->key() ) );
67 }
68
81 QgsSettingsEntryEnumFlag( const QString &key, const QString &section, T defaultValue, const QString &description = QString(), Qgis::SettingsOptions options = Qgis::SettingsOptions() )
83 section,
84 QMetaEnum::fromType<T>().isFlag() ? qgsFlagValueToKeys( defaultValue ) : qgsEnumValueToKey( defaultValue ),
86 options )
87 {
88 mMetaEnum = QMetaEnum::fromType<T>();
89 Q_ASSERT( mMetaEnum.isValid() );
90 if ( !mMetaEnum.isValid() )
91 QgsDebugError( u"Invalid metaenum. Enum/Flag probably misses Q_ENUM/Q_FLAG declaration. Settings key: '%1'"_s.arg( this->key() ) );
92 }
93
94 QVariant convertToVariant( const T &value ) const override
95 {
96 if ( mMetaEnum.isFlag() )
97 return qgsFlagValueToKeys( value );
98 else
99 return qgsEnumValueToKey( value );
100 }
101
102
106 T convertFromVariant( const QVariant &value ) const override
107 {
108 if ( !mMetaEnum.isValid() )
109 {
110 QgsDebugError( u"Invalid metaenum. Enum/Flag probably misses Q_ENUM/Q_FLAG declaration. Settings key: '%1'"_s.arg( this->key() ) );
111 return T();
112 }
113
114 bool ok = false;
115 T enumFlagValue;
116 if ( !mMetaEnum.isFlag() )
117 enumFlagValue = qgsEnumKeyToValue( value.toString(), mDefaultValue, true, &ok );
118 else
119 enumFlagValue = qgsFlagKeysToValue( value.toString(), mDefaultValue, true, &ok );
120
121 if ( !ok )
122 {
123 QgsDebugError( u"Invalid enum/flag key/s '%1' for settings key '%2'"_s.arg( value.toString(), this->key() ) );
124 return T();
125 }
126
127 return enumFlagValue;
128 }
129
136 bool setValuePrivate( const T &value, const QStringList &dynamicKeyPartList ) const override
137 {
138 if ( !mMetaEnum.isValid() )
139 {
140 QgsDebugError( u"Invalid metaenum. Enum/Flag probably misses Q_ENUM/Q_FLAG declaration. Settings key: '%1'"_s.arg( this->key( dynamicKeyPartList ) ) );
141 return false;
142 }
143
144 QVariant variantValue;
145 bool ok = true;
146
147 if ( this->options().testFlag( Qgis::SettingsOption::SaveEnumFlagAsInt ) )
148 {
149 variantValue = static_cast<int>( value );
150 }
151 else
152 {
153 if ( !mMetaEnum.isFlag() )
154 variantValue = qgsEnumValueToKey( value, &ok );
155 else
156 variantValue = qgsFlagValueToKeys( value, &ok );
157 }
158
159 if ( ok )
160 return this->setVariantValue( variantValue, dynamicKeyPartList );
161 else
162 return false;
163 }
164
166 {
168 }
169
170 QString typeId() const override
171 {
172 return u"%1-%2"_s.arg( this->QgsSettingsEntryBase::typeId(), QMetaEnum::fromType<T>().name() );
173 }
174
175 private:
176 T mDefaultValue;
177 QMetaEnum mMetaEnum;
178
179};
180
181#endif // QGSSETTINGSENTRYENUMFLAG_H
@ SaveEnumFlagAsInt
The enum/flag will be saved as an integer value instead of text.
Definition qgis.h:745
SettingsType
Types of settings entries.
Definition qgis.h:654
@ EnumFlag
Enum or Flag.
Definition qgis.h:663
QFlags< SettingsOption > SettingsOptions
Definition qgis.h:748
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:7110
QString qgsEnumValueToKey(const T &value, bool *returnOk=nullptr)
Returns the value for the given key of an enum.
Definition qgis.h:7091
QString qgsFlagValueToKeys(const T &value, bool *returnOk=nullptr)
Returns the value for the given keys of a flag.
Definition qgis.h:7149
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:7171
#define QgsDebugError(str)
Definition qgslogger.h:59