diff --git a/pcbnew/dialogs/dialog_graphic_item_properties.cpp b/pcbnew/dialogs/dialog_graphic_item_properties.cpp
index b93859b15d..931db18d48 100644
--- a/pcbnew/dialogs/dialog_graphic_item_properties.cpp
+++ b/pcbnew/dialogs/dialog_graphic_item_properties.cpp
@@ -66,10 +66,16 @@ private:
void onLayerSelection( wxCommandEvent& event ) override;
void startCtrlOnTextEnter( wxCommandEvent& event ) override;
void endCtrlOnTextEnter( wxCommandEvent& event ) override;
+ void startOnTextEnter( wxCommandEvent& event ) override;
+ void startOnKillFocus( wxFocusEvent& event ) override;
+ void endOnTextEnter( wxCommandEvent& event ) override;
+ void endOnKillFocus( wxFocusEvent& event ) override;
void segmentOnTextEnter( wxCommandEvent& event ) override;
+ void segmentOnKillFocus( wxFocusEvent& event ) override;
void rectangleOnTextEnter( wxCommandEvent& event ) override;
+ void rectangleOnKillFocus( wxFocusEvent& event ) override;
bool Validate() override;
@@ -119,7 +125,7 @@ DIALOG_GRAPHIC_ITEM_PROPERTIES::DIALOG_GRAPHIC_ITEM_PROPERTIES( PCB_BASE_EDIT_FR
m_bezierCtrl2X( aParent, m_BezierPointC2XLabel, m_BezierC2X_Ctrl, m_BezierPointC2XUnit ),
m_bezierCtrl2Y( aParent, m_BezierPointC2YLabel, m_BezierC2Y_Ctrl, m_BezierPointC2YUnit ),
m_flipStartEnd( false )
-{
+{
// Configure display origin transforms
m_startX.SetCoordType( ORIGIN_TRANSFORMS::ABS_X_COORD );
m_startY.SetCoordType( ORIGIN_TRANSFORMS::ABS_Y_COORD );
@@ -236,7 +242,7 @@ void DIALOG_GRAPHIC_ITEM_PROPERTIES::onFilledCheckbox( wxCommandEvent& event )
}
}
-void DIALOG_GRAPHIC_ITEM_PROPERTIES::startCtrlOnTextEnter( wxCommandEvent& event )
+void DIALOG_GRAPHIC_ITEM_PROPERTIES::startOnTextEnter( wxCommandEvent& event )
{
switch( m_item->GetShape() )
{
@@ -253,7 +259,25 @@ void DIALOG_GRAPHIC_ITEM_PROPERTIES::startCtrlOnTextEnter( wxCommandEvent& event
}
}
-void DIALOG_GRAPHIC_ITEM_PROPERTIES::endCtrlOnTextEnter( wxCommandEvent& event )
+void DIALOG_GRAPHIC_ITEM_PROPERTIES::startOnKillFocus( wxFocusEvent& event )
+{
+ switch( m_item->GetShape() )
+ {
+ case SHAPE_T::SEGMENT:
+ TransferDataFromWindow();
+ TransferDataToWindow();
+ break;
+ case SHAPE_T::RECT:
+ TransferDataFromWindow();
+ TransferDataToWindow();
+ break;
+ default: break;
+ }
+
+ event.Skip();
+}
+
+void DIALOG_GRAPHIC_ITEM_PROPERTIES::endOnTextEnter( wxCommandEvent& event )
{
switch( m_item->GetShape() )
{
@@ -270,18 +294,50 @@ void DIALOG_GRAPHIC_ITEM_PROPERTIES::endCtrlOnTextEnter( wxCommandEvent& event )
}
}
+void DIALOG_GRAPHIC_ITEM_PROPERTIES::endOnKillFocus( wxFocusEvent& event )
+{
+ switch( m_item->GetShape() )
+ {
+ case SHAPE_T::SEGMENT:
+ TransferDataFromWindow();
+ TransferDataToWindow();
+ break;
+ case SHAPE_T::RECT:
+ TransferDataFromWindow();
+ TransferDataToWindow();
+ break;
+ default: break;
+ }
+
+ event.Skip();
+}
+
void DIALOG_GRAPHIC_ITEM_PROPERTIES::segmentOnTextEnter( wxCommandEvent& event )
{
TransferDataFromWindow();
TransferDataToWindow();
}
+void DIALOG_GRAPHIC_ITEM_PROPERTIES::segmentOnKillFocus( wxFocusEvent& event )
+{
+ TransferDataFromWindow();
+ TransferDataToWindow();
+ event.Skip();
+}
+
void DIALOG_GRAPHIC_ITEM_PROPERTIES::rectangleOnTextEnter( wxCommandEvent& event )
{
TransferDataFromWindow();
TransferDataToWindow();
}
+void DIALOG_GRAPHIC_ITEM_PROPERTIES::rectangleOnKillFocus( wxFocusEvent& event )
+{
+ TransferDataFromWindow();
+ TransferDataToWindow();
+ event.Skip();
+}
+
bool DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataToWindow()
{
if( !m_item )
diff --git a/pcbnew/dialogs/dialog_graphic_item_properties_base.cpp b/pcbnew/dialogs/dialog_graphic_item_properties_base.cpp
index 9b56c4cb92..aa977b98ac 100644
--- a/pcbnew/dialogs/dialog_graphic_item_properties_base.cpp
+++ b/pcbnew/dialogs/dialog_graphic_item_properties_base.cpp
@@ -274,13 +274,21 @@ DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE( wxWind
// Connect Events
this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::OnClose ) );
this->Connect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::OnInitDlg ) );
- m_startXCtrl->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::startCtrlOnTextEnter ), NULL, this );
- m_startYCtrl->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::startCtrlOnTextEnter ), NULL, this );
- m_endXCtrl->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::endCtrlOnTextEnter ), NULL, this );
- m_endYCtrl->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::endCtrlOnTextEnter ), NULL, this );
+ m_startXCtrl->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::startOnKillFocus ), NULL, this );
+ m_startXCtrl->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::startOnTextEnter ), NULL, this );
+ m_startYCtrl->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::startOnKillFocus ), NULL, this );
+ m_startYCtrl->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::startOnTextEnter ), NULL, this );
+ m_endXCtrl->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::endOnKillFocus ), NULL, this );
+ m_endXCtrl->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::endOnTextEnter ), NULL, this );
+ m_endYCtrl->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::endOnKillFocus ), NULL, this );
+ m_endYCtrl->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::endOnTextEnter ), NULL, this );
+ m_segmentLengthCtrl->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::segmentOnKillFocus ), NULL, this );
m_segmentLengthCtrl->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::segmentOnTextEnter ), NULL, this );
+ m_segmentAngleCtrl->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::segmentOnKillFocus ), NULL, this );
m_segmentAngleCtrl->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::segmentOnTextEnter ), NULL, this );
+ m_rectangleHeightCtrl->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::rectangleOnKillFocus ), NULL, this );
m_rectangleHeightCtrl->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::rectangleOnTextEnter ), NULL, this );
+ m_rectangleWidthCtrl->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::rectangleOnKillFocus ), NULL, this );
m_rectangleWidthCtrl->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::rectangleOnTextEnter ), NULL, this );
m_filledCtrl->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::onFilledCheckbox ), NULL, this );
m_LayerSelectionCtrl->Connect( wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::onLayerSelection ), NULL, this );
@@ -291,13 +299,21 @@ DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::~DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE()
// Disconnect Events
this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::OnClose ) );
this->Disconnect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::OnInitDlg ) );
- m_startXCtrl->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::startCtrlOnTextEnter ), NULL, this );
- m_startYCtrl->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::startCtrlOnTextEnter ), NULL, this );
- m_endXCtrl->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::endCtrlOnTextEnter ), NULL, this );
- m_endYCtrl->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::endCtrlOnTextEnter ), NULL, this );
+ m_startXCtrl->Disconnect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::startOnKillFocus ), NULL, this );
+ m_startXCtrl->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::startOnTextEnter ), NULL, this );
+ m_startYCtrl->Disconnect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::startOnKillFocus ), NULL, this );
+ m_startYCtrl->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::startOnTextEnter ), NULL, this );
+ m_endXCtrl->Disconnect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::endOnKillFocus ), NULL, this );
+ m_endXCtrl->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::endOnTextEnter ), NULL, this );
+ m_endYCtrl->Disconnect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::endOnKillFocus ), NULL, this );
+ m_endYCtrl->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::endOnTextEnter ), NULL, this );
+ m_segmentLengthCtrl->Disconnect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::segmentOnKillFocus ), NULL, this );
m_segmentLengthCtrl->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::segmentOnTextEnter ), NULL, this );
+ m_segmentAngleCtrl->Disconnect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::segmentOnKillFocus ), NULL, this );
m_segmentAngleCtrl->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::segmentOnTextEnter ), NULL, this );
+ m_rectangleHeightCtrl->Disconnect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::rectangleOnKillFocus ), NULL, this );
m_rectangleHeightCtrl->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::rectangleOnTextEnter ), NULL, this );
+ m_rectangleWidthCtrl->Disconnect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::rectangleOnKillFocus ), NULL, this );
m_rectangleWidthCtrl->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::rectangleOnTextEnter ), NULL, this );
m_filledCtrl->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::onFilledCheckbox ), NULL, this );
m_LayerSelectionCtrl->Disconnect( wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler( DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE::onLayerSelection ), NULL, this );
diff --git a/pcbnew/dialogs/dialog_graphic_item_properties_base.fbp b/pcbnew/dialogs/dialog_graphic_item_properties_base.fbp
index 8bd4a54895..8e44df92e8 100644
--- a/pcbnew/dialogs/dialog_graphic_item_properties_base.fbp
+++ b/pcbnew/dialogs/dialog_graphic_item_properties_base.fbp
@@ -284,7 +284,8 @@
- startCtrlOnTextEnter
+ startOnKillFocus
+ startOnTextEnter
@@ -2752,6 +2757,7 @@
+ segmentOnKillFocus
segmentOnTextEnter
@@ -2948,6 +2954,7 @@
+ rectangleOnKillFocus
rectangleOnTextEnter
@@ -3144,6 +3151,7 @@
+ rectangleOnKillFocus
rectangleOnTextEnter
diff --git a/pcbnew/dialogs/dialog_graphic_item_properties_base.h b/pcbnew/dialogs/dialog_graphic_item_properties_base.h
index 1a9aee9008..77ca0ed4b8 100644
--- a/pcbnew/dialogs/dialog_graphic_item_properties_base.h
+++ b/pcbnew/dialogs/dialog_graphic_item_properties_base.h
@@ -101,9 +101,13 @@ class DIALOG_GRAPHIC_ITEM_PROPERTIES_BASE : public DIALOG_SHIM
// Virtual event handlers, override them in your derived class
virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
virtual void OnInitDlg( wxInitDialogEvent& event ) { event.Skip(); }
- virtual void startCtrlOnTextEnter( wxCommandEvent& event ) { event.Skip(); }
- virtual void endCtrlOnTextEnter( wxCommandEvent& event ) { event.Skip(); }
+ virtual void startOnKillFocus( wxFocusEvent& event ) { event.Skip(); }
+ virtual void startOnTextEnter( wxCommandEvent& event ) { event.Skip(); }
+ virtual void endOnKillFocus( wxFocusEvent& event ) { event.Skip(); }
+ virtual void endOnTextEnter( wxCommandEvent& event ) { event.Skip(); }
+ virtual void segmentOnKillFocus( wxFocusEvent& event ) { event.Skip(); }
virtual void segmentOnTextEnter( wxCommandEvent& event ) { event.Skip(); }
+ virtual void rectangleOnKillFocus( wxFocusEvent& event ) { event.Skip(); }
virtual void rectangleOnTextEnter( wxCommandEvent& event ) { event.Skip(); }
virtual void onFilledCheckbox( wxCommandEvent& event ) { event.Skip(); }
virtual void onLayerSelection( wxCommandEvent& event ) { event.Skip(); }