pcbnew: Fix ratsnest display
Checks for ratsnest enabled prior to calculating and displaying the local/dynamic ratsnest. Calls the ratsnest clear from selection clear Notably, it appears that the tool actions do not chain transitions for the same event. So only a single action (first specified) will be executed when an event fires unless the actions are executed by separate tools. Fixes: lp:1809752 * https://bugs.launchpad.net/kicad/+bug/1809752
This commit is contained in:
parent
2f5dd6a43a
commit
583e0173b9
|
@ -266,6 +266,7 @@ void BOARD_COMMIT::Push( const wxString& aMessage, bool aCreateUndoEntry, bool a
|
||||||
{
|
{
|
||||||
auto panel = static_cast<PCB_DRAW_PANEL_GAL*>( frame->GetGalCanvas() );
|
auto panel = static_cast<PCB_DRAW_PANEL_GAL*>( frame->GetGalCanvas() );
|
||||||
connectivity->RecalculateRatsnest();
|
connectivity->RecalculateRatsnest();
|
||||||
|
connectivity->ClearDynamicRatsnest();
|
||||||
panel->RedrawRatsnest();
|
panel->RedrawRatsnest();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -192,6 +192,9 @@ static MODULE movedModule( nullptr );
|
||||||
|
|
||||||
void PCB_BASE_FRAME::build_ratsnest_module( MODULE* aModule, wxPoint aMoveVector )
|
void PCB_BASE_FRAME::build_ratsnest_module( MODULE* aModule, wxPoint aMoveVector )
|
||||||
{
|
{
|
||||||
|
if( !GetBoard()->IsElementVisible( LAYER_RATSNEST ) )
|
||||||
|
return;
|
||||||
|
|
||||||
auto connectivity = GetBoard()->GetConnectivity();
|
auto connectivity = GetBoard()->GetConnectivity();
|
||||||
|
|
||||||
movedModule = *aModule;
|
movedModule = *aModule;
|
||||||
|
|
|
@ -381,6 +381,7 @@ public:
|
||||||
static TOOL_ACTION appendBoard;
|
static TOOL_ACTION appendBoard;
|
||||||
static TOOL_ACTION showHelp;
|
static TOOL_ACTION showHelp;
|
||||||
static TOOL_ACTION showLocalRatsnest;
|
static TOOL_ACTION showLocalRatsnest;
|
||||||
|
static TOOL_ACTION hideLocalRatsnest;
|
||||||
static TOOL_ACTION toBeDone;
|
static TOOL_ACTION toBeDone;
|
||||||
|
|
||||||
/// Find an item
|
/// Find an item
|
||||||
|
|
|
@ -148,6 +148,10 @@ TOOL_ACTION PCB_ACTIONS::showLocalRatsnest( "pcbnew.Control.showLocalRatsnest",
|
||||||
AS_GLOBAL, 0,
|
AS_GLOBAL, 0,
|
||||||
"", "" );
|
"", "" );
|
||||||
|
|
||||||
|
TOOL_ACTION PCB_ACTIONS::hideLocalRatsnest( "pcbnew.Control.hideLocalRatsnest",
|
||||||
|
AS_GLOBAL, 0,
|
||||||
|
"", "" );
|
||||||
|
|
||||||
class ZONE_CONTEXT_MENU : public CONTEXT_MENU
|
class ZONE_CONTEXT_MENU : public CONTEXT_MENU
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -1147,7 +1151,7 @@ int PCB_EDITOR_CONTROL::UpdateSelectionRatsnest( const TOOL_EVENT& aEvent )
|
||||||
auto& selection = selectionTool->GetSelection();
|
auto& selection = selectionTool->GetSelection();
|
||||||
auto connectivity = getModel<BOARD>()->GetConnectivity();
|
auto connectivity = getModel<BOARD>()->GetConnectivity();
|
||||||
|
|
||||||
if( selection.Empty() )
|
if( selection.Empty() || !getModel<BOARD>()->IsElementVisible( LAYER_RATSNEST ) )
|
||||||
{
|
{
|
||||||
connectivity->ClearDynamicRatsnest();
|
connectivity->ClearDynamicRatsnest();
|
||||||
}
|
}
|
||||||
|
@ -1196,6 +1200,9 @@ void PCB_EDITOR_CONTROL::ratsnestTimer( wxTimerEvent& aEvent )
|
||||||
|
|
||||||
void PCB_EDITOR_CONTROL::calculateSelectionRatsnest()
|
void PCB_EDITOR_CONTROL::calculateSelectionRatsnest()
|
||||||
{
|
{
|
||||||
|
if( !board()->IsElementVisible( LAYER_RATSNEST ) )
|
||||||
|
return;
|
||||||
|
|
||||||
auto selectionTool = m_toolMgr->GetTool<SELECTION_TOOL>();
|
auto selectionTool = m_toolMgr->GetTool<SELECTION_TOOL>();
|
||||||
auto& selection = selectionTool->GetSelection();
|
auto& selection = selectionTool->GetSelection();
|
||||||
auto connectivity = board()->GetConnectivity();
|
auto connectivity = board()->GetConnectivity();
|
||||||
|
@ -1239,9 +1246,10 @@ void PCB_EDITOR_CONTROL::setTransitions()
|
||||||
Go( &PCB_EDITOR_CONTROL::ClearHighlight, PCB_ACTIONS::clearHighlight.MakeEvent() );
|
Go( &PCB_EDITOR_CONTROL::ClearHighlight, PCB_ACTIONS::clearHighlight.MakeEvent() );
|
||||||
Go( &PCB_EDITOR_CONTROL::HighlightNetCursor, PCB_ACTIONS::highlightNetCursor.MakeEvent() );
|
Go( &PCB_EDITOR_CONTROL::HighlightNetCursor, PCB_ACTIONS::highlightNetCursor.MakeEvent() );
|
||||||
Go( &PCB_EDITOR_CONTROL::HighlightNetCursor, PCB_ACTIONS::highlightNetSelection.MakeEvent() );
|
Go( &PCB_EDITOR_CONTROL::HighlightNetCursor, PCB_ACTIONS::highlightNetSelection.MakeEvent() );
|
||||||
Go( &PCB_EDITOR_CONTROL::ShowLocalRatsnest, PCB_ACTIONS::showLocalRatsnest.MakeEvent() );
|
|
||||||
Go( &PCB_EDITOR_CONTROL::UpdateSelectionRatsnest, PCB_ACTIONS::selectionModified.MakeEvent() );
|
Go( &PCB_EDITOR_CONTROL::UpdateSelectionRatsnest, PCB_ACTIONS::selectionModified.MakeEvent() );
|
||||||
Go( &PCB_EDITOR_CONTROL::HideSelectionRatsnest, SELECTION_TOOL::ClearedEvent );
|
|
||||||
|
Go( &PCB_EDITOR_CONTROL::ShowLocalRatsnest, PCB_ACTIONS::showLocalRatsnest.MakeEvent() );
|
||||||
|
Go( &PCB_EDITOR_CONTROL::HideSelectionRatsnest, PCB_ACTIONS::hideLocalRatsnest.MakeEvent() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1433,6 +1433,7 @@ void SELECTION_TOOL::clearSelection()
|
||||||
|
|
||||||
// Inform other potentially interested tools
|
// Inform other potentially interested tools
|
||||||
m_toolMgr->ProcessEvent( ClearedEvent );
|
m_toolMgr->ProcessEvent( ClearedEvent );
|
||||||
|
m_toolMgr->RunAction( PCB_ACTIONS::hideLocalRatsnest, true );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue