krita/ui

kis_bookmarked_configurations_model.cc

Go to the documentation of this file.
00001 /*
00002  *  Copyright (c) 2007 Cyrille Berger <cberger@cberger.net>
00003  *
00004  *  This program is free software; you can redistribute it and/or modify
00005  *  it under the terms of the GNU General Public License as published by
00006  *  the Free Software Foundation; either version 2 of the License, or
00007  *  (at your option) any later version.
00008  *
00009  *  This program is distributed in the hope that it will be useful,
00010  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012  *  GNU General Public License for more details.
00013  *
00014  *  You should have received a copy of the GNU General Public License
00015  *  along with this program; if not, write to the Free Software
00016  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
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 }