From 7027d02f9445262001718fdd238cf1b4d6ff7fe3 Mon Sep 17 00:00:00 2001 From: CraftedNightmare Date: Thu, 18 May 2023 22:03:33 +0200 Subject: [PATCH] Fix Search pane not remembering docking sizes and positions Fixes https://gitlab.com/kicad/code/kicad/-/issues/14120 (cherry picked from commit d94e9b31b10aa57759d93e780a8d4a1547c45b9e) --- pcbnew/pcb_edit_frame.cpp | 19 +++++++++++++++++-- pcbnew/pcbnew_settings.cpp | 6 ++++++ pcbnew/pcbnew_settings.h | 2 ++ pcbnew/toolbars_pcb_editor.cpp | 17 ++++++++++++++++- 4 files changed, 41 insertions(+), 3 deletions(-) diff --git a/pcbnew/pcb_edit_frame.cpp b/pcbnew/pcb_edit_frame.cpp index d734897e2c..1306e155ac 100644 --- a/pcbnew/pcb_edit_frame.cpp +++ b/pcbnew/pcb_edit_frame.cpp @@ -341,12 +341,24 @@ PCB_EDIT_FRAME::PCB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) : settings->m_AuiPanels.properties_panel_width, -1 ); } - if( settings->m_AuiPanels.search_panel_height > 0 ) + if( settings->m_AuiPanels.search_panel_height > 0 + && ( settings->m_AuiPanels.search_panel_dock_direction == wxAUI_DOCK_TOP + || settings->m_AuiPanels.search_panel_dock_direction == wxAUI_DOCK_BOTTOM ) ) { wxAuiPaneInfo& searchPane = m_auimgr.GetPane( SearchPaneName() ); + searchPane.Direction( settings->m_AuiPanels.search_panel_dock_direction ); SetAuiPaneSize( m_auimgr, searchPane, -1, settings->m_AuiPanels.search_panel_height ); } + else if( settings->m_AuiPanels.search_panel_width > 0 + && ( settings->m_AuiPanels.search_panel_dock_direction == wxAUI_DOCK_LEFT + || settings->m_AuiPanels.search_panel_dock_direction == wxAUI_DOCK_RIGHT ) ) + { + wxAuiPaneInfo& searchPane = m_auimgr.GetPane( SearchPaneName() ); + searchPane.Direction( settings->m_AuiPanels.search_panel_dock_direction ); + SetAuiPaneSize( m_auimgr, searchPane, settings->m_AuiPanels.search_panel_width, -1 ); + } + m_appearancePanel->SetTabIndex( settings->m_AuiPanels.appearance_panel_tab ); } @@ -1250,9 +1262,12 @@ void PCB_EDIT_FRAME::SaveSettings( APP_SETTINGS_BASE* aCfg ) } // ensure m_show_search is up to date (the pane can be closed) - m_show_search = m_auimgr.GetPane( SearchPaneName() ).IsShown(); + wxAuiPaneInfo& searchPaneInfo = m_auimgr.GetPane( SearchPaneName() ); + m_show_search = searchPaneInfo.IsShown(); cfg->m_AuiPanels.show_search = m_show_search; cfg->m_AuiPanels.search_panel_height = m_searchPane->GetSize().y; + cfg->m_AuiPanels.search_panel_width = m_searchPane->GetSize().x; + cfg->m_AuiPanels.search_panel_dock_direction = searchPaneInfo.dock_direction; } } diff --git a/pcbnew/pcbnew_settings.cpp b/pcbnew/pcbnew_settings.cpp index 2127bd3c42..20bb0e772f 100644 --- a/pcbnew/pcbnew_settings.cpp +++ b/pcbnew/pcbnew_settings.cpp @@ -103,6 +103,12 @@ PCBNEW_SETTINGS::PCBNEW_SETTINGS() m_params.emplace_back( new PARAM( "aui.search_panel_height", &m_AuiPanels.search_panel_height, -1 ) ); + m_params.emplace_back( new PARAM( "aui.search_panel_width", + &m_AuiPanels.search_panel_width, -1 ) ); + + m_params.emplace_back( new PARAM( "aui.search_panel_dock_direction", + &m_AuiPanels.search_panel_dock_direction, -1 ) ); + m_params.emplace_back( new PARAM( "aui.appearance_panel_tab", &m_AuiPanels.appearance_panel_tab, 0, 0, 2 ) ); diff --git a/pcbnew/pcbnew_settings.h b/pcbnew/pcbnew_settings.h index a1d92160b2..3cc1c2d911 100644 --- a/pcbnew/pcbnew_settings.h +++ b/pcbnew/pcbnew_settings.h @@ -139,6 +139,8 @@ public: int properties_panel_width; float properties_splitter_proportion; int search_panel_height; + int search_panel_width; + int search_panel_dock_direction; bool show_layer_manager; bool show_properties; bool show_search; diff --git a/pcbnew/toolbars_pcb_editor.cpp b/pcbnew/toolbars_pcb_editor.cpp index a2bce43366..48b3d3bbbf 100644 --- a/pcbnew/toolbars_pcb_editor.cpp +++ b/pcbnew/toolbars_pcb_editor.cpp @@ -835,12 +835,27 @@ void PCB_EDIT_FRAME::ToggleSearch() if( m_show_search ) { - SetAuiPaneSize( m_auimgr, searchPaneInfo, -1, settings->m_AuiPanels.search_panel_height ); + searchPaneInfo.Direction( settings->m_AuiPanels.search_panel_dock_direction ); + + if( settings->m_AuiPanels.search_panel_dock_direction == wxAUI_DOCK_TOP + || settings->m_AuiPanels.search_panel_dock_direction == wxAUI_DOCK_BOTTOM ) + { + SetAuiPaneSize( m_auimgr, searchPaneInfo, + -1, settings->m_AuiPanels.search_panel_height ); + } + else if( settings->m_AuiPanels.search_panel_dock_direction == wxAUI_DOCK_LEFT + || settings->m_AuiPanels.search_panel_dock_direction == wxAUI_DOCK_RIGHT ) + { + SetAuiPaneSize( m_auimgr, searchPaneInfo, + settings->m_AuiPanels.search_panel_width, -1 ); + } m_searchPane->FocusSearch(); } else { settings->m_AuiPanels.search_panel_height = m_searchPane->GetSize().y; + settings->m_AuiPanels.search_panel_width = m_searchPane->GetSize().x; + settings->m_AuiPanels.search_panel_dock_direction = searchPaneInfo.dock_direction; m_auimgr.Update(); } }