diff options
author | Petr Mrázek <peterix@gmail.com> | 2016-11-10 02:54:53 +0100 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2016-11-10 02:54:53 +0100 |
commit | f9d94a45eebd5fb7b14d4bcc6ad77cb96ecdd771 (patch) | |
tree | 0b8f492b470c835bc814ebc786dc73bfe2b0f3f4 /api/gui/icons/IconList.cpp | |
parent | 27e26a656b8d9f0aef1dd6a18b50ecc9465494bd (diff) | |
download | MultiMC-f9d94a45eebd5fb7b14d4bcc6ad77cb96ecdd771.tar MultiMC-f9d94a45eebd5fb7b14d4bcc6ad77cb96ecdd771.tar.gz MultiMC-f9d94a45eebd5fb7b14d4bcc6ad77cb96ecdd771.tar.lz MultiMC-f9d94a45eebd5fb7b14d4bcc6ad77cb96ecdd771.tar.xz MultiMC-f9d94a45eebd5fb7b14d4bcc6ad77cb96ecdd771.zip |
NOISSUE allow using icon themes for instances and instance badges
Diffstat (limited to 'api/gui/icons/IconList.cpp')
-rw-r--r-- | api/gui/icons/IconList.cpp | 47 |
1 files changed, 41 insertions, 6 deletions
diff --git a/api/gui/icons/IconList.cpp b/api/gui/icons/IconList.cpp index bdcada32..100a69c3 100644 --- a/api/gui/icons/IconList.cpp +++ b/api/gui/icons/IconList.cpp @@ -25,15 +25,23 @@ #define MAX_SIZE 1024 -IconList::IconList(QString builtinPath, QString path, QObject *parent) : QAbstractListModel(parent) +IconList::IconList(const QStringList &builtinPaths, QString path, QObject *parent) : QAbstractListModel(parent) { + QSet<QString> builtinNames; + // add builtin icons - QDir instance_icons(builtinPath); - auto file_info_list = instance_icons.entryInfoList(QDir::Files, QDir::Name); - for (auto file_info : file_info_list) + for(auto & builtinPath: builtinPaths) { - QString key = file_info.baseName(); - addIcon(key, key, file_info.absoluteFilePath(), IconType::Builtin); + QDir instance_icons(builtinPath); + auto file_info_list = instance_icons.entryInfoList(QDir::Files, QDir::Name); + for (auto file_info : file_info_list) + { + builtinNames.insert(file_info.baseName()); + } + } + for(auto & builtinName : builtinNames) + { + addThemeIcon(builtinName); } m_watcher.reset(new QFileSystemWatcher()); @@ -292,6 +300,33 @@ bool IconList::deleteIcon(const QString &key) return false; } +bool IconList::addThemeIcon(const QString& key) +{ + auto iter = name_index.find(key); + if (iter != name_index.end()) + { + auto &oldOne = icons[*iter]; + oldOne.replace(Builtin, key); + dataChanged(index(*iter), index(*iter)); + return true; + } + else + { + // add a new icon + beginInsertRows(QModelIndex(), icons.size(), icons.size()); + { + MMCIcon mmc_icon; + mmc_icon.m_name = key; + mmc_icon.m_key = key; + mmc_icon.replace(Builtin, key); + icons.push_back(mmc_icon); + name_index[key] = icons.size() - 1; + } + endInsertRows(); + return true; + } +} + bool IconList::addIcon(const QString &key, const QString &name, const QString &path, const IconType type) { // replace the icon even? is the input valid? |