Browse Source

Fix store-in-value bugs.

1) Always honour the dialog checkbox value.
2) Don't expect the absence of the primary parameter in Sim.Params to
   mean that Value stores it.  It might be the default parameter value.
3) Update spiceTypeInfo when matching legacy data to an internal model.
4) Initialize the store-in-value checkbox depending on whether or not
   we found the primary parameter in the Value field.
7.0
Jeff Young 3 years ago
parent
commit
9583b28063
  1. 12
      eeschema/dialogs/dialog_sim_model.cpp
  2. 1
      eeschema/dialogs/dialog_sim_model.h
  3. 2
      eeschema/dialogs/dialog_sim_model_base.cpp
  4. 1
      eeschema/dialogs/dialog_sim_model_base.fbp
  5. 1
      eeschema/dialogs/dialog_sim_model_base.h
  6. 22
      eeschema/sim/sim_model.cpp

12
eeschema/dialogs/dialog_sim_model.cpp

@ -281,7 +281,8 @@ bool DIALOG_SIM_MODEL<T_symbol, T_field>::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<T_symbol, T_field>::TransferDataFromWindow()
}
}
curModel().SetIsStoredInValue( m_saveInValueCheckbox->GetValue() );
curModel().WriteFields( m_fields );
return true;
@ -1266,13 +1269,6 @@ void DIALOG_SIM_MODEL<T_symbol, T_field>::onPinAssignmentsGridSize( wxSizeEvent&
}
template <typename T_symbol, typename T_field>
void DIALOG_SIM_MODEL<T_symbol, T_field>::onSaveInValueCheckbox( wxCommandEvent& aEvent )
{
curModel().SetIsStoredInValue( m_saveInValueCheckbox->GetValue() );
}
template <typename T_symbol, typename T_field>
void DIALOG_SIM_MODEL<T_symbol, T_field>::onParamGridSetFocus( wxFocusEvent& aEvent )
{

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

2
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 );

1
eeschema/dialogs/dialog_sim_model_base.fbp

@ -1718,7 +1718,6 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnCheckBox">onSaveInValueCheckbox</event>
</object>
</object>
<object class="sizeritem" expanded="1">

1
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(); }

22
eeschema/sim/sim_model.cpp

@ -1040,7 +1040,19 @@ void SIM_MODEL::doReadDataFields( const std::vector<T>* 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<SIM_MODEL> 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;

Loading…
Cancel
Save