Ratsnest: Improve show heuristics

When the local ratsnest tool is used, it should toggle the state based
on the global ratsnest visibility.  After changing state, the layer
cache is marked as well.

Possibly related to lp:1800301
This commit is contained in:
Seth Hillbrand 2018-11-18 19:54:01 -08:00
parent f3d1f31e1d
commit 22fbf30f22
3 changed files with 20 additions and 12 deletions

View File

@ -113,7 +113,18 @@ void RATSNEST_VIEWITEM::ViewDraw( int aLayer, KIGFX::VIEW* aView ) const
continue;
bool enable = !sourceNode->GetNoLine() && !targetNode->GetNoLine();
bool show = sourceNode->Parent()->GetLocalRatsnestVisible() || targetNode->Parent()->GetLocalRatsnestVisible();
bool show;
// If the ratsnest layer is currently enabled, the local ratsnest
// should be easy to turn off, so either element can disable it
// If the layer is off, the local ratsnest should be easy to turn on
// so either element can enable it.
if( sourceNode->Parent()->GetBoard()->IsElementVisible( LAYER_RATSNEST ) )
show = sourceNode->Parent()->GetLocalRatsnestVisible() &&
targetNode->Parent()->GetLocalRatsnestVisible();
else
show = sourceNode->Parent()->GetLocalRatsnestVisible() ||
targetNode->Parent()->GetLocalRatsnestVisible();
if ( enable && show )
{

View File

@ -768,7 +768,7 @@ void PCB_EDIT_FRAME::OnSelectOptionToolbar( wxCommandEvent& event )
case ID_TB_OPTIONS_SHOW_RATSNEST:
SetElementVisibility( LAYER_RATSNEST, state );
OnModify();
PCB_BASE_FRAME::OnModify();
Compile_Ratsnest( NULL, true );
if( IsGalCanvasActive() )

View File

@ -1089,25 +1089,22 @@ static bool showLocalRatsnest( TOOL_MANAGER* aToolMgr, BOARD* aBoard, const VECT
for( auto mod : modules )
{
for( auto pad : mod->Pads() )
{
pad->SetLocalRatsnestVisible( false );
}
pad->SetLocalRatsnestVisible( aBoard->IsElementVisible( LAYER_RATSNEST ) );
}
return true;
}
for( auto item : selection )
else
{
if( item->Type() == PCB_MODULE_T )
for( auto item : selection )
{
for( auto pad : static_cast<MODULE *> (item)->Pads() )
if( auto mod = dyn_cast<MODULE*>(item) )
{
pad->SetLocalRatsnestVisible( !pad->GetLocalRatsnestVisible() );
for( auto pad : mod->Pads() )
pad->SetLocalRatsnestVisible( !pad->GetLocalRatsnestVisible() );
}
}
}
aToolMgr->GetView()->MarkTargetDirty( KIGFX::TARGET_NONCACHED );
return true;
}