krita/ui
kis_bookmarked_configurations_model.ccGo to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "kis_bookmarked_configurations_model.h"
00020 #include <QList>
00021
00022 #include <kis_debug.h>
00023 #include <klocale.h>
00024
00025 #include <KoID.h>
00026
00027 #include <kis_bookmarked_configuration_manager.h>
00028
00029 struct KisBookmarkedConfigurationsModel::Private {
00030 KisBookmarkedConfigurationManager* bookmarkManager;
00031 QList<QString> configsKey;
00032 };
00033
00034
00035 KisBookmarkedConfigurationsModel::KisBookmarkedConfigurationsModel(KisBookmarkedConfigurationManager* bm) : d(new Private)
00036 {
00037 d->bookmarkManager = bm;
00038 d->configsKey = d->bookmarkManager->configurations();
00039 qSort(d->configsKey);
00040 }
00041
00042 KisBookmarkedConfigurationsModel::~KisBookmarkedConfigurationsModel()
00043 {
00044 delete d;
00045 }
00046
00047 KisBookmarkedConfigurationManager* KisBookmarkedConfigurationsModel::bookmarkedConfigurationManager()
00048 {
00049 return d->bookmarkManager;
00050 }
00051
00052 int KisBookmarkedConfigurationsModel::rowCount(const QModelIndex &parent) const
00053 {
00054 Q_UNUSED(parent);
00055 return 2 + d->configsKey.size();
00056 }
00057
00058 QVariant KisBookmarkedConfigurationsModel::data(const QModelIndex &index, int role) const
00059 {
00060 if (!index.isValid()) {
00061 return QVariant();
00062 }
00063 if (role == Qt::DisplayRole || role == Qt::EditRole) {
00064 switch (index.row()) {
00065 case 0:
00066 return KisBookmarkedConfigurationManager::ConfigDefault.name();
00067 case 1:
00068 return KisBookmarkedConfigurationManager::ConfigLastUsed.name();
00069 default:
00070 return d->configsKey[ index.row() - 2 ];
00071 }
00072 }
00073 return QVariant();
00074 }
00075
00076 bool KisBookmarkedConfigurationsModel::setData(const QModelIndex & index, const QVariant & value, int role)
00077 {
00078 if (role == Qt::EditRole && index.row() >= 2) {
00079 QString name = value.toString();
00080 int idx = index.row() - 2;
00081 KisSerializableConfiguration* config = d->bookmarkManager->load(d->configsKey[idx]);
00082 d->bookmarkManager->remove(d->configsKey[idx]);
00083 d->bookmarkManager->save(name, config);
00084 d->configsKey[idx] = name;
00085
00086 emit(dataChanged(index, index));
00087 return true;
00088 }
00089 return false;
00090 }
00091
00092 KisSerializableConfiguration* KisBookmarkedConfigurationsModel::configuration(const QModelIndex &index) const
00093 {
00094 if (!index.isValid()) return 0;
00095 switch (index.row()) {
00096 case 0:
00097 dbgKrita << "loading default" << endl;
00098 return d->bookmarkManager->load(KisBookmarkedConfigurationManager::ConfigDefault.id());
00099 break;
00100 case 1:
00101 return d->bookmarkManager->load(KisBookmarkedConfigurationManager::ConfigLastUsed.id());
00102 break;
00103 default:
00104 return d->bookmarkManager->load(d->configsKey[ index.row() - 2 ]);
00105 }
00106 }
00107
00108 QModelIndex KisBookmarkedConfigurationsModel::indexFor(const QString& name) const
00109 {
00110 int idx = d->configsKey.indexOf(name);
00111 if (idx == -1) return QModelIndex();
00112 return createIndex(idx + 2, 0, 0);
00113 }
00114
00115 bool KisBookmarkedConfigurationsModel::isIndexDeletable(const QModelIndex &index) const
00116 {
00117 if (!index.isValid() || index.row() < 2) return false;
00118 return true;
00119 }
00120
00121 void KisBookmarkedConfigurationsModel::newConfiguration(KLocalizedString baseName, const KisSerializableConfiguration* config)
00122 {
00123 saveConfiguration(d->bookmarkManager->uniqueName(baseName), config);
00124 }
00125
00126 void KisBookmarkedConfigurationsModel::saveConfiguration(const QString & name, const KisSerializableConfiguration* config)
00127 {
00128 d->bookmarkManager->save(name, config);
00129 if (!d->configsKey.contains(name)) {
00130 beginInsertRows(QModelIndex(), d->configsKey.count() + 2, d->configsKey.count() + 2);
00131 d->configsKey << name;
00132 endInsertRows();
00133 }
00134 }
00135
00136 void KisBookmarkedConfigurationsModel::deleteIndex(const QModelIndex &index)
00137 {
00138 if (!index.isValid() || index.row() < 2) return ;
00139 int idx = index.row() - 2;
00140 d->bookmarkManager->remove(d->configsKey[idx]);
00141 beginRemoveRows(QModelIndex(), idx + 2, idx + 2);
00142 d->configsKey.removeAt(idx);
00143 endRemoveRows();
00144 }
00145
00146 Qt::ItemFlags KisBookmarkedConfigurationsModel::flags(const QModelIndex & index) const
00147 {
00148 if (!index.isValid()) return 0;
00149 switch (index.row()) {
00150 case 0:
00151 return Qt::ItemIsSelectable | Qt::ItemIsEnabled;
00152 case 1:
00153 if (d->bookmarkManager->exists(KisBookmarkedConfigurationManager::ConfigLastUsed.id())) {
00154 return Qt::ItemIsSelectable | Qt::ItemIsEnabled;
00155 } else {
00156 return 0;
00157 }
00158 default:
00159 return Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled;
00160 }
00161 }
|