From 1550a1e3a41deaa12e2974a45e2f62fd7cd6706c Mon Sep 17 00:00:00 2001 From: Mikolaj Wielgus Date: Tue, 22 Nov 2022 01:46:02 +0100 Subject: [PATCH] Sim Model Editor: Add "Save {} in Value field as "{}"" checkbox --- eeschema/dialogs/dialog_sim_model.cpp | 19 ++++++- eeschema/dialogs/dialog_sim_model.h | 1 + eeschema/dialogs/dialog_sim_model_base.cpp | 7 +++ eeschema/dialogs/dialog_sim_model_base.fbp | 65 ++++++++++++++++++++++ eeschema/dialogs/dialog_sim_model_base.h | 2 + eeschema/sim/sim_model.cpp | 3 +- eeschema/sim/sim_model.h | 8 ++- 7 files changed, 101 insertions(+), 4 deletions(-) diff --git a/eeschema/dialogs/dialog_sim_model.cpp b/eeschema/dialogs/dialog_sim_model.cpp index 39995350a3..3056dc2c6e 100644 --- a/eeschema/dialogs/dialog_sim_model.cpp +++ b/eeschema/dialogs/dialog_sim_model.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -227,6 +228,7 @@ bool DIALOG_SIM_MODEL::TransferDataToWindow() m_curModelTypeOfDeviceType[deviceType] = type; } + m_saveInValueCheckbox->SetValue( curModel().IsStoredInValue() ); m_excludeCheckbox->SetValue( !curModel().IsEnabled() ); onRadioButton( dummyEvent ); @@ -238,7 +240,6 @@ template bool DIALOG_SIM_MODEL::TransferDataFromWindow() { m_pinAssignmentsGrid->CommitPendingChanges(); - m_paramGrid->GetGrid()->CommitChangesFromEditor(); if( !DIALOG_SIM_MODEL_BASE::TransferDataFromWindow() ) @@ -370,6 +371,15 @@ void DIALOG_SIM_MODEL::updateInstanceWidgets() } m_typeChoice->Enable( !m_useLibraryModelRadioButton->GetValue() || isIbisLoaded() ); + + if( curModel().HasPrimaryValue() ) + { + m_saveInValueCheckbox->SetLabel( wxString::Format( "Save %s in Value field as \"%s\"", + curModel().GetParam( 0 ).info.description, + curModel().Serde().GenerateValue() ) ); + } + + m_saveInValueCheckbox->Show( curModel().HasPrimaryValue() ); } @@ -1165,6 +1175,13 @@ void DIALOG_SIM_MODEL::onPinAssignmentsGridSize( wxSizeEvent& aEvent ) } +template +void DIALOG_SIM_MODEL::onSaveInValueCheckbox( wxCommandEvent& aEvent ) +{ + curModel().SetIsStoredInValue( m_saveInValueCheckbox->GetValue() ); +} + + template void DIALOG_SIM_MODEL::onExcludeCheckbox( wxCommandEvent& aEvent ) { diff --git a/eeschema/dialogs/dialog_sim_model.h b/eeschema/dialogs/dialog_sim_model.h index b09a711161..d8007f687e 100644 --- a/eeschema/dialogs/dialog_sim_model.h +++ b/eeschema/dialogs/dialog_sim_model.h @@ -128,6 +128,7 @@ private: void onCodePreviewSetFocus( wxFocusEvent& aEvent ) override; void onPinAssignmentsGridCellChange( wxGridEvent& aEvent ) override; void onPinAssignmentsGridSize( wxSizeEvent& aEvent ) override; + void onSaveInValueCheckbox( wxCommandEvent& aEvent ) override; void onExcludeCheckbox( wxCommandEvent& aEvent ) override; void onDifferentialCheckbox( wxCommandEvent& event ) override; diff --git a/eeschema/dialogs/dialog_sim_model_base.cpp b/eeschema/dialogs/dialog_sim_model_base.cpp index a3dad36725..23890ee7f4 100644 --- a/eeschema/dialogs/dialog_sim_model_base.cpp +++ b/eeschema/dialogs/dialog_sim_model_base.cpp @@ -249,6 +249,11 @@ DIALOG_SIM_MODEL_BASE::DIALOG_SIM_MODEL_BASE( wxWindow* parent, wxWindowID id, c m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); bSizer8->Add( m_staticline1, 0, wxEXPAND | wxALL, 5 ); + m_saveInValueCheckbox = new wxCheckBox( this, wxID_ANY, _("Save {} in Value field as \"{}\""), wxDefaultPosition, wxDefaultSize, 0 ); + m_saveInValueCheckbox->Hide(); + + bSizer8->Add( m_saveInValueCheckbox, 0, wxALL, 5 ); + wxBoxSizer* bSizer81; bSizer81 = new wxBoxSizer( wxHORIZONTAL ); @@ -310,6 +315,7 @@ DIALOG_SIM_MODEL_BASE::DIALOG_SIM_MODEL_BASE( wxWindow* parent, wxWindowID id, c m_codePreview->Connect( wxEVT_SET_FOCUS, wxFocusEventHandler( DIALOG_SIM_MODEL_BASE::onCodePreviewSetFocus ), 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 ); + m_saveInValueCheckbox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_SIM_MODEL_BASE::onSaveInValueCheckbox ), NULL, this ); m_excludeCheckbox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_SIM_MODEL_BASE::onExcludeCheckbox ), NULL, this ); } @@ -348,6 +354,7 @@ DIALOG_SIM_MODEL_BASE::~DIALOG_SIM_MODEL_BASE() m_codePreview->Disconnect( wxEVT_SET_FOCUS, wxFocusEventHandler( DIALOG_SIM_MODEL_BASE::onCodePreviewSetFocus ), 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 ); + m_saveInValueCheckbox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_SIM_MODEL_BASE::onSaveInValueCheckbox ), NULL, this ); m_excludeCheckbox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_SIM_MODEL_BASE::onExcludeCheckbox ), NULL, this ); } diff --git a/eeschema/dialogs/dialog_sim_model_base.fbp b/eeschema/dialogs/dialog_sim_model_base.fbp index 0b1deccb19..6a56d06875 100644 --- a/eeschema/dialogs/dialog_sim_model_base.fbp +++ b/eeschema/dialogs/dialog_sim_model_base.fbp @@ -1877,6 +1877,71 @@ + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 1 + wxID_ANY + Save {} in Value field as "{}" + + 0 + + + 0 + + 1 + m_saveInValueCheckbox + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + onSaveInValueCheckbox + + 5 wxEXPAND diff --git a/eeschema/dialogs/dialog_sim_model_base.h b/eeschema/dialogs/dialog_sim_model_base.h index 32a4d2e5f1..31da663305 100644 --- a/eeschema/dialogs/dialog_sim_model_base.h +++ b/eeschema/dialogs/dialog_sim_model_base.h @@ -79,6 +79,7 @@ class DIALOG_SIM_MODEL_BASE : public DIALOG_SHIM wxPanel* m_pinAssignmentsPanel; WX_GRID* m_pinAssignmentsGrid; wxStaticLine* m_staticline1; + wxCheckBox* m_saveInValueCheckbox; wxCheckBox* m_excludeCheckbox; wxStdDialogButtonSizer* m_sdbSizer1; wxButton* m_sdbSizer1OK; @@ -112,6 +113,7 @@ class DIALOG_SIM_MODEL_BASE : public DIALOG_SHIM virtual void onCodePreviewSetFocus( wxFocusEvent& event ) { event.Skip(); } virtual void onPinAssignmentsGridCellChange( wxGridEvent& event ) { event.Skip(); } virtual void onPinAssignmentsGridSize( wxSizeEvent& event ) { event.Skip(); } + virtual void onSaveInValueCheckbox( wxCommandEvent& event ) { event.Skip(); } virtual void onExcludeCheckbox( wxCommandEvent& event ) { event.Skip(); } diff --git a/eeschema/sim/sim_model.cpp b/eeschema/sim/sim_model.cpp index 687b50f730..c1b4e7d15a 100644 --- a/eeschema/sim/sim_model.cpp +++ b/eeschema/sim/sim_model.cpp @@ -908,7 +908,8 @@ SIM_MODEL::SIM_MODEL( TYPE aType, m_serde( std::move( aSerde ) ), m_spiceGenerator( std::move( aSpiceGenerator ) ), m_type( aType ), - m_isEnabled( true ) + m_isEnabled( true ), + m_isStoredInValue( false ) { } diff --git a/eeschema/sim/sim_model.h b/eeschema/sim/sim_model.h index 592fc82cc2..bcde4e6b94 100644 --- a/eeschema/sim/sim_model.h +++ b/eeschema/sim/sim_model.h @@ -412,6 +412,7 @@ public: const std::string& aValue ); const SPICE_GENERATOR& SpiceGenerator() const { return *m_spiceGenerator; } + const SIM_SERDE& Serde() const { return *m_serde; } // Move semantics. @@ -504,13 +505,16 @@ public: // Can modifying a model parameter also modify other parameters? virtual bool HasAutofill() const { return false; } - virtual bool HasPrimaryValue() const { return false; } void SetIsEnabled( bool aIsEnabled ) { m_isEnabled = aIsEnabled; } bool IsEnabled() const { return m_isEnabled; } - void SetIsStoredInValue( bool aIsStoredInValue ) { m_isStoredInValue = aIsStoredInValue; } + void SetIsStoredInValue( bool aIsStoredInValue ) + { + if( HasPrimaryValue() ) + m_isStoredInValue = aIsStoredInValue; + } bool IsStoredInValue() const { return m_isStoredInValue; } protected: