ecode: add centralized settings panel

Introduce modal user and project settings panels with searchable tree navigation and live configuration updates.

  - centralize settings registration and presentation
  - add user and project settings commands and shortcuts
  - preserve operational actions in the existing settings menu
  - support boolean, choice, numeric, and action-based settings
  - restore renderer notifications and choice descriptions
  - persist settings when closing the panel
  - add translated settings strings for all supported locales
  - fix live color preview updates
This commit is contained in:
Martín Lucas Golini
2026-08-24 02:34:14 -03:00
parent 6b27ea2dc8
commit 288aa931fe
9 changed files with 2532 additions and 3 deletions
+19
View File
@@ -9,6 +9,7 @@
#include "plugins/debugger/statusdebuggercontroller.hpp"
#include "settingsactions.hpp"
#include "settingsmenu.hpp"
#include "settingspanel.hpp"
#include "uibuildsettings.hpp"
#include "uidownloadwindow.hpp"
#include "uirightpanel.hpp"
@@ -2123,6 +2124,8 @@ std::map<KeyBindings::Shortcut, std::string> App::getLocalKeybindings() {
{ { KEY_F11, KeyMod::getDefaultModifier() | KEYMOD_SHIFT }, "debug-widget-tree-view" },
{ { KEY_K, KeyMod::getDefaultModifier() }, "open-locatebar" },
{ { KEY_P, KeyMod::getDefaultModifier() }, "open-command-palette" },
{ { KEY_COMMA, KeyMod::getDefaultModifier() }, "open-settings" },
{ { KEY_COMMA, KeyMod::getDefaultModifier() | KEYMOD_SHIFT }, "open-project-settings" },
{ { KEY_F, KeyMod::getDefaultModifier() | KEYMOD_SHIFT }, "open-global-search" },
{ { KEY_L, KeyMod::getDefaultModifier() }, "go-to-line" },
#if EE_PLATFORM == EE_PLATFORM_MACOS
@@ -2206,6 +2209,8 @@ std::vector<std::string> App::getUnlockedCommands() {
"toggle-status-terminal",
"toggle-status-app-output",
"menu-toggle",
"open-settings",
"open-project-settings",
"switch-side-panel",
"toggle-status-bar",
"download-file-web",
@@ -3593,6 +3598,20 @@ void App::toggleSettingsMenu() {
mSettings->toggleSettingsMenu();
}
void App::openSettings() {
if ( !mSettingsPanel )
mSettingsPanel = std::make_unique<SettingsPanel>( this );
mSettingsPanel->show( SettingsPanel::Scope::User );
}
void App::openProjectSettings() {
if ( !projectIsOpen() )
return;
if ( !mSettingsPanel )
mSettingsPanel = std::make_unique<SettingsPanel>( this );
mSettingsPanel->show( SettingsPanel::Scope::Project );
}
void App::showFolderTreeViewTab() {
UITab* tab = mSidePanel->find<UITab>( "treeview_tab" );
if ( tab )