diff options
Diffstat (limited to 'api/gui')
-rw-r--r-- | api/gui/CMakeLists.txt | 34 | ||||
-rw-r--r-- | api/gui/DesktopServices.cpp | 149 | ||||
-rw-r--r-- | api/gui/DesktopServices.h | 37 | ||||
-rw-r--r-- | api/gui/SkinUtils.cpp | 52 | ||||
-rw-r--r-- | api/gui/SkinUtils.h | 25 | ||||
-rw-r--r-- | api/gui/icons/IconList.cpp | 419 | ||||
-rw-r--r-- | api/gui/icons/IconList.h | 88 | ||||
-rw-r--r-- | api/gui/icons/MMCIcon.cpp | 118 | ||||
-rw-r--r-- | api/gui/icons/MMCIcon.h | 51 |
9 files changed, 0 insertions, 973 deletions
diff --git a/api/gui/CMakeLists.txt b/api/gui/CMakeLists.txt deleted file mode 100644 index ad116a43..00000000 --- a/api/gui/CMakeLists.txt +++ /dev/null @@ -1,34 +0,0 @@ -project(MultiMC_gui LANGUAGES CXX) - -set(GUI_SOURCES - DesktopServices.h - DesktopServices.cpp - - # Icons - icons/MMCIcon.h - icons/MMCIcon.cpp - icons/IconList.h - icons/IconList.cpp - - SkinUtils.cpp - SkinUtils.h -) -################################ COMPILE ################################ - -add_library(MultiMC_gui SHARED ${GUI_SOURCES}) -set_target_properties(MultiMC_gui PROPERTIES CXX_VISIBILITY_PRESET hidden VISIBILITY_INLINES_HIDDEN 1) - -generate_export_header(MultiMC_gui) - -# Link -target_link_libraries(MultiMC_gui MultiMC_iconfix MultiMC_logic Qt5::Gui) - -# Mark and export headers -target_include_directories(MultiMC_gui PUBLIC "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}") - -# Install it -install( - TARGETS MultiMC_gui - RUNTIME DESTINATION ${LIBRARY_DEST_DIR} - LIBRARY DESTINATION ${LIBRARY_DEST_DIR} -)
\ No newline at end of file diff --git a/api/gui/DesktopServices.cpp b/api/gui/DesktopServices.cpp deleted file mode 100644 index 5368ddc8..00000000 --- a/api/gui/DesktopServices.cpp +++ /dev/null @@ -1,149 +0,0 @@ -#include "DesktopServices.h" -#include <QDir> -#include <QDesktopServices> -#include <QProcess> -#include <QDebug> - -/** - * This shouldn't exist, but until QTBUG-9328 and other unreported bugs are fixed, it needs to be a thing. - */ -#if defined(Q_OS_LINUX) - -#include <unistd.h> -#include <errno.h> -#include <sys/types.h> -#include <sys/wait.h> - -template <typename T> -bool IndirectOpen(T callable, qint64 *pid_forked = nullptr) -{ - auto pid = fork(); - if(pid_forked) - { - if(pid > 0) - *pid_forked = pid; - else - *pid_forked = 0; - } - if(pid == -1) - { - qWarning() << "IndirectOpen failed to fork: " << errno; - return false; - } - // child - do the stuff - if(pid == 0) - { - // unset all this garbage so it doesn't get passed to the child process - qunsetenv("LD_PRELOAD"); - qunsetenv("LD_LIBRARY_PATH"); - qunsetenv("LD_DEBUG"); - qunsetenv("QT_PLUGIN_PATH"); - qunsetenv("QT_FONTPATH"); - - // open the URL - auto status = callable(); - - // detach from the parent process group. - setsid(); - - // die. now. do not clean up anything, it would just hang forever. - _exit(status ? 0 : 1); - } - else - { - //parent - assume it worked. - int status; - while (waitpid(pid, &status, 0)) - { - if(WIFEXITED(status)) - { - return WEXITSTATUS(status) == 0; - } - if(WIFSIGNALED(status)) - { - return false; - } - } - return true; - } -} -#endif - -namespace DesktopServices { -bool openDirectory(const QString &path, bool ensureExists) -{ - qDebug() << "Opening directory" << path; - QDir parentPath; - QDir dir(path); - if (!dir.exists()) - { - parentPath.mkpath(dir.absolutePath()); - } - auto f = [&]() - { - return QDesktopServices::openUrl(QUrl::fromLocalFile(dir.absolutePath())); - }; -#if defined(Q_OS_LINUX) - return IndirectOpen(f); -#else - return f(); -#endif -} - -bool openFile(const QString &path) -{ - qDebug() << "Opening file" << path; - auto f = [&]() - { - return QDesktopServices::openUrl(QUrl::fromLocalFile(path)); - }; -#if defined(Q_OS_LINUX) - return IndirectOpen(f); -#else - return f(); -#endif -} - -bool openFile(const QString &application, const QString &path, const QString &workingDirectory, qint64 *pid) -{ - qDebug() << "Opening file" << path << "using" << application; -#if defined(Q_OS_LINUX) - // FIXME: the pid here is fake. So if something depends on it, it will likely misbehave - return IndirectOpen([&]() - { - return QProcess::startDetached(application, QStringList() << path, workingDirectory); - }, pid); -#else - return QProcess::startDetached(application, QStringList() << path, workingDirectory, pid); -#endif -} - -bool run(const QString &application, const QStringList &args, const QString &workingDirectory, qint64 *pid) -{ - qDebug() << "Running" << application << "with args" << args.join(' '); -#if defined(Q_OS_LINUX) - // FIXME: the pid here is fake. So if something depends on it, it will likely misbehave - return IndirectOpen([&]() - { - return QProcess::startDetached(application, args, workingDirectory); - }, pid); -#else - return QProcess::startDetached(application, args, workingDirectory, pid); -#endif -} - -bool openUrl(const QUrl &url) -{ - qDebug() << "Opening URL" << url.toString(); - auto f = [&]() - { - return QDesktopServices::openUrl(url); - }; -#if defined(Q_OS_LINUX) - return IndirectOpen(f); -#else - return f(); -#endif -} - -} diff --git a/api/gui/DesktopServices.h b/api/gui/DesktopServices.h deleted file mode 100644 index 606fa52c..00000000 --- a/api/gui/DesktopServices.h +++ /dev/null @@ -1,37 +0,0 @@ -#pragma once - -#include <QUrl> -#include <QString> -#include "multimc_gui_export.h" - -/** - * This wraps around QDesktopServices and adds workarounds where needed - * Use this instead of QDesktopServices! - */ -namespace DesktopServices -{ - /** - * Open a file in whatever application is applicable - */ - MULTIMC_GUI_EXPORT bool openFile(const QString &path); - - /** - * Open a file in the specified application - */ - MULTIMC_GUI_EXPORT bool openFile(const QString &application, const QString &path, const QString & workingDirectory = QString(), qint64 *pid = 0); - - /** - * Run an application - */ - MULTIMC_GUI_EXPORT bool run(const QString &application,const QStringList &args, const QString & workingDirectory = QString(), qint64 *pid = 0); - - /** - * Open a directory - */ - MULTIMC_GUI_EXPORT bool openDirectory(const QString &path, bool ensureExists = false); - - /** - * Open the URL, most likely in a browser. Maybe. - */ - MULTIMC_GUI_EXPORT bool openUrl(const QUrl &url); -} diff --git a/api/gui/SkinUtils.cpp b/api/gui/SkinUtils.cpp deleted file mode 100644 index ec969889..00000000 --- a/api/gui/SkinUtils.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright 2013-2021 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 "SkinUtils.h" -#include "net/HttpMetaCache.h" -#include "Env.h" - -#include <QFile> -#include <QPainter> -#include <QJsonDocument> -#include <QJsonObject> -#include <QJsonArray> - -namespace SkinUtils -{ -/* - * Given a username, return a pixmap of the cached skin (if it exists), QPixmap() otherwise - */ -QPixmap getFaceFromCache(QString username, int height, int width) -{ - QFile fskin(ENV.metacache() - ->resolveEntry("skins", username + ".png") - ->getFullPath()); - - if (fskin.exists()) - { - QPixmap skinTexture(fskin.fileName()); - if(!skinTexture.isNull()) - { - QPixmap skin = QPixmap(8, 8); - QPainter painter(&skin); - painter.drawPixmap(0, 0, skinTexture.copy(8, 8, 8, 8)); - painter.drawPixmap(0, 0, skinTexture.copy(40, 8, 8, 8)); - return skin.scaled(height, width, Qt::KeepAspectRatio); - } - } - - return QPixmap(); -} -} diff --git a/api/gui/SkinUtils.h b/api/gui/SkinUtils.h deleted file mode 100644 index b44f4228..00000000 --- a/api/gui/SkinUtils.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright 2013-2021 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. - */ - -#pragma once - -#include <QPixmap> - -#include "multimc_gui_export.h" - -namespace SkinUtils -{ -QPixmap MULTIMC_GUI_EXPORT getFaceFromCache(QString id, int height = 64, int width = 64); -} diff --git a/api/gui/icons/IconList.cpp b/api/gui/icons/IconList.cpp deleted file mode 100644 index 70350534..00000000 --- a/api/gui/icons/IconList.cpp +++ /dev/null @@ -1,419 +0,0 @@ -/* Copyright 2013-2021 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 <FileSystem.h> -#include <QMap> -#include <QEventLoop> -#include <QMimeData> -#include <QUrl> -#include <QFileSystemWatcher> -#include <QSet> -#include <QDebug> - -#define MAX_SIZE 1024 - -IconList::IconList(const QStringList &builtinPaths, QString path, QObject *parent) : QAbstractListModel(parent) -{ - QSet<QString> builtinNames; - - // add builtin icons - for(auto & builtinPath: builtinPaths) - { - 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()); - is_watching = false; - connect(m_watcher.get(), SIGNAL(directoryChanged(QString)), - SLOT(directoryChanged(QString))); - connect(m_watcher.get(), SIGNAL(fileChanged(QString)), SLOT(fileChanged(QString))); - - directoryChanged(path); -} - -void IconList::directoryChanged(const QString &path) -{ - QDir new_dir (path); - if(m_dir.absolutePath() != new_dir.absolutePath()) - { - m_dir.setPath(path); - m_dir.refresh(); - if(is_watching) - stopWatching(); - startWatching(); - } - if(!m_dir.exists()) - if(!FS::ensureFolderPathExists(m_dir.absolutePath())) - return; - m_dir.refresh(); - auto new_list = m_dir.entryList(QDir::Files, QDir::Name); - for (auto it = new_list.begin(); it != new_list.end(); it++) - { - QString &foo = (*it); - foo = m_dir.filePath(foo); - } - auto new_set = new_list.toSet(); - QList<QString> current_list; - for (auto &it : icons) - { - if (!it.has(IconType::FileBased)) - continue; - current_list.push_back(it.m_images[IconType::FileBased].filename); - } - QSet<QString> current_set = current_list.toSet(); - - QSet<QString> to_remove = current_set; - to_remove -= new_set; - - QSet<QString> to_add = new_set; - to_add -= current_set; - - for (auto remove : to_remove) - { - qDebug() << "Removing " << remove; - QFileInfo rmfile(remove); - QString key = rmfile.baseName(); - int idx = getIconIndex(key); - if (idx == -1) - continue; - icons[idx].remove(IconType::FileBased); - if (icons[idx].type() == IconType::ToBeDeleted) - { - beginRemoveRows(QModelIndex(), idx, idx); - icons.remove(idx); - reindex(); - endRemoveRows(); - } - else - { - dataChanged(index(idx), index(idx)); - } - m_watcher->removePath(remove); - emit iconUpdated(key); - } - - for (auto add : to_add) - { - qDebug() << "Adding " << add; - QFileInfo addfile(add); - QString key = addfile.baseName(); - if (addIcon(key, QString(), addfile.filePath(), IconType::FileBased)) - { - m_watcher->addPath(add); - emit iconUpdated(key); - } - } -} - -void IconList::fileChanged(const QString &path) -{ - qDebug() << "Checking " << path; - QFileInfo checkfile(path); - if (!checkfile.exists()) - return; - QString key = checkfile.baseName(); - int idx = getIconIndex(key); - if (idx == -1) - return; - QIcon icon(path); - if (!icon.availableSizes().size()) - return; - - icons[idx].m_images[IconType::FileBased].icon = icon; - dataChanged(index(idx), index(idx)); - emit iconUpdated(key); -} - -void IconList::SettingChanged(const Setting &setting, QVariant value) -{ - if(setting.id() != "IconsDir") - return; - - directoryChanged(value.toString()); -} - -void IconList::startWatching() -{ - auto abs_path = m_dir.absolutePath(); - FS::ensureFolderPathExists(abs_path); - is_watching = m_watcher->addPath(abs_path); - if (is_watching) - { - qDebug() << "Started watching " << abs_path; - } - else - { - qDebug() << "Failed to start watching " << abs_path; - } -} - -void IconList::stopWatching() -{ - m_watcher->removePaths(m_watcher->files()); - m_watcher->removePaths(m_watcher->directories()); - is_watching = false; -} - -QStringList IconList::mimeTypes() const -{ - QStringList types; - types << "text/uri-list"; - return types; -} -Qt::DropActions IconList::supportedDropActions() const -{ - return Qt::CopyAction; -} - -bool IconList::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) -{ - if (action == Qt::IgnoreAction) - return true; - // check if the action is supported - if (!data || !(action & supportedDropActions())) - return false; - - // files dropped from outside? - if (data->hasUrls()) - { - auto urls = data->urls(); - QStringList iconFiles; - for (auto url : urls) - { - // only local files may be dropped... - if (!url.isLocalFile()) - continue; - iconFiles += url.toLocalFile(); - } - installIcons(iconFiles); - return true; - } - return false; -} - -Qt::ItemFlags IconList::flags(const QModelIndex &index) const -{ - 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 -{ - if (!index.isValid()) - return QVariant(); - - int row = index.row(); - - if (row < 0 || row >= icons.size()) - return QVariant(); - - switch (role) - { - case Qt::DecorationRole: - return icons[row].icon(); - case Qt::DisplayRole: - return icons[row].name(); - case Qt::UserRole: - return icons[row].m_key; - default: - return QVariant(); - } -} - -int IconList::rowCount(const QModelIndex &parent) const -{ - return icons.size(); -} - -void IconList::installIcons(const QStringList &iconFiles) -{ - for (QString file : iconFiles) - { - QFileInfo fileinfo(file); - if (!fileinfo.isReadable() || !fileinfo.isFile()) - continue; - QString target = FS::PathCombine(m_dir.dirName(), fileinfo.fileName()); - - QString suffix = fileinfo.suffix(); - if (suffix != "jpeg" && suffix != "png" && suffix != "jpg" && suffix != "ico" && suffix != "svg" && suffix != "gif") - continue; - - if (!QFile::copy(file, target)) - continue; - } -} - -void IconList::installIcon(const QString &file, const QString &name) -{ - QFileInfo fileinfo(file); - if(!fileinfo.isReadable() || !fileinfo.isFile()) - return; - - QString target = FS::PathCombine(m_dir.dirName(), name); - - QFile::copy(file, target); -} - -bool IconList::iconFileExists(const QString &key) const -{ - auto iconEntry = icon(key); - if(!iconEntry) - { - return false; - } - return iconEntry->has(IconType::FileBased); -} - -const MMCIcon *IconList::icon(const QString &key) const -{ - int iconIdx = getIconIndex(key); - if (iconIdx == -1) - return nullptr; - return &icons[iconIdx]; -} - -bool IconList::deleteIcon(const QString &key) -{ - int iconIdx = getIconIndex(key); - if (iconIdx == -1) - return false; - auto &iconEntry = icons[iconIdx]; - if (iconEntry.has(IconType::FileBased)) - { - return QFile::remove(iconEntry.m_images[IconType::FileBased].filename); - } - 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? - QIcon icon(path); - if (icon.isNull()) - return false; - auto iter = name_index.find(key); - if (iter != name_index.end()) - { - auto &oldOne = icons[*iter]; - oldOne.replace(type, icon, path); - 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 = name; - mmc_icon.m_key = key; - mmc_icon.replace(type, icon, path); - icons.push_back(mmc_icon); - name_index[key] = icons.size() - 1; - } - endInsertRows(); - return true; - } -} - -void IconList::saveIcon(const QString &key, const QString &path, const char * format) const -{ - auto icon = getIcon(key); - auto pixmap = icon.pixmap(128, 128); - pixmap.save(path, format); -} - - -void IconList::reindex() -{ - name_index.clear(); - int i = 0; - for (auto &iter : icons) - { - name_index[iter.m_key] = i; - i++; - } -} - -QIcon IconList::getIcon(const QString &key) const -{ - int icon_index = getIconIndex(key); - - if (icon_index != -1) - return icons[icon_index].icon(); - - // Fallback for icons that don't exist. - icon_index = getIconIndex("infinity"); - - if (icon_index != -1) - return icons[icon_index].icon(); - return QIcon(); -} - -int IconList::getIconIndex(const QString &key) const -{ - auto iter = name_index.find(key == "default" ? "infinity" : key); - if (iter != name_index.end()) - return *iter; - - return -1; -} - -QString IconList::getDirectory() const -{ - return m_dir.absolutePath(); -} - -//#include "IconList.moc" diff --git a/api/gui/icons/IconList.h b/api/gui/icons/IconList.h deleted file mode 100644 index f07415fa..00000000 --- a/api/gui/icons/IconList.h +++ /dev/null @@ -1,88 +0,0 @@ -/* Copyright 2013-2021 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. - */ - -#pragma once - -#include <QMutex> -#include <QAbstractListModel> -#include <QFile> -#include <QDir> -#include <QtGui/QIcon> -#include <memory> -#include "MMCIcon.h" -#include "settings/Setting.h" -#include "Env.h" // there is a global icon list inside Env. -#include <icons/IIconList.h> - -#include "multimc_gui_export.h" - -class QFileSystemWatcher; - -class MULTIMC_GUI_EXPORT IconList : public QAbstractListModel, public IIconList -{ - Q_OBJECT -public: - explicit IconList(const QStringList &builtinPaths, QString path, QObject *parent = 0); - virtual ~IconList() {}; - - QIcon getIcon(const QString &key) const; - int getIconIndex(const QString &key) const; - QString getDirectory() const; - - virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; - virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override; - - bool addThemeIcon(const QString &key); - bool addIcon(const QString &key, const QString &name, const QString &path, const IconType type) override; - void saveIcon(const QString &key, const QString &path, const char * format) const override; - bool deleteIcon(const QString &key) override; - bool iconFileExists(const QString &key) const override; - - virtual QStringList mimeTypes() const override; - virtual Qt::DropActions supportedDropActions() const override; - virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override; - virtual Qt::ItemFlags flags(const QModelIndex &index) const override; - - void installIcons(const QStringList &iconFiles) override; - void installIcon(const QString &file, const QString &name) override; - - const MMCIcon * icon(const QString &key) const; - - void startWatching(); - void stopWatching(); - -signals: - void iconUpdated(QString key); - -private: - // hide copy constructor - IconList(const IconList &) = delete; - // hide assign op - IconList &operator=(const IconList &) = delete; - void reindex(); - -public slots: - void directoryChanged(const QString &path); - -protected slots: - void fileChanged(const QString &path); - void SettingChanged(const Setting & setting, QVariant value); -private: - shared_qobject_ptr<QFileSystemWatcher> m_watcher; - bool is_watching; - QMap<QString, int> name_index; - QVector<MMCIcon> icons; - QDir m_dir; -}; diff --git a/api/gui/icons/MMCIcon.cpp b/api/gui/icons/MMCIcon.cpp deleted file mode 100644 index f0b82ec9..00000000 --- a/api/gui/icons/MMCIcon.cpp +++ /dev/null @@ -1,118 +0,0 @@ -/* Copyright 2013-2021 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 "MMCIcon.h" -#include <QFileInfo> -#include <xdgicon.h> - -IconType operator--(IconType &t, int) -{ - IconType temp = t; - switch (t) - { - case IconType::Builtin: - t = IconType::ToBeDeleted; - break; - case IconType::Transient: - t = IconType::Builtin; - break; - case IconType::FileBased: - t = IconType::Transient; - break; - default: - { - } - } - return temp; -} - -IconType MMCIcon::type() const -{ - return m_current_type; -} - -QString MMCIcon::name() const -{ - if (m_name.size()) - return m_name; - return m_key; -} - -bool MMCIcon::has(IconType _type) const -{ - return m_images[_type].present(); -} - -QIcon MMCIcon::icon() const -{ - if (m_current_type == IconType::ToBeDeleted) - return QIcon(); - auto & icon = m_images[m_current_type].icon; - if(!icon.isNull()) - return icon; - // FIXME: inject this. - return XdgIcon::fromTheme(m_images[m_current_type].key); -} - -void MMCIcon::remove(IconType rm_type) -{ - m_images[rm_type].filename = QString(); - m_images[rm_type].icon = QIcon(); - for (auto iter = rm_type; iter != IconType::ToBeDeleted; iter--) - { - if (m_images[iter].present()) - { - m_current_type = iter; - return; - } - } - m_current_type = IconType::ToBeDeleted; -} - -void MMCIcon::replace(IconType new_type, QIcon icon, QString path) -{ - if (new_type > m_current_type || m_current_type == IconType::ToBeDeleted) - { - m_current_type = new_type; - } - m_images[new_type].icon = icon; - m_images[new_type].filename = path; - m_images[new_type].key = QString(); -} - -void MMCIcon::replace(IconType new_type, const QString& key) -{ - if (new_type > m_current_type || m_current_type == IconType::ToBeDeleted) - { - m_current_type = new_type; - } - m_images[new_type].icon = QIcon(); - m_images[new_type].filename = QString(); - m_images[new_type].key = key; -} - -QString MMCIcon::getFilePath() const -{ - if(m_current_type == IconType::ToBeDeleted){ - return QString(); - } - return m_images[m_current_type].filename; -} - - -bool MMCIcon::isBuiltIn() const -{ - return m_current_type == IconType::Builtin; -} diff --git a/api/gui/icons/MMCIcon.h b/api/gui/icons/MMCIcon.h deleted file mode 100644 index fd14b5b7..00000000 --- a/api/gui/icons/MMCIcon.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright 2013-2021 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. - */ - -#pragma once -#include <QString> -#include <QDateTime> -#include <QIcon> -#include <icons/IIconList.h> - -#include "multimc_gui_export.h" - -struct MULTIMC_GUI_EXPORT MMCImage -{ - QIcon icon; - QString key; - QString filename; - bool present() const - { - return !icon.isNull() || !key.isEmpty(); - } -}; - -struct MULTIMC_GUI_EXPORT MMCIcon -{ - QString m_key; - QString m_name; - MMCImage m_images[ICONS_TOTAL]; - IconType m_current_type = ToBeDeleted; - - IconType type() const; - QString name() const; - bool has(IconType _type) const; - QIcon icon() const; - void remove(IconType rm_type); - void replace(IconType new_type, QIcon icon, QString path = QString()); - void replace(IconType new_type, const QString &key); - bool isBuiltIn() const; - QString getFilePath() const; -}; |