summaryrefslogtreecommitdiffstats
path: root/api/gui/icons/IconList.cpp
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2016-11-10 02:54:53 +0100
committerPetr Mrázek <peterix@gmail.com>2016-11-10 02:54:53 +0100
commitf9d94a45eebd5fb7b14d4bcc6ad77cb96ecdd771 (patch)
tree0b8f492b470c835bc814ebc786dc73bfe2b0f3f4 /api/gui/icons/IconList.cpp
parent27e26a656b8d9f0aef1dd6a18b50ecc9465494bd (diff)
downloadMultiMC-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.cpp47
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?