Finish up work on PlaceFile settings persistence.

We were missing several flags, and using the Plot output directory
instead of saving our own.

Fixes https://gitlab.com/kicad/code/kicad/issues/12715

Fixes https://gitlab.com/kicad/code/kicad/issues/12714
This commit is contained in:
Jeff Young 2022-10-24 22:21:50 +01:00
parent 3cb6a80954
commit d6fca11419
3 changed files with 31 additions and 25 deletions

View File

@ -54,8 +54,7 @@ class DIALOG_GEN_FOOTPRINT_POSITION : public DIALOG_GEN_FOOTPRINT_POSITION_BASE
public: public:
DIALOG_GEN_FOOTPRINT_POSITION( PCB_EDIT_FRAME * aParent ): DIALOG_GEN_FOOTPRINT_POSITION( PCB_EDIT_FRAME * aParent ):
DIALOG_GEN_FOOTPRINT_POSITION_BASE( aParent ), DIALOG_GEN_FOOTPRINT_POSITION_BASE( aParent ),
m_parent( aParent ), m_parent( aParent )
m_plotOpts( aParent->GetPlotSettings() )
{ {
m_messagesPanel->SetFileName( Prj().GetProjectPath() + wxT( "report.txt" ) ); m_messagesPanel->SetFileName( Prj().GetProjectPath() + wxT( "report.txt" ) );
m_reporter = &m_messagesPanel->Reporter(); m_reporter = &m_messagesPanel->Reporter();
@ -160,7 +159,6 @@ private:
private: private:
PCB_EDIT_FRAME* m_parent; PCB_EDIT_FRAME* m_parent;
PCB_PLOT_PARAMS m_plotOpts;
REPORTER* m_reporter; REPORTER* m_reporter;
}; };
@ -175,7 +173,7 @@ void DIALOG_GEN_FOOTPRINT_POSITION::initDialog()
m_units = cfg->m_PlaceFile.units == 0 ? EDA_UNITS::INCHES : EDA_UNITS::MILLIMETRES; m_units = cfg->m_PlaceFile.units == 0 ? EDA_UNITS::INCHES : EDA_UNITS::MILLIMETRES;
// Output directory // Output directory
m_outputDirectoryName->SetValue( m_plotOpts.GetOutputDirectory() ); m_outputDirectoryName->SetValue( cfg->m_PlaceFile.output_directory );
// Update Options // Update Options
m_radioBoxUnits->SetSelection( cfg->m_PlaceFile.units ); m_radioBoxUnits->SetSelection( cfg->m_PlaceFile.units );
@ -224,9 +222,16 @@ void DIALOG_GEN_FOOTPRINT_POSITION::OnOutputDirectoryBrowseClicked( wxCommandEve
void DIALOG_GEN_FOOTPRINT_POSITION::OnGenerate( wxCommandEvent& event ) void DIALOG_GEN_FOOTPRINT_POSITION::OnGenerate( wxCommandEvent& event )
{ {
PCBNEW_SETTINGS* cfg = m_parent->GetPcbNewSettings();
m_units = m_radioBoxUnits->GetSelection() == 0 ? EDA_UNITS::INCHES : EDA_UNITS::MILLIMETRES; m_units = m_radioBoxUnits->GetSelection() == 0 ? EDA_UNITS::INCHES : EDA_UNITS::MILLIMETRES;
PCBNEW_SETTINGS* cfg = m_parent->GetPcbNewSettings();
wxString dirStr = m_outputDirectoryName->GetValue();
// Keep unix directory format convention in cfg files
dirStr.Replace( wxT( "\\" ), wxT( "/" ) );
cfg->m_PlaceFile.output_directory = dirStr;
cfg->m_PlaceFile.units = m_units == EDA_UNITS::INCHES ? 0 : 1; cfg->m_PlaceFile.units = m_units == EDA_UNITS::INCHES ? 0 : 1;
cfg->m_PlaceFile.file_options = m_radioBoxFilesCount->GetSelection(); cfg->m_PlaceFile.file_options = m_radioBoxFilesCount->GetSelection();
cfg->m_PlaceFile.file_format = m_rbFormat->GetSelection(); cfg->m_PlaceFile.file_format = m_rbFormat->GetSelection();
@ -236,15 +241,6 @@ void DIALOG_GEN_FOOTPRINT_POSITION::OnGenerate( wxCommandEvent& event )
cfg->m_PlaceFile.use_aux_origin = m_useDrillPlaceOrigin->GetValue(); cfg->m_PlaceFile.use_aux_origin = m_useDrillPlaceOrigin->GetValue();
cfg->m_PlaceFile.negate_xcoord = m_negateXcb->GetValue(); cfg->m_PlaceFile.negate_xcoord = m_negateXcb->GetValue();
// Set output directory and replace backslashes with forward ones
// (Keep unix convention in cfg files)
wxString dirStr;
dirStr = m_outputDirectoryName->GetValue();
dirStr.Replace( wxT( "\\" ), wxT( "/" ) );
m_plotOpts.SetOutputDirectory( dirStr );
m_parent->SetPlotSettings( m_plotOpts );
if( m_rbFormat->GetSelection() == 2 ) if( m_rbFormat->GetSelection() == 2 )
CreateGerberFiles(); CreateGerberFiles();
else else
@ -269,7 +265,7 @@ bool DIALOG_GEN_FOOTPRINT_POSITION::CreateGerberFiles()
return m_parent->GetBoard()->ResolveTextVar( token, 0 ); return m_parent->GetBoard()->ResolveTextVar( token, 0 );
}; };
wxString path = m_plotOpts.GetOutputDirectory(); wxString path = m_parent->GetPcbNewSettings()->m_PlaceFile.output_directory;
path = ExpandTextVars( path, &textResolver, nullptr, nullptr ); path = ExpandTextVars( path, &textResolver, nullptr, nullptr );
path = ExpandEnvVarSubstitutions( path, nullptr ); path = ExpandEnvVarSubstitutions( path, nullptr );
@ -377,7 +373,7 @@ bool DIALOG_GEN_FOOTPRINT_POSITION::CreateAsciiFiles()
return m_parent->GetBoard()->ResolveTextVar( token, 0 ); return m_parent->GetBoard()->ResolveTextVar( token, 0 );
}; };
wxString path = m_plotOpts.GetOutputDirectory(); wxString path = m_parent->GetPcbNewSettings()->m_PlaceFile.output_directory;
path = ExpandTextVars( path, &textResolver, nullptr, nullptr ); path = ExpandTextVars( path, &textResolver, nullptr, nullptr );
path = ExpandEnvVarSubstitutions( path, nullptr ); path = ExpandEnvVarSubstitutions( path, nullptr );

