feat: Allow plugins to be dynamically turned on and off

This commit is contained in:
WerWolv
2025-08-05 22:16:39 +02:00
parent 95465e2fc3
commit 5b06702dee
6 changed files with 81 additions and 3 deletions

View File

@@ -532,6 +532,8 @@
"hex.builtin.setting.interface.pattern_data_row_bg": "Enable colored pattern background",
"hex.builtin.setting.interface.wiki_explain_language": "Wikipedia Language",
"hex.builtin.setting.interface.restore_window_pos": "Restore window position",
"hex.builtin.setting.plugins": "Plugins",
"hex.builtin.setting.loaded_plugins": "Plugins to be loaded",
"hex.builtin.setting.proxy": "Proxy",
"hex.builtin.setting.proxy.description": "Proxy will take effect on store, wikipedia or any other plugin immediately.",
"hex.builtin.setting.proxy.enable": "Enable Proxy",

View File

@@ -20,6 +20,7 @@
#include <nlohmann/json.hpp>
#include <utility>
#include <hex/api/plugin_manager.hpp>
#include <romfs/romfs.hpp>
#if defined(OS_WEB)
@@ -972,6 +973,27 @@ namespace hex::plugin::builtin {
ContentRegistry::Settings::impl::store();
});
/* Plugins */
{
for (const auto &plugin : PluginManager::getPlugins()) {
if (plugin.isLibraryPlugin())
continue;
if (plugin.isBuiltinPlugin())
continue;
auto interface = ContentRegistry::Settings::add<Widgets::Checkbox>("hex.builtin.setting.plugins", "hex.builtin.setting.loaded_plugins", plugin.getPluginName(), true)
.setTooltip(plugin.getPluginDescription())
.setChangedCallback([&plugin](Widgets::Widget &widget) {
auto checkBox = static_cast<Widgets::Checkbox *>(&widget);
PluginManager::setPluginEnabled(plugin, checkBox->isChecked());
})
.requiresRestart();
PluginManager::setPluginEnabled(plugin, static_cast<Widgets::Checkbox *>(&interface.getWidget())->isChecked());
}
}
}
static void loadLayoutSettings() {

View File

@@ -88,7 +88,7 @@ IMHEX_PLUGIN_SUBCOMMANDS() {
{ "save-editor", "", "Opens a pattern file for save file editing", hex::plugin::builtin::handleSaveEditorCommand },
};
IMHEX_PLUGIN_SETUP("Built-in", "WerWolv", "Default ImHex functionality") {
IMHEX_PLUGIN_SETUP_BUILTIN("Built-in", "WerWolv", "Default ImHex functionality") {
using namespace hex::plugin::builtin;
// Show a warning banner on debug builds