File indexing completed on 2024-05-12 16:01:26
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_configurations_model.h" 0008 #include <QList> 0009 0010 #include <kis_debug.h> 0011 #include <klocalizedstring.h> 0012 0013 #include <KoID.h> 0014 0015 #include <kis_bookmarked_configuration_manager.h> 0016 0017 struct KisBookmarkedConfigurationsModel::Private { 0018 KisBookmarkedConfigurationManager* bookmarkManager; 0019 QList<QString> configsKey; 0020 }; 0021 0022 0023 KisBookmarkedConfigurationsModel::KisBookmarkedConfigurationsModel(KisBookmarkedConfigurationManager* bm) : d(new Private) 0024 { 0025 d->bookmarkManager = bm; 0026 d->configsKey = d->bookmarkManager->configurations(); 0027 std::sort(d->configsKey.begin(), d->configsKey.end()); 0028 } 0029 0030 KisBookmarkedConfigurationsModel::~KisBookmarkedConfigurationsModel() 0031 { 0032 delete d; 0033 } 0034 0035 KisBookmarkedConfigurationManager* KisBookmarkedConfigurationsModel::bookmarkedConfigurationManager() 0036 { 0037 return d->bookmarkManager; 0038 } 0039 0040 int KisBookmarkedConfigurationsModel::rowCount(const QModelIndex &parent) const 0041 { 0042 Q_UNUSED(parent); 0043 return 2 + d->configsKey.size(); 0044 } 0045 0046 QVariant KisBookmarkedConfigurationsModel::data(const QModelIndex &index, int role) const 0047 { 0048 if (!index.isValid()) { 0049 return QVariant(); 0050 } 0051 if (role == Qt::DisplayRole || role == Qt::EditRole) { 0052 switch (index.row()) { 0053 case 0: 0054 return i18n("Default"); 0055 case 1: 0056 return i18n("Last Used"); 0057 default: 0058 return d->configsKey[ index.row() - 2 ]; 0059 } 0060 } 0061 return QVariant(); 0062 } 0063 0064 bool KisBookmarkedConfigurationsModel::setData(const QModelIndex & index, const QVariant & value, int role) 0065 { 0066 if (role == Qt::EditRole && index.row() >= 2) { 0067 QString name = value.toString(); 0068 int idx = index.row() - 2; 0069 KisSerializableConfigurationSP config = d->bookmarkManager->load(d->configsKey[idx]); 0070 d->bookmarkManager->remove(d->configsKey[idx]); 0071 d->bookmarkManager->save(name, config); 0072 d->configsKey[idx] = name; 0073 0074 emit(dataChanged(index, index)); 0075 return true; 0076 } 0077 return false; 0078 } 0079 0080 KisSerializableConfigurationSP KisBookmarkedConfigurationsModel::configuration(const QModelIndex &index) const 0081 { 0082 if (!index.isValid()) return 0; 0083 switch (index.row()) { 0084 case 0: 0085 dbgKrita << "loading default" << endl; 0086 return d->bookmarkManager->load(KisBookmarkedConfigurationManager::ConfigDefault); 0087 break; 0088 case 1: 0089 return d->bookmarkManager->load(KisBookmarkedConfigurationManager::ConfigLastUsed); 0090 break; 0091 default: 0092 return d->bookmarkManager->load(d->configsKey[ index.row() - 2 ]); 0093 } 0094 } 0095 0096 QModelIndex KisBookmarkedConfigurationsModel::indexFor(const QString& name) const 0097 { 0098 int idx = d->configsKey.indexOf(name); 0099 if (idx == -1) return QModelIndex(); 0100 return createIndex(idx + 2, 0); 0101 } 0102 0103 bool KisBookmarkedConfigurationsModel::isIndexDeletable(const QModelIndex &index) const 0104 { 0105 if (!index.isValid() || index.row() < 2) return false; 0106 return true; 0107 } 0108 0109 void KisBookmarkedConfigurationsModel::newConfiguration(KLocalizedString baseName, const KisSerializableConfigurationSP config) 0110 { 0111 saveConfiguration(d->bookmarkManager->uniqueName(baseName), config); 0112 } 0113 0114 void KisBookmarkedConfigurationsModel::saveConfiguration(const QString & name, const KisSerializableConfigurationSP config) 0115 { 0116 d->bookmarkManager->save(name, config); 0117 if (!d->configsKey.contains(name)) { 0118 beginInsertRows(QModelIndex(), d->configsKey.count() + 2, d->configsKey.count() + 2); 0119 d->configsKey << name; 0120 endInsertRows(); 0121 } 0122 } 0123 0124 void KisBookmarkedConfigurationsModel::deleteIndex(const QModelIndex &index) 0125 { 0126 if (!index.isValid() || index.row() < 2) return ; 0127 int idx = index.row() - 2; 0128 d->bookmarkManager->remove(d->configsKey[idx]); 0129 beginRemoveRows(QModelIndex(), idx + 2, idx + 2); 0130 d->configsKey.removeAt(idx); 0131 endRemoveRows(); 0132 } 0133 0134 Qt::ItemFlags KisBookmarkedConfigurationsModel::flags(const QModelIndex & index) const 0135 { 0136 if (!index.isValid()) return QFlags<Qt::ItemFlag>(); 0137 0138 switch (index.row()) { 0139 case 0: 0140 return Qt::ItemIsSelectable | Qt::ItemIsEnabled; 0141 case 1: 0142 if (d->bookmarkManager->exists(KisBookmarkedConfigurationManager::ConfigLastUsed)) { 0143 return Qt::ItemIsSelectable | Qt::ItemIsEnabled; 0144 } else { 0145 return QFlags<Qt::ItemFlag>(); 0146 } 0147 default: 0148 return Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled; 0149 } 0150 }