diff --git a/eeschema/dialogs/dialog_sim_model.cpp b/eeschema/dialogs/dialog_sim_model.cpp index e6d41e420e..2827135d34 100644 --- a/eeschema/dialogs/dialog_sim_model.cpp +++ b/eeschema/dialogs/dialog_sim_model.cpp @@ -281,7 +281,8 @@ bool DIALOG_SIM_MODEL::TransferDataToWindow() m_curModelTypeOfDeviceType[deviceTypeT] = type; } - curModel().SetIsStoredInValue( storeInValue ); + if( storeInValue ) + curModel().SetIsStoredInValue( true ); m_saveInValueCheckbox->SetValue( curModel().IsStoredInValue() ); @@ -341,6 +342,8 @@ bool DIALOG_SIM_MODEL::TransferDataFromWindow() } } + curModel().SetIsStoredInValue( m_saveInValueCheckbox->GetValue() ); + curModel().WriteFields( m_fields ); return true; @@ -1266,13 +1269,6 @@ void DIALOG_SIM_MODEL::onPinAssignmentsGridSize( wxSizeEvent& } -template -void DIALOG_SIM_MODEL::onSaveInValueCheckbox( wxCommandEvent& aEvent ) -{ - curModel().SetIsStoredInValue( m_saveInValueCheckbox->GetValue() ); -} - - template void DIALOG_SIM_MODEL::onParamGridSetFocus( wxFocusEvent& aEvent ) { diff --git a/eeschema/dialogs/dialog_sim_model.h b/eeschema/dialogs/dialog_sim_model.h index f4c69f5cb5..ebef451d52 100644 --- a/eeschema/dialogs/dialog_sim_model.h +++ b/eeschema/dialogs/dialog_sim_model.h @@ -106,7 +106,6 @@ private: void onPageChanging( wxNotebookEvent& event ) override; void onPinAssignmentsGridCellChange( wxGridEvent& aEvent ) override; void onPinAssignmentsGridSize( wxSizeEvent& aEvent ) override; - void onSaveInValueCheckbox( wxCommandEvent& aEvent ) override; void onDifferentialCheckbox( wxCommandEvent& event ) override; void onSizeParamGrid( wxSizeEvent& event ) override; diff --git a/eeschema/dialogs/dialog_sim_model_base.cpp b/eeschema/dialogs/dialog_sim_model_base.cpp index f4c8b0fc07..2b45338b4f 100644 --- a/eeschema/dialogs/dialog_sim_model_base.cpp +++ b/eeschema/dialogs/dialog_sim_model_base.cpp @@ -353,7 +353,6 @@ DIALOG_SIM_MODEL_BASE::DIALOG_SIM_MODEL_BASE( wxWindow* parent, wxWindowID id, c m_typeChoice->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_SIM_MODEL_BASE::onTypeChoice ), NULL, this ); m_modelNotebook->Connect( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, wxNotebookEventHandler( DIALOG_SIM_MODEL_BASE::onPageChanging ), NULL, this ); m_paramGridMgr->Connect( wxEVT_SIZE, wxSizeEventHandler( DIALOG_SIM_MODEL_BASE::onSizeParamGrid ), NULL, this ); - m_saveInValueCheckbox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_SIM_MODEL_BASE::onSaveInValueCheckbox ), NULL, this ); m_pinAssignmentsGrid->Connect( wxEVT_GRID_CELL_CHANGED, wxGridEventHandler( DIALOG_SIM_MODEL_BASE::onPinAssignmentsGridCellChange ), NULL, this ); m_pinAssignmentsGrid->Connect( wxEVT_SIZE, wxSizeEventHandler( DIALOG_SIM_MODEL_BASE::onPinAssignmentsGridSize ), NULL, this ); } @@ -389,7 +388,6 @@ DIALOG_SIM_MODEL_BASE::~DIALOG_SIM_MODEL_BASE() m_typeChoice->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_SIM_MODEL_BASE::onTypeChoice ), NULL, this ); m_modelNotebook->Disconnect( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, wxNotebookEventHandler( DIALOG_SIM_MODEL_BASE::onPageChanging ), NULL, this ); m_paramGridMgr->Disconnect( wxEVT_SIZE, wxSizeEventHandler( DIALOG_SIM_MODEL_BASE::onSizeParamGrid ), NULL, this ); - m_saveInValueCheckbox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_SIM_MODEL_BASE::onSaveInValueCheckbox ), NULL, this ); m_pinAssignmentsGrid->Disconnect( wxEVT_GRID_CELL_CHANGED, wxGridEventHandler( DIALOG_SIM_MODEL_BASE::onPinAssignmentsGridCellChange ), NULL, this ); m_pinAssignmentsGrid->Disconnect( wxEVT_SIZE, wxSizeEventHandler( DIALOG_SIM_MODEL_BASE::onPinAssignmentsGridSize ), NULL, this ); diff --git a/eeschema/dialogs/dialog_sim_model_base.fbp b/eeschema/dialogs/dialog_sim_model_base.fbp index 593b8abb20..bfab422f43 100644 --- a/eeschema/dialogs/dialog_sim_model_base.fbp +++ b/eeschema/dialogs/dialog_sim_model_base.fbp @@ -1718,7 +1718,6 @@ - onSaveInValueCheckbox diff --git a/eeschema/dialogs/dialog_sim_model_base.h b/eeschema/dialogs/dialog_sim_model_base.h index 8d0b9fe1bf..1ddc7b99f1 100644 --- a/eeschema/dialogs/dialog_sim_model_base.h +++ b/eeschema/dialogs/dialog_sim_model_base.h @@ -111,7 +111,6 @@ class DIALOG_SIM_MODEL_BASE : public DIALOG_SHIM virtual void onTypeChoice( wxCommandEvent& event ) { event.Skip(); } virtual void onPageChanging( wxNotebookEvent& event ) { event.Skip(); } virtual void onSizeParamGrid( wxSizeEvent& event ) { event.Skip(); } - virtual void onSaveInValueCheckbox( wxCommandEvent& event ) { event.Skip(); } virtual void onPinAssignmentsGridCellChange( wxGridEvent& event ) { event.Skip(); } virtual void onPinAssignmentsGridSize( wxSizeEvent& event ) { event.Skip(); } diff --git a/eeschema/sim/sim_model.cpp b/eeschema/sim/sim_model.cpp index 99f62a030a..e3b4173967 100644 --- a/eeschema/sim/sim_model.cpp +++ b/eeschema/sim/sim_model.cpp @@ -1040,7 +1040,19 @@ void SIM_MODEL::doReadDataFields( const std::vector* aFields, std::string paramsField = GetFieldValue( aFields, PARAMS_FIELD ); if( !m_serializer->ParseParams( paramsField ) ) - m_serializer->ParseValue( GetFieldValue( aFields, VALUE_FIELD ) ); + { + // We're relying on the absence of the primary parameter in PARAMS_FIELD to signal that + // it's stored in VALUE_FIELD. But that's a poor determinant as it may just be that the + // primary parameter is its default value. So see if we have anything in VALUE_FIELD, + // but don't be belligerent about it. + try + { + m_serializer->ParseValue( GetFieldValue( aFields, VALUE_FIELD ) ); + } + catch( ... ) + { + } + } } @@ -1615,19 +1627,19 @@ void SIM_MODEL::MigrateSimModel( T_symbol& aSymbol, const PROJECT* aProject ) if( tokenizer.HasMoreTokens() ) { - wxString spiceType = tokenizer.GetNextToken(); - spiceType.MakeUpper(); + spiceTypeInfo.m_Text = tokenizer.GetNextToken(); + spiceTypeInfo.m_Text.MakeUpper(); for( SIM_MODEL::TYPE type : SIM_MODEL::TYPE_ITERATOR() ) { if( spiceDeviceType == SIM_MODEL::SpiceInfo( type ).itemType - && spiceType == SIM_MODEL::SpiceInfo( type ).inlineTypeString ) + && spiceTypeInfo.m_Text == SIM_MODEL::SpiceInfo( type ).inlineTypeString ) { try { std::unique_ptr model = SIM_MODEL::Create( type ); - if( spiceType == wxT( "DC" ) && tokenizer.CountTokens() == 1 ) + if( spiceTypeInfo.m_Text == wxT( "DC" ) && tokenizer.CountTokens() == 1 ) { valueField->SetText( tokenizer.GetNextToken() ); modelFromValueField = false;