From e54cf6c8341a79246b9ed73931ce438c7df91f22 Mon Sep 17 00:00:00 2001 From: Seth Hillbrand Date: Fri, 1 Nov 2024 15:48:56 -0700 Subject: [PATCH] Remember the size/pos of the new proj from template Stores the new project window position and size in the KiCad prefrences for use between sessions Fixes https://gitlab.com/kicad/code/kicad/-/issues/12920 --- common/settings/kicad_settings.cpp | 6 ++++++ include/settings/kicad_settings.h | 5 +++++ kicad/dialogs/dialog_template_selector.cpp | 4 ++-- kicad/dialogs/dialog_template_selector.h | 2 +- kicad/tools/kicad_manager_control.cpp | 7 ++++++- 5 files changed, 20 insertions(+), 4 deletions(-) diff --git a/common/settings/kicad_settings.cpp b/common/settings/kicad_settings.cpp index e7ad5e3d7c..5b2aca04bb 100644 --- a/common/settings/kicad_settings.cpp +++ b/common/settings/kicad_settings.cpp @@ -20,6 +20,7 @@ #include "settings/kicad_settings.h" #include +#include #include @@ -55,6 +56,11 @@ KICAD_SETTINGS::KICAD_SETTINGS() : m_params.emplace_back( new PARAM( "system.check_for_kicad_updates", &m_KiCadUpdateCheck, true ) ); + m_params.emplace_back( new PARAM( "template.window.pos", &m_TemplateWindowPos, + wxDefaultPosition ) ); + + m_params.emplace_back( new PARAM( "template.window.size", &m_TemplateWindowSize, wxDefaultSize ) ); + m_params.emplace_back( new PARAM_LAMBDA( "pcm.repositories", [&]() -> nlohmann::json diff --git a/include/settings/kicad_settings.h b/include/settings/kicad_settings.h index 08123c6a2c..6d693aef0e 100644 --- a/include/settings/kicad_settings.h +++ b/include/settings/kicad_settings.h @@ -58,6 +58,11 @@ public: wxString m_lastUpdateCheckTime; wxString m_lastReceivedUpdate; + // Last position of the template window + wxPoint m_TemplateWindowPos; + // Last size of the template window + wxSize m_TemplateWindowSize; + protected: virtual std::string getLegacyFrameName() const override { return "KicadFrame"; } }; diff --git a/kicad/dialogs/dialog_template_selector.cpp b/kicad/dialogs/dialog_template_selector.cpp index 0c83f1cfd0..0ca9ee5996 100644 --- a/kicad/dialogs/dialog_template_selector.cpp +++ b/kicad/dialogs/dialog_template_selector.cpp @@ -141,8 +141,8 @@ void DIALOG_TEMPLATE_SELECTOR::OnPageChange( wxNotebookEvent& event ) } -DIALOG_TEMPLATE_SELECTOR::DIALOG_TEMPLATE_SELECTOR( wxWindow* aParent ) : - DIALOG_TEMPLATE_SELECTOR_BASE( aParent ) +DIALOG_TEMPLATE_SELECTOR::DIALOG_TEMPLATE_SELECTOR( wxWindow* aParent, const wxPoint& aPos, const wxSize& aSize ) : + DIALOG_TEMPLATE_SELECTOR_BASE( aParent, wxID_ANY, wxEmptyString, aPos, aSize ) { m_browseButton->SetBitmap( KiBitmapBundle( BITMAPS::small_folder ) ); m_reloadButton->SetBitmap( KiBitmapBundle( BITMAPS::small_refresh ) ); diff --git a/kicad/dialogs/dialog_template_selector.h b/kicad/dialogs/dialog_template_selector.h index fd8a660cb5..e54e1844e9 100644 --- a/kicad/dialogs/dialog_template_selector.h +++ b/kicad/dialogs/dialog_template_selector.h @@ -90,7 +90,7 @@ protected: class DIALOG_TEMPLATE_SELECTOR : public DIALOG_TEMPLATE_SELECTOR_BASE { public: - DIALOG_TEMPLATE_SELECTOR( wxWindow* aParent ); + DIALOG_TEMPLATE_SELECTOR( wxWindow* aParent, const wxPoint& aPos, const wxSize& aSize ); /** * Add a new page with \a aTitle, populated with templates from \a aPath diff --git a/kicad/tools/kicad_manager_control.cpp b/kicad/tools/kicad_manager_control.cpp index a82070e826..7b6fe8fbcd 100644 --- a/kicad/tools/kicad_manager_control.cpp +++ b/kicad/tools/kicad_manager_control.cpp @@ -225,7 +225,9 @@ int KICAD_MANAGER_CONTROL::NewJobsetFile( const TOOL_EVENT& aEvent ) int KICAD_MANAGER_CONTROL::NewFromTemplate( const TOOL_EVENT& aEvent ) { - DIALOG_TEMPLATE_SELECTOR* ps = new DIALOG_TEMPLATE_SELECTOR( m_frame ); + KICAD_SETTINGS* settings = Pgm().GetSettingsManager().GetAppSettings(); + DIALOG_TEMPLATE_SELECTOR* ps = new DIALOG_TEMPLATE_SELECTOR( m_frame, settings->m_TemplateWindowPos, + settings->m_TemplateWindowSize ); wxFileName templatePath; @@ -252,6 +254,9 @@ int KICAD_MANAGER_CONTROL::NewFromTemplate( const TOOL_EVENT& aEvent ) if( ps->ShowModal() != wxID_OK ) return -1; + settings->m_TemplateWindowPos = ps->GetPosition(); + settings->m_TemplateWindowSize = ps->GetSize(); + if( !ps->GetSelectedTemplate() ) { wxMessageBox( _( "No project template was selected. Cannot generate new project." ),