From 7709f4e307f6352cf0d812505c3d9bd622246328 Mon Sep 17 00:00:00 2001 From: WerWolv Date: Thu, 1 Feb 2024 10:58:45 +0100 Subject: [PATCH] feat: Allow setting language through the command line --- lib/libimhex/source/api/imhex_api.cpp | 1 - lib/libimhex/source/api/localization_manager.cpp | 4 ++-- main/gui/source/main.cpp | 2 +- .../builtin/include/content/command_line_interface.hpp | 1 + .../builtin/source/content/command_line_interface.cpp | 9 +++++++++ plugins/builtin/source/content/events.cpp | 6 ++++++ plugins/builtin/source/plugin_builtin.cpp | 3 ++- 7 files changed, 21 insertions(+), 5 deletions(-) diff --git a/lib/libimhex/source/api/imhex_api.cpp b/lib/libimhex/source/api/imhex_api.cpp index 504126adb..d401bb831 100644 --- a/lib/libimhex/source/api/imhex_api.cpp +++ b/lib/libimhex/source/api/imhex_api.cpp @@ -548,7 +548,6 @@ namespace hex { void enableSystemThemeDetection(bool enabled) { s_systemThemeDetection = enabled; - EventSettingsChanged::post(); EventOSThemeChanged::post(); } diff --git a/lib/libimhex/source/api/localization_manager.cpp b/lib/libimhex/source/api/localization_manager.cpp index 1b929873b..01cfc6450 100644 --- a/lib/libimhex/source/api/localization_manager.cpp +++ b/lib/libimhex/source/api/localization_manager.cpp @@ -42,13 +42,13 @@ namespace hex { } void loadLanguage(const std::string &language) { - s_currStrings->clear(); - auto &definitions = ContentRegistry::Language::impl::getLanguageDefinitions(); if (!definitions.contains(language)) return; + s_currStrings->clear(); + for (auto &definition : definitions[language]) s_currStrings->insert(definition.getEntries().begin(), definition.getEntries().end()); diff --git a/main/gui/source/main.cpp b/main/gui/source/main.cpp index ddb5e3280..5d5ec70b1 100644 --- a/main/gui/source/main.cpp +++ b/main/gui/source/main.cpp @@ -113,7 +113,7 @@ namespace { // Draw the splash window while tasks are running if (!splashWindow.loop()) - ImHexApi::System::getInitArguments().insert({ "tasks-failed", {} }); + ImHexApi::System::impl::addInitArgument("tasks-failed"); } diff --git a/plugins/builtin/include/content/command_line_interface.hpp b/plugins/builtin/include/content/command_line_interface.hpp index a9921a863..a80245d9d 100644 --- a/plugins/builtin/include/content/command_line_interface.hpp +++ b/plugins/builtin/include/content/command_line_interface.hpp @@ -8,6 +8,7 @@ namespace hex::plugin::builtin { void handleVersionCommand(const std::vector &args); void handleHelpCommand(const std::vector &args); void handlePluginsCommand(const std::vector &args); + void handleLanguageCommand(const std::vector &args); void handleOpenCommand(const std::vector &args); diff --git a/plugins/builtin/source/content/command_line_interface.cpp b/plugins/builtin/source/content/command_line_interface.cpp index 9a6a1e142..9196b53d5 100644 --- a/plugins/builtin/source/content/command_line_interface.cpp +++ b/plugins/builtin/source/content/command_line_interface.cpp @@ -130,6 +130,15 @@ namespace hex::plugin::builtin { } } + void handleLanguageCommand(const std::vector &args) { + if (args.empty()) { + hex::log::println("usage: imhex --language "); + std::exit(EXIT_FAILURE); + } + + ImHexApi::System::impl::addInitArgument("language", args[0]); + } + void handleHashCommand(const std::vector &args) { if (args.size() != 2) { hex::log::println("usage: imhex --hash "); diff --git a/plugins/builtin/source/content/events.cpp b/plugins/builtin/source/content/events.cpp index 0d29988e1..a43874b2b 100644 --- a/plugins/builtin/source/content/events.cpp +++ b/plugins/builtin/source/content/events.cpp @@ -222,6 +222,12 @@ namespace hex::plugin::builtin { } }); + EventImHexStartupFinished::subscribe([] { + const auto &initArgs = ImHexApi::System::getInitArguments(); + if (auto it = initArgs.find("language"); it != initArgs.end()) + LocalizationManager::loadLanguage(it->second); + }); + fs::setFileBrowserErrorCallback([](const std::string& errMsg){ #if defined(NFD_PORTAL) ui::PopupError::open(hex::format("hex.builtin.popup.error.file_dialog.portal"_lang, errMsg)); diff --git a/plugins/builtin/source/plugin_builtin.cpp b/plugins/builtin/source/plugin_builtin.cpp index 02b7305a1..97d0bba27 100644 --- a/plugins/builtin/source/plugin_builtin.cpp +++ b/plugins/builtin/source/plugin_builtin.cpp @@ -60,6 +60,7 @@ IMHEX_PLUGIN_SUBCOMMANDS() { { "help", "Print help about this command", hex::plugin::builtin::handleHelpCommand }, { "version", "Print ImHex version", hex::plugin::builtin::handleVersionCommand }, { "plugins", "Lists all plugins that have been installed", hex::plugin::builtin::handlePluginsCommand }, + { "language", "Changes the language ImHex uses", hex::plugin::builtin::handleLanguageCommand }, { "open", "Open files passed as argument. [default]", hex::plugin::builtin::handleOpenCommand }, @@ -70,7 +71,7 @@ IMHEX_PLUGIN_SUBCOMMANDS() { { "magic", "Identify file types", hex::plugin::builtin::handleMagicCommand }, { "pl", "Interact with the pattern language", hex::plugin::builtin::handlePatternLanguageCommand }, { "hexdump", "Generate a hex dump of the provided file", hex::plugin::builtin::handleHexdumpCommand }, - { "hexdump", "Demangle a mangled symbol", hex::plugin::builtin::handleDemangleCommand }, + { "demangle", "Demangle a mangled symbol", hex::plugin::builtin::handleDemangleCommand }, }; IMHEX_PLUGIN_SETUP("Built-in", "WerWolv", "Default ImHex functionality") {