Update pcbnew to the new filedlg customize

This commit is contained in:
Marek Roszko 2022-06-11 22:10:49 -04:00
parent ff94d289c7
commit cb44d97ed4
3 changed files with 134 additions and 38 deletions

View File

@ -65,7 +65,11 @@
#include <wx/wupdlock.h> #include <wx/wupdlock.h>
#include <wx/filedlg.h> #include <wx/filedlg.h>
#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 1
#define USE_INSTRUMENTATION 0 #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. * 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, wxFileDialog dlg( aParent, _( "Save Board File As" ), fn.GetPath(), fn.GetFullName(), wildcard,
wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); 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 // Add a "Create a project" checkbox in standalone mode and one isn't loaded
if( Kiface().IsSingle() && aParent->Prj().IsNullProject() ) if( Kiface().IsSingle() && aParent->Prj().IsNullProject() )
dlg.SetExtraControlCreator( &CREATE_PROJECT_CHECKBOX::Create ); dlg.SetExtraControlCreator( &LEGACYFILEDLG_SAVE_PROJECT::Create );
#endif
if( dlg.ShowModal() != wxID_OK ) if( dlg.ShowModal() != wxID_OK )
return false; return false;
@ -271,10 +252,17 @@ bool AskSaveBoardFileName( PCB_EDIT_FRAME* aParent, wxString* aFileName, bool* a
*aFileName = fn.GetFullPath(); *aFileName = fn.GetFullPath();
if( wxWindow* extraControl = dlg.GetExtraControl() ) #if wxCHECK_VERSION( 3, 1, 7 )
*aCreateProject = static_cast<CREATE_PROJECT_CHECKBOX*>( extraControl )->GetValue(); if( checkHook )
*aCreateProject = newProjectHook.GetCreateNewProject();
else if( !aParent->Prj().IsNullProject() ) else if( !aParent->Prj().IsNullProject() )
*aCreateProject = true; *aCreateProject = true;
#else
if( wxWindow* ec = dlg.GetExtraControl() )
*aCreateProject = static_cast<LEGACYFILEDLG_SAVE_PROJECT*>( ec )->GetValue();
else if( !aParent->Prj().IsNullProject() )
*aCreateProject = true;
#endif
return true; return true;
} }

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 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

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 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