Change behaviour of increase/decrease track width & via size when there's a selection.
They now modifiy the selection if it contains only tracks and/or vias, and modify the current widths/sizes otherwise. Fixes: lp:1814908 * https://bugs.launchpad.net/kicad/+bug/1814908
This commit is contained in:
parent
183687c69e
commit
b8013648d2
|
@ -439,16 +439,46 @@ int PCB_EDITOR_CONTROL::TogglePythonConsole( const TOOL_EVENT& aEvent )
|
||||||
// Track & via size control
|
// Track & via size control
|
||||||
int PCB_EDITOR_CONTROL::TrackWidthInc( const TOOL_EVENT& aEvent )
|
int PCB_EDITOR_CONTROL::TrackWidthInc( const TOOL_EVENT& aEvent )
|
||||||
{
|
{
|
||||||
BOARD* board = getModel<BOARD>();
|
BOARD_DESIGN_SETTINGS& designSettings = getModel<BOARD>()->GetDesignSettings();
|
||||||
int widthIndex = board->GetDesignSettings().GetTrackWidthIndex() + 1;
|
constexpr KICAD_T types[] = { PCB_TRACE_T, PCB_VIA_T, EOT };
|
||||||
|
PCBNEW_SELECTION& selection = m_toolMgr->GetTool<SELECTION_TOOL>()->GetSelection();
|
||||||
|
|
||||||
if( widthIndex >= (int) board->GetDesignSettings().m_TrackWidthList.size() )
|
if( m_frame->ToolStackIsEmpty() && SELECTION_CONDITIONS::OnlyTypes( types )( selection ) )
|
||||||
widthIndex = board->GetDesignSettings().m_TrackWidthList.size() - 1;
|
{
|
||||||
|
BOARD_COMMIT commit( this );
|
||||||
|
|
||||||
board->GetDesignSettings().SetTrackWidthIndex( widthIndex );
|
for( EDA_ITEM* item : selection )
|
||||||
board->GetDesignSettings().UseCustomTrackViaSize( false );
|
{
|
||||||
|
if( item->Type() == PCB_TRACE_T )
|
||||||
|
{
|
||||||
|
TRACK* track = (TRACK*) item;
|
||||||
|
|
||||||
m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged, true );
|
for( int candidate : designSettings.m_TrackWidthList )
|
||||||
|
{
|
||||||
|
if( candidate > track->GetWidth() )
|
||||||
|
{
|
||||||
|
commit.Modify( track );
|
||||||
|
track->SetWidth( candidate );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
commit.Push( "Increase Track Width" );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int widthIndex = designSettings.GetTrackWidthIndex() + 1;
|
||||||
|
|
||||||
|
if( widthIndex >= (int) designSettings.m_TrackWidthList.size() )
|
||||||
|
widthIndex = designSettings.m_TrackWidthList.size() - 1;
|
||||||
|
|
||||||
|
designSettings.SetTrackWidthIndex( widthIndex );
|
||||||
|
designSettings.UseCustomTrackViaSize( false );
|
||||||
|
|
||||||
|
m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged, true );
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -456,16 +486,48 @@ int PCB_EDITOR_CONTROL::TrackWidthInc( const TOOL_EVENT& aEvent )
|
||||||
|
|
||||||
int PCB_EDITOR_CONTROL::TrackWidthDec( const TOOL_EVENT& aEvent )
|
int PCB_EDITOR_CONTROL::TrackWidthDec( const TOOL_EVENT& aEvent )
|
||||||
{
|
{
|
||||||
BOARD* board = getModel<BOARD>();
|
BOARD_DESIGN_SETTINGS& designSettings = getModel<BOARD>()->GetDesignSettings();
|
||||||
int widthIndex = board->GetDesignSettings().GetTrackWidthIndex() - 1;
|
constexpr KICAD_T types[] = { PCB_TRACE_T, PCB_VIA_T, EOT };
|
||||||
|
PCBNEW_SELECTION& selection = m_toolMgr->GetTool<SELECTION_TOOL>()->GetSelection();
|
||||||
|
|
||||||
if( widthIndex < 0 )
|
if( m_frame->ToolStackIsEmpty() && SELECTION_CONDITIONS::OnlyTypes( types )( selection ) )
|
||||||
widthIndex = 0;
|
{
|
||||||
|
BOARD_COMMIT commit( this );
|
||||||
|
|
||||||
board->GetDesignSettings().SetTrackWidthIndex( widthIndex );
|
for( EDA_ITEM* item : selection )
|
||||||
board->GetDesignSettings().UseCustomTrackViaSize( false );
|
{
|
||||||
|
if( item->Type() == PCB_TRACE_T )
|
||||||
|
{
|
||||||
|
TRACK* track = (TRACK*) item;
|
||||||
|
|
||||||
m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged, true );
|
for( int i = designSettings.m_TrackWidthList.size() - 1; i >= 0; --i )
|
||||||
|
{
|
||||||
|
int candidate = designSettings.m_TrackWidthList[ i ];
|
||||||
|
|
||||||
|
if( candidate < track->GetWidth() )
|
||||||
|
{
|
||||||
|
commit.Modify( track );
|
||||||
|
track->SetWidth( candidate );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
commit.Push( "Decrease Track Width" );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int widthIndex = designSettings.GetTrackWidthIndex() - 1;
|
||||||
|
|
||||||
|
if( widthIndex < 0 )
|
||||||
|
widthIndex = 0;
|
||||||
|
|
||||||
|
designSettings.SetTrackWidthIndex( widthIndex );
|
||||||
|
designSettings.UseCustomTrackViaSize( false );
|
||||||
|
|
||||||
|
m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged, true );
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -473,16 +535,47 @@ int PCB_EDITOR_CONTROL::TrackWidthDec( const TOOL_EVENT& aEvent )
|
||||||
|
|
||||||
int PCB_EDITOR_CONTROL::ViaSizeInc( const TOOL_EVENT& aEvent )
|
int PCB_EDITOR_CONTROL::ViaSizeInc( const TOOL_EVENT& aEvent )
|
||||||
{
|
{
|
||||||
BOARD* board = getModel<BOARD>();
|
BOARD_DESIGN_SETTINGS& designSettings = getModel<BOARD>()->GetDesignSettings();
|
||||||
int sizeIndex = board->GetDesignSettings().GetViaSizeIndex() + 1;
|
constexpr KICAD_T types[] = { PCB_TRACE_T, PCB_VIA_T, EOT };
|
||||||
|
PCBNEW_SELECTION& selection = m_toolMgr->GetTool<SELECTION_TOOL>()->GetSelection();
|
||||||
|
|
||||||
if( sizeIndex >= (int) board->GetDesignSettings().m_ViasDimensionsList.size() )
|
if( m_frame->ToolStackIsEmpty() && SELECTION_CONDITIONS::OnlyTypes( types )( selection ) )
|
||||||
sizeIndex = board->GetDesignSettings().m_ViasDimensionsList.size() - 1;
|
{
|
||||||
|
BOARD_COMMIT commit( this );
|
||||||
|
|
||||||
board->GetDesignSettings().SetViaSizeIndex( sizeIndex );
|
for( EDA_ITEM* item : selection )
|
||||||
board->GetDesignSettings().UseCustomTrackViaSize( false );
|
{
|
||||||
|
if( item->Type() == PCB_VIA_T )
|
||||||
|
{
|
||||||
|
VIA* via = (VIA*) item;
|
||||||
|
|
||||||
m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged, true );
|
for( VIA_DIMENSION candidate : designSettings.m_ViasDimensionsList )
|
||||||
|
{
|
||||||
|
if( candidate.m_Diameter > via->GetWidth() )
|
||||||
|
{
|
||||||
|
commit.Modify( via );
|
||||||
|
via->SetWidth( candidate.m_Diameter );
|
||||||
|
via->SetDrill( candidate.m_Drill );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
commit.Push( "Increase Via Size" );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int sizeIndex = designSettings.GetViaSizeIndex() + 1;
|
||||||
|
|
||||||
|
if( sizeIndex >= (int) designSettings.m_ViasDimensionsList.size() )
|
||||||
|
sizeIndex = designSettings.m_ViasDimensionsList.size() - 1;
|
||||||
|
|
||||||
|
designSettings.SetViaSizeIndex( sizeIndex );
|
||||||
|
designSettings.UseCustomTrackViaSize( false );
|
||||||
|
|
||||||
|
m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged, true );
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -490,16 +583,49 @@ int PCB_EDITOR_CONTROL::ViaSizeInc( const TOOL_EVENT& aEvent )
|
||||||
|
|
||||||
int PCB_EDITOR_CONTROL::ViaSizeDec( const TOOL_EVENT& aEvent )
|
int PCB_EDITOR_CONTROL::ViaSizeDec( const TOOL_EVENT& aEvent )
|
||||||
{
|
{
|
||||||
BOARD* board = getModel<BOARD>();
|
BOARD_DESIGN_SETTINGS& designSettings = getModel<BOARD>()->GetDesignSettings();
|
||||||
int sizeIndex = board->GetDesignSettings().GetViaSizeIndex() - 1;
|
constexpr KICAD_T types[] = { PCB_TRACE_T, PCB_VIA_T, EOT };
|
||||||
|
PCBNEW_SELECTION& selection = m_toolMgr->GetTool<SELECTION_TOOL>()->GetSelection();
|
||||||
|
|
||||||
if( sizeIndex < 0 )
|
if( m_frame->ToolStackIsEmpty() && SELECTION_CONDITIONS::OnlyTypes( types )( selection ) )
|
||||||
sizeIndex = 0;
|
{
|
||||||
|
BOARD_COMMIT commit( this );
|
||||||
|
|
||||||
board->GetDesignSettings().SetViaSizeIndex( sizeIndex );
|
for( EDA_ITEM* item : selection )
|
||||||
board->GetDesignSettings().UseCustomTrackViaSize( false );
|
{
|
||||||
|
if( item->Type() == PCB_VIA_T )
|
||||||
|
{
|
||||||
|
VIA* via = (VIA*) item;
|
||||||
|
|
||||||
m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged, true );
|
for( int i = designSettings.m_ViasDimensionsList.size() - 1; i >= 0; --i )
|
||||||
|
{
|
||||||
|
VIA_DIMENSION candidate = designSettings.m_ViasDimensionsList[ i ];
|
||||||
|
|
||||||
|
if( candidate.m_Diameter < via->GetWidth() )
|
||||||
|
{
|
||||||
|
commit.Modify( via );
|
||||||
|
via->SetWidth( candidate.m_Diameter );
|
||||||
|
via->SetDrill( candidate.m_Drill );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
commit.Push( "Decrease Via Size" );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int sizeIndex = designSettings.GetViaSizeIndex() - 1;
|
||||||
|
|
||||||
|
if( sizeIndex < 0 )
|
||||||
|
sizeIndex = 0;
|
||||||
|
|
||||||
|
designSettings.SetViaSizeIndex( sizeIndex );
|
||||||
|
designSettings.UseCustomTrackViaSize( false );
|
||||||
|
|
||||||
|
m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged, true );
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue