From ba5269cf5d98799951ab379c058d9189ee0749ab Mon Sep 17 00:00:00 2001
From: Diogo Condeco <diogocondeco@gmail.com>
Date: Fri, 2 Sep 2016 00:22:30 +0100
Subject: [PATCH] Dialogs SetFocus/SetSelection

Various dialogs updated for correct setfocus and setselection correct behaviour:

pcbnew/find component SetFocus & SetSelection
pcbnew/pad_properties SetFocus & SetSelection
eeschema/add_component SetFocus
---
 eeschema/dialogs/dialog_choose_component.cpp      | 6 +++++-
 eeschema/dialogs/dialog_choose_component.h        | 1 +
 eeschema/dialogs/dialog_choose_component_base.cpp | 2 ++
 eeschema/dialogs/dialog_choose_component_base.h   | 1 +
 pcbnew/dialogs/dialog_find.cpp                    | 8 ++++++--
 pcbnew/dialogs/dialog_find.h                      | 1 +
 pcbnew/dialogs/dialog_find_base.cpp               | 2 ++
 pcbnew/dialogs/dialog_find_base.h                 | 1 +
 pcbnew/dialogs/dialog_pad_properties.cpp          | 8 +++++++-
 pcbnew/dialogs/dialog_pad_properties.h            | 1 +
 pcbnew/dialogs/dialog_pad_properties_base.cpp     | 2 ++
 pcbnew/dialogs/dialog_pad_properties_base.h       | 1 +
 12 files changed, 30 insertions(+), 4 deletions(-)

diff --git a/eeschema/dialogs/dialog_choose_component.cpp b/eeschema/dialogs/dialog_choose_component.cpp
index 3183c1d..2da9bd1 100644
--- a/eeschema/dialogs/dialog_choose_component.cpp
+++ b/eeschema/dialogs/dialog_choose_component.cpp
@@ -44,7 +44,6 @@ DIALOG_CHOOSE_COMPONENT::DIALOG_CHOOSE_COMPONENT( SCH_BASE_FRAME* aParent, const
     m_external_browser_requested = false;
     m_received_doubleclick_in_tree = false;
     m_search_container->SetTree( m_libraryComponentTree );
-    m_searchBox->SetFocus();
     m_componentDetails->SetEditable( false );
     m_componentView->SetLayoutDirection( wxLayout_LeftToRight );
 
@@ -71,6 +70,11 @@ DIALOG_CHOOSE_COMPONENT::~DIALOG_CHOOSE_COMPONENT()
     m_search_container->SetTree( NULL );
 }
 
+void DIALOG_CHOOSE_COMPONENT::OnInitDialog( wxInitDialogEvent& event )
+{
+    m_searchBox->SetFocus();
+}
+
 
 LIB_ALIAS* DIALOG_CHOOSE_COMPONENT::GetSelectedAlias( int* aUnit ) const
 {
diff --git a/eeschema/dialogs/dialog_choose_component.h b/eeschema/dialogs/dialog_choose_component.h
index 8d8ac24..d0e0f50 100644
--- a/eeschema/dialogs/dialog_choose_component.h
+++ b/eeschema/dialogs/dialog_choose_component.h
@@ -54,6 +54,7 @@ public:
                              COMPONENT_TREE_SEARCH_CONTAINER* const aSearchContainer,
                              int aDeMorganConvert );
     virtual ~DIALOG_CHOOSE_COMPONENT();
+    void OnInitDialog( wxInitDialogEvent& event);
 
     /** Function GetSelectedAlias
      * To be called after this dialog returns from ShowModal().
diff --git a/eeschema/dialogs/dialog_choose_component_base.cpp b/eeschema/dialogs/dialog_choose_component_base.cpp
index 74cc465..0b7068e 100644
--- a/eeschema/dialogs/dialog_choose_component_base.cpp
+++ b/eeschema/dialogs/dialog_choose_component_base.cpp
@@ -66,6 +66,7 @@ DIALOG_CHOOSE_COMPONENT_BASE::DIALOG_CHOOSE_COMPONENT_BASE( wxWindow* parent, wx
 	this->Centre( wxBOTH );
 	
 	// Connect Events
+	this->Connect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_CHOOSE_COMPONENT_BASE::OnInitDialog ) );
 	m_searchBox->Connect( wxEVT_KEY_DOWN, wxKeyEventHandler( DIALOG_CHOOSE_COMPONENT_BASE::OnInterceptSearchBoxKey ), NULL, this );
 	m_searchBox->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_CHOOSE_COMPONENT_BASE::OnSearchBoxChange ), NULL, this );
 	m_searchBox->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_CHOOSE_COMPONENT_BASE::OnSearchBoxEnter ), NULL, this );
@@ -80,6 +81,7 @@ DIALOG_CHOOSE_COMPONENT_BASE::DIALOG_CHOOSE_COMPONENT_BASE( wxWindow* parent, wx
 DIALOG_CHOOSE_COMPONENT_BASE::~DIALOG_CHOOSE_COMPONENT_BASE()
 {
 	// Disconnect Events
+	this->Disconnect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_CHOOSE_COMPONENT_BASE::OnInitDialog ) );
 	m_searchBox->Disconnect( wxEVT_KEY_DOWN, wxKeyEventHandler( DIALOG_CHOOSE_COMPONENT_BASE::OnInterceptSearchBoxKey ), NULL, this );
 	m_searchBox->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_CHOOSE_COMPONENT_BASE::OnSearchBoxChange ), NULL, this );
 	m_searchBox->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_CHOOSE_COMPONENT_BASE::OnSearchBoxEnter ), NULL, this );
diff --git a/eeschema/dialogs/dialog_choose_component_base.h b/eeschema/dialogs/dialog_choose_component_base.h
index f3b3c70..9cc9568 100644
--- a/eeschema/dialogs/dialog_choose_component_base.h
+++ b/eeschema/dialogs/dialog_choose_component_base.h
@@ -48,6 +48,7 @@ class DIALOG_CHOOSE_COMPONENT_BASE : public DIALOG_SHIM
 		wxButton* m_stdButtonsCancel;
 		
 		// Virtual event handlers, overide them in your derived class
+		virtual void OnInitDialog( wxInitDialogEvent& event ) { event.Skip(); }
 		virtual void OnInterceptSearchBoxKey( wxKeyEvent& event ) { event.Skip(); }
 		virtual void OnSearchBoxChange( wxCommandEvent& event ) { event.Skip(); }
 		virtual void OnSearchBoxEnter( wxCommandEvent& event ) { event.Skip(); }
diff --git a/pcbnew/dialogs/dialog_find.cpp b/pcbnew/dialogs/dialog_find.cpp
index e3acac2..c053a6f 100644
--- a/pcbnew/dialogs/dialog_find.cpp
+++ b/pcbnew/dialogs/dialog_find.cpp
@@ -51,8 +51,6 @@ DIALOG_FIND::DIALOG_FIND( PCB_BASE_FRAME* aParent ) : DIALOG_FIND_BASE( aParent
     GetSizer()->SetSizeHints( this );
 
     m_SearchTextCtrl->AppendText( prevSearchString );
-    m_SearchTextCtrl->SetFocus();
-    m_SearchTextCtrl->SetSelection( -1, -1 );
     m_NoMouseWarpCheckBox->SetValue( !warpMouse );
 
     itemCount = markerCount = 0;
@@ -60,6 +58,12 @@ DIALOG_FIND::DIALOG_FIND( PCB_BASE_FRAME* aParent ) : DIALOG_FIND_BASE( aParent
     Center();
 }
 
+void DIALOG_FIND::OnInitDialog( wxInitDialogEvent& event )
+{
+    m_SearchTextCtrl->SetFocus();
+    m_SearchTextCtrl->SetSelection( -1, -1 );
+}
+
 void DIALOG_FIND::EnableWarp( bool aEnabled )
 {
     m_NoMouseWarpCheckBox->SetValue( !aEnabled );
diff --git a/pcbnew/dialogs/dialog_find.h b/pcbnew/dialogs/dialog_find.h
index d374c41..0f21070 100644
--- a/pcbnew/dialogs/dialog_find.h
+++ b/pcbnew/dialogs/dialog_find.h
@@ -33,6 +33,7 @@ class DIALOG_FIND : public DIALOG_FIND_BASE
 {
 public:
     DIALOG_FIND( PCB_BASE_FRAME* aParent );
+    void OnInitDialog( wxInitDialogEvent& event);
     inline BOARD_ITEM* GetItem() const { return foundItem; }
     void EnableWarp( bool aEnabled );
     void SetCallback( boost::function<void (BOARD_ITEM*)> aCallback ) { callback = aCallback; }
diff --git a/pcbnew/dialogs/dialog_find_base.cpp b/pcbnew/dialogs/dialog_find_base.cpp
index 3c40e61..716e8d9 100644
--- a/pcbnew/dialogs/dialog_find_base.cpp
+++ b/pcbnew/dialogs/dialog_find_base.cpp
@@ -57,6 +57,7 @@ DIALOG_FIND_BASE::DIALOG_FIND_BASE( wxWindow* parent, wxWindowID id, const wxStr
 	
 	// Connect Events
 	this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_FIND_BASE::onClose ) );
+        this->Connect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_FIND_BASE::OnInitDialog ) );
 	m_button1->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FIND_BASE::onButtonFindItemClick ), NULL, this );
 	m_button2->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FIND_BASE::onButtonFindMarkerClick ), NULL, this );
 	m_button3->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FIND_BASE::onButtonCloseClick ), NULL, this );
@@ -66,6 +67,7 @@ DIALOG_FIND_BASE::~DIALOG_FIND_BASE()
 {
 	// Disconnect Events
 	this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_FIND_BASE::onClose ) );
+	this->Disconnect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_FIND_BASE::OnInitDialog ) );
 	m_button1->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FIND_BASE::onButtonFindItemClick ), NULL, this );
 	m_button2->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FIND_BASE::onButtonFindMarkerClick ), NULL, this );
 	m_button3->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FIND_BASE::onButtonCloseClick ), NULL, this );
diff --git a/pcbnew/dialogs/dialog_find_base.h b/pcbnew/dialogs/dialog_find_base.h
index dad8e7a..ea8e932 100644
--- a/pcbnew/dialogs/dialog_find_base.h
+++ b/pcbnew/dialogs/dialog_find_base.h
@@ -43,6 +43,7 @@ class DIALOG_FIND_BASE : public DIALOG_SHIM
 		wxButton* m_button3;
 		
 		// Virtual event handlers, overide them in your derived class
+		virtual void OnInitDialog( wxInitDialogEvent& event ) { event.Skip(); }
 		virtual void onClose( wxCloseEvent& event ) { event.Skip(); }
 		virtual void onButtonFindItemClick( wxCommandEvent& event ) { event.Skip(); }
 		virtual void onButtonFindMarkerClick( wxCommandEvent& event ) { event.Skip(); }
diff --git a/pcbnew/dialogs/dialog_pad_properties.cpp b/pcbnew/dialogs/dialog_pad_properties.cpp
index 3525a7e..3f182fd 100644
--- a/pcbnew/dialogs/dialog_pad_properties.cpp
+++ b/pcbnew/dialogs/dialog_pad_properties.cpp
@@ -150,7 +150,6 @@ DIALOG_PAD_PROPERTIES::DIALOG_PAD_PROPERTIES( PCB_BASE_FRAME* aParent, D_PAD* aP
     TransferDataToWindow();
 
     m_sdbSizerOK->SetDefault();
-    m_PadNumCtrl->SetFocus();
     m_canUpdate = true;
 
     FixOSXCancelButtonIssue();
@@ -159,6 +158,13 @@ DIALOG_PAD_PROPERTIES::DIALOG_PAD_PROPERTIES( PCB_BASE_FRAME* aParent, D_PAD* aP
     FinishDialogSettings();
 }
 
+void DIALOG_PAD_PROPERTIES::OnInitDialog( wxInitDialogEvent& event )
+{
+    m_PadNumCtrl->SetFocus();
+    m_PadNumCtrl->SetSelection( -1, -1 );
+}
+
+
 
 void DIALOG_PAD_PROPERTIES::OnPaintShowPanel( wxPaintEvent& event )
 {
diff --git a/pcbnew/dialogs/dialog_pad_properties.h b/pcbnew/dialogs/dialog_pad_properties.h
index 634caa8..918bad2 100644
--- a/pcbnew/dialogs/dialog_pad_properties.h
+++ b/pcbnew/dialogs/dialog_pad_properties.h
@@ -63,6 +63,7 @@ public:
         delete m_dummyPad;
         delete m_axisOrigin;
     }
+        void OnInitDialog( wxInitDialogEvent& event);
 
 private:
     PCB_BASE_FRAME* m_parent;
diff --git a/pcbnew/dialogs/dialog_pad_properties_base.cpp b/pcbnew/dialogs/dialog_pad_properties_base.cpp
index 6eff023..c81d870 100644
--- a/pcbnew/dialogs/dialog_pad_properties_base.cpp
+++ b/pcbnew/dialogs/dialog_pad_properties_base.cpp
@@ -594,6 +594,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
 	this->Centre( wxBOTH );
 	
 	// Connect Events
+        this->Connect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnInitDialog ) );
 	m_PadNumCtrl->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
 	m_PadNetNameCtrl->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
 	m_PadType->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::PadTypeSelected ), NULL, this );
@@ -629,6 +630,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
 DIALOG_PAD_PROPERTIES_BASE::~DIALOG_PAD_PROPERTIES_BASE()
 {
 	// Disconnect Events
+        this->Disconnect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnInitDialog ) );
 	m_PadNumCtrl->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
 	m_PadNetNameCtrl->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
 	m_PadType->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::PadTypeSelected ), NULL, this );
diff --git a/pcbnew/dialogs/dialog_pad_properties_base.h b/pcbnew/dialogs/dialog_pad_properties_base.h
index 22c2f8f..baf74b3 100644
--- a/pcbnew/dialogs/dialog_pad_properties_base.h
+++ b/pcbnew/dialogs/dialog_pad_properties_base.h
@@ -162,6 +162,7 @@ class DIALOG_PAD_PROPERTIES_BASE : public DIALOG_SHIM
 		wxButton* m_sdbSizerCancel;
 		
 		// Virtual event handlers, overide them in your derived class
+      		virtual void OnInitDialog( wxInitDialogEvent& event ) { event.Skip(); }
 		virtual void OnValuesChanged( wxCommandEvent& event ) { event.Skip(); }
 		virtual void PadTypeSelected( wxCommandEvent& event ) { event.Skip(); }
 		virtual void OnPadShapeSelection( wxCommandEvent& event ) { event.Skip(); }
-- 
2.7.4 (Apple Git-66)

