diff options
Diffstat (limited to 'logic/lists/IconList.cpp')
-rw-r--r-- | logic/lists/IconList.cpp | 146 |
1 files changed, 80 insertions, 66 deletions
diff --git a/logic/lists/IconList.cpp b/logic/lists/IconList.cpp index 6988d02f..ecfb8c3c 100644 --- a/logic/lists/IconList.cpp +++ b/logic/lists/IconList.cpp @@ -1,3 +1,18 @@ +/* Copyright 2013 MultiMC Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + #include "IconList.h" #include <pathutils.h> #include <QMap> @@ -27,22 +42,21 @@ public: } }; - IconList::IconList() : QAbstractListModel(), d(new Private()) { QDir instance_icons(":/icons/instances/"); auto file_info_list = instance_icons.entryInfoList(QDir::Files, QDir::Name); - for(auto file_info: file_info_list) + for (auto file_info : file_info_list) { QString key = file_info.baseName(); addIcon(key, key, file_info.absoluteFilePath(), true); } - + // FIXME: get from settings ensureFolderPathExists("icons"); QDir user_icons("icons"); file_info_list = user_icons.entryInfoList(QDir::Files, QDir::Name); - for(auto file_info: file_info_list) + for (auto file_info : file_info_list) { QString filename = file_info.absoluteFilePath(); QString key = file_info.baseName(); @@ -67,16 +81,17 @@ Qt::DropActions IconList::supportedDropActions() const return Qt::CopyAction; } -bool IconList::dropMimeData ( const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent ) +bool IconList::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, + const QModelIndex &parent) { if (action == Qt::IgnoreAction) - return true; + return true; // check if the action is supported if (!data || !(action & supportedDropActions())) return false; // files dropped from outside? - if(data->hasUrls()) + if (data->hasUrls()) { /* bool was_watching = is_watching; @@ -85,10 +100,10 @@ bool IconList::dropMimeData ( const QMimeData* data, Qt::DropAction action, int */ auto urls = data->urls(); QStringList iconFiles; - for(auto url: urls) + for (auto url : urls) { // only local files may be dropped... - if(!url.isLocalFile()) + if (!url.isLocalFile()) continue; iconFiles += url.toLocalFile(); } @@ -102,73 +117,73 @@ bool IconList::dropMimeData ( const QMimeData* data, Qt::DropAction action, int return false; } -Qt::ItemFlags IconList::flags ( const QModelIndex& index ) const +Qt::ItemFlags IconList::flags(const QModelIndex &index) const { - Qt::ItemFlags defaultFlags = QAbstractListModel::flags ( index ); + Qt::ItemFlags defaultFlags = QAbstractListModel::flags(index); if (index.isValid()) return Qt::ItemIsDropEnabled | defaultFlags; else return Qt::ItemIsDropEnabled | defaultFlags; } -QVariant IconList::data ( const QModelIndex& index, int role ) const +QVariant IconList::data(const QModelIndex &index, int role) const { - if(!index.isValid()) + if (!index.isValid()) return QVariant(); - + int row = index.row(); - - if(row < 0 || row >= d->icons.size()) + + if (row < 0 || row >= d->icons.size()) return QVariant(); - - switch(role) + + switch (role) { - case Qt::DecorationRole: - return d->icons[row].icon; - case Qt::DisplayRole: - return d->icons[row].name; - case Qt::UserRole: - return d->icons[row].key; - default: - return QVariant(); + case Qt::DecorationRole: + return d->icons[row].icon; + case Qt::DisplayRole: + return d->icons[row].name; + case Qt::UserRole: + return d->icons[row].key; + default: + return QVariant(); } } -int IconList::rowCount ( const QModelIndex& parent ) const +int IconList::rowCount(const QModelIndex &parent) const { return d->icons.size(); } -void IconList::installIcons ( QStringList iconFiles ) +void IconList::installIcons(QStringList iconFiles) { - for(QString file: iconFiles) + for (QString file : iconFiles) { QFileInfo fileinfo(file); - if(!fileinfo.isReadable() || !fileinfo.isFile()) + if (!fileinfo.isReadable() || !fileinfo.isFile()) continue; QString target = PathCombine("icons", fileinfo.fileName()); - + QString suffix = fileinfo.suffix(); - if(suffix != "jpeg" && suffix != "png" && suffix != "jpg") + if (suffix != "jpeg" && suffix != "png" && suffix != "jpg") continue; - - if(!QFile::copy(file, target)) + + if (!QFile::copy(file, target)) continue; - + QString key = fileinfo.baseName(); addIcon(key, key, target); } } -bool IconList::deleteIcon ( QString key ) +bool IconList::deleteIcon(QString key) { int iconIdx = getIconIndex(key); - if(iconIdx == -1) + if (iconIdx == -1) return false; - auto & iconEntry = d->icons[iconIdx]; - if(iconEntry.is_builtin) + auto &iconEntry = d->icons[iconIdx]; + if (iconEntry.is_builtin) return false; - if(QFile::remove(iconEntry.filename)) + if (QFile::remove(iconEntry.filename)) { beginRemoveRows(QModelIndex(), iconIdx, iconIdx); d->icons.remove(iconIdx); @@ -178,35 +193,36 @@ bool IconList::deleteIcon ( QString key ) return true; } -bool IconList::addIcon ( QString key, QString name, QString path, bool is_builtin ) +bool IconList::addIcon(QString key, QString name, QString path, bool is_builtin) { auto iter = d->index.find(key); - if(iter != d->index.end()) + if (iter != d->index.end()) { - if(d->icons[*iter].is_builtin) + if (d->icons[*iter].is_builtin) return false; - + QIcon icon(path); - if(icon.isNull()) + if (icon.isNull()) return false; - - auto & oldOne = d->icons[*iter]; - - if(!QFile::remove(oldOne.filename)) + + auto &oldOne = d->icons[*iter]; + + if (!QFile::remove(oldOne.filename)) return false; // replace the icon oldOne = {key, name, icon, is_builtin, path}; - dataChanged(index(*iter),index(*iter)); + dataChanged(index(*iter), index(*iter)); return true; } else { QIcon icon(path); - if(icon.isNull()) return false; - + if (icon.isNull()) + return false; + // add a new icon - beginInsertRows(QModelIndex(), d->icons.size(),d->icons.size()); + beginInsertRows(QModelIndex(), d->icons.size(), d->icons.size()); d->icons.push_back({key, name, icon, is_builtin, path}); d->index[key] = d->icons.size() - 1; endInsertRows(); @@ -218,39 +234,37 @@ void IconList::reindex() { d->index.clear(); int i = 0; - for(auto& iter: d->icons) + for (auto &iter : d->icons) { d->index[iter.key] = i; i++; } } - -QIcon IconList::getIcon ( QString key ) +QIcon IconList::getIcon(QString key) { int icon_index = getIconIndex(key); - if(icon_index != -1) + if (icon_index != -1) return d->icons[icon_index].icon; - + // Fallback for icons that don't exist. icon_index = getIconIndex("infinity"); - - if(icon_index != -1) + + if (icon_index != -1) return d->icons[icon_index].icon; return QIcon(); } -int IconList::getIconIndex ( QString key ) +int IconList::getIconIndex(QString key) { - if(key == "default") + if (key == "default") key = "infinity"; - + auto iter = d->index.find(key); - if(iter != d->index.end()) + if (iter != d->index.end()) return *iter; - - + return -1; } |