Browse Source

Unbind event handlers in d'tor.

master
Jeff Young 2 weeks ago
parent
commit
c01e9d7dd3
  1. 63
      eeschema/widgets/sch_search_pane.cpp
  2. 7
      eeschema/widgets/sch_search_pane.h
  3. 63
      pcbnew/widgets/pcb_search_pane.cpp
  4. 7
      pcbnew/widgets/pcb_search_pane.h

63
eeschema/widgets/sch_search_pane.cpp

@ -31,30 +31,9 @@ SCH_SEARCH_PANE::SCH_SEARCH_PANE( SCH_EDIT_FRAME* aFrame ) :
if( m_sch != nullptr )
m_sch->AddListener( this );
m_schFrame->Bind( EDA_EVT_UNITS_CHANGED, [&]( wxCommandEvent& aEvent )
{
ClearAllResults();
RefreshSearch();
aEvent.Skip();
} );
m_schFrame->Bind( EDA_EVT_SCHEMATIC_CHANGED, [&]( wxCommandEvent& aEvent )
{
m_sch = &m_schFrame->Schematic();
if( m_sch != nullptr )
m_sch->AddListener( this );
ClearAllResults();
RefreshSearch();
aEvent.Skip();
} );
m_schFrame->Bind( EDA_EVT_SCHEMATIC_CHANGING, [&]( wxCommandEvent& aEvent )
{
ClearAllResults();
aEvent.Skip();
} );
m_schFrame->Bind( EDA_EVT_UNITS_CHANGED, &SCH_SEARCH_PANE::onUnitsChanged, this );
m_schFrame->Bind( EDA_EVT_SCHEMATIC_CHANGING, &SCH_SEARCH_PANE::onSchChanging, this );
m_schFrame->Bind( EDA_EVT_SCHEMATIC_CHANGED, &SCH_SEARCH_PANE::onSchChanged, this );
wxFont infoFont = KIUI::GetDockedPaneFont( this );
SetFont( infoFont );
@ -68,6 +47,42 @@ SCH_SEARCH_PANE::SCH_SEARCH_PANE( SCH_EDIT_FRAME* aFrame ) :
}
SCH_SEARCH_PANE::~SCH_SEARCH_PANE()
{
m_schFrame->Unbind( EDA_EVT_UNITS_CHANGED, &SCH_SEARCH_PANE::onUnitsChanged, this );
m_schFrame->Unbind( EDA_EVT_SCHEMATIC_CHANGING, &SCH_SEARCH_PANE::onSchChanging, this );
m_schFrame->Unbind( EDA_EVT_SCHEMATIC_CHANGED, &SCH_SEARCH_PANE::onSchChanged, this );
}
void SCH_SEARCH_PANE::onUnitsChanged( wxCommandEvent& event )
{
ClearAllResults();
RefreshSearch();
event.Skip();
}
void SCH_SEARCH_PANE::onSchChanging( wxCommandEvent& event )
{
ClearAllResults();
event.Skip();
}
void SCH_SEARCH_PANE::onSchChanged( wxCommandEvent& event )
{
m_sch = &m_schFrame->Schematic();
if( m_sch != nullptr )
m_sch->AddListener( this );
ClearAllResults();
RefreshSearch();
event.Skip();
}
void SCH_SEARCH_PANE::OnSchItemsAdded( SCHEMATIC& aBoard, std::vector<SCH_ITEM*>& aBoardItems )
{
if( !IsShownOnScreen() )

7
eeschema/widgets/sch_search_pane.h

@ -28,12 +28,17 @@ class SCH_SEARCH_PANE : public SEARCH_PANE, public SCHEMATIC_LISTENER
{
public:
SCH_SEARCH_PANE( SCH_EDIT_FRAME* aFrame );
virtual ~SCH_SEARCH_PANE() = default;
virtual ~SCH_SEARCH_PANE();
virtual void OnSchItemsAdded( SCHEMATIC& aBoard, std::vector<SCH_ITEM*>& aBoardItems ) override;
virtual void OnSchItemsRemoved( SCHEMATIC& aBoard, std::vector<SCH_ITEM*>& aBoardItems ) override;
virtual void OnSchItemsChanged( SCHEMATIC& aBoard, std::vector<SCH_ITEM*>& aBoardItems ) override;
private:
void onUnitsChanged( wxCommandEvent& event );
void onSchChanging( wxCommandEvent& event );
void onSchChanged( wxCommandEvent& event );
private:
SCH_EDIT_FRAME* m_schFrame;
SCHEMATIC* m_sch;

63
pcbnew/widgets/pcb_search_pane.cpp

@ -31,30 +31,9 @@ PCB_SEARCH_PANE::PCB_SEARCH_PANE( PCB_EDIT_FRAME* aFrame ) :
if( m_brd != nullptr )
m_brd->AddListener( this );
m_pcbFrame->Bind( EDA_EVT_UNITS_CHANGED, [&]( wxCommandEvent& aEvent )
{
ClearAllResults();
RefreshSearch();
aEvent.Skip();
} );
m_pcbFrame->Bind( EDA_EVT_BOARD_CHANGED, [&]( wxCommandEvent& aEvent )
{
m_brd = m_pcbFrame->GetBoard();
if( m_brd != nullptr )
m_brd->AddListener( this );
ClearAllResults();
RefreshSearch();
aEvent.Skip();
} );
m_pcbFrame->Bind( EDA_EVT_BOARD_CHANGING, [&]( wxCommandEvent& aEvent )
{
ClearAllResults();
aEvent.Skip();
} );
m_pcbFrame->Bind( EDA_EVT_UNITS_CHANGED, &PCB_SEARCH_PANE::onUnitsChanged, this );
m_pcbFrame->Bind( EDA_EVT_BOARD_CHANGING, &PCB_SEARCH_PANE::onBoardChanging, this );
m_pcbFrame->Bind( EDA_EVT_BOARD_CHANGED, &PCB_SEARCH_PANE::onBoardChanged, this );
wxFont infoFont = KIUI::GetDockedPaneFont( this );
SetFont( infoFont );
@ -70,6 +49,42 @@ PCB_SEARCH_PANE::PCB_SEARCH_PANE( PCB_EDIT_FRAME* aFrame ) :
}
PCB_SEARCH_PANE::~PCB_SEARCH_PANE()
{
m_pcbFrame->Unbind( EDA_EVT_UNITS_CHANGED, &PCB_SEARCH_PANE::onUnitsChanged, this );
m_pcbFrame->Unbind( EDA_EVT_BOARD_CHANGING, &PCB_SEARCH_PANE::onBoardChanging, this );
m_pcbFrame->Unbind( EDA_EVT_BOARD_CHANGED, &PCB_SEARCH_PANE::onBoardChanged, this );
}
void PCB_SEARCH_PANE::onUnitsChanged( wxCommandEvent& event )
{
ClearAllResults();
RefreshSearch();
event.Skip();
}
void PCB_SEARCH_PANE::onBoardChanging( wxCommandEvent& event )
{
ClearAllResults();
event.Skip();
}
void PCB_SEARCH_PANE::onBoardChanged( wxCommandEvent& event )
{
m_brd = m_pcbFrame->GetBoard();
if( m_brd != nullptr )
m_brd->AddListener( this );
ClearAllResults();
RefreshSearch();
event.Skip();
}
void PCB_SEARCH_PANE::OnBoardItemAdded( BOARD& aBoard, BOARD_ITEM* aBoardItem )
{
if( !IsShownOnScreen() )

7
pcbnew/widgets/pcb_search_pane.h

@ -28,7 +28,7 @@ class PCB_SEARCH_PANE : public SEARCH_PANE, public BOARD_LISTENER
{
public:
PCB_SEARCH_PANE( PCB_EDIT_FRAME* aFrame );
virtual ~PCB_SEARCH_PANE() = default;
virtual ~PCB_SEARCH_PANE();
virtual void OnBoardItemAdded( BOARD& aBoard, BOARD_ITEM* aBoardItem ) override;
virtual void OnBoardItemsAdded( BOARD& aBoard, std::vector<BOARD_ITEM*>& aBoardItems ) override;
@ -43,6 +43,11 @@ public:
std::vector<BOARD_ITEM*>& aRemovedItems,
std::vector<BOARD_ITEM*>& aChangedItems ) override;
private:
void onUnitsChanged( wxCommandEvent& event );
void onBoardChanging( wxCommandEvent& event );
void onBoardChanged( wxCommandEvent& event );
private:
PCB_EDIT_FRAME* m_pcbFrame;
BOARD* m_brd;

Loading…
Cancel
Save