Make UNIT_BINDER sensitive to parent frame user unit changes.

Fixes https://gitlab.com/kicad/code/kicad/issues/4243
This commit is contained in:
Jeff Young 2020-04-22 20:44:20 +01:00
parent fe383efb93
commit 5bc6ad9786
2 changed files with 31 additions and 5 deletions

View File

@ -38,12 +38,12 @@ wxDEFINE_EVENT( DELAY_FOCUS, wxCommandEvent );
UNIT_BINDER::UNIT_BINDER( EDA_DRAW_FRAME* aParent,
wxStaticText* aLabel, wxWindow* aValue, wxStaticText* aUnitLabel,
bool aUseMils, bool allowEval ) :
m_label( aLabel ),
m_value( aValue ),
m_unitLabel( aUnitLabel ),
m_eval( aParent->GetUserUnits(), aUseMils )
m_frame( aParent ),
m_label( aLabel ),
m_value( aValue ),
m_unitLabel( aUnitLabel ),
m_eval( aParent->GetUserUnits(), aUseMils )
{
// Fix the units (to the current units) for the life of the binder
m_units = aParent->GetUserUnits();
m_useMils = aUseMils;
m_allowEval = allowEval && dynamic_cast<wxTextEntry*>( m_value );
@ -63,6 +63,14 @@ UNIT_BINDER::UNIT_BINDER( EDA_DRAW_FRAME* aParent,
m_value->Connect( wxEVT_SET_FOCUS, wxFocusEventHandler( UNIT_BINDER::onSetFocus ), NULL, this );
m_value->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( UNIT_BINDER::onKillFocus ), NULL, this );
Connect( DELAY_FOCUS, wxCommandEventHandler( UNIT_BINDER::delayedFocusHandler ), NULL, this );
m_frame->Connect( UNITS_CHANGED, wxCommandEventHandler( UNIT_BINDER::onUnitsChanged ), nullptr, this );
}
UNIT_BINDER::~UNIT_BINDER()
{
m_frame->Disconnect( UNITS_CHANGED, wxCommandEventHandler( UNIT_BINDER::onUnitsChanged ), nullptr, this );
}
@ -74,6 +82,18 @@ void UNIT_BINDER::SetUnits( EDA_UNITS aUnits, bool aUseMils )
}
void UNIT_BINDER::onUnitsChanged( wxCommandEvent& aEvent )
{
int temp = (int) GetValue();
SetUnits( m_frame->GetUserUnits(), m_useMils );
SetValue( temp );
aEvent.Skip();
}
void UNIT_BINDER::onSetFocus( wxFocusEvent& aEvent )
{
auto textEntry = dynamic_cast<wxTextEntry*>( m_value );

View File

@ -56,6 +56,8 @@ public:
wxStaticText* aLabel, wxWindow* aValue, wxStaticText* aUnitLabel,
bool aUseMils = false, bool aAllowEval = true );
~UNIT_BINDER() override;
/**
* Function SetUnits
* Normally not needed (as the UNIT_BINDER inherits from the parent frame), but can be
@ -148,6 +150,10 @@ protected:
void onKillFocus( wxFocusEvent& aEvent );
void delayedFocusHandler( wxCommandEvent& aEvent );
void onUnitsChanged( wxCommandEvent& aEvent );
EDA_DRAW_FRAME* m_frame;
///> The bound widgets
wxStaticText* m_label;
wxWindow* m_value;