feat: Add option to automatically apply found pattern when a provider is opened

This commit is contained in:
WerWolv
2025-12-07 20:47:33 +01:00
parent 9ba8754f97
commit eb83354179
18 changed files with 39 additions and 23 deletions

View File

@@ -761,7 +761,10 @@ namespace hex::plugin::builtin {
.setTooltip("hex.builtin.setting.general.max_mem_file_size.desc");
ContentRegistry::Settings::add<Widgets::SliderInteger>("hex.builtin.setting.general", "hex.builtin.setting.general.patterns", "hex.builtin.setting.general.pattern_data_max_filter_items", 128, 32, 1024);
ContentRegistry::Settings::add<Widgets::Checkbox>("hex.builtin.setting.general", "hex.builtin.setting.general.patterns", "hex.builtin.setting.general.auto_load_patterns", true);
auto suggestPatterns = ContentRegistry::Settings::add<Widgets::Checkbox>("hex.builtin.setting.general", "hex.builtin.setting.general.patterns", "hex.builtin.setting.general.suggest_patterns", true);
ContentRegistry::Settings::add<Widgets::Checkbox>("hex.builtin.setting.general", "hex.builtin.setting.general.patterns", "hex.builtin.setting.general.auto_apply_patterns", false).setEnabledCallback([=] {
return static_cast<Widgets::Checkbox&>(suggestPatterns.getWidget()).isChecked();
});
ContentRegistry::Settings::add<Widgets::Checkbox>("hex.builtin.setting.general", "hex.builtin.setting.general.patterns", "hex.builtin.setting.general.sync_pattern_source", false);
ContentRegistry::Settings::add<Widgets::Checkbox>("hex.builtin.setting.general", "hex.builtin.setting.general.network", "hex.builtin.setting.general.network_interface", false);

View File

@@ -1376,7 +1376,7 @@ namespace hex::plugin::builtin {
m_shouldAnalyze = false;
m_analysisTask = TaskManager::createBackgroundTask("hex.builtin.task.analyzing_data", [this, provider](Task &task) {
if (!m_autoLoadPatterns)
if (!m_suggestSupportedPatterns)
return;
auto foundPatterns = magic::findViablePatterns(provider, &task);
@@ -1384,8 +1384,15 @@ namespace hex::plugin::builtin {
if (!foundPatterns.empty()) {
std::scoped_lock lock(m_possiblePatternFilesMutex);
m_possiblePatternFiles.get(provider) = std::move(foundPatterns);
PopupAcceptPattern::open(this);
auto &possiblePatterns = m_possiblePatternFiles.get(provider);
possiblePatterns = std::move(foundPatterns);
if (m_autoApplyPatterns && possiblePatterns.size() == 1) {
loadPatternFile(possiblePatterns.front().patternFilePath, provider, false);
} else {
PopupAcceptPattern::open(this);
}
}
});
}
@@ -1806,8 +1813,12 @@ namespace hex::plugin::builtin {
m_sourceCode.enableSync(value.get<bool>(false));
});
ContentRegistry::Settings::onChange("hex.builtin.setting.general", "hex.builtin.setting.general.auto_load_patterns", [this](const ContentRegistry::Settings::SettingsValue &value) {
m_autoLoadPatterns = value.get<bool>(true);
ContentRegistry::Settings::onChange("hex.builtin.setting.general", "hex.builtin.setting.general.suggest_patterns", [this](const ContentRegistry::Settings::SettingsValue &value) {
m_suggestSupportedPatterns = value.get<bool>(true);
});
ContentRegistry::Settings::onChange("hex.builtin.setting.general", "hex.builtin.setting.general.auto_apply_patterns", [this](const ContentRegistry::Settings::SettingsValue &value) {
m_autoApplyPatterns = value.get<bool>(true);
});
EventProviderOpened::subscribe(this, [this](prv::Provider *provider) {