Show dragging tools in context selection menu for components
Show the dragging tools in the context selection menu when a single component is selected. Prevent the dragging tools from appearing when more than one object is selected, as they will not activate anyway. Fixes https://gitlab.com/kicad/code/kicad/issues/7258
This commit is contained in:
parent
7d6a749285
commit
3e42ba18a9
|
@ -145,6 +145,13 @@ const KICAD_T GENERAL_COLLECTOR::Dimensions[] = {
|
|||
};
|
||||
|
||||
|
||||
const KICAD_T GENERAL_COLLECTOR::DraggableItems[] = {
|
||||
PCB_TRACE_T,
|
||||
PCB_VIA_T,
|
||||
PCB_FOOTPRINT_T,
|
||||
PCB_ARC_T,
|
||||
EOT
|
||||
};
|
||||
|
||||
|
||||
SEARCH_RESULT GENERAL_COLLECTOR::Inspect( EDA_ITEM* testItem, void* testData )
|
||||
|
|
|
@ -308,6 +308,11 @@ public:
|
|||
*/
|
||||
static const KICAD_T Dimensions[];
|
||||
|
||||
/**
|
||||
* A scan list for items that can be dragged
|
||||
*/
|
||||
static const KICAD_T DraggableItems[];
|
||||
|
||||
/**
|
||||
* Constructor GENERALCOLLECTOR
|
||||
*/
|
||||
|
|
|
@ -1459,7 +1459,7 @@ void ROUTER_TOOL::NeighboringSegmentFilter( const VECTOR2I& aPt, GENERAL_COLLECT
|
|||
}
|
||||
|
||||
|
||||
bool ROUTER_TOOL::CanInlineDrag()
|
||||
bool ROUTER_TOOL::CanInlineDrag( int aDragMode )
|
||||
{
|
||||
m_toolMgr->RunAction( PCB_ACTIONS::selectionCursor, true, NeighboringSegmentFilter );
|
||||
const PCB_SELECTION& selection = m_toolMgr->GetTool<PCB_SELECTION_TOOL>()->GetSelection();
|
||||
|
@ -1468,11 +1468,17 @@ bool ROUTER_TOOL::CanInlineDrag()
|
|||
{
|
||||
const BOARD_ITEM* item = static_cast<const BOARD_ITEM*>( selection.Front() );
|
||||
|
||||
if( item->Type() == PCB_TRACE_T
|
||||
|| item->Type() == PCB_VIA_T
|
||||
|| item->Type() == PCB_FOOTPRINT_T )
|
||||
// Note: EDIT_TOOL::Drag temporarily handles items of type PCB_ARC_T on its own using
|
||||
// DragArcTrack(), so PCB_ARC_T should never occur here.
|
||||
if( item->IsType( GENERAL_COLLECTOR::DraggableItems ) )
|
||||
{
|
||||
return true;
|
||||
static const KICAD_T footprints[] = { PCB_FOOTPRINT_T, EOT };
|
||||
|
||||
// Footprints cannot be dragged freely.
|
||||
if( item->IsType( footprints ) )
|
||||
return !( aDragMode & PNS::DM_FREE_ANGLE );
|
||||
else
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ public:
|
|||
int MainLoop( const TOOL_EVENT& aEvent );
|
||||
|
||||
int InlineBreakTrack( const TOOL_EVENT& aEvent );
|
||||
bool CanInlineDrag();
|
||||
bool CanInlineDrag( int aDragMode );
|
||||
int InlineDrag( const TOOL_EVENT& aEvent );
|
||||
|
||||
int SelectCopperLayerPair( const TOOL_EVENT& aEvent );
|
||||
|
|
|
@ -135,9 +135,12 @@ bool EDIT_TOOL::Init()
|
|||
|
||||
menu.AddItem( PCB_ACTIONS::move, SELECTION_CONDITIONS::NotEmpty && notMovingCondition );
|
||||
menu.AddItem( PCB_ACTIONS::inlineBreakTrack, SELECTION_CONDITIONS::Count( 1 )
|
||||
&& SELECTION_CONDITIONS::OnlyTypes( GENERAL_COLLECTOR::Tracks ) );
|
||||
menu.AddItem( PCB_ACTIONS::drag45Degree, SELECTION_CONDITIONS::OnlyTypes( GENERAL_COLLECTOR::Tracks ) );
|
||||
menu.AddItem( PCB_ACTIONS::dragFreeAngle, SELECTION_CONDITIONS::OnlyTypes( GENERAL_COLLECTOR::Tracks ) );
|
||||
&& SELECTION_CONDITIONS::OnlyTypes( GENERAL_COLLECTOR::Tracks ) );
|
||||
menu.AddItem( PCB_ACTIONS::drag45Degree, SELECTION_CONDITIONS::Count( 1 )
|
||||
&& SELECTION_CONDITIONS::OnlyTypes( GENERAL_COLLECTOR::DraggableItems ) );
|
||||
menu.AddItem( PCB_ACTIONS::dragFreeAngle, SELECTION_CONDITIONS::Count( 1 )
|
||||
&& SELECTION_CONDITIONS::OnlyTypes( GENERAL_COLLECTOR::DraggableItems )
|
||||
&& !SELECTION_CONDITIONS::OnlyType( PCB_FOOTPRINT_T ) );
|
||||
menu.AddItem( PCB_ACTIONS::filletTracks, SELECTION_CONDITIONS::OnlyTypes( GENERAL_COLLECTOR::Tracks ) );
|
||||
menu.AddItem( PCB_ACTIONS::rotateCcw, SELECTION_CONDITIONS::NotEmpty );
|
||||
menu.AddItem( PCB_ACTIONS::rotateCw, SELECTION_CONDITIONS::NotEmpty );
|
||||
|
@ -211,7 +214,7 @@ bool EDIT_TOOL::invokeInlineRouter( int aDragMode )
|
|||
if( theRouter->IsToolActive() )
|
||||
return false;
|
||||
|
||||
if( theRouter->CanInlineDrag() )
|
||||
if( theRouter->CanInlineDrag( aDragMode ) )
|
||||
{
|
||||
m_toolMgr->RunAction( PCB_ACTIONS::routerInlineDrag, true, aDragMode );
|
||||
return true;
|
||||
|
|
Loading…
Reference in New Issue