diff options
Diffstat (limited to 'archived/projt-launcher/launcher/icons/IconEntry.cpp')
| -rw-r--r-- | archived/projt-launcher/launcher/icons/IconEntry.cpp | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/archived/projt-launcher/launcher/icons/IconEntry.cpp b/archived/projt-launcher/launcher/icons/IconEntry.cpp new file mode 100644 index 0000000000..d335ad5b7b --- /dev/null +++ b/archived/projt-launcher/launcher/icons/IconEntry.cpp @@ -0,0 +1,134 @@ +// SPDX-License-Identifier: GPL-3.0-only +// SPDX-FileCopyrightText: 2026 Project Tick +// SPDX-FileContributor: Project Tick Team +/* + * ProjT Launcher - Minecraft Launcher + * Copyright (C) 2026 Project Tick + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "IconEntry.hpp" + +namespace projt::icons +{ + IconEntry::ThemeIconProvider IconEntry::s_themeProvider = [](const QString& key) { return QIcon::fromTheme(key); }; + + void IconEntry::setThemeIconProvider(ThemeIconProvider provider) + { + s_themeProvider = provider; + } + + 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: break; + } + return temp; + } + + IconType IconEntry::type() const + { + return m_current_type; + } + + QString IconEntry::name() const + { + if (!m_name.isEmpty()) + { + return m_name; + } + return m_key; + } + + bool IconEntry::has(IconType _type) const + { + return m_images[_type].present(); + } + + QIcon IconEntry::icon() const + { + if (m_current_type == IconType::ToBeDeleted) + { + return QIcon(); + } + auto& icon = m_images[m_current_type].icon; + if (!icon.isNull()) + { + return icon; + } + + if (s_themeProvider) + { + return s_themeProvider(m_images[m_current_type].key); + } + return QIcon::fromTheme(m_images[m_current_type].key); + } + + void IconEntry::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 IconEntry::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 IconEntry::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 IconEntry::getFilePath() const + { + if (m_current_type == IconType::ToBeDeleted) + { + return QString(); + } + return m_images[m_current_type].filename; + } + + bool IconEntry::isBuiltIn() const + { + return m_current_type == IconType::Builtin; + } +} // namespace projt::icons |
