diff --git a/lib/libimhex/include/hex/api/content_registry.hpp b/lib/libimhex/include/hex/api/content_registry.hpp index c0df93dd8..0264c692a 100644 --- a/lib/libimhex/include/hex/api/content_registry.hpp +++ b/lib/libimhex/include/hex/api/content_registry.hpp @@ -1014,12 +1014,17 @@ EXPORT_MODULE namespace hex { namespace impl { - void addProviderName(const UnlocalizedString &unlocalizedName); + void addProviderName(const UnlocalizedString &unlocalizedName, const char *icon); using ProviderCreationFunction = std::function()>; void add(const std::string &typeName, ProviderCreationFunction creationFunction); - const std::vector& getEntries(); + struct Entry { + UnlocalizedString unlocalizedName; + const char *icon; + }; + + const std::vector& getEntries(); } @@ -1030,14 +1035,15 @@ EXPORT_MODULE namespace hex { */ template T> void add(bool addToList = true) { - auto typeName = T().getTypeName(); + const T provider; + auto typeName = provider.getTypeName(); impl::add(typeName, []() -> std::unique_ptr { return std::make_unique(); }); if (addToList) - impl::addProviderName(typeName); + impl::addProviderName(typeName, provider.getIcon()); } } diff --git a/lib/libimhex/include/hex/providers/memory_provider.hpp b/lib/libimhex/include/hex/providers/memory_provider.hpp index b413ec555..439e883b2 100644 --- a/lib/libimhex/include/hex/providers/memory_provider.hpp +++ b/lib/libimhex/include/hex/providers/memory_provider.hpp @@ -39,6 +39,10 @@ namespace hex::prv { [[nodiscard]] std::string getName() const override { return m_name; } [[nodiscard]] UnlocalizedString getTypeName() const override { return "MemoryProvider"; } + + [[nodiscard]] const char* getIcon() const override { + return ""; + } private: void renameFile(); diff --git a/lib/libimhex/include/hex/providers/provider.hpp b/lib/libimhex/include/hex/providers/provider.hpp index a1586093e..766a18b6f 100644 --- a/lib/libimhex/include/hex/providers/provider.hpp +++ b/lib/libimhex/include/hex/providers/provider.hpp @@ -199,13 +199,19 @@ namespace hex::prv { [[nodiscard]] virtual UnlocalizedString getTypeName() const = 0; /** - * @brief Gets a human readable representation of the current provider + * @brief Gets a human-readable representation of the current provider * @note This is mainly used to display the provider in the UI. For example, the file provider * will return the file name here * @return The name of the current provider */ [[nodiscard]] virtual std::string getName() const = 0; + /** + * @brief Gets the icon of this provider + * @return The icon string + */ + [[nodiscard]] virtual const char* getIcon() const = 0; + bool resize(u64 newSize); void insert(u64 offset, u64 size); void remove(u64 offset, u64 size); diff --git a/lib/libimhex/include/hex/test/test_provider.hpp b/lib/libimhex/include/hex/test/test_provider.hpp index fdfab827f..256ee556f 100644 --- a/lib/libimhex/include/hex/test/test_provider.hpp +++ b/lib/libimhex/include/hex/test/test_provider.hpp @@ -27,6 +27,10 @@ namespace hex::test { return ""; } + [[nodiscard]] const char* getIcon() const override { + return ""; + } + void readRaw(u64 offset, void *buffer, size_t size) override { if (offset + size > m_data->size()) return; diff --git a/lib/libimhex/include/hex/ui/view.hpp b/lib/libimhex/include/hex/ui/view.hpp index 0b729d92a..b3106bd5a 100644 --- a/lib/libimhex/include/hex/ui/view.hpp +++ b/lib/libimhex/include/hex/ui/view.hpp @@ -173,7 +173,7 @@ namespace hex { */ class View::Floating : public View::Window { public: - explicit Floating(UnlocalizedString unlocalizedName) : Window(std::move(unlocalizedName), "") {} + explicit Floating(UnlocalizedString unlocalizedName, const char *icon) : Window(std::move(unlocalizedName), icon) {} [[nodiscard]] ImGuiWindowFlags getWindowFlags() const override { return ImGuiWindowFlags_NoDocking; } [[nodiscard]] bool shouldStoreWindowState() const override { return false; } @@ -184,7 +184,7 @@ namespace hex { */ class View::Modal : public View { public: - explicit Modal(UnlocalizedString unlocalizedName) : View(std::move(unlocalizedName), "") {} + explicit Modal(UnlocalizedString unlocalizedName, const char *icon) : View(std::move(unlocalizedName), icon) {} void draw() final { if (this->shouldDraw()) { @@ -193,7 +193,8 @@ namespace hex { ImGui::SetNextWindowPos(ImGui::GetMainViewport()->GetCenter(), ImGuiCond_Appearing, ImVec2(0.5F, 0.5F)); ImGui::SetNextWindowSizeConstraints(this->getMinSize(), this->getMaxSize()); - if (ImGui::BeginPopupModal(View::toWindowName(this->getUnlocalizedName()).c_str(), this->hasCloseButton() ? &this->getWindowOpenState() : nullptr, ImGuiWindowFlags_NoCollapse | this->getWindowFlags())) { + const auto title = fmt::format("{} {}", this->getIcon(), View::toWindowName(this->getUnlocalizedName())); + if (ImGui::BeginPopupModal(title.c_str(), this->hasCloseButton() ? &this->getWindowOpenState() : nullptr, ImGuiWindowFlags_NoCollapse | this->getWindowFlags())) { this->drawContent(); ImGui::EndPopup(); diff --git a/lib/libimhex/source/api/content_registry.cpp b/lib/libimhex/source/api/content_registry.cpp index c88e9d22c..2c4b8f68a 100644 --- a/lib/libimhex/source/api/content_registry.cpp +++ b/lib/libimhex/source/api/content_registry.cpp @@ -1080,15 +1080,15 @@ namespace hex { }); } - static AutoReset> s_providerNames; - const std::vector& getEntries() { + static AutoReset> s_providerNames; + const std::vector& getEntries() { return *s_providerNames; } - void addProviderName(const UnlocalizedString &unlocalizedName) { + void addProviderName(const UnlocalizedString &unlocalizedName, const char *icon) { log::debug("Registered new provider: {}", unlocalizedName.get()); - s_providerNames->push_back(unlocalizedName); + s_providerNames->emplace_back(unlocalizedName, icon); } } diff --git a/lib/libimhex/source/helpers/patches.cpp b/lib/libimhex/source/helpers/patches.cpp index 1285e0b15..42d1601d9 100644 --- a/lib/libimhex/source/helpers/patches.cpp +++ b/lib/libimhex/source/helpers/patches.cpp @@ -77,6 +77,10 @@ namespace hex { return ""; } + [[nodiscard]] const char* getIcon() const override { + return ""; + } + [[nodiscard]] UnlocalizedString getTypeName() const override { return ""; } const std::map& getPatches() const { diff --git a/plugins/builtin/include/content/providers/disk_provider.hpp b/plugins/builtin/include/content/providers/disk_provider.hpp index efc07f019..bd8e75d6f 100644 --- a/plugins/builtin/include/content/providers/disk_provider.hpp +++ b/plugins/builtin/include/content/providers/disk_provider.hpp @@ -6,6 +6,7 @@ #include #include #include +#include #include namespace hex::plugin::builtin { @@ -44,6 +45,10 @@ namespace hex::plugin::builtin { return "hex.builtin.provider.disk"; } + [[nodiscard]] const char* getIcon() const override { + return ICON_VS_SAVE; + } + [[nodiscard]] std::pair getRegionValidity(u64 address) const override; std::variant queryInformation(const std::string &category, const std::string &argument) override; diff --git a/plugins/builtin/include/content/providers/file_provider.hpp b/plugins/builtin/include/content/providers/file_provider.hpp index 1c86ca3a2..b8d061033 100644 --- a/plugins/builtin/include/content/providers/file_provider.hpp +++ b/plugins/builtin/include/content/providers/file_provider.hpp @@ -6,6 +6,7 @@ #include #include +#include namespace hex::plugin::builtin { @@ -52,6 +53,10 @@ namespace hex::plugin::builtin { return "hex.builtin.provider.file"; } + [[nodiscard]] const char* getIcon() const override { + return ICON_VS_FILE_BINARY; + } + [[nodiscard]] std::pair getRegionValidity(u64 address) const override; void convertToMemoryFile(); @@ -80,4 +85,4 @@ namespace hex::plugin::builtin { static std::set s_openedFiles; }; -} \ No newline at end of file +} diff --git a/plugins/builtin/include/content/providers/gdb_provider.hpp b/plugins/builtin/include/content/providers/gdb_provider.hpp index 9fb0b76d5..eec57c0df 100644 --- a/plugins/builtin/include/content/providers/gdb_provider.hpp +++ b/plugins/builtin/include/content/providers/gdb_provider.hpp @@ -8,6 +8,7 @@ #include #include #include +#include #include namespace hex::plugin::builtin { @@ -48,6 +49,10 @@ namespace hex::plugin::builtin { return "hex.builtin.provider.gdb"; } + [[nodiscard]] const char* getIcon() const override { + return ICON_VS_CHIP; + } + [[nodiscard]] std::pair getRegionValidity(u64 address) const override; std::variant queryInformation(const std::string &category, const std::string &argument) override; diff --git a/plugins/builtin/include/content/providers/intel_hex_provider.hpp b/plugins/builtin/include/content/providers/intel_hex_provider.hpp index 6e61f0de5..4fce281da 100644 --- a/plugins/builtin/include/content/providers/intel_hex_provider.hpp +++ b/plugins/builtin/include/content/providers/intel_hex_provider.hpp @@ -1,5 +1,6 @@ #pragma once +#include #include #include @@ -38,6 +39,10 @@ namespace hex::plugin::builtin { return "hex.builtin.provider.intel_hex"; } + [[nodiscard]] const char* getIcon() const override { + return ICON_VS_TABLE; + } + [[nodiscard]] bool handleFilePicker() override; std::pair getRegionValidity(u64 address) const override; diff --git a/plugins/builtin/include/content/providers/memory_file_provider.hpp b/plugins/builtin/include/content/providers/memory_file_provider.hpp index cdf40e2c2..9e7df4542 100644 --- a/plugins/builtin/include/content/providers/memory_file_provider.hpp +++ b/plugins/builtin/include/content/providers/memory_file_provider.hpp @@ -1,5 +1,6 @@ #pragma once +#include #include namespace hex::plugin::builtin { @@ -36,6 +37,10 @@ namespace hex::plugin::builtin { return "hex.builtin.provider.mem_file"; } + [[nodiscard]] const char* getIcon() const override { + return ICON_VS_FILE_BINARY; + } + [[nodiscard]] std::pair getRegionValidity(u64 address) const override; void loadSettings(const nlohmann::json &settings) override; diff --git a/plugins/builtin/include/content/providers/null_provider.hpp b/plugins/builtin/include/content/providers/null_provider.hpp index 2d69d9d10..4aadb7f91 100644 --- a/plugins/builtin/include/content/providers/null_provider.hpp +++ b/plugins/builtin/include/content/providers/null_provider.hpp @@ -44,6 +44,10 @@ namespace hex::plugin::builtin { [[nodiscard]] std::string getName() const override { return "ImHex"; } + [[nodiscard]] const char* getIcon() const override { + return ""; + } + void loadSettings(const nlohmann::json &settings) override { std::ignore = settings; } [[nodiscard]] nlohmann::json storeSettings(nlohmann::json settings) const override { return settings; } diff --git a/plugins/builtin/include/content/providers/process_memory_provider.hpp b/plugins/builtin/include/content/providers/process_memory_provider.hpp index aaedbdb19..ed57b094d 100644 --- a/plugins/builtin/include/content/providers/process_memory_provider.hpp +++ b/plugins/builtin/include/content/providers/process_memory_provider.hpp @@ -11,6 +11,7 @@ #include #include +#include #include #include @@ -71,6 +72,10 @@ namespace hex::plugin::builtin { return "hex.builtin.provider.process_memory"; } + [[nodiscard]] const char* getIcon() const override { + return ICON_VS_SERVER_PROCESS; + } + [[nodiscard]] std::pair getRegionValidity(u64) const override; std::variant queryInformation(const std::string &category, const std::string &argument) override; diff --git a/plugins/builtin/include/content/providers/udp_provider.hpp b/plugins/builtin/include/content/providers/udp_provider.hpp index d153e471b..4dd01f829 100644 --- a/plugins/builtin/include/content/providers/udp_provider.hpp +++ b/plugins/builtin/include/content/providers/udp_provider.hpp @@ -5,6 +5,7 @@ #include #include #include +#include namespace hex::plugin::builtin { @@ -39,6 +40,10 @@ namespace hex::plugin::builtin { return "hex.builtin.provider.udp"; } + [[nodiscard]] const char* getIcon() const override { + return ICON_VS_RSS; + } + std::string getName() const override { return fmt::format("hex.builtin.provider.udp.name"_lang, m_port); } protected: diff --git a/plugins/builtin/include/content/providers/view_provider.hpp b/plugins/builtin/include/content/providers/view_provider.hpp index 31303cf7f..1b23d0be4 100644 --- a/plugins/builtin/include/content/providers/view_provider.hpp +++ b/plugins/builtin/include/content/providers/view_provider.hpp @@ -1,5 +1,6 @@ #pragma once +#include #include namespace hex::plugin::builtin { @@ -36,6 +37,10 @@ namespace hex::plugin::builtin { [[nodiscard]] std::vector getDataDescription() const override; [[nodiscard]] UnlocalizedString getTypeName() const override; + [[nodiscard]] const char* getIcon() const override { + return ICON_VS_OPEN_PREVIEW; + } + void loadSettings(const nlohmann::json &settings) override; [[nodiscard]] nlohmann::json storeSettings(nlohmann::json settings) const override; diff --git a/plugins/builtin/source/content/main_menu_items.cpp b/plugins/builtin/source/content/main_menu_items.cpp index 7ab26f47f..bd3ceccdc 100644 --- a/plugins/builtin/source/content/main_menu_items.cpp +++ b/plugins/builtin/source/content/main_menu_items.cpp @@ -383,8 +383,8 @@ namespace hex::plugin::builtin { /* Open Other */ ContentRegistry::Interface::addMenuItemSubMenu({ "hex.builtin.menu.file", "hex.builtin.menu.file.open_other"}, ICON_VS_TELESCOPE, 1150, [] { - for (const auto &unlocalizedProviderName : ContentRegistry::Provider::impl::getEntries()) { - if (menu::menuItem(Lang(unlocalizedProviderName))) + for (const auto &[unlocalizedProviderName, icon] : ContentRegistry::Provider::impl::getEntries()) { + if (menu::menuItemEx(Lang(unlocalizedProviderName), icon)) ImHexApi::Provider::createProvider(unlocalizedProviderName); } }, noRunningTasks); diff --git a/plugins/builtin/source/content/ui_items.cpp b/plugins/builtin/source/content/ui_items.cpp index 3e1709440..81af36ef2 100644 --- a/plugins/builtin/source/content/ui_items.cpp +++ b/plugins/builtin/source/content/ui_items.cpp @@ -517,7 +517,7 @@ namespace hex::plugin::builtin { static size_t lastSelectedProvider = 0; bool isSelected = false; - if (ImGui::BeginTabItem(tabProvider->getName().c_str(), &open, flags)) { + if (ImGui::BeginTabItem(fmt::format("{} {}", tabProvider->getIcon(), tabProvider->getName()).c_str(), &open, flags)) { isSelected = true; ImGui::EndTabItem(); } diff --git a/plugins/builtin/source/content/views/view_about.cpp b/plugins/builtin/source/content/views/view_about.cpp index 450159008..73bd6f84c 100644 --- a/plugins/builtin/source/content/views/view_about.cpp +++ b/plugins/builtin/source/content/views/view_about.cpp @@ -78,7 +78,7 @@ namespace hex::plugin::builtin { } }; - ViewAbout::ViewAbout() : View::Modal("hex.builtin.view.help.about.name") { + ViewAbout::ViewAbout() : View::Modal("hex.builtin.view.help.about.name", ICON_VS_HEART) { // Add "About" menu item to the help menu ContentRegistry::Interface::addMenuItem({ "hex.builtin.menu.help", "hex.builtin.view.help.about.name" }, ICON_VS_INFO, 1000, Shortcut::None, [this] { this->getWindowOpenState() = true; diff --git a/plugins/builtin/source/content/views/view_achievements.cpp b/plugins/builtin/source/content/views/view_achievements.cpp index 1a4f09605..5a29b0906 100644 --- a/plugins/builtin/source/content/views/view_achievements.cpp +++ b/plugins/builtin/source/content/views/view_achievements.cpp @@ -11,7 +11,7 @@ namespace hex::plugin::builtin { - ViewAchievements::ViewAchievements() : View::Floating("hex.builtin.view.achievements.name") { + ViewAchievements::ViewAchievements() : View::Floating("hex.builtin.view.achievements.name", ICON_VS_SPARKLE) { // Add achievements menu item to Extas menu ContentRegistry::Interface::addMenuItem({ "hex.builtin.menu.extras", "hex.builtin.view.achievements.name" }, ICON_VS_SPARKLE, 2600, Shortcut::None, [&, this] { this->getWindowOpenState() = true; diff --git a/plugins/builtin/source/content/views/view_highlight_rules.cpp b/plugins/builtin/source/content/views/view_highlight_rules.cpp index 8e07be772..07b8c9e96 100644 --- a/plugins/builtin/source/content/views/view_highlight_rules.cpp +++ b/plugins/builtin/source/content/views/view_highlight_rules.cpp @@ -112,7 +112,7 @@ namespace hex::plugin::builtin { } - ViewHighlightRules::ViewHighlightRules() : View::Floating("hex.builtin.view.highlight_rules.name") { + ViewHighlightRules::ViewHighlightRules() : View::Floating("hex.builtin.view.highlight_rules.name", ICON_VS_TAG) { ContentRegistry::Interface::addMenuItem({ "hex.builtin.menu.edit", "hex.builtin.view.highlight_rules.menu.edit.rules" }, ICON_VS_TAG, 1950, Shortcut::None, [&, this] { this->getWindowOpenState() = true; }, ImHexApi::Provider::isValid, diff --git a/plugins/builtin/source/content/views/view_logs.cpp b/plugins/builtin/source/content/views/view_logs.cpp index 99ce05462..92dbfdb9e 100644 --- a/plugins/builtin/source/content/views/view_logs.cpp +++ b/plugins/builtin/source/content/views/view_logs.cpp @@ -7,7 +7,7 @@ namespace hex::plugin::builtin { - ViewLogs::ViewLogs() : View::Floating("hex.builtin.view.logs.name") { + ViewLogs::ViewLogs() : View::Floating("hex.builtin.view.logs.name", ICON_VS_DEBUG_LINE_BY_LINE) { ContentRegistry::Interface::addMenuItem({ "hex.builtin.menu.extras", "hex.builtin.view.logs.name" }, ICON_VS_BRACKET_ERROR, 2500, Shortcut::None, [&, this] { this->getWindowOpenState() = true; }); diff --git a/plugins/builtin/source/content/views/view_provider_settings.cpp b/plugins/builtin/source/content/views/view_provider_settings.cpp index dc13595d7..6e79f2d37 100644 --- a/plugins/builtin/source/content/views/view_provider_settings.cpp +++ b/plugins/builtin/source/content/views/view_provider_settings.cpp @@ -8,7 +8,7 @@ namespace hex::plugin::builtin { - ViewProviderSettings::ViewProviderSettings() : View::Modal("hex.builtin.view.provider_settings.name") { + ViewProviderSettings::ViewProviderSettings() : View::Modal("hex.builtin.view.provider_settings.name", ICON_VS_SETTINGS) { EventProviderCreated::subscribe(this, [this](const hex::prv::Provider *provider) { if (dynamic_cast(provider) != nullptr && !provider->shouldSkipLoadInterface()) this->getWindowOpenState() = true; diff --git a/plugins/builtin/source/content/views/view_settings.cpp b/plugins/builtin/source/content/views/view_settings.cpp index 814e1fcd0..c0ed55c5f 100644 --- a/plugins/builtin/source/content/views/view_settings.cpp +++ b/plugins/builtin/source/content/views/view_settings.cpp @@ -12,7 +12,7 @@ namespace hex::plugin::builtin { - ViewSettings::ViewSettings() : View::Modal("hex.builtin.view.settings.name") { + ViewSettings::ViewSettings() : View::Modal("hex.builtin.view.settings.name", ICON_VS_SETTINGS_GEAR) { // Handle window open requests RequestOpenWindow::subscribe(this, [this](const std::string &name) { if (name == "Settings") { diff --git a/plugins/builtin/source/content/views/view_store.cpp b/plugins/builtin/source/content/views/view_store.cpp index 8bdf702c5..564399c00 100644 --- a/plugins/builtin/source/content/views/view_store.cpp +++ b/plugins/builtin/source/content/views/view_store.cpp @@ -29,8 +29,8 @@ namespace hex::plugin::builtin { using namespace std::literals::string_literals; using namespace std::literals::chrono_literals; - ViewStore::ViewStore() : View::Floating("hex.builtin.view.store.name") { - ContentRegistry::Interface::addMenuItem({ "hex.builtin.menu.extras", "hex.builtin.view.store.name" }, ICON_VS_GLOBE, 1000, Shortcut::None, [&, this] { + ViewStore::ViewStore() : View::Floating("hex.builtin.view.store.name", ICON_VS_EXTENSIONS) { + ContentRegistry::Interface::addMenuItem({ "hex.builtin.menu.extras", "hex.builtin.view.store.name" }, ICON_VS_EXTENSIONS, 1000, Shortcut::None, [&, this] { if (m_requestStatus == RequestStatus::NotAttempted) this->refresh(); diff --git a/plugins/builtin/source/content/views/view_theme_manager.cpp b/plugins/builtin/source/content/views/view_theme_manager.cpp index 2826ad900..0e4edf0c5 100644 --- a/plugins/builtin/source/content/views/view_theme_manager.cpp +++ b/plugins/builtin/source/content/views/view_theme_manager.cpp @@ -9,7 +9,7 @@ namespace hex::plugin::builtin { - ViewThemeManager::ViewThemeManager() : View::Floating("hex.builtin.view.theme_manager.name") { + ViewThemeManager::ViewThemeManager() : View::Floating("hex.builtin.view.theme_manager.name", ICON_VS_SYMBOL_COLOR) { ContentRegistry::Interface::addMenuItem({ "hex.builtin.menu.extras", "hex.builtin.view.theme_manager.name" }, ICON_VS_SYMBOL_COLOR, 2000, Shortcut::None, [&, this] { this->getWindowOpenState() = true; }); diff --git a/plugins/builtin/source/content/views/view_tutorials.cpp b/plugins/builtin/source/content/views/view_tutorials.cpp index dbe721dd7..31fb58cbf 100644 --- a/plugins/builtin/source/content/views/view_tutorials.cpp +++ b/plugins/builtin/source/content/views/view_tutorials.cpp @@ -11,7 +11,7 @@ namespace hex::plugin::builtin { - ViewTutorials::ViewTutorials() : View::Floating("hex.builtin.view.tutorials.name") { + ViewTutorials::ViewTutorials() : View::Floating("hex.builtin.view.tutorials.name", ICON_VS_BOOK) { ContentRegistry::Interface::addMenuItem({ "hex.builtin.menu.help", "hex.builtin.view.tutorials.name" }, ICON_VS_COMPASS, 4000, Shortcut::None, [&, this] { this->getWindowOpenState() = true; }); diff --git a/plugins/builtin/source/content/welcome_screen.cpp b/plugins/builtin/source/content/welcome_screen.cpp index ae2413c51..565964564 100644 --- a/plugins/builtin/source/content/welcome_screen.cpp +++ b/plugins/builtin/source/content/welcome_screen.cpp @@ -351,8 +351,8 @@ namespace hex::plugin::builtin { ImGui::SameLine(0, 2_scaled); if (ImGuiExt::BeginSubWindow("hex.builtin.welcome.start.open_other"_lang, nullptr, ImVec2(200_scaled, ImGui::GetTextLineHeightWithSpacing() * 5.8), ImGuiChildFlags_AutoResizeX)) { - for (const auto &unlocalizedProviderName : ContentRegistry::Provider::impl::getEntries()) { - if (ImGuiExt::Hyperlink(Lang(unlocalizedProviderName))) { + for (const auto &[unlocalizedProviderName, icon] : ContentRegistry::Provider::impl::getEntries()) { + if (ImGuiExt::Hyperlink(fmt::format("{} {}", icon, Lang(unlocalizedProviderName)).c_str())) { ImHexApi::Provider::createProvider(unlocalizedProviderName); otherProvidersVisible = false; } @@ -519,11 +519,11 @@ namespace hex::plugin::builtin { ImGui::SetCursorScreenPos(ImGui::GetWindowPos() + ImGui::GetWindowSize() - windowSize - ImGui::GetStyle().WindowPadding); ImGui::PushStyleColor(ImGuiCol_ChildBg, ImGui::GetStyleColorVec4(ImGuiCol_WindowBg)); if (ImGuiExt::BeginSubWindow("hex.builtin.welcome.header.quick_settings"_lang, nullptr, windowSize, ImGuiChildFlags_AutoResizeY)) { - if (ImGuiExt::ToggleSwitch("hex.builtin.welcome.quick_settings.simplified"_lang, &s_simplifiedWelcomeScreen)) { + if (ImGuiExt::DimmedIconToggle(ICON_VS_COMPASS_ACTIVE, ICON_VS_COMPASS, &s_simplifiedWelcomeScreen)) { ContentRegistry::Settings::write("hex.builtin.setting.interface", "hex.builtin.setting.interface.simplified_welcome_screen", s_simplifiedWelcomeScreen); WorkspaceManager::switchWorkspace(s_simplifiedWelcomeScreen ? "Minimal" : "Default"); } - + ImGui::SetItemTooltip("hex.builtin.welcome.quick_settings.simplified"_lang); } ImGuiExt::EndSubWindow(); diff --git a/plugins/remote/include/content/providers/ssh_provider.hpp b/plugins/remote/include/content/providers/ssh_provider.hpp index 9fc314f98..9db7cce19 100644 --- a/plugins/remote/include/content/providers/ssh_provider.hpp +++ b/plugins/remote/include/content/providers/ssh_provider.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include #include namespace hex::plugin::remote { @@ -25,6 +26,10 @@ namespace hex::plugin::remote { UnlocalizedString getTypeName() const override { return "hex.plugin.remote.ssh_provider"; } std::string getName() const override; + [[nodiscard]] const char* getIcon() const override { + return ICON_VS_REMOTE; + } + bool drawLoadInterface() override; void loadSettings(const nlohmann::json &settings) override; diff --git a/plugins/script_loader/support/c/source/script_api/v1/mem.cpp b/plugins/script_loader/support/c/source/script_api/v1/mem.cpp index 08fc1a249..c11403760 100644 --- a/plugins/script_loader/support/c/source/script_api/v1/mem.cpp +++ b/plugins/script_loader/support/c/source/script_api/v1/mem.cpp @@ -89,6 +89,7 @@ public: void setName(std::string name) { m_name = std::move(name);} [[nodiscard]] hex::UnlocalizedString getTypeName() const override { return m_typeName; } [[nodiscard]] std::string getName() const override { return m_name; } + const char* getIcon() const override { return ""; } private: ReadFunction m_readFunction = nullptr; @@ -109,5 +110,5 @@ SCRIPT_API(void registerProvider, const char *typeName, const char *name, Script provider->setFunctions(readFunc, writeFunc, getSizeFunc); return provider; }); - hex::ContentRegistry::Provider::impl::addProviderName(typeNameString); + hex::ContentRegistry::Provider::impl::addProviderName(typeNameString, ""); } \ No newline at end of file