mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-04-18 16:29:18 +00:00
Only update net inspector when panel is shown.
Pcbnew can hang for a long time when undoing operations involving large numbers of board items. This provides an interim workaround (and replicated the behaviour of the search panel) by only computing track statistics updates incrementally if the inspector is displayed. Partially fixes https://gitlab.com/kicad/code/kicad/-/issues/17561 (if net inspector is not shown)
This commit is contained in:
parent
f3ce3bc758
commit
67d6e6afdf
@ -804,6 +804,7 @@ void PCB_EDIT_FRAME::ToggleNetInspector()
|
||||
{
|
||||
SetAuiPaneSize( m_auimgr, netInspectorPanel, settings->m_AuiPanels.net_inspector_width,
|
||||
-1 );
|
||||
m_netInspectorPanel->OnShowPanel();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -60,6 +60,11 @@ public:
|
||||
*/
|
||||
virtual void SaveSettings(){};
|
||||
|
||||
/**
|
||||
* Prepare the panel when (re-)shown in the editor
|
||||
*/
|
||||
virtual void OnShowPanel() {}
|
||||
|
||||
protected:
|
||||
// User-driven UI events (override in derrived classes as required)
|
||||
virtual void OnSetFocus( wxFocusEvent& event ) { event.Skip(); }
|
||||
|
@ -876,6 +876,9 @@ void PCB_NET_INSPECTOR_PANEL::onBoardChanged( wxCommandEvent& event )
|
||||
|
||||
void PCB_NET_INSPECTOR_PANEL::OnBoardItemAdded( BOARD& aBoard, BOARD_ITEM* aBoardItem )
|
||||
{
|
||||
if( !IsShownOnScreen() )
|
||||
return;
|
||||
|
||||
if( NETINFO_ITEM* net = dynamic_cast<NETINFO_ITEM*>( aBoardItem ) )
|
||||
{
|
||||
// a new net has been added to the board. add it to our list if it
|
||||
@ -957,6 +960,9 @@ void PCB_NET_INSPECTOR_PANEL::OnBoardItemAdded( BOARD& aBoard, BOARD_ITEM* aBoar
|
||||
void PCB_NET_INSPECTOR_PANEL::OnBoardItemsAdded( BOARD& aBoard,
|
||||
std::vector<BOARD_ITEM*>& aBoardItems )
|
||||
{
|
||||
if( !IsShownOnScreen() )
|
||||
return;
|
||||
|
||||
for( BOARD_ITEM* item : aBoardItems )
|
||||
{
|
||||
OnBoardItemAdded( aBoard, item );
|
||||
@ -966,6 +972,9 @@ void PCB_NET_INSPECTOR_PANEL::OnBoardItemsAdded( BOARD& aBoar
|
||||
|
||||
void PCB_NET_INSPECTOR_PANEL::OnBoardItemRemoved( BOARD& aBoard, BOARD_ITEM* aBoardItem )
|
||||
{
|
||||
if( !IsShownOnScreen() )
|
||||
return;
|
||||
|
||||
if( NETINFO_ITEM* net = dynamic_cast<NETINFO_ITEM*>( aBoardItem ) )
|
||||
{
|
||||
m_data_model->deleteItem( m_data_model->findItem( net ) );
|
||||
@ -1025,6 +1034,9 @@ void PCB_NET_INSPECTOR_PANEL::OnBoardItemRemoved( BOARD& aBoard, BOARD_ITEM* aBo
|
||||
void PCB_NET_INSPECTOR_PANEL::OnBoardItemsRemoved( BOARD& aBoard,
|
||||
std::vector<BOARD_ITEM*>& aBoardItems )
|
||||
{
|
||||
if( !IsShownOnScreen() )
|
||||
return;
|
||||
|
||||
for( BOARD_ITEM* item : aBoardItems )
|
||||
{
|
||||
OnBoardItemRemoved( aBoard, item );
|
||||
@ -1034,6 +1046,9 @@ void PCB_NET_INSPECTOR_PANEL::OnBoardItemsRemoved( BOARD& aBo
|
||||
|
||||
void PCB_NET_INSPECTOR_PANEL::OnBoardNetSettingsChanged( BOARD& aBoard )
|
||||
{
|
||||
if( !IsShownOnScreen() )
|
||||
return;
|
||||
|
||||
buildNetsList();
|
||||
m_netsList->Refresh();
|
||||
}
|
||||
@ -1041,6 +1056,9 @@ void PCB_NET_INSPECTOR_PANEL::OnBoardNetSettingsChanged( BOARD& aBoard )
|
||||
|
||||
void PCB_NET_INSPECTOR_PANEL::OnBoardItemChanged( BOARD& aBoard, BOARD_ITEM* aBoardItem )
|
||||
{
|
||||
if( !IsShownOnScreen() )
|
||||
return;
|
||||
|
||||
if( dynamic_cast<BOARD_CONNECTED_ITEM*>( aBoardItem ) != nullptr
|
||||
|| dynamic_cast<FOOTPRINT*>( aBoardItem ) != nullptr )
|
||||
{
|
||||
@ -1053,6 +1071,9 @@ void PCB_NET_INSPECTOR_PANEL::OnBoardItemChanged( BOARD& aBoard, BOARD_ITEM* aBo
|
||||
void PCB_NET_INSPECTOR_PANEL::OnBoardItemsChanged( BOARD& aBoard,
|
||||
std::vector<BOARD_ITEM*>& aBoardItems )
|
||||
{
|
||||
if( !IsShownOnScreen() )
|
||||
return;
|
||||
|
||||
buildNetsList();
|
||||
m_netsList->Refresh();
|
||||
}
|
||||
@ -1060,7 +1081,7 @@ void PCB_NET_INSPECTOR_PANEL::OnBoardItemsChanged( BOARD& aBo
|
||||
|
||||
void PCB_NET_INSPECTOR_PANEL::OnBoardHighlightNetChanged( BOARD& aBoard )
|
||||
{
|
||||
if( m_highlighting_nets )
|
||||
if( m_highlighting_nets || !IsShownOnScreen() )
|
||||
return;
|
||||
|
||||
if( !m_brd->IsHighLightNetON() )
|
||||
@ -1094,6 +1115,13 @@ void PCB_NET_INSPECTOR_PANEL::OnBoardHighlightNetChanged( BOARD& aBoard )
|
||||
*
|
||||
* ***************************************************************************************/
|
||||
|
||||
void PCB_NET_INSPECTOR_PANEL::OnShowPanel()
|
||||
{
|
||||
buildNetsList();
|
||||
OnBoardHighlightNetChanged( *m_brd );
|
||||
}
|
||||
|
||||
|
||||
void PCB_NET_INSPECTOR_PANEL::OnNetsListContextMenu( wxDataViewEvent& event )
|
||||
{
|
||||
bool multipleSelections = false;
|
||||
|
@ -83,6 +83,11 @@ public:
|
||||
std::vector<BOARD_ITEM*>& aBoardItems ) override;
|
||||
virtual void OnBoardHighlightNetChanged( BOARD& aBoard ) override;
|
||||
|
||||
/**
|
||||
* Prepare the panel when shown in the editor
|
||||
*/
|
||||
virtual void OnShowPanel() override;
|
||||
|
||||
/**
|
||||
* Persist the net inspector configuration to project / global settings
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user