From 8324c0b0ccb2e7f4026e7482d6a8b7f568b20adb Mon Sep 17 00:00:00 2001 From: Jeff Young <jeff@rokeby.ie> Date: Sat, 17 Dec 2022 22:33:00 +0000 Subject: [PATCH] Fix event order bugs in Sim Model Editor dialog. onParamGridChanged was firing before CommitPendingChanges which meant the edited value didn't get saved if the editor was still open when OK was clicked. --- eeschema/dialogs/dialog_sim_model.cpp | 9 +++++++-- eeschema/dialogs/dialog_sim_model.h | 2 +- eeschema/dialogs/dialog_sim_model_base.cpp | 4 ++-- eeschema/dialogs/dialog_sim_model_base.fbp | 2 +- eeschema/dialogs/dialog_sim_model_base.h | 2 +- eeschema/sim/sim_property.cpp | 3 --- 6 files changed, 12 insertions(+), 10 deletions(-) diff --git a/eeschema/dialogs/dialog_sim_model.cpp b/eeschema/dialogs/dialog_sim_model.cpp index 28d2cb4ae0..b3cc8052e3 100644 --- a/eeschema/dialogs/dialog_sim_model.cpp +++ b/eeschema/dialogs/dialog_sim_model.cpp @@ -1199,9 +1199,14 @@ void DIALOG_SIM_MODEL<T_symbol, T_field>::onTypeChoice( wxCommandEvent& aEvent ) template <typename T_symbol, typename T_field> -void DIALOG_SIM_MODEL<T_symbol, T_field>::onParamGridChanged( wxPropertyGridEvent& aEvent ) +void DIALOG_SIM_MODEL<T_symbol, T_field>::onPageChanging( wxBookCtrlEvent& event ) { - updateWidgets(); + // This should have been done in wxPGTextCtrlEditor::OnTextCtrlEvent(), but something must + // be clearing it before we get here, resulting in CommitChangesFromEditor() doing nothing + m_paramGrid->GetGrid()->EditorsValueWasModified(); + m_paramGrid->GetGrid()->CommitChangesFromEditor(); + + updateModelCodeTab(); } diff --git a/eeschema/dialogs/dialog_sim_model.h b/eeschema/dialogs/dialog_sim_model.h index 6504fc8115..bf24dd5fb5 100644 --- a/eeschema/dialogs/dialog_sim_model.h +++ b/eeschema/dialogs/dialog_sim_model.h @@ -103,7 +103,7 @@ private: void onIbisModelComboboxTextEnter( wxCommandEvent& event ) override; void onDeviceTypeChoice( wxCommandEvent& aEvent ) override; void onTypeChoice( wxCommandEvent& aEvent ) override; - void onParamGridChanged( wxPropertyGridEvent& aEvent ) override; + void onPageChanging( wxNotebookEvent& event ) override; void onPinAssignmentsGridCellChange( wxGridEvent& aEvent ) override; void onPinAssignmentsGridSize( wxSizeEvent& aEvent ) override; void onSaveInValueCheckbox( wxCommandEvent& aEvent ) override; diff --git a/eeschema/dialogs/dialog_sim_model_base.cpp b/eeschema/dialogs/dialog_sim_model_base.cpp index 2489bc98cd..32c844e866 100644 --- a/eeschema/dialogs/dialog_sim_model_base.cpp +++ b/eeschema/dialogs/dialog_sim_model_base.cpp @@ -312,7 +312,7 @@ DIALOG_SIM_MODEL_BASE::DIALOG_SIM_MODEL_BASE( wxWindow* parent, wxWindowID id, c m_deviceTypeChoice->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_SIM_MODEL_BASE::onDeviceTypeChoiceUpdate ), NULL, this ); m_staticTextSpiceType->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_SIM_MODEL_BASE::onTypeLabelUpdate ), NULL, this ); m_typeChoice->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_SIM_MODEL_BASE::onTypeChoice ), NULL, this ); - m_paramGridMgr->Connect( wxEVT_PG_CHANGED, wxPropertyGridEventHandler( DIALOG_SIM_MODEL_BASE::onParamGridChanged ), 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 ); @@ -349,7 +349,7 @@ DIALOG_SIM_MODEL_BASE::~DIALOG_SIM_MODEL_BASE() m_deviceTypeChoice->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_SIM_MODEL_BASE::onDeviceTypeChoiceUpdate ), NULL, this ); m_staticTextSpiceType->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_SIM_MODEL_BASE::onTypeLabelUpdate ), NULL, this ); m_typeChoice->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_SIM_MODEL_BASE::onTypeChoice ), NULL, this ); - m_paramGridMgr->Disconnect( wxEVT_PG_CHANGED, wxPropertyGridEventHandler( DIALOG_SIM_MODEL_BASE::onParamGridChanged ), 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 ); diff --git a/eeschema/dialogs/dialog_sim_model_base.fbp b/eeschema/dialogs/dialog_sim_model_base.fbp index 2d2cc7f2a1..62b0289890 100644 --- a/eeschema/dialogs/dialog_sim_model_base.fbp +++ b/eeschema/dialogs/dialog_sim_model_base.fbp @@ -1393,6 +1393,7 @@ <property name="window_extra_style"></property> <property name="window_name"></property> <property name="window_style"></property> + <event name="OnNotebookPageChanging">onPageChanging</event> <object class="notebookpage" expanded="1"> <property name="bitmap"></property> <property name="label">Parameters</property> @@ -1511,7 +1512,6 @@ <property name="window_extra_style"></property> <property name="window_name"></property> <property name="window_style"></property> - <event name="OnPropertyGridChanged">onParamGridChanged</event> <event name="OnSize">onSizeParamGrid</event> <object class="propGridPage" expanded="0"> <property name="bitmap"></property> diff --git a/eeschema/dialogs/dialog_sim_model_base.h b/eeschema/dialogs/dialog_sim_model_base.h index 37861fc36e..17092513ed 100644 --- a/eeschema/dialogs/dialog_sim_model_base.h +++ b/eeschema/dialogs/dialog_sim_model_base.h @@ -108,7 +108,7 @@ class DIALOG_SIM_MODEL_BASE : public DIALOG_SHIM virtual void onDeviceTypeChoiceUpdate( wxUpdateUIEvent& event ) { event.Skip(); } virtual void onTypeLabelUpdate( wxUpdateUIEvent& event ) { event.Skip(); } virtual void onTypeChoice( wxCommandEvent& event ) { event.Skip(); } - virtual void onParamGridChanged( wxPropertyGridEvent& 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(); } diff --git a/eeschema/sim/sim_property.cpp b/eeschema/sim/sim_property.cpp index 38057dbf0b..23e965da23 100644 --- a/eeschema/sim/sim_property.cpp +++ b/eeschema/sim/sim_property.cpp @@ -170,9 +170,6 @@ bool SIM_STRING_PROPERTY::StringToValue( wxVariant& aVariant, const wxString& aT else evaledText = aText; - wxString baseParamValue = m_model.GetBaseParam( m_paramIndex ).value->ToString(); - aVariant = evaledText; - m_model.SetParamValue( m_paramIndex, std::string( evaledText.ToUTF8() ) ); aVariant = GetParam().value->ToString();