View File

@ -407,7 +407,10 @@ PCBNEW_SETTINGS::PCBNEW_SETTINGS()
m_params.emplace_back( new PARAM<bool>( "netlist.associate_by_ref_sch", m_params.emplace_back( new PARAM<bool>( "netlist.associate_by_ref_sch",
&m_NetlistDialog.associate_by_ref_sch, false ) ); &m_NetlistDialog.associate_by_ref_sch, false ) );
m_params.emplace_back(new PARAM<int>( "place_file.units", m_params.emplace_back( new PARAM<wxString>( "place_file.output_directory",
&m_PlaceFile.output_directory, wxEmptyString ) );
m_params.emplace_back( new PARAM<int>( "place_file.units",
&m_PlaceFile.units, 1 ) ); &m_PlaceFile.units, 1 ) );
m_params.emplace_back( new PARAM<int>( "place_file.file_options", m_params.emplace_back( new PARAM<int>( "place_file.file_options",
@ -416,6 +419,12 @@ PCBNEW_SETTINGS::PCBNEW_SETTINGS()
m_params.emplace_back( new PARAM<int>( "place_file.file_format", m_params.emplace_back( new PARAM<int>( "place_file.file_format",
&m_PlaceFile.file_format, 0 ) ); &m_PlaceFile.file_format, 0 ) );
m_params.emplace_back( new PARAM<bool>( "place_file.excludeTH",
&m_PlaceFile.exclude_TH, false ) );
m_params.emplace_back( new PARAM<bool>( "place_file.onlySMD",
&m_PlaceFile.only_SMD, false ) );
m_params.emplace_back( new PARAM<bool>( "place_file.include_board_edge", m_params.emplace_back( new PARAM<bool>( "place_file.include_board_edge",
&m_PlaceFile.include_board_edge, false ) ); &m_PlaceFile.include_board_edge, false ) );

View File

@ -232,14 +232,15 @@ public:
struct DIALOG_PLACE_FILE struct DIALOG_PLACE_FILE
{ {
int units; wxString output_directory;
int file_options; int units;
int file_format; int file_options;
bool include_board_edge; int file_format;
bool exclude_TH; bool include_board_edge;
bool only_SMD; bool exclude_TH;
bool use_aux_origin; bool only_SMD;
bool negate_xcoord; bool use_aux_origin;
bool negate_xcoord;
}; };
struct DIALOG_PLOT struct DIALOG_PLOT