diff --git a/eeschema/files-io.cpp b/eeschema/files-io.cpp index c8544e7964..ad1932b6d3 100644 --- a/eeschema/files-io.cpp +++ b/eeschema/files-io.cpp @@ -69,40 +69,11 @@ #include // For ::ResolvePossibleSymlinks #include - -///< 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 schematic" ) ); - m_cbCreateProject->SetValue( true ); - m_cbCreateProject->SetToolTip( _( "Creating a project will enable features such as " - "text variables, net classes, and ERC exclusions" ) ); - - 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; -}; - +#if wxCHECK_VERSION( 3, 1, 7 ) +#include "widgets/filedlg_hook_save_project.h" +#else +#include "widgets/legacyfiledlg_save_project.h" +#endif bool SCH_EDIT_FRAME::OpenProjectFiles( const std::vector& aFileSet, int aCtl ) { @@ -823,10 +794,20 @@ bool SCH_EDIT_FRAME::SaveProject( bool aSaveAs ) savePath.GetFullName(), KiCadSchematicFileWildcard(), wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); +#if wxCHECK_VERSION( 3, 1, 7 ) + FILEDLG_HOOK_SAVE_PROJECT newProjectHook; + bool checkHook = false; +#endif + if( Kiface().IsSingle() || aSaveAs ) { +#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 - dlg.SetExtraControlCreator( &CREATE_PROJECT_CHECKBOX::Create ); + dlg.SetExtraControlCreator( &LEGACYFILEDLG_SAVE_PROJECT::Create ); +#endif } if( dlg.ShowModal() == wxID_CANCEL ) @@ -849,8 +830,15 @@ bool SCH_EDIT_FRAME::SaveProject( bool aSaveAs ) return false; } + bool createNewProject = false; + +#if wxCHECK_VERSION( 3, 1, 7 ) + if( checkHook ) + createNewProject = newProjectHook.GetCreateNewProject(); +#else if( wxWindow* ec = dlg.GetExtraControl() ) - createNewProject = static_cast( ec )->GetValue(); + createNewProject = static_cast( ec )->GetValue(); +#endif if( !saveCopy ) { diff --git a/eeschema/widgets/filedlg_hook_save_project.h b/eeschema/widgets/filedlg_hook_save_project.h new file mode 100644 index 0000000000..bbaccc09aa --- /dev/null +++ b/eeschema/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 schematic" ) ); + 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/eeschema/widgets/legacyfiledlg_save_project.h b/eeschema/widgets/legacyfiledlg_save_project.h new file mode 100644 index 0000000000..6285f2b348 --- /dev/null +++ b/eeschema/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 schematic" ) ); + m_cbCreateProject->SetValue( true ); + m_cbCreateProject->SetToolTip( _( "Creating a project will enable features such as " + "text variables, net classes, and ERC exclusions" ) ); + + 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 diff --git a/kicad/widgets/filedlg_hook_new_project.h b/kicad/widgets/filedlg_hook_new_project.h index 8a7c6f3f66..491b5b8ff0 100644 --- a/kicad/widgets/filedlg_hook_new_project.h +++ b/kicad/widgets/filedlg_hook_new_project.h @@ -22,8 +22,6 @@ #include -class wxFileDialog; - class FILEDLG_HOOK_NEW_PROJECT : public wxFileDialogCustomizeHook { public: @@ -40,6 +38,7 @@ public: m_createNewDir = m_cb->GetValue(); } + ///< Gets the selected state of the create new directory checkbox bool GetCreateNewDir() const { return m_createNewDir; } private: