From 36b430562d70f93a6f333698cecc74d265b349b6 Mon Sep 17 00:00:00 2001 From: Ian McInerney Date: Sat, 10 Aug 2019 11:17:42 +0200 Subject: [PATCH] cvpcb: Refactor events and cleanup formatting --- cvpcb/cvpcb_mainframe.cpp | 176 +++++++++++++++++++------------------- cvpcb/cvpcb_mainframe.h | 46 +++++----- cvpcb/menubar.cpp | 2 + 3 files changed, 114 insertions(+), 110 deletions(-) diff --git a/cvpcb/cvpcb_mainframe.cpp b/cvpcb/cvpcb_mainframe.cpp index 8c75d44bec..f4b69d90fa 100644 --- a/cvpcb/cvpcb_mainframe.cpp +++ b/cvpcb/cvpcb_mainframe.cpp @@ -57,23 +57,6 @@ wxSize const FRAME_DEFAULT_SIZE_DU( 450, 300 ); static const wxString FilterFootprintEntry = "FilterFootprint"; ///@} -BEGIN_EVENT_TABLE( CVPCB_MAINFRAME, KIWAY_PLAYER ) - - // Control events - EVT_MENU( wxID_EXIT, CVPCB_MAINFRAME::OnQuit ) - EVT_BUTTON( wxID_OK, CVPCB_MAINFRAME::OnOK ) - EVT_BUTTON( wxID_CANCEL, CVPCB_MAINFRAME::OnCancel ) - - // Toolbar events - EVT_TEXT( ID_CVPCB_FILTER_TEXT_EDIT, CVPCB_MAINFRAME::OnEnterFilteringText ) - - // Frame events - EVT_CLOSE( CVPCB_MAINFRAME::OnCloseWindow ) - EVT_SIZE( CVPCB_MAINFRAME::OnSize ) - -END_EVENT_TABLE() - - #define CVPCB_MAINFRAME_NAME wxT( "CvpcbFrame" ) @@ -200,7 +183,10 @@ CVPCB_MAINFRAME::CVPCB_MAINFRAME( KIWAY* aKiway, wxWindow* aParent ) : CVPCB_MAINFRAME::~CVPCB_MAINFRAME() { - // No events to disconnect since they are using lambdas as the handlers + // Clean up the tool infrastructure + delete m_actions; + delete m_toolManager; + delete m_toolDispatcher; m_auimgr.UnInit(); } @@ -261,38 +247,50 @@ void CVPCB_MAINFRAME::setupEventHandlers() this->GetToolManager()->RunAction( CVPCB_ACTIONS::saveAssociations ); } ); + // Connect the handlers for the ok/cancel buttons + Bind( wxEVT_BUTTON, + [this]( wxCommandEvent& ) + { + this->GetToolManager()->RunAction( CVPCB_ACTIONS::saveAssociations ); + Close( true ); + }, wxID_OK ); + Bind( wxEVT_BUTTON, + [this]( wxCommandEvent& ) + { + // Throw away modifications on a Cancel + m_modified = false; + Close( false ); + }, wxID_CANCEL ); + + // Connect the handlers for the close events + Bind( wxEVT_CLOSE_WINDOW, &CVPCB_MAINFRAME::OnCloseWindow, this ); + Bind( wxEVT_MENU, + [this]( wxCommandEvent& ) + { + Close( false ); + }, wxID_CLOSE ); + Bind( wxEVT_MENU, + [this]( wxCommandEvent& ) + { + Close( false ); + }, wxID_EXIT ); + + // Toolbar events + Bind( wxEVT_TEXT, &CVPCB_MAINFRAME::OnEnterFilteringText, this, ID_CVPCB_FILTER_TEXT_EDIT ); + + // Just skip the resize events + Bind( wxEVT_SIZE, + []( wxSizeEvent& aEvent ) + { + aEvent.Skip(); + } ); + // Attach the events to the tool dispatcher Bind( wxEVT_TOOL, &TOOL_DISPATCHER::DispatchWxCommand, m_toolDispatcher ); Bind( wxEVT_CHAR, &TOOL_DISPATCHER::DispatchWxEvent, m_toolDispatcher ); Bind( wxEVT_CHAR_HOOK, &TOOL_DISPATCHER::DispatchWxEvent, m_toolDispatcher ); } -void CVPCB_MAINFRAME::LoadSettings( wxConfigBase* aCfg ) -{ - EDA_BASE_FRAME::LoadSettings( aCfg ); - - wxSize const frame_default( ConvertDialogToPixels( FRAME_DEFAULT_SIZE_DU ) ); - - if( m_FrameSize == wxDefaultSize ) - m_FrameSize = frame_default; - - aCfg->Read( FilterFootprintEntry, &m_filteringOptions, FOOTPRINTS_LISTBOX::UNFILTERED_FP_LIST ); -} - - -void CVPCB_MAINFRAME::SaveSettings( wxConfigBase* aCfg ) -{ - EDA_BASE_FRAME::SaveSettings( aCfg ); - - aCfg->Write( FilterFootprintEntry, m_filteringOptions ); -} - - -void CVPCB_MAINFRAME::OnSize( wxSizeEvent& event ) -{ - event.Skip(); -} - void CVPCB_MAINFRAME::OnCloseWindow( wxCloseEvent& Event ) { @@ -321,26 +319,61 @@ void CVPCB_MAINFRAME::OnCloseWindow( wxCloseEvent& Event ) } -void CVPCB_MAINFRAME::OnOK( wxCommandEvent& aEvent ) +void CVPCB_MAINFRAME::OnEnterFilteringText( wxCommandEvent& aEvent ) { - SaveFootprintAssociation( false ); + // Called when changing the filter string in main toolbar. + // If the option FOOTPRINTS_LISTBOX::FILTERING_BY_NAME is set, update the list of + // available footprints which match the filter - Close( true ); + m_currentSearchPattern = m_tcFilterString->GetValue(); + + if( ( m_filteringOptions & FOOTPRINTS_LISTBOX::FILTERING_BY_NAME ) == 0 ) + return; + + wxListEvent l_event; + OnSelectComponent( l_event ); } -void CVPCB_MAINFRAME::OnCancel( wxCommandEvent& event ) +void CVPCB_MAINFRAME::OnSelectComponent( wxListEvent& event ) { - // Throw away modifications on a Cancel - m_modified = false; + if( m_skipComponentSelect ) + return; - Close( false ); + wxString libraryName; + COMPONENT* component = GetSelectedComponent(); + libraryName = m_libListBox->GetSelectedLibrary(); + + m_footprintListBox->SetFootprints( *m_FootprintsList, libraryName, component, + m_currentSearchPattern, m_filteringOptions); + + if( component && component->GetFPID().IsValid() ) + m_footprintListBox->SetSelectedFootprint( component->GetFPID() ); + else + m_footprintListBox->SetSelection( m_footprintListBox->GetSelection(), false ); + + refreshAfterComponentSearch( component ); } -void CVPCB_MAINFRAME::OnQuit( wxCommandEvent& event ) +void CVPCB_MAINFRAME::LoadSettings( wxConfigBase* aCfg ) { - Close( false ); + EDA_BASE_FRAME::LoadSettings( aCfg ); + + wxSize const frame_default( ConvertDialogToPixels( FRAME_DEFAULT_SIZE_DU ) ); + + if( m_FrameSize == wxDefaultSize ) + m_FrameSize = frame_default; + + aCfg->Read( FilterFootprintEntry, &m_filteringOptions, FOOTPRINTS_LISTBOX::UNFILTERED_FP_LIST ); +} + + +void CVPCB_MAINFRAME::SaveSettings( wxConfigBase* aCfg ) +{ + EDA_BASE_FRAME::SaveSettings( aCfg ); + + aCfg->Write( FilterFootprintEntry, m_filteringOptions ); } @@ -452,27 +485,6 @@ bool CVPCB_MAINFRAME::OpenProjectFiles( const std::vector& aFileSet, i } -void CVPCB_MAINFRAME::OnSelectComponent( wxListEvent& event ) -{ - if( m_skipComponentSelect ) - return; - - wxString libraryName; - COMPONENT* component = GetSelectedComponent(); - libraryName = m_libListBox->GetSelectedLibrary(); - - m_footprintListBox->SetFootprints( *m_FootprintsList, libraryName, component, - m_currentSearchPattern, m_filteringOptions); - - if( component && component->GetFPID().IsValid() ) - m_footprintListBox->SetSelectedFootprint( component->GetFPID() ); - else - m_footprintListBox->SetSelection( m_footprintListBox->GetSelection(), false ); - - refreshAfterComponentSearch (component); -} - - void CVPCB_MAINFRAME::refreshAfterComponentSearch( COMPONENT* component ) { // Tell AuiMgr that objects are changed ! @@ -561,22 +573,6 @@ void CVPCB_MAINFRAME::SetFootprintFilter( } -void CVPCB_MAINFRAME::OnEnterFilteringText( wxCommandEvent& aEvent ) -{ - // Called when changing the filter string in main toolbar. - // If the option FOOTPRINTS_LISTBOX::FILTERING_BY_NAME is set, update the list of - // available footprints which match the filter - - m_currentSearchPattern = m_tcFilterString->GetValue(); - - if( ( m_filteringOptions & FOOTPRINTS_LISTBOX::FILTERING_BY_NAME ) == 0 ) - return; - - wxListEvent l_event; - OnSelectComponent( l_event ); -} - - void CVPCB_MAINFRAME::DisplayStatus() { if( !m_initialized ) diff --git a/cvpcb/cvpcb_mainframe.h b/cvpcb/cvpcb_mainframe.h index a2b5c30c87..6c821d9743 100644 --- a/cvpcb/cvpcb_mainframe.h +++ b/cvpcb/cvpcb_mainframe.h @@ -169,17 +169,22 @@ public: * * Updates the current selected footprint in footprint list * * Updates the footprint shown in footprint display window (if opened) */ - void OnSelectComponent( wxListEvent& event ); + void OnSelectComponent( wxListEvent& event ); - void OnCancel( wxCommandEvent& aEvent ); - void OnOK( wxCommandEvent& aEvent ); - void OnQuit( wxCommandEvent& event ); - void OnCloseWindow( wxCloseEvent& Event ); - void OnSize( wxSizeEvent& SizeEvent ); - void OnKeyDown( wxKeyEvent& aEvent ); - void ReCreateHToolbar(); - void ReCreateMenuBar() override; - void ShowChangedLanguage() override; + /** + * OnCloseWindow + * + * Called by a close event to close the window + */ + void OnCloseWindow( wxCloseEvent& Event ); + + /* + * Functions to rebuild the toolbars and menubars + */ + void ReCreateHToolbar(); + void ReCreateMenuBar() override; + + void ShowChangedLanguage() override; /** * Called by the automatic association button @@ -205,7 +210,7 @@ public: * Function OnEnterFilteringText * Is called each time the text of m_tcFilterString is changed. */ - void OnEnterFilteringText( wxCommandEvent& event ); + void OnEnterFilteringText( wxCommandEvent& event ); /** @@ -232,9 +237,12 @@ public: void AssociateFootprint( const CVPCB_ASSOCIATION& aAssociation, bool aNewEntry = true, bool aAddUndoItem = true ); - void BuildCmpListBox(); - void BuildFOOTPRINTS_LISTBOX(); - void BuildLIBRARY_LISTBOX(); + /* + * Functions to build the listboxes and their contents + */ + void BuildCmpListBox(); + void BuildFOOTPRINTS_LISTBOX(); + void BuildLIBRARY_LISTBOX(); /** * Function SaveFootprintAssociation @@ -251,7 +259,7 @@ public: * @param aNetlist is the netlist from eeschema in kicad s-expr format. * (see CVPCB_MAINFRAME::KiwayMailIn() to know how to get this netlist) */ - bool ReadNetListAndFpFiles( const std::string& aNetlist ); + bool ReadNetListAndFpFiles( const std::string& aNetlist ); /** * Function ReadSchematicNetlist @@ -260,7 +268,7 @@ public: * It is the same netlist as the .net file created by Eeschema. * (This method is called by ReadNetListAndFpFiles) */ - int ReadSchematicNetlist( const std::string& aNetlist ); + int ReadSchematicNetlist( const std::string& aNetlist ); /** * Function LoadProjectFile @@ -290,7 +298,7 @@ public: * displayed in the second status bar pane. The third status bar pane always displays the * current footprint list filtering. */ - void DisplayStatus(); + void DisplayStatus(); /** * Function LoadFootprintFiles @@ -303,7 +311,7 @@ public: * fills m_footprints * @return true if libraries are found, false otherwise. */ - bool LoadFootprintFiles(); + bool LoadFootprintFiles(); /** * Function GetProjectFileParameters @@ -411,8 +419,6 @@ private: // Undo/Redo item lists CVPCB_UNDO_REDO_LIST m_undoList; CVPCB_UNDO_REDO_LIST m_redoList; - - DECLARE_EVENT_TABLE() }; #endif //#ifndef _CVPCB_MAINFRAME_H_ diff --git a/cvpcb/menubar.cpp b/cvpcb/menubar.cpp index 0e513e0c27..5ecae291d5 100644 --- a/cvpcb/menubar.cpp +++ b/cvpcb/menubar.cpp @@ -46,6 +46,8 @@ void CVPCB_MAINFRAME::ReCreateMenuBar() CONDITIONAL_MENU* fileMenu = new CONDITIONAL_MENU( false, tool ); fileMenu->AddItem( CVPCB_ACTIONS::saveAssociations, SELECTION_CONDITIONS::ShowAlways ); + fileMenu->AddSeparator(); + fileMenu->AddItem( wxID_CLOSE, _( "Close" ), "", exit_xpm, SELECTION_CONDITIONS::ShowAlways ); fileMenu->Resolve();