From cb44d97ed46e93ee87eec635def5625fd13d5173 Mon Sep 17 00:00:00 2001 From: Marek Roszko Date: Sat, 11 Jun 2022 22:10:49 -0400 Subject: [PATCH] Update pcbnew to the new filedlg customize --- pcbnew/files.cpp | 64 +++++++++------------ pcbnew/widgets/filedlg_hook_save_project.h | 52 +++++++++++++++++ pcbnew/widgets/legacyfiledlg_save_project.h | 56 ++++++++++++++++++ 3 files changed, 134 insertions(+), 38 deletions(-) create mode 100644 pcbnew/widgets/filedlg_hook_save_project.h create mode 100644 pcbnew/widgets/legacyfiledlg_save_project.h diff --git a/pcbnew/files.cpp b/pcbnew/files.cpp index 14d5dacb93..541aa02070 100644 --- a/pcbnew/files.cpp +++ b/pcbnew/files.cpp @@ -65,7 +65,11 @@ #include #include - +#if wxCHECK_VERSION( 3, 1, 7 ) +#include "widgets/filedlg_hook_save_project.h" +#else +#include "widgets/legacyfiledlg_save_project.h" +#endif //#define USE_INSTRUMENTATION 1 #define USE_INSTRUMENTATION 0 @@ -204,40 +208,6 @@ bool AskLoadBoardFileName( PCB_EDIT_FRAME* aParent, int* aCtl, wxString* aFileNa } -///< Helper widget to select whether a new project should be created for a file when saving -class CREATE_PROJECT_CHECKBOX : public wxPanel -{ -public: - CREATE_PROJECT_CHECKBOX( wxWindow* aParent ) - : wxPanel( aParent ) - { - m_cbCreateProject = new wxCheckBox( this, wxID_ANY, - _( "Create a new project for this board" ) ); - m_cbCreateProject->SetValue( true ); - m_cbCreateProject->SetToolTip( _( "Creating a project will enable features such as " - "design rules, net classes, and layer presets" ) ); - - wxBoxSizer* sizer = new wxBoxSizer( wxHORIZONTAL ); - sizer->Add( m_cbCreateProject, 0, wxALL, 8 ); - - SetSizerAndFit( sizer ); - } - - bool GetValue() const - { - return m_cbCreateProject->GetValue(); - } - - static wxWindow* Create( wxWindow* aParent ) - { - return new CREATE_PROJECT_CHECKBOX( aParent ); - } - -protected: - wxCheckBox* m_cbCreateProject; -}; - - /** * Put up a wxFileDialog asking for a BOARD filename to save. * @@ -257,9 +227,20 @@ bool AskSaveBoardFileName( PCB_EDIT_FRAME* aParent, wxString* aFileName, bool* a wxFileDialog dlg( aParent, _( "Save Board File As" ), fn.GetPath(), fn.GetFullName(), wildcard, wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); +#if wxCHECK_VERSION( 3, 1, 7 ) + FILEDLG_HOOK_SAVE_PROJECT newProjectHook; + bool checkHook = false; +#endif + +#if wxCHECK_VERSION( 3, 1, 7 ) + dlg.SetCustomizeHook( newProjectHook ); + checkHook = true; +#else // Add a "Create a project" checkbox in standalone mode and one isn't loaded if( Kiface().IsSingle() && aParent->Prj().IsNullProject() ) - dlg.SetExtraControlCreator( &CREATE_PROJECT_CHECKBOX::Create ); + dlg.SetExtraControlCreator( &LEGACYFILEDLG_SAVE_PROJECT::Create ); +#endif + if( dlg.ShowModal() != wxID_OK ) return false; @@ -271,10 +252,17 @@ bool AskSaveBoardFileName( PCB_EDIT_FRAME* aParent, wxString* aFileName, bool* a *aFileName = fn.GetFullPath(); - if( wxWindow* extraControl = dlg.GetExtraControl() ) - *aCreateProject = static_cast( extraControl )->GetValue(); +#if wxCHECK_VERSION( 3, 1, 7 ) + if( checkHook ) + *aCreateProject = newProjectHook.GetCreateNewProject(); else if( !aParent->Prj().IsNullProject() ) *aCreateProject = true; +#else + if( wxWindow* ec = dlg.GetExtraControl() ) + *aCreateProject = static_cast( ec )->GetValue(); + else if( !aParent->Prj().IsNullProject() ) + *aCreateProject = true; +#endif return true; } diff --git a/pcbnew/widgets/filedlg_hook_save_project.h b/pcbnew/widgets/filedlg_hook_save_project.h new file mode 100644 index 0000000000..c624c12088 --- /dev/null +++ b/pcbnew/widgets/filedlg_hook_save_project.h @@ -0,0 +1,52 @@ +/* +* This program source code file is part of KiCad, a free EDA CAD application. +* +* Copyright (C) 2022 KiCad Developers, see AUTHORS.txt for contributors. +* +* This program is free software: you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation, either version 3 of the License, or (at your +* option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License along +* with this program. If not, see . +*/ + +#ifndef FILEDLG_HOOK_SAVE_PROJECT_H +#define FILEDLG_HOOK_SAVE_PROJECT_H + +#include + +class FILEDLG_HOOK_SAVE_PROJECT : public wxFileDialogCustomizeHook +{ +public: + FILEDLG_HOOK_SAVE_PROJECT(){}; + + virtual void AddCustomControls( wxFileDialogCustomize& customizer ) override + { + m_cb = customizer.AddCheckBox( _( "Create a new project for this board" ) ); + m_cb->SetValue( true ); + } + + virtual void TransferDataFromCustomControls() override + { + m_createNewProject = m_cb->GetValue(); + } + + ///< Gets the selected state of the create new project option + bool GetCreateNewProject() const { return m_createNewProject; } + +private: + bool m_createNewProject; + + wxFileDialogCheckBox* m_cb; + + wxDECLARE_NO_COPY_CLASS( FILEDLG_HOOK_SAVE_PROJECT ); +}; + +#endif \ No newline at end of file diff --git a/pcbnew/widgets/legacyfiledlg_save_project.h b/pcbnew/widgets/legacyfiledlg_save_project.h new file mode 100644 index 0000000000..f121f21cc9 --- /dev/null +++ b/pcbnew/widgets/legacyfiledlg_save_project.h @@ -0,0 +1,56 @@ +/* +* This program source code file is part of KiCad, a free EDA CAD application. +* +* Copyright (C) 2022 KiCad Developers, see AUTHORS.txt for contributors. +* +* This program is free software: you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation, either version 3 of the License, or (at your +* option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License along +* with this program. If not, see . +*/ + +#ifndef LEGACYFILEDLG_SAVE_PROJ_H +#define LEGACYFILEDLG_SVE_PROJ_H + +#include +#include +#include + +///< Helper widget to select whether a new project should be created for a file when saving +class LEGACYFILEDLG_SAVE_PROJECT : public wxPanel +{ +public: + LEGACYFILEDLG_SAVE_PROJECT( wxWindow* aParent ) : wxPanel( aParent ) + { + m_cbCreateProject = + new wxCheckBox( this, wxID_ANY, _( "Create a new project for this board" ) ); + m_cbCreateProject->SetValue( true ); + m_cbCreateProject->SetToolTip( _( "Creating a project will enable features such as " + "design rules, net classes, and layer presets" ) ); + + wxBoxSizer* sizer = new wxBoxSizer( wxHORIZONTAL ); + sizer->Add( m_cbCreateProject, 0, wxALL, 8 ); + + SetSizerAndFit( sizer ); + } + + bool GetValue() const { return m_cbCreateProject->GetValue(); } + + static wxWindow* Create( wxWindow* aParent ) + { + return new LEGACYFILEDLG_SAVE_PROJECT( aParent ); + } + +protected: + wxCheckBox* m_cbCreateProject; +}; + +#endif \ No newline at end of file