Move the eeschema standalone to the new save dialog

This commit is contained in:
Marek Roszko 2022-06-11 22:02:26 -04:00
parent 577f59f570
commit ff94d289c7
4 changed files with 133 additions and 38 deletions

View File

@ -69,40 +69,11 @@
#include <wx_filename.h> // For ::ResolvePossibleSymlinks
#include <widgets/wx_progress_reporters.h>
///< 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<wxString>& 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<CREATE_PROJECT_CHECKBOX*>( ec )->GetValue();
createNewProject = static_cast<LEGACYFILEDLG_SAVE_PROJECT*>( ec )->GetValue();
#endif
if( !saveCopy )
{

View File

@ -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 <http://www.gnu.org/licenses/>.
*/
#ifndef FILEDLG_HOOK_SAVE_PROJECT_H
#define FILEDLG_HOOK_SAVE_PROJECT_H
#include <wx/filedlgcustomize.h>
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

View File

@ -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 <http://www.gnu.org/licenses/>.
*/
#ifndef LEGACYFILEDLG_SAVE_PROJ_H
#define LEGACYFILEDLG_SVE_PROJ_H
#include <wx/checkbox.h>
#include <wx/panel.h>
#include <wx/sizer.h>
///< 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

View File

@ -22,8 +22,6 @@
#include <wx/filedlgcustomize.h>
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: