File indexing completed on 2024-05-12 15:58:10
0001 /* 0002 * SPDX-FileCopyrightText: 2007 Cyrille Berger <cberger@cberger.net> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "kis_bookmarked_configuration_manager.h" 0008 #include <QDomDocument> 0009 #include <QDomElement> 0010 #include <QString> 0011 0012 #include <kconfig.h> 0013 #include <ksharedconfig.h> 0014 #include <klocalizedstring.h> 0015 #include <kconfiggroup.h> 0016 0017 0018 #include <KoID.h> 0019 0020 #include "kis_debug.h" 0021 #include "kis_serializable_configuration.h" 0022 0023 0024 const char KisBookmarkedConfigurationManager::ConfigDefault[] = "Default"; 0025 const char KisBookmarkedConfigurationManager::ConfigLastUsed[] = "Last Used"; 0026 0027 struct Q_DECL_HIDDEN KisBookmarkedConfigurationManager::Private { 0028 0029 QString configEntryGroup; 0030 KisSerializableConfigurationFactory* configFactory; 0031 0032 }; 0033 0034 KisBookmarkedConfigurationManager::KisBookmarkedConfigurationManager(const QString & configEntryGroup, KisSerializableConfigurationFactory* configFactory) 0035 : d(new Private) 0036 { 0037 d->configEntryGroup = configEntryGroup; 0038 d->configFactory = configFactory; 0039 } 0040 0041 KisBookmarkedConfigurationManager::~KisBookmarkedConfigurationManager() 0042 { 0043 delete d->configFactory; 0044 delete d; 0045 } 0046 0047 KisSerializableConfigurationSP KisBookmarkedConfigurationManager::load(const QString & configname) const 0048 { 0049 if (!exists(configname)) { 0050 if (configname == KisBookmarkedConfigurationManager::ConfigDefault) 0051 return d->configFactory->createDefault(); 0052 else 0053 return 0; 0054 } 0055 KConfigGroup cfg = KSharedConfig::openConfig()->group(configEntryGroup()); 0056 0057 QDomDocument doc; 0058 doc.setContent(cfg.readEntry<QString>(configname, "")); 0059 QDomElement e = doc.documentElement(); 0060 KisSerializableConfigurationSP config = d->configFactory->create(e); 0061 dbgImage << config << endl; 0062 return config; 0063 } 0064 0065 void KisBookmarkedConfigurationManager::save(const QString & configname, const KisSerializableConfigurationSP config) 0066 { 0067 dbgImage << "Saving configuration " << config << " to " << configname; 0068 if (!config) return; 0069 KConfigGroup cfg = KSharedConfig::openConfig()->group(configEntryGroup()); 0070 cfg.writeEntry(configname, config->toXML()); 0071 } 0072 0073 bool KisBookmarkedConfigurationManager::exists(const QString & configname) const 0074 { 0075 KSharedConfig::Ptr cfg = KSharedConfig::openConfig(); 0076 QMap< QString, QString > m = cfg->entryMap(configEntryGroup()); 0077 return (m.find(configname) != m.end()); 0078 } 0079 0080 QList<QString> KisBookmarkedConfigurationManager::configurations() const 0081 { 0082 KSharedConfig::Ptr cfg = KSharedConfig::openConfig(); 0083 QMap< QString, QString > m = cfg->entryMap(configEntryGroup()); 0084 QList<QString> keys = m.keys(); 0085 QList<QString> configsKey; 0086 Q_FOREACH (const QString & key, keys) { 0087 if (key != KisBookmarkedConfigurationManager::ConfigDefault && key != KisBookmarkedConfigurationManager::ConfigLastUsed) { 0088 configsKey << key; 0089 } 0090 } 0091 return configsKey; 0092 } 0093 0094 KisSerializableConfigurationSP KisBookmarkedConfigurationManager::defaultConfiguration() const 0095 { 0096 if (exists(KisBookmarkedConfigurationManager::ConfigDefault)) { 0097 return load(KisBookmarkedConfigurationManager::ConfigDefault); 0098 } 0099 if (exists(KisBookmarkedConfigurationManager::ConfigLastUsed)) { 0100 return load(KisBookmarkedConfigurationManager::ConfigLastUsed); 0101 } 0102 return 0; 0103 } 0104 0105 QString KisBookmarkedConfigurationManager::configEntryGroup() const 0106 { 0107 return d->configEntryGroup; 0108 } 0109 0110 void KisBookmarkedConfigurationManager::remove(const QString & name) 0111 { 0112 KSharedConfig::Ptr cfg = KSharedConfig::openConfig(); 0113 KConfigGroup group = cfg->group(configEntryGroup()); 0114 group.deleteEntry(name); 0115 } 0116 0117 QString KisBookmarkedConfigurationManager::uniqueName(const KLocalizedString & base) 0118 { 0119 #ifndef QT_NO_DEBUG 0120 QString prev; 0121 #endif 0122 int nb = 1; 0123 while (true) { 0124 QString cur = base.subs(nb++).toString(); 0125 if (!exists(cur)) return cur; 0126 #ifndef QT_NO_DEBUG 0127 Q_ASSERT(prev != cur); 0128 prev = cur; 0129 #endif 0130 } 0131 }