29 qDeleteAll( mChildrenNodes );
30 qDeleteAll( mChildrenSettings );
38 te->mCompleteKey = QStringLiteral(
"/" );
48 throw QgsSettingsException( QObject::tr(
"Settings tree node '%1' already holds a child setting with key '%2'." ).arg( this->
key(), key ) );
52 te->init(
this,
key );
65 throw QgsSettingsException( QObject::tr(
"Settings tree node '%1' already holds a child node with key '%2', but it is not a named list.." ).arg( this->
key(), key ) );
68 throw QgsSettingsException( QObject::tr(
"Settings tree node '%1' already holds a child setting with key '%2'." ).arg( this->
key(), key ) );
72 te->init(
this,
key );
81 QList<QgsSettingsTreeNode *>::const_iterator it = mChildrenNodes.constBegin();
82 for ( ; it != mChildrenNodes.constEnd(); ++it )
84 if ( ( *it )->key() ==
key )
92 const QString testCompleteKey = QStringLiteral(
"%1%2" ).arg( mCompleteKey,
key );
93 QList<const QgsSettingsEntryBase *>::const_iterator it = mChildrenSettings.constBegin();
94 for ( ; it != mChildrenSettings.constEnd(); ++it )
96 if ( ( *it )->definitionKey() == testCompleteKey )
105 throw QgsSettingsException( QObject::tr(
"Settings tree node '%1' already holds a child tree node with key '%2'." ).arg( this->
key(), key ) );
107 throw QgsSettingsException( QObject::tr(
"Settings tree node '%1' already holds a child setting with key '%2'." ).arg( this->
key(), key ) );
109 mChildrenSettings.append( setting );
115 mChildrenNodes.append( node );
120 if ( deleteSettingValues )
121 setting->
remove( parentsNamedItems );
123 mChildrenSettings.removeAll( setting );
128 mChildrenNodes.removeAll( node );
135 mCompleteKey = QDir::cleanPath( QStringLiteral(
"%1/%2" ).arg(
parent->
completeKey(),
key ) ) +
'/';
145 mSelectedItemSetting =
new QgsSettingsEntryString( QStringLiteral(
"%1/selected" ).arg( mCompleteKey ),
nullptr );
148 mNamedNodesCount = mParent->namedNodesCount() + 1;
149 mItemsCompleteKey = QStringLiteral(
"%1items/" ).arg( mCompleteKey );
150 mCompleteKey.append( QStringLiteral(
"items/%%1/" ).arg( mNamedNodesCount ) );
155 delete mSelectedItemSetting;
167 throw QgsSettingsException( QObject::tr(
"The number of given parent named items (%1) for the node '%2' doesn't match with the number of named items in the key (%3)." ).arg( QString::number( parentsNamedItems.count() ), mCompleteKey, QString::number(
namedNodesCount() ) ) );
170 const QString completeKeyParam = completeKeyWithNamedItems( mItemsCompleteKey, parentsNamedItems );
172 settings->beginGroup( completeKeyParam );
173 const QStringList res = settings->childGroups( origin );
174 settings->endGroup();
181 throw QgsSettingsException( QObject::tr(
"The number of given parent named items (%1) for the node '%2' doesn't match with the number of named items in the key (%3)." ).arg( QString::number( parentsNamedItems.count() ), mCompleteKey, QString::number(
namedNodesCount() ) ) );
183 throw QgsSettingsException( QObject::tr(
"The named list node '%1' has no option to set the current selected entry." ).arg( mCompleteKey ) );
185 mSelectedItemSetting->
setValue( item, parentsNamedItems );
191 throw QgsSettingsException( QObject::tr(
"The number of given parent named items (%1) for the node '%2' doesn't match with the number of named items in the key (%3)." ).arg( QString::number( parentsNamedItems.count() ), mCompleteKey, QString::number(
namedNodesCount() ) ) );
193 throw QgsSettingsException( QObject::tr(
"The named list node '%1' has no option to set the current selected entry." ).arg( mCompleteKey ) );
195 return mSelectedItemSetting->
value( parentsNamedItems );
201 throw QgsSettingsException( QObject::tr(
"The number of given parent named items (%1) doesn't match with the number of named items in the key (%2)." ).arg( parentsNamedItems.count(),
namedNodesCount() ) );
203 QStringList args = parentsNamedItems;
205 QString
key = completeKeyWithNamedItems( mCompleteKey, args );
212 throw QgsSettingsException( QObject::tr(
"The number of given parent named items (%1) doesn't match with the number of named items in the key (%2)." ).arg( parentsNamedItems.count(),
namedNodesCount() ) );
214 const QStringList children =
items( parentsNamedItems );
216 for (
const QString &child : children )
218 QStringList args = parentsNamedItems;
220 QString
key = completeKeyWithNamedItems( mCompleteKey, args );
221 settings->remove(
key );
225QString QgsSettingsTreeNamedListNode::completeKeyWithNamedItems(
const QString &key,
const QStringList &namedItems )
const
227 switch ( namedItems.count() )
232 return key.arg( namedItems[0] );
234 return key.arg( namedItems[0], namedItems[1] );
236 return key.arg( namedItems[0], namedItems[1], namedItems[2] );
238 return key.arg( namedItems[0], namedItems[1], namedItems[2], namedItems[3] );
240 return key.arg( namedItems[0], namedItems[1], namedItems[2], namedItems[3], namedItems[4] );
242 throw QgsSettingsException( QObject::tr(
"Current implementation of QgsSettingsTreeNamedListNode::items doesn't handle more than 5 parent named items" ) );
@ NamedListSelectedItemSetting
Creates a setting to store which is the current item.
SettingsOrigin
The setting origin describes where a setting is stored.
T value(const QString &dynamicKeyPart=QString()) const
Returns settings value.
bool setValue(const T &value, const QString &dynamicKeyPart=QString()) const
Set settings value.
Represent settings entry and provides methods for reading and writing settings values.
void remove(const QString &dynamicKeyPart=QString()) const
Removes the settings from the underlying QSettings.
Custom exception class for settings related exceptions.
QgsSettingsTreeNamedListNode is a named list tree node for the settings tree to help organizing and i...
void deleteAllItems(const QStringList &parentsNamedItems=QStringList())
Deletes all items from the named list node.
void deleteItem(const QString &item, const QStringList &parentsNamedItems=QStringList())
Deletes a named item from the named list node.
void initNamedList(const Qgis::SettingsTreeNodeOptions &options)
Init the nodes with the specific options.
virtual ~QgsSettingsTreeNamedListNode()
QString selectedItem(const QStringList &parentsNamedItems=QStringList())
Returns the selected named item from the named list node.
void setSelectedItem(const QString &item, const QStringList &parentsNamedItems=QStringList())
Sets the selected named item from the named list node.
QStringList items(const QStringList &parentsNamedItems=QStringList()) const
Returns the list of items.
QgsSettingsTreeNode is a tree node for the settings tree to help organizing and introspecting the tre...
void registerChildNode(QgsSettingsTreeNode *node)
Registers a child nodes.
Qgis::SettingsTreeNodeType type() const
Returns the type of node.
QgsSettingsTreeNode * createChildNode(const QString &key)
Creates a normal tree node It will return the existing child node if it exists at the given key.
Qgis::SettingsTreeNodeType mType
QgsSettingsTreeNode * childNode(const QString &key) const
Returns the existing child node if it exists at the given key.
QString completeKey() const
Returns the complete key of the node (including its parents)
int namedNodesCount() const
Returns the number of named nodes in the complete key.
static QgsSettingsTreeNode * createRootNode()
Creates a tree root node.
QString key() const
Returns the key of the node (without its parents)
friend class QgsSettingsTreeNamedListNode
void unregisterChildSetting(const QgsSettingsEntryBase *setting, bool deleteSettingValues=false, const QStringList &parentsNamedItems=QStringList())
Unregisters the child setting.
virtual ~QgsSettingsTreeNode()
QgsSettingsTreeNode * parent() const
Returns the parent of the node or nullptr if it does not exists.
void unregisterChildNode(QgsSettingsTreeNode *node)
Unregisters the child tree node.
void registerChildSetting(const QgsSettingsEntryBase *setting, const QString &key)
Registers a child setting.
const QgsSettingsEntryBase * childSetting(const QString &key) const
Returns the existing child settings if it exists at the given key.
QgsSettingsTreeNamedListNode * createNamedListNode(const QString &key, const Qgis::SettingsTreeNodeOptions &options=Qgis::SettingsTreeNodeOptions())
Creates a named list tree node.
void remove(const QString &key, QgsSettings::Section section=QgsSettings::NoSection)
Removes the setting key and any sub-settings of key in a section.
static QgsSettingsProxy get()
Returns a proxy for a QgsSettings object.