From 28d7a2d7c90dc7264d3cbedd57266a1fcfc9f46a Mon Sep 17 00:00:00 2001 From: Mikolaj Wielgus <wielgusmikolaj@gmail.com> Date: Thu, 21 Oct 2021 01:33:30 +0200 Subject: [PATCH] Sim: Update tuner dialog values when focus is lost Fixes https://gitlab.com/kicad/code/kicad/issues/7841 --- eeschema/widgets/tuner_slider.cpp | 86 ++++++++++++++++++-------- eeschema/widgets/tuner_slider.h | 8 +++ eeschema/widgets/tuner_slider_base.cpp | 8 ++- eeschema/widgets/tuner_slider_base.fbp | 10 ++- eeschema/widgets/tuner_slider_base.h | 10 ++- 5 files changed, 92 insertions(+), 30 deletions(-) diff --git a/eeschema/widgets/tuner_slider.cpp b/eeschema/widgets/tuner_slider.cpp index 15927b5f05e..774809f89fc 100644 --- a/eeschema/widgets/tuner_slider.cpp +++ b/eeschema/widgets/tuner_slider.cpp @@ -131,29 +131,7 @@ void TUNER_SLIDER::updateValueText() } -void TUNER_SLIDER::onClose( wxCommandEvent& event ) -{ - m_frame->RemoveTuner( this ); -} - - -void TUNER_SLIDER::onSave( wxCommandEvent& event ) -{ - /// @todo it will crash when component is removed; completely remove m_symbol - m_symbol->GetField( VALUE_FIELD )->SetText( m_value.ToOrigString() ); -} - - -void TUNER_SLIDER::onSliderChanged( wxScrollEvent& event ) -{ - m_value = m_min + ( m_max - m_min ) * SPICE_VALUE( m_slider->GetValue() / 100.0 ); - updateValueText(); - updateComponentValue(); - m_changed = true; -} - - -void TUNER_SLIDER::onMaxTextEnter( wxCommandEvent& event ) +void TUNER_SLIDER::updateMax() { try { @@ -168,7 +146,7 @@ void TUNER_SLIDER::onMaxTextEnter( wxCommandEvent& event ) } -void TUNER_SLIDER::onValueTextEnter( wxCommandEvent& event ) +void TUNER_SLIDER::updateValue() { try { @@ -184,7 +162,7 @@ void TUNER_SLIDER::onValueTextEnter( wxCommandEvent& event ) } -void TUNER_SLIDER::onMinTextEnter( wxCommandEvent& event ) +void TUNER_SLIDER::updateMin() { try { @@ -199,6 +177,64 @@ void TUNER_SLIDER::onMinTextEnter( wxCommandEvent& event ) } +void TUNER_SLIDER::onClose( wxCommandEvent& event ) +{ + m_frame->RemoveTuner( this ); +} + + +void TUNER_SLIDER::onSave( wxCommandEvent& event ) +{ + /// @todo it will crash when component is removed; completely remove m_symbol + m_symbol->GetField( VALUE_FIELD )->SetText( m_value.ToOrigString() ); +} + + +void TUNER_SLIDER::onSliderChanged( wxScrollEvent& event ) +{ + m_value = m_min + ( m_max - m_min ) * SPICE_VALUE( m_slider->GetValue() / 100.0 ); + updateValueText(); + updateComponentValue(); + m_changed = true; +} + + +void TUNER_SLIDER::onMaxKillFocus( wxFocusEvent& event ) +{ + updateMax(); +} + + +void TUNER_SLIDER::onValueKillFocus( wxFocusEvent& event ) +{ + updateValue(); +} + + +void TUNER_SLIDER::onMinKillFocus( wxFocusEvent& event ) +{ + updateMin(); +} + + +void TUNER_SLIDER::onMaxTextEnter( wxCommandEvent& event ) +{ + updateMax(); +} + + +void TUNER_SLIDER::onValueTextEnter( wxCommandEvent& event ) +{ + updateValue(); +} + + +void TUNER_SLIDER::onMinTextEnter( wxCommandEvent& event ) +{ + updateMin(); +} + + void TUNER_SLIDER::onSimTimer( wxTimerEvent& event ) { if( m_changed ) diff --git a/eeschema/widgets/tuner_slider.h b/eeschema/widgets/tuner_slider.h index a8e43671d7e..13b300d72ec 100644 --- a/eeschema/widgets/tuner_slider.h +++ b/eeschema/widgets/tuner_slider.h @@ -78,10 +78,18 @@ private: void updateSlider(); void updateValueText(); + void updateMax(); + void updateValue(); + void updateMin(); + void onClose( wxCommandEvent& event ) override; void onSave( wxCommandEvent& event ) override; void onSliderChanged( wxScrollEvent& event ) override; + void onMaxKillFocus( wxFocusEvent& event ) override; + void onValueKillFocus( wxFocusEvent& event ) override; + void onMinKillFocus( wxFocusEvent& event ) override; + void onMaxTextEnter( wxCommandEvent& event ) override; void onValueTextEnter( wxCommandEvent& event ) override; void onMinTextEnter( wxCommandEvent& event ) override; diff --git a/eeschema/widgets/tuner_slider_base.cpp b/eeschema/widgets/tuner_slider_base.cpp index a4a2bc38151..5ceed887738 100644 --- a/eeschema/widgets/tuner_slider_base.cpp +++ b/eeschema/widgets/tuner_slider_base.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Oct 26 2018) +// C++ code generated with wxFormBuilder (version 3.10.0) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! @@ -81,8 +81,11 @@ TUNER_SLIDER_BASE::TUNER_SLIDER_BASE( wxWindow* parent, wxWindowID id, const wxP m_slider->Connect( wxEVT_SCROLL_THUMBTRACK, wxScrollEventHandler( TUNER_SLIDER_BASE::onSliderChanged ), NULL, this ); m_slider->Connect( wxEVT_SCROLL_THUMBRELEASE, wxScrollEventHandler( TUNER_SLIDER_BASE::onSliderChanged ), NULL, this ); m_slider->Connect( wxEVT_SCROLL_CHANGED, wxScrollEventHandler( TUNER_SLIDER_BASE::onSliderChanged ), NULL, this ); + m_maxText->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( TUNER_SLIDER_BASE::onMaxKillFocus ), NULL, this ); m_maxText->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( TUNER_SLIDER_BASE::onMaxTextEnter ), NULL, this ); + m_valueText->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( TUNER_SLIDER_BASE::onValueKillFocus ), NULL, this ); m_valueText->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( TUNER_SLIDER_BASE::onValueTextEnter ), NULL, this ); + m_minText->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( TUNER_SLIDER_BASE::onMinKillFocus ), NULL, this ); m_minText->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( TUNER_SLIDER_BASE::onMinTextEnter ), NULL, this ); m_saveBtn->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( TUNER_SLIDER_BASE::onSave ), NULL, this ); } @@ -100,8 +103,11 @@ TUNER_SLIDER_BASE::~TUNER_SLIDER_BASE() m_slider->Disconnect( wxEVT_SCROLL_THUMBTRACK, wxScrollEventHandler( TUNER_SLIDER_BASE::onSliderChanged ), NULL, this ); m_slider->Disconnect( wxEVT_SCROLL_THUMBRELEASE, wxScrollEventHandler( TUNER_SLIDER_BASE::onSliderChanged ), NULL, this ); m_slider->Disconnect( wxEVT_SCROLL_CHANGED, wxScrollEventHandler( TUNER_SLIDER_BASE::onSliderChanged ), NULL, this ); + m_maxText->Disconnect( wxEVT_KILL_FOCUS, wxFocusEventHandler( TUNER_SLIDER_BASE::onMaxKillFocus ), NULL, this ); m_maxText->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( TUNER_SLIDER_BASE::onMaxTextEnter ), NULL, this ); + m_valueText->Disconnect( wxEVT_KILL_FOCUS, wxFocusEventHandler( TUNER_SLIDER_BASE::onValueKillFocus ), NULL, this ); m_valueText->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( TUNER_SLIDER_BASE::onValueTextEnter ), NULL, this ); + m_minText->Disconnect( wxEVT_KILL_FOCUS, wxFocusEventHandler( TUNER_SLIDER_BASE::onMinKillFocus ), NULL, this ); m_minText->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( TUNER_SLIDER_BASE::onMinTextEnter ), NULL, this ); m_saveBtn->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( TUNER_SLIDER_BASE::onSave ), NULL, this ); diff --git a/eeschema/widgets/tuner_slider_base.fbp b/eeschema/widgets/tuner_slider_base.fbp index 532aa6c13f3..e8fcae89e5b 100644 --- a/eeschema/widgets/tuner_slider_base.fbp +++ b/eeschema/widgets/tuner_slider_base.fbp @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <wxFormBuilder_Project> - <FileVersion major="1" minor="15" /> + <FileVersion major="1" minor="16" /> <object class="Project" expanded="1"> <property name="class_decoration"></property> <property name="code_generation">C++</property> @@ -14,6 +14,7 @@ <property name="file">tuner_slider_base</property> <property name="first_id">1000</property> <property name="help_provider">none</property> + <property name="image_path_wrapper_function_name"></property> <property name="indent_with_spaces"></property> <property name="internationalize">1</property> <property name="name">TUNER_SLIDER_BASE</property> @@ -25,6 +26,7 @@ <property name="skip_php_events">1</property> <property name="skip_python_events">1</property> <property name="ui_table">UI</property> + <property name="use_array_enum">0</property> <property name="use_enum">0</property> <property name="use_microsoft_bom">0</property> <object class="Panel" expanded="1"> @@ -46,6 +48,7 @@ <property name="size">126,283</property> <property name="subclass"></property> <property name="tooltip"></property> + <property name="two_step_creation">0</property> <property name="window_extra_style"></property> <property name="window_name"></property> <property name="window_style">wxTAB_TRAVERSAL</property> @@ -137,6 +140,7 @@ <property name="aui_name"></property> <property name="aui_position"></property> <property name="aui_row"></property> + <property name="auth_needed">0</property> <property name="best_size"></property> <property name="bg"></property> <property name="bitmap"></property> @@ -359,6 +363,7 @@ <property name="window_extra_style"></property> <property name="window_name"></property> <property name="window_style"></property> + <event name="OnKillFocus">onMaxKillFocus</event> <event name="OnTextEnter">onMaxTextEnter</event> </object> </object> @@ -424,6 +429,7 @@ <property name="window_extra_style"></property> <property name="window_name"></property> <property name="window_style"></property> + <event name="OnKillFocus">onValueKillFocus</event> <event name="OnTextEnter">onValueTextEnter</event> </object> </object> @@ -489,6 +495,7 @@ <property name="window_extra_style"></property> <property name="window_name"></property> <property name="window_style"></property> + <event name="OnKillFocus">onMinKillFocus</event> <event name="OnTextEnter">onMinTextEnter</event> </object> </object> @@ -509,6 +516,7 @@ <property name="aui_name"></property> <property name="aui_position"></property> <property name="aui_row"></property> + <property name="auth_needed">0</property> <property name="best_size"></property> <property name="bg"></property> <property name="bitmap"></property> diff --git a/eeschema/widgets/tuner_slider_base.h b/eeschema/widgets/tuner_slider_base.h index 2a01952a06e..fb07dba2a78 100644 --- a/eeschema/widgets/tuner_slider_base.h +++ b/eeschema/widgets/tuner_slider_base.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Oct 26 2018) +// C++ code generated with wxFormBuilder (version 3.10.0) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! @@ -16,10 +16,10 @@ #include <wx/font.h> #include <wx/colour.h> #include <wx/settings.h> +#include <wx/button.h> #include <wx/bitmap.h> #include <wx/image.h> #include <wx/icon.h> -#include <wx/button.h> #include <wx/sizer.h> #include <wx/slider.h> #include <wx/textctrl.h> @@ -44,11 +44,14 @@ class TUNER_SLIDER_BASE : public wxPanel wxTextCtrl* m_minText; wxButton* m_saveBtn; - // Virtual event handlers, overide them in your derived class + // Virtual event handlers, override them in your derived class virtual void onClose( wxCommandEvent& event ) { event.Skip(); } virtual void onSliderChanged( wxScrollEvent& event ) { event.Skip(); } + virtual void onMaxKillFocus( wxFocusEvent& event ) { event.Skip(); } virtual void onMaxTextEnter( wxCommandEvent& event ) { event.Skip(); } + virtual void onValueKillFocus( wxFocusEvent& event ) { event.Skip(); } virtual void onValueTextEnter( wxCommandEvent& event ) { event.Skip(); } + virtual void onMinKillFocus( wxFocusEvent& event ) { event.Skip(); } virtual void onMinTextEnter( wxCommandEvent& event ) { event.Skip(); } virtual void onSave( wxCommandEvent& event ) { event.Skip(); } @@ -56,6 +59,7 @@ class TUNER_SLIDER_BASE : public wxPanel public: TUNER_SLIDER_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 126,283 ), long style = wxTAB_TRAVERSAL, const wxString& name = wxEmptyString ); + ~TUNER_SLIDER_BASE(); }; -- GitLab