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

@@ -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