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 }