Add a hide / minize button on each panel vertical bar.

This commit is contained in:
Martín Lucas Golini
2025-12-29 10:47:19 -03:00
parent 1d2dd61cf5
commit c85a431ae3
8 changed files with 41 additions and 6 deletions

View File

@@ -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);
}

View File

@@ -1970,7 +1970,7 @@ std::map<KeyBindings::Shortcut, std::string> 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<std::string, std::string> 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<std::string> App::getUnlockedCommands() {
@@ -2022,7 +2023,7 @@ std::vector<std::string> 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 ) {

View File

@@ -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 ); } );

View File

@@ -229,6 +229,8 @@ void StatusDebuggerController::createContainer() {
<PushButton id="app_debugger_step_over" class="debugger_step_over" lw="mp" icon="icon(debug-step-over, 12dp)" tooltip="@string(step_over, Step Over)" />
<PushButton id="app_debugger_step_into" class="debugger_step_into" lw="mp" icon="icon(debug-step-into, 12dp)" tooltip="@string(step_into, Step Into)" />
<PushButton id="app_debugger_step_out" class="debugger_step_out" lw="mp" icon="icon(debug-step-out, 12dp)" tooltip="@string(step_out, Step Out)" />
<Widget lw="mp" lh="0" lw8="1" />
<PushButton class="status_bar_panel_hide" lw="mp" tooltip="@string(hide_panel, Hide Panel)" />
</vbox>
</hboxce>
)xml";

View File

@@ -166,6 +166,8 @@ void StatusAppOutputController::createContainer() {
<PushButton id="app_output_stop" lw="mp" icon="icon(stop, 12dp)" enabled="false" />
<PushButton id="app_output_find" lw="mp" icon="icon(search, 12dp)" tooltip="@string(find, Find)" />
<PushButton id="app_output_configure" lw="mp" icon="icon(settings, 12dp)" tooltip="@string(configure_ellipsis, Configure...)" />
<Widget lw="mp" lh="0" lw8="1" />
<PushButton class="status_bar_panel_hide" lw="mp" tooltip="@string(hide_panel, Hide Panel)" />
</vbox>
</hboxce>
)xml";

View File

@@ -443,6 +443,8 @@ void StatusBuildOutputController::createContainer() {
<PushButton id="build_output_stop" lw="mp" icon="icon(stop, 12dp)" enabled="false" />
<PushButton id="build_output_find" lw="mp" icon="icon(search, 12dp)" tooltip="@string(find, Find)" />
<PushButton id="build_output_configure" lw="mp" icon="icon(settings, 12dp)" tooltip="@string(configure_ellipsis, Configure...)" />
<Widget lw="mp" lh="0" lw8="1" />
<PushButton class="status_bar_panel_hide" lw="mp" tooltip="@string(hide_panel, Hide Panel)" />
</vbox>
</hboxce>
)xml";

View File

@@ -62,6 +62,8 @@ UIHLinearLayoutCommandExecuter* StatusTerminalController::createContainer() {
<vbox lw="16dp" lh="mp" class="vertical_bar">
<PushButton class="expand_status_bar_panel" lw="mp" tooltip="@string(expand_panel, Expand Panel)" />
<PushButton id="terminal_panel_add" lw="mp" icon="icon(add, 12dp)" tooltip="@string(add_terminal, Add Terminal)" />
<Widget lw="mp" lh="0" lw8="1" />
<PushButton class="status_bar_panel_hide" lw="mp" tooltip="@string(hide_panel, Hide Panel)" />
</vbox>
</hboxce>
)xml";

View File

@@ -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<UIPushButton>();
if ( contractPanelBtn ) {
contractPanelBtn->onClick(
[container]( auto event ) { container->execute( "statusbar-panel-hide" ); } );
}
}
}