From f9d94a45eebd5fb7b14d4bcc6ad77cb96ecdd771 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Thu, 10 Nov 2016 02:54:53 +0100 Subject: NOISSUE allow using icon themes for instances and instance badges --- api/gui/icons/IconList.cpp | 47 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 6 deletions(-) (limited to 'api/gui/icons/IconList.cpp') 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 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? -- cgit v1.2.3