From c85a431ae330c018050ef97e1d61042548ac9a3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Lucas=20Golini?= Date: Mon, 29 Dec 2025 10:47:19 -0300 Subject: [PATCH] Add a hide / minize button on each panel vertical bar. --- src/tools/ecode/applayout.xml.hpp | 3 +++ src/tools/ecode/ecode.cpp | 12 ++++++----- src/tools/ecode/ecode.hpp | 3 ++- .../debugger/statusdebuggercontroller.cpp | 2 ++ src/tools/ecode/statusappoutputcontroller.cpp | 2 ++ .../ecode/statusbuildoutputcontroller.cpp | 2 ++ src/tools/ecode/statusterminalcontroller.cpp | 2 ++ src/tools/ecode/uistatusbar.cpp | 21 +++++++++++++++++++ 8 files changed, 41 insertions(+), 6 deletions(-) diff --git a/src/tools/ecode/applayout.xml.hpp b/src/tools/ecode/applayout.xml.hpp index cc92b5b70..877816292 100644 --- a/src/tools/ecode/applayout.xml.hpp +++ b/src/tools/ecode/applayout.xml.hpp @@ -340,6 +340,9 @@ TableView#locate_bar_table > tableview::row:selected > tableview::cell:nth-child .expand_status_bar_panel.expanded { icon: icon(arrow-down-s, 16dp); } +.status_bar_panel_hide { + icon: icon(arrow-down-s, 16dp); +} .settings_panel .details_but.contracted { icon: icon(arrow-down-s, 10dp); } diff --git a/src/tools/ecode/ecode.cpp b/src/tools/ecode/ecode.cpp index f256ea6d7..6b5b0f78c 100644 --- a/src/tools/ecode/ecode.cpp +++ b/src/tools/ecode/ecode.cpp @@ -1970,7 +1970,7 @@ std::map App::getLocalKeybindings() { "reopen-closed-tab" }, { { KEY_1, KEYMOD_LALT }, "toggle-status-locate-bar" }, { { KEY_2, KEYMOD_LALT }, "toggle-status-global-search-bar" }, - { { KEY_3, KEYMOD_LALT }, "toggle-status-terminal" }, + { { KEY_3, KEYMOD_LALT }, "toggle-status-terminal-panel" }, { { KEY_4, KEYMOD_LALT }, "toggle-status-build-output" }, { { KEY_5, KEYMOD_LALT }, "toggle-status-app-output" }, { { KEY_B, KeyMod::getDefaultModifier() | KEYMOD_SHIFT }, "project-build-start-cancel" }, @@ -1996,7 +1996,8 @@ std::map App::getMigrateKeybindings() { { "menu-toggle", "mod+shift+m" }, #endif { "lock-toggle", "mod+shift+l" }, { "debug-widget-tree-view", "f11" }, - { "project-build-and-run", "f5" }, { "project-build-start", "mod+shift+b" } }; + { "project-build-and-run", "f5" }, { "project-build-start", "mod+shift+b" }, + { "toggle-status-terminal", "alt+3" } }; } std::vector App::getUnlockedCommands() { @@ -2022,7 +2023,7 @@ std::vector App::getUnlockedCommands() { "toggle-status-locate-bar", "toggle-status-global-search-bar", "toggle-status-build-output", - "toggle-status-terminal", + "toggle-status-terminal-panel", "toggle-status-app-output", "menu-toggle", "switch-side-panel", @@ -2678,8 +2679,9 @@ void App::onCodeEditorCreated( UICodeEditor* editor, TextDocument& doc ) { if ( mSplitter->curEditorExistsAndFocused() && mSplitter->getCurEditor() ) { UICodeEditor* editor = mSplitter->getCurEditor(); auto d = mSplitter->createCodeEditorInTabWidget( - mConfig.editor.openDocumentsInMainSplit ? mSplitter->getPreferredTabWidget() - : mSplitter->tabWidgetFromWidget( editor ) ); + mConfig.editor.openDocumentsInMainSplit + ? mSplitter->getPreferredTabWidget() + : mSplitter->tabWidgetFromWidget( editor ) ); if ( d.first == nullptr && d.second == nullptr && !mSplitter->getTabWidgets().empty() ) d = mSplitter->createCodeEditorInTabWidget( mSplitter->getTabWidgets()[0] ); if ( d.first != nullptr || d.second != nullptr ) { diff --git a/src/tools/ecode/ecode.hpp b/src/tools/ecode/ecode.hpp index 8ddc07576..742739300 100644 --- a/src/tools/ecode/ecode.hpp +++ b/src/tools/ecode/ecode.hpp @@ -268,7 +268,8 @@ class App : public UICodeEditorSplitter::Client, public PluginContextProvider { [this] { mStatusBuildOutputController->toggle(); } ); t.setCommand( "toggle-status-app-output", [this] { mStatusAppOutputController->toggle(); } ); - t.setCommand( "toggle-status-terminal", [this] { mStatusTerminalController->toggle(); } ); + t.setCommand( "toggle-status-terminal-panel", + [this] { mStatusTerminalController->toggle(); } ); t.setCommand( "open-locatebar", [this] { mUniversalLocator->showLocateBar(); } ); t.setCommand( "open-locatebar-glob-search", [this] { mUniversalLocator->showLocateBar( true ); } ); diff --git a/src/tools/ecode/plugins/debugger/statusdebuggercontroller.cpp b/src/tools/ecode/plugins/debugger/statusdebuggercontroller.cpp index 620f9da28..eebaebe7b 100644 --- a/src/tools/ecode/plugins/debugger/statusdebuggercontroller.cpp +++ b/src/tools/ecode/plugins/debugger/statusdebuggercontroller.cpp @@ -229,6 +229,8 @@ void StatusDebuggerController::createContainer() { + + )xml"; diff --git a/src/tools/ecode/statusappoutputcontroller.cpp b/src/tools/ecode/statusappoutputcontroller.cpp index 37658edb6..38cd118ef 100644 --- a/src/tools/ecode/statusappoutputcontroller.cpp +++ b/src/tools/ecode/statusappoutputcontroller.cpp @@ -166,6 +166,8 @@ void StatusAppOutputController::createContainer() { + + )xml"; diff --git a/src/tools/ecode/statusbuildoutputcontroller.cpp b/src/tools/ecode/statusbuildoutputcontroller.cpp index 6c3f6afb7..cb6218e5a 100644 --- a/src/tools/ecode/statusbuildoutputcontroller.cpp +++ b/src/tools/ecode/statusbuildoutputcontroller.cpp @@ -443,6 +443,8 @@ void StatusBuildOutputController::createContainer() { + + )xml"; diff --git a/src/tools/ecode/statusterminalcontroller.cpp b/src/tools/ecode/statusterminalcontroller.cpp index 274a47c1f..b62bd2399 100644 --- a/src/tools/ecode/statusterminalcontroller.cpp +++ b/src/tools/ecode/statusterminalcontroller.cpp @@ -62,6 +62,8 @@ UIHLinearLayoutCommandExecuter* StatusTerminalController::createContainer() { + + )xml"; diff --git a/src/tools/ecode/uistatusbar.cpp b/src/tools/ecode/uistatusbar.cpp index d11e8dbf2..406de3a89 100644 --- a/src/tools/ecode/uistatusbar.cpp +++ b/src/tools/ecode/uistatusbar.cpp @@ -265,6 +265,20 @@ void UIStatusBar::registerStatusBarPanel( WidgetCommandExecuter* container, UIWi container->setCommand( "statusbar-panel-expand-contract-toggle", [this] { togglePanelExpansion(); } ); + + container->setCommand( "statusbar-panel-hide", [this] { + if ( mContext->getMainSplitter()->isFull() ) { + auto widget = mContext->getMainSplitter()->getLastWidget(); + if ( widget && widget->isVisible() ) { + widget->setParent( mUISceneNode ); + widget->setVisible( false ); + mContext->getStatusBar()->updateState(); + if ( mContext->getSplitter()->getCurWidget() ) + mContext->getSplitter()->getCurWidget()->setFocus(); + } + } + } ); + container->getKeyBindings().addKeybindsStringUnordered( mContext->getStatusBarKeybindings() ); if ( widget ) { @@ -279,6 +293,13 @@ void UIStatusBar::registerStatusBarPanel( WidgetCommandExecuter* container, UIWi container->execute( "statusbar-panel-expand-contract-toggle" ); } ); } + + auto contractPanelBtn = + widget->findByClass( "status_bar_panel_hide" )->asType(); + if ( contractPanelBtn ) { + contractPanelBtn->onClick( + [container]( auto event ) { container->execute( "statusbar-panel-hide" ); } ); + } } }