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

4
dist/ImHex.run.xml vendored
View File

@@ -1,5 +1,5 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="ImHex" type="CMakeRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" WORKING_DIR="file://$CMakeCurrentBuildDir$" PASS_PARENT_ENVS_2="true" PROJECT_NAME="ImHex" TARGET_NAME="imhex_all" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="ImHex" RUN_TARGET_NAME="main">
<configuration default="false" name="ImHex" type="CMakeRunConfiguration" factoryName="Application" PROGRAM_PARAMS=".ninja_log" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" WORKING_DIR="file://$CMakeCurrentBuildDir$" PASS_PARENT_ENVS_2="true" PROJECT_NAME="ImHex" TARGET_NAME="imhex_all" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="ImHex" RUN_TARGET_NAME="main">
<envs>
<env name="NO_DEBUG_BANNER" value="1" />
</envs>
@@ -8,6 +8,6 @@
</method>
</configuration>
<configuration default="false" name="CMake Debug" type="CMakeListConfigurationType" factoryName="CMakeListConfigurationFactory">
<method v="2" />
<method v="2" />
</configuration>
</component>

View File

@@ -140,7 +140,8 @@ namespace hex::plugin::builtin {
std::atomic<bool> m_dangerousFunctionCalled = false;
std::atomic<DangerousFunctionPerms> m_dangerousFunctionsAllowed = DangerousFunctionPerms::Ask;
bool m_autoLoadPatterns = true;
bool m_suggestSupportedPatterns = true;
bool m_autoApplyPatterns = false;
PerProvider<ui::VisualizerDrawer> m_visualizerDrawer;
bool m_tooltipJustOpened = false;

View File

@@ -447,7 +447,7 @@
"hex.builtin.setting.general.auto_backup_time": "Periodisches Projekt Backup",
"hex.builtin.setting.general.auto_backup_time.format.extended": "Alle {0}min {1}s",
"hex.builtin.setting.general.auto_backup_time.format.simple": "Alle {0}s",
"hex.builtin.setting.general.auto_load_patterns": "Automatisches Laden unterstützter Pattern",
"hex.builtin.setting.general.auto_apply_patterns": "Automatisches Laden unterstützter Pattern",
"hex.builtin.setting.general.network": "Netzwerk",
"hex.builtin.setting.general.network_interface": "Netzwerk Interface Aktivieren",
"hex.builtin.setting.general.patterns": "Patterns",

View File

@@ -498,7 +498,8 @@
"hex.builtin.setting.general.auto_backup_time": "Periodically backup project",
"hex.builtin.setting.general.auto_backup_time.format.simple": "Every {0}s",
"hex.builtin.setting.general.auto_backup_time.format.extended": "Every {0}m {1}s",
"hex.builtin.setting.general.auto_load_patterns": "Auto-load supported pattern",
"hex.builtin.setting.general.auto_apply_patterns": "Auto-load supported pattern",
"hex.builtin.setting.general.suggest_patterns": "Suggest patterns based on loaded data",
"hex.builtin.setting.general.server_contact": "Enable update checks and usage statistics",
"hex.builtin.setting.general.max_mem_file_size": "Max file size to load into RAM",
"hex.builtin.setting.general.max_mem_file_size.desc": "Small files are loaded into memory to prevent them from being modified directly on disk.\n\nIncreasing this size allows larger files to be loaded into memory before ImHex resorts to streaming in data from disk.",

View File

@@ -446,7 +446,7 @@
"hex.builtin.setting.general.auto_backup_time": "",
"hex.builtin.setting.general.auto_backup_time.format.extended": "",
"hex.builtin.setting.general.auto_backup_time.format.simple": "",
"hex.builtin.setting.general.auto_load_patterns": "Cargar automáticamente patterns soportados",
"hex.builtin.setting.general.auto_apply_patterns": "Cargar automáticamente patterns soportados",
"hex.builtin.setting.general.network": "",
"hex.builtin.setting.general.network_interface": "",
"hex.builtin.setting.general.patterns": "",

View File

@@ -467,7 +467,7 @@
"hex.builtin.setting.general.auto_backup_time": "Sauvegarder périodiquement le projet",
"hex.builtin.setting.general.auto_backup_time.format.simple": "Toutes les {0}s",
"hex.builtin.setting.general.auto_backup_time.format.extended": "Toutes les {0}m {1}s",
"hex.builtin.setting.general.auto_load_patterns": "Charger automatiquement les modèles pris en charge",
"hex.builtin.setting.general.auto_apply_patterns": "Charger automatiquement les modèles pris en charge",
"hex.builtin.setting.general.server_contact": "Activer les vérifications de mise à jour et les statistiques d'utilisation",
"hex.builtin.setting.general.max_mem_file_size": "Taille maximale du fichier à charger en mémoire",
"hex.builtin.setting.general.max_mem_file_size.desc": "Les petits fichiers sont chargés en mémoire pour éviter qu'ils ne soient modifiés directement sur le disque.\n\nL'augmentation de cette taille permet de charger des fichiers plus volumineux en mémoire avqu'ImHex ne se mette à diffuser les données depuis le disque.",

View File

@@ -441,7 +441,7 @@
"hex.builtin.setting.general.auto_backup_time": "A projekt automatikus mentése időközönként",
"hex.builtin.setting.general.auto_backup_time.format.simple": "Minden {0}mp",
"hex.builtin.setting.general.auto_backup_time.format.extended": "Minden {0}p {1}mp",
"hex.builtin.setting.general.auto_load_patterns": "Támogatott sablonok automatikus betöltése",
"hex.builtin.setting.general.auto_apply_patterns": "Támogatott sablonok automatikus betöltése",
"hex.builtin.setting.general.server_contact": "Frissítések ellenőrzésének és használati statisztikák gyűjtésének engedélyezése",
"hex.builtin.setting.general.network_interface": "Hálózati interfész engedélyezése",
"hex.builtin.setting.general.save_recent_providers": "Nemrég használt források mentése",

View File

@@ -446,7 +446,7 @@
"hex.builtin.setting.general.auto_backup_time": "",
"hex.builtin.setting.general.auto_backup_time.format.extended": "",
"hex.builtin.setting.general.auto_backup_time.format.simple": "",
"hex.builtin.setting.general.auto_load_patterns": "Auto-caricamento del pattern supportato",
"hex.builtin.setting.general.auto_apply_patterns": "Auto-caricamento del pattern supportato",
"hex.builtin.setting.general.network": "",
"hex.builtin.setting.general.network_interface": "",
"hex.builtin.setting.general.patterns": "",

View File

@@ -446,7 +446,7 @@
"hex.builtin.setting.general.auto_backup_time": "",
"hex.builtin.setting.general.auto_backup_time.format.extended": "",
"hex.builtin.setting.general.auto_backup_time.format.simple": "",
"hex.builtin.setting.general.auto_load_patterns": "対応するパターンを自動で読み込む",
"hex.builtin.setting.general.auto_apply_patterns": "対応するパターンを自動で読み込む",
"hex.builtin.setting.general.network": "",
"hex.builtin.setting.general.network_interface": "",
"hex.builtin.setting.general.patterns": "",

View File

@@ -446,7 +446,7 @@
"hex.builtin.setting.general.auto_backup_time": "",
"hex.builtin.setting.general.auto_backup_time.format.extended": "",
"hex.builtin.setting.general.auto_backup_time.format.simple": "",
"hex.builtin.setting.general.auto_load_patterns": "지원하는 패턴 자동으로 불러오기",
"hex.builtin.setting.general.auto_apply_patterns": "지원하는 패턴 자동으로 불러오기",
"hex.builtin.setting.general.network": "네트워크",
"hex.builtin.setting.general.network_interface": "네트워크 인터페이스 사용",
"hex.builtin.setting.general.patterns": "패턴",

View File

@@ -468,7 +468,7 @@
"hex.builtin.setting.general.auto_backup_time": "Okresowe tworzenie kopii zapasowej projektu",
"hex.builtin.setting.general.auto_backup_time.format.simple": "Co {0}s",
"hex.builtin.setting.general.auto_backup_time.format.extended": "Co {0}m {1}s",
"hex.builtin.setting.general.auto_load_patterns": "Automatycznie wczytaj obsługiwany pattern",
"hex.builtin.setting.general.auto_apply_patterns": "Automatycznie wczytaj obsługiwany pattern",
"hex.builtin.setting.general.server_contact": "Włącz sprawdzanie aktualizacji i statystyki użytkowania",
"hex.builtin.setting.general.max_mem_file_size": "Maksymalny rozmiar pliku do wczytania do RAM",
"hex.builtin.setting.general.max_mem_file_size.desc": "Małe pliki są wczytywane do pamięci aby zapobiec ich bezpośredniej modyfikacji na dysku.\n\nZwiększenie tego rozmiaru pozwala większym plikom być wczytanym do pamięci zanim ImHex ucieknie się do strumieniowania danych z dysku.",

View File

@@ -446,7 +446,7 @@
"hex.builtin.setting.general.auto_backup_time": "",
"hex.builtin.setting.general.auto_backup_time.format.extended": "",
"hex.builtin.setting.general.auto_backup_time.format.simple": "",
"hex.builtin.setting.general.auto_load_patterns": "Padrão compatível com carregamento automático",
"hex.builtin.setting.general.auto_apply_patterns": "Padrão compatível com carregamento automático",
"hex.builtin.setting.general.network": "",
"hex.builtin.setting.general.network_interface": "",
"hex.builtin.setting.general.patterns": "",

View File

@@ -456,7 +456,7 @@
"hex.builtin.setting.general.auto_backup_time": "Делать резервные копии каждые",
"hex.builtin.setting.general.auto_backup_time.format.simple": "{0} секунд",
"hex.builtin.setting.general.auto_backup_time.format.extended": "{0} минут {1} секунд",
"hex.builtin.setting.general.auto_load_patterns": "Автоматически подгружать распознанные шаблоны",
"hex.builtin.setting.general.auto_apply_patterns": "Автоматически подгружать распознанные шаблоны",
"hex.builtin.setting.general.server_contact": "Включить проверку обновлений и статистики использования",
"hex.builtin.setting.general.max_mem_file_size": "Макс. размер файла для сохранения в RAM",
"hex.builtin.setting.general.max_mem_file_size.desc": "Маленькие файлы загружаются в оперативную память, чтобы не сохранять изменения сразу на диск.\n\nУвеличение этого параметра позволит ImHex загружать более объёмные файлы в память.",

View File

@@ -425,7 +425,7 @@
"hex.builtin.setting.general.patterns": "Шаблони",
"hex.builtin.setting.general.auto_backup_time.format.simple": "кожні {0} секунд",
"hex.builtin.setting.general.auto_backup_time.format.extended": "Кожні {0} хвилин {1} секунд",
"hex.builtin.setting.general.auto_load_patterns": "Автоматично завантажувати розпізнані шаблони",
"hex.builtin.setting.general.auto_apply_patterns": "Автоматично завантажувати розпізнані шаблони",
"hex.builtin.setting.general.server_contact": "Увімкнути перевірку оновлень та статистику використання",
"hex.builtin.setting.general.network_interface": "Увімкнути мережевий інтерфейс",
"hex.builtin.setting.general.pattern_data_max_filter_items": "Максимальна кількість відфільтрованих елементів шаблону",

View File

@@ -470,7 +470,7 @@
"hex.builtin.setting.general.auto_backup_time": "定期备份项目",
"hex.builtin.setting.general.auto_backup_time.format.simple": "每 {0}秒",
"hex.builtin.setting.general.auto_backup_time.format.extended": "每 {0}分 {1}秒",
"hex.builtin.setting.general.auto_load_patterns": "自动加载支持的模式",
"hex.builtin.setting.general.auto_apply_patterns": "自动加载支持的模式",
"hex.builtin.setting.general.server_contact": "启用更新检查和使用统计",
"hex.builtin.setting.general.max_mem_file_size": "要加载到内存中的文件的最大大小",
"hex.builtin.setting.general.max_mem_file_size.desc": "小文件会被加载到内存中,以防止直接在磁盘上修改它们。\n\n增大这个大小可以让更大的文件在ImHex从磁盘读取数据之前被加载到内存中。",

View File

@@ -446,7 +446,7 @@
"hex.builtin.setting.general.auto_backup_time": "",
"hex.builtin.setting.general.auto_backup_time.format.extended": "",
"hex.builtin.setting.general.auto_backup_time.format.simple": "",
"hex.builtin.setting.general.auto_load_patterns": "自動載入支援的模式",
"hex.builtin.setting.general.auto_apply_patterns": "自動載入支援的模式",
"hex.builtin.setting.general.network": "",
"hex.builtin.setting.general.network_interface": "啟用網路介面",
"hex.builtin.setting.general.patterns": "",

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) {