KiCad PCB EDA Suite
EDIT_TOOL Class Reference

Class EDIT_TOOL. More...

#include <edit_tool.h>

Inheritance diagram for EDIT_TOOL:
PCB_TOOL TOOL_INTERACTIVE TOOL_BASE

Public Types

enum  RESET_REASON { RUN, MODEL_RELOAD, GAL_SWITCH }
 

Determines the reason of reset for a tool

More...
 

Public Member Functions

 EDIT_TOOL ()
 
void Reset (RESET_REASON aReason) override
 Function Reset() Brings the tool to a known, initial state. More...
 
bool Init () override
 Function Init() Init() is called once upon a registration of the tool. More...
 
int Main (const TOOL_EVENT &aEvent)
 Function Main() More...
 
int Drag (const TOOL_EVENT &aEvent)
 Function Drag() More...
 
int Properties (const TOOL_EVENT &aEvent)
 Function Edit() More...
 
int Rotate (const TOOL_EVENT &aEvent)
 Function Rotate() More...
 
int Flip (const TOOL_EVENT &aEvent)
 Function Flip() More...
 
int Mirror (const TOOL_EVENT &aEvent)
 Function Mirror. More...
 
int Remove (const TOOL_EVENT &aEvent)
 Function Remove() More...
 
int Duplicate (const TOOL_EVENT &aEvent)
 Function Duplicate() More...
 
int MoveExact (const TOOL_EVENT &aEvent)
 Function MoveExact() More...
 
int CreateArray (const TOOL_EVENT &aEvent)
 Function CreateArray() More...
 
int ExchangeFootprints (const TOOL_EVENT &aEvent)
 Function ExchangeFootprints() More...
 
int MeasureTool (const TOOL_EVENT &aEvent)
 

Launches a tool to measure between points

More...
 
void setTransitions () override
 

Sets up handlers for various events.

More...
 
int copyToClipboard (const TOOL_EVENT &aEvent)
 Function copyToClipboard() Sends the current selection to the clipboard by formatting it as a fake pcb see AppendBoardFromClipboard for importing. More...
 
int copyToClipboardWithAnchor (const TOOL_EVENT &aEvent)
 
int doCopyToClipboard (bool withAnchor)
 
int cutToClipboard (const TOOL_EVENT &aEvent)
 Function cutToClipboard() Cuts the current selection to the clipboard by formatting it as a fake pcb see AppendBoardFromClipboard for importing. More...
 
BOARD_COMMITGetCurrentCommit () const
 
void SetEditModules (bool aEnabled)
 Function SetEditModules() More...
 
bool EditingModules () const
 
void Activate ()
 Function Activate() Runs the tool. More...
 
void SetContextMenu (CONTEXT_MENU *aMenu, CONTEXT_MENU_TRIGGER aTrigger=CMENU_BUTTON)
 Function SetContextMenu() More...
 
void RunMainStack (std::function< void()> aFunc)
 Function RunMainStack() More...
 
template<class T >
void Go (int(T::*aStateFunc)(const TOOL_EVENT &), const TOOL_EVENT_LIST &aConditions=TOOL_EVENT(TC_ANY, TA_ANY))
 Function Go() More...
 
OPT_TOOL_EVENT Wait (const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
 Function Wait() More...
 
TOOL_TYPE GetType () const
 Function GetType() Returns the type of the tool. More...
 
TOOL_ID GetId () const
 Function GetId() Returns the unique identifier of the tool. More...
 
const std::string & GetName () const
 Function GetName() Returns the name of the tool. More...
 
TOOL_MANAGERGetManager () const
 Function GetManager() Returns the instance of TOOL_MANAGER that takes care of the tool. More...
 
TOOL_SETTINGSGetSettings ()
 
bool IsToolActive () const
 

Static Public Member Functions

static void FootprintFilter (const VECTOR2I &, GENERAL_COLLECTOR &aCollector)
 Function FootprintFilter() More...
 
static void PadFilter (const VECTOR2I &, GENERAL_COLLECTOR &aCollector)
 Function PadFilter() More...
 

Protected Types

enum  INTERACTIVE_PLACEMENT_OPTIONS {
  IPO_ROTATE = 1, IPO_FLIP = 2, IPO_PROPERTIES = 4, IPO_SINGLE_CLICK = 8,
  IPO_REPEAT = 16
}
 

Protected Member Functions

void doInteractiveItemPlacement (INTERACTIVE_PLACER_BASE *aPlacer, const wxString &aCommitMessage, int aOptions=IPO_ROTATE|IPO_FLIP|IPO_REPEAT)
 Helper function for performing a common interactive idiom: wait for a left click, place an item there (perhaps with a dialog or other user interaction), then have it move with the mouse and respond to rotate/flip, etc. More...
 
KIGFX::PCB_VIEWview () const
 
KIGFX::VIEW_CONTROLScontrols () const
 
PCB_EDIT_FRAMEframe () const
 
BOARDboard () const
 
MODULEmodule () const
 
PCB_DISPLAY_OPTIONSdisplayOptions () const
 
PCB_DRAW_PANEL_GALcanvas () const
 
const SELECTIONselection () const
 
SELECTIONselection ()
 
const TOOL_EVENT evActivate (std::string aToolName="")
 functions below are not yet implemented - their interface may change More...
 
const TOOL_EVENT evCommand (int aCommandId=-1)
 
const TOOL_EVENT evCommand (std::string aCommandStr="")
 
const TOOL_EVENT evMotion ()
 
const TOOL_EVENT evClick (int aButton=BUT_ANY)
 
const TOOL_EVENT evDrag (int aButton=BUT_ANY)
 
const TOOL_EVENT evButtonUp (int aButton=BUT_ANY)
 
const TOOL_EVENT evButtonDown (int aButton=BUT_ANY)
 
void attachManager (TOOL_MANAGER *aManager)
 Function attachManager() More...
 
KIGFX::VIEWgetView () const
 Function getView() More...
 
KIGFX::VIEW_CONTROLSgetViewControls () const
 Function getViewControls() More...
 
template<typename T >
T * getEditFrame () const
 Function getEditFrame() More...
 
template<typename T >
T * getModel () const
 Function getModel() More...
 

Protected Attributes

TOOL_MENU m_menu
 Menu model displayed by the tool. More...
 
bool m_editModules
 
TOOL_TYPE m_type
 

Stores the type of the tool.

More...
 
TOOL_ID m_toolId
 

Unique identifier for the tool, assigned by a TOOL_MANAGER instance.

More...
 
std::string m_toolName
 

Name of the tool.

More...
 
TOOL_MANAGERm_toolMgr
 
TOOL_SETTINGS m_toolSettings
 

Private Member Functions

bool updateModificationPoint (SELECTION &aSelection)
 

Returns the right modification point (e.g.

More...
 
int editFootprintInFpEditor (const TOOL_EVENT &aEvent)
 
bool invokeInlineRouter (int aDragMode)
 
bool isInteractiveDragEnabled () const
 
bool changeTrackWidthOnClick (const SELECTION &selection)
 
bool pickCopyReferencePoint (VECTOR2I &aP)
 

Private Attributes

SELECTION_TOOLm_selectionTool
 

Selection tool used for obtaining selected items

More...
 
bool m_dragging
 

Flag determining if anything is being dragged right now

More...
 
bool m_lockedSelected
 

Flag determining whether we are prompting for locked removal

More...
 
VECTOR2I m_cursor
 

Last cursor position (needed for getModificationPoint() to avoid changes of edit reference point).

More...
 
std::unique_ptr< BOARD_COMMITm_commit
 

Detailed Description

Class EDIT_TOOL.

The interactive edit tool. Allows one to move, rotate, flip and change properties of items selected using the pcbnew.InteractiveSelection tool.

Definition at line 59 of file edit_tool.h.

Member Enumeration Documentation

◆ INTERACTIVE_PLACEMENT_OPTIONS

enum PCB_TOOL::INTERACTIVE_PLACEMENT_OPTIONS
protectedinherited
Enumerator
IPO_ROTATE 
IPO_FLIP 
IPO_PROPERTIES 
IPO_SINGLE_CLICK 
IPO_REPEAT 

Definition at line 109 of file pcb_tool.h.

◆ RESET_REASON

enum TOOL_BASE::RESET_REASON
inherited

Determines the reason of reset for a tool

Enumerator
RUN 

Tool is invoked after being inactive.

MODEL_RELOAD 

Model changes (required full reload)

GAL_SWITCH 

Rendering engine changes.

Definition at line 80 of file tool_base.h.

81  {
82  RUN,
83  MODEL_RELOAD,
84  GAL_SWITCH
85  };
Model changes (required full reload)
Definition: tool_base.h:83
Tool is invoked after being inactive.
Definition: tool_base.h:82
Rendering engine changes.
Definition: tool_base.h:84

Constructor & Destructor Documentation

◆ EDIT_TOOL()

EDIT_TOOL::EDIT_TOOL ( )

Definition at line 214 of file edit_tool.cpp.

214  :
215  PCB_TOOL( "pcbnew.InteractiveEdit" ), m_selectionTool( NULL ),
216  m_dragging( false ), m_lockedSelected( false )
217 {
218 }
SELECTION_TOOL * m_selectionTool
Selection tool used for obtaining selected items
Definition: edit_tool.h:199
bool m_lockedSelected
Flag determining whether we are prompting for locked removal
Definition: edit_tool.h:205
bool m_dragging
Flag determining if anything is being dragged right now
Definition: edit_tool.h:202
PCB_TOOL(TOOL_ID aId, const std::string &aName)
Constructor.
Definition: pcb_tool.h:71

Member Function Documentation

◆ Activate()

void TOOL_INTERACTIVE::Activate ( )
inherited

Function Activate() Runs the tool.

After activation, the tool starts receiving events until it is finished.

Definition at line 49 of file tool_interactive.cpp.

50 {
52 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
TOOL_ID m_toolId
Unique identifier for the tool, assigned by a TOOL_MANAGER instance.
Definition: tool_base.h:210
bool InvokeTool(TOOL_ID aToolId)
Function InvokeTool() Calls a tool by sending a tool activation event to tool of given ID.

References TOOL_MANAGER::InvokeTool(), TOOL_BASE::m_toolId, and TOOL_BASE::m_toolMgr.

Referenced by AUTOPLACE_TOOL::autoplace(), PCBNEW_CONTROL::DeleteItemCursor(), doCopyToClipboard(), PCB_TOOL::doInteractiveItemPlacement(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawDimension(), MICROWAVE_TOOL::drawMicrowaveInductor(), DRAWING_TOOL::drawSegment(), DRAWING_TOOL::drawZone(), PCB_EDITOR_CONTROL::DrillOrigin(), MODULE_EDITOR_TOOLS::EnumeratePads(), PCBNEW_CONTROL::GridSetOrigin(), PCB_EDITOR_CONTROL::HighlightNetCursor(), ROUTER_TOOL::InlineBreakTrack(), ROUTER_TOOL::InlineDrag(), Main(), LENGTH_TUNER_TOOL::mainLoop(), ROUTER_TOOL::mainLoop(), CVPCB_SELECTION_TOOL::MeasureTool(), GERBVIEW_SELECTION_TOOL::MeasureTool(), MeasureTool(), POINT_EDITOR::OnSelectionChange(), pickCopyReferencePoint(), DRAWING_TOOL::PlaceImportedGraphics(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), DRAWING_TOOL::PlaceText(), Remove(), POSITION_RELATIVE_TOOL::SelectPositionRelativeItem(), DRAWING_TOOL::SetAnchor(), and PCB_EDITOR_CONTROL::ShowLocalRatsnest().

◆ attachManager()

void TOOL_BASE::attachManager ( TOOL_MANAGER aManager)
protectedinherited

Function attachManager()

Sets the TOOL_MANAGER the tool will belong to. Called by TOOL_MANAGER::RegisterTool()

Definition at line 59 of file tool_base.cpp.

60 {
61  m_toolMgr = aManager;
62  m_toolSettings = TOOL_SETTINGS( this );
63 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
TOOL_SETTINGS m_toolSettings
Definition: tool_base.h:216
friend class TOOL_SETTINGS
Definition: tool_base.h:155

References TOOL_BASE::m_toolMgr, TOOL_BASE::m_toolSettings, and TOOL_BASE::TOOL_SETTINGS.

Referenced by TOOL_MANAGER::RegisterTool().

◆ board()

BOARD* PCB_TOOL::board ( ) const
inlineprotectedinherited

Definition at line 140 of file pcb_tool.h.

140 { return getModel<BOARD>(); }

Referenced by PCBNEW_CONTROL::AppendBoard(), AUTOPLACE_TOOL::autoplace(), PCB_EDITOR_CONTROL::calculateSelectionRatsnest(), changeTrackWidthOnClick(), PCB_EDITOR_CONTROL::ClearHighlight(), MICROWAVE_TOOL::createInductorBetween(), MODULE_EDITOR_TOOLS::CreatePadFromShapes(), ROUTER_TOOL::CustomTrackWidthDialog(), doCopyToClipboard(), PCB_TOOL::doInteractiveItemPlacement(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawDimension(), DRAWING_TOOL::drawSegment(), MODULE_EDITOR_TOOLS::EnumeratePads(), MODULE_EDITOR_TOOLS::ExplodePadToShapes(), SELECTION_TOOL::filterSelection(), POINT_EDITOR::finishItem(), SELECTION_TOOL::getCollectorsGuide(), PCBNEW_CONTROL::GraphicDisplayMode(), PAD_TOOL::haveFootprints(), PCBNEW_CONTROL::LayerNext(), PCBNEW_CONTROL::LayerPrev(), PCB_TOOL::module(), PCBNEW_CONTROL::ModuleEdgeOutlines(), PCBNEW_CONTROL::ModuleTextOutlines(), ROUTER_TOOL::onTrackViaSizeChanged(), ROUTER_TOOL::onViaCommand(), PCBNEW_CONTROL::PadDisplayMode(), PCBNEW_CONTROL::PasteItemsFromClipboard(), PCBNEW_CONTROL::placeBoardItems(), MODULE_EDITOR_TOOLS::PlacePad(), PCB_EDITOR_CONTROL::PlaceTarget(), DRAWING_TOOL::PlaceText(), ROUTER_TOOL::prepareInteractive(), PNS::TOOL_BASE::Reset(), PCBNEW_CONTROL::Reset(), ZONE_FILLER_TOOL::SegzoneDeleteFill(), SELECTION_TOOL::selectable(), SELECTION_TOOL::selectAllItemsConnectedToItem(), SELECTION_TOOL::selectAllItemsConnectedToTrack(), SELECTION_TOOL::selectAllItemsOnNet(), SELECTION_TOOL::selectAllItemsOnSheet(), SELECTION_TOOL::selectPoint(), PCB_EDITOR_CONTROL::ShowLocalRatsnest(), PCBNEW_CONTROL::TrackDisplayMode(), PCB_EDITOR_CONTROL::TrackWidthDec(), PCB_EDITOR_CONTROL::TrackWidthInc(), PCBNEW_CONTROL::ViaDisplayMode(), PCB_EDITOR_CONTROL::ViaSizeDec(), PCB_EDITOR_CONTROL::ViaSizeInc(), PCBNEW_CONTROL::ZoneDisplayMode(), ZONE_FILLER_TOOL::ZoneFill(), ZONE_FILLER_TOOL::ZoneFillAll(), PCB_EDITOR_CONTROL::ZoneMerge(), and ZONE_FILLER_TOOL::ZoneUnfillAll().

◆ canvas()

◆ changeTrackWidthOnClick()

bool EDIT_TOOL::changeTrackWidthOnClick ( const SELECTION selection)
private

Definition at line 592 of file edit_tool.cpp.

593 {
595  {
596  auto item = static_cast<BOARD_ITEM *>( selection[0] );
597 
598  m_commit->Modify( item );
599 
600  if( auto via = dyn_cast<VIA*>( item ) )
601  {
602  int new_width, new_drill;
603 
604  if( via->GetViaType() == VIA_MICROVIA )
605  {
606  auto net = via->GetNet();
607 
608  new_width = net->GetMicroViaSize();
609  new_drill = net->GetMicroViaDrillSize();
610  }
611  else
612  {
613  new_width = board()->GetDesignSettings().GetCurrentViaSize();
614  new_drill = board()->GetDesignSettings().GetCurrentViaDrill();
615  }
616 
617  via->SetDrill( new_drill );
618  via->SetWidth( new_width );
619  }
620  else if ( auto track = dyn_cast<TRACK*>( item ) )
621  {
622  int new_width = board()->GetDesignSettings().GetCurrentTrackWidth();
623  track->SetWidth( new_width );
624  }
625 
626  m_commit->Push( _("Edit track width/via size") );
627  return true;
628  }
629 
630  return false;
631 }
int GetCurrentViaDrill() const
Function GetCurrentViaDrill.
int GetCurrentTrackWidth() const
Function GetCurrentTrackWidth.
std::unique_ptr< BOARD_COMMIT > m_commit
Definition: edit_tool.h:223
const SELECTION & selection() const
Definition: pcb_tool.cpp:251
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Function GetDesignSettings.
Definition: class_board.h:539
PCB_GENERAL_SETTINGS & Settings()
BOARD * board() const
Definition: pcb_tool.h:140
int GetCurrentViaSize() const
Function GetCurrentViaSize.
int Size() const
Returns the number of selected parts.
Definition: selection.h:122
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:139

References PCB_TOOL::board(), PCB_TOOL::frame(), BOARD_DESIGN_SETTINGS::GetCurrentTrackWidth(), BOARD_DESIGN_SETTINGS::GetCurrentViaDrill(), BOARD_DESIGN_SETTINGS::GetCurrentViaSize(), BOARD::GetDesignSettings(), m_commit, PCB_GENERAL_SETTINGS::m_editActionChangesTrackWidth, PCB_TOOL::selection(), PCB_BASE_FRAME::Settings(), SELECTION::Size(), and VIA_MICROVIA.

Referenced by Properties().

◆ controls()

◆ copyToClipboard()

int EDIT_TOOL::copyToClipboard ( const TOOL_EVENT aEvent)

Function copyToClipboard() Sends the current selection to the clipboard by formatting it as a fake pcb see AppendBoardFromClipboard for importing.

Returns
True if it was sent succesfully

Definition at line 1544 of file edit_tool.cpp.

1545 {
1546  return doCopyToClipboard( true );
1547 }
int doCopyToClipboard(bool withAnchor)
Definition: edit_tool.cpp:1512

References doCopyToClipboard().

Referenced by cutToClipboard(), and setTransitions().

◆ copyToClipboardWithAnchor()

int EDIT_TOOL::copyToClipboardWithAnchor ( const TOOL_EVENT aEvent)

Definition at line 1550 of file edit_tool.cpp.

1551 {
1552  return doCopyToClipboard( true );
1553 }
int doCopyToClipboard(bool withAnchor)
Definition: edit_tool.cpp:1512

References doCopyToClipboard().

◆ CreateArray()

int EDIT_TOOL::CreateArray ( const TOOL_EVENT aEvent)

Function CreateArray()

Creates an array of the selected items, invoking the array editor dialog to set the array options

Definition at line 1223 of file edit_tool.cpp.

1224 {
1226  []( const VECTOR2I& aPt, GENERAL_COLLECTOR& aCollector )
1228 
1229  if( selection.Empty() )
1230  return 0;
1231 
1232  // we have a selection to work on now, so start the tool process
1233  PCB_BASE_FRAME* editFrame = getEditFrame<PCB_BASE_FRAME>();
1234  GAL_ARRAY_CREATOR array_creator( *editFrame, m_editModules, selection );
1235  array_creator.Invoke();
1236 
1237  return 0;
1238 }
SELECTION & RequestSelection(CLIENT_SELECTION_FILTER aClientFilter, std::vector< BOARD_ITEM * > *aFiltered=NULL, bool aConfirmLockedItems=false)
Function RequestSelection()
const SELECTION & selection() const
Definition: pcb_tool.cpp:251
SELECTION_TOOL * m_selectionTool
Selection tool used for obtaining selected items
Definition: edit_tool.h:199
#define EXCLUDE_TRANSIENTS
Definition: edit_tool.h:48
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:116
bool m_editModules
Definition: pcb_tool.h:150
Used when the right click button is pressed, or when the select tool is in effect.
Definition: collectors.h:245
#define EXCLUDE_LOCKED_PADS
Definition: edit_tool.h:47
void EditToolSelectionFilter(GENERAL_COLLECTOR &aCollector, int aFlags)
Definition: edit_tool.cpp:173
class PCB_BASE_FRAME basic PCB main window class for Pcbnew, Gerbview, and CvPcb footprint viewer.

References EditToolSelectionFilter(), SELECTION::Empty(), EXCLUDE_LOCKED_PADS, EXCLUDE_TRANSIENTS, ARRAY_CREATOR::Invoke(), PCB_TOOL::m_editModules, m_selectionTool, SELECTION_TOOL::RequestSelection(), and PCB_TOOL::selection().

Referenced by setTransitions().

◆ cutToClipboard()

int EDIT_TOOL::cutToClipboard ( const TOOL_EVENT aEvent)

Function cutToClipboard() Cuts the current selection to the clipboard by formatting it as a fake pcb see AppendBoardFromClipboard for importing.

Returns
True if it was sent succesfully

Definition at line 1556 of file edit_tool.cpp.

1557 {
1558  if( !copyToClipboard( aEvent ) )
1559  {
1560  // N.B. Setting the CUT flag prevents lock filtering as we only want to delete the items that
1561  // were copied to the clipboard, no more, no fewer. Filtering for locked item, if any will be done
1562  // in the copyToClipboard() routine
1563  TOOL_EVENT evt( aEvent.Category(), aEvent.Action(), TOOL_ACTION_SCOPE::AS_GLOBAL );
1565  Remove( evt );
1566  }
1567 
1568  return 0;
1569 }
TOOL_ACTIONS Action() const
Returns more specific information about the type of an event.
Definition: tool_event.h:240
TOOL_EVENT_CATEGORY Category() const
Returns the category (eg. mouse/keyboard/action) of an event..
Definition: tool_event.h:234
void SetParameter(T aParam)
Function SetParameter() Sets a non-standard parameter assigned to the event.
Definition: tool_event.h:399
Class TOOL_EVENT.
Definition: tool_event.h:168
All active tools
Definition: tool_event.h:144
int Remove(const TOOL_EVENT &aEvent)
Function Remove()
Definition: edit_tool.cpp:883
int copyToClipboard(const TOOL_EVENT &aEvent)
Function copyToClipboard() Sends the current selection to the clipboard by formatting it as a fake pc...
Definition: edit_tool.cpp:1544

References TOOL_EVENT::Action(), AS_GLOBAL, TOOL_EVENT::Category(), copyToClipboard(), ACTIONS::CUT, Remove(), and TOOL_EVENT::SetParameter().

Referenced by setTransitions().

◆ displayOptions()

PCB_DISPLAY_OPTIONS * PCB_TOOL::displayOptions ( ) const
protectedinherited

◆ doCopyToClipboard()

int EDIT_TOOL::doCopyToClipboard ( bool  withAnchor)

Definition at line 1512 of file edit_tool.cpp.

1513 {
1514  CLIPBOARD_IO io;
1515 
1516  Activate();
1517 
1519  []( const VECTOR2I& aPt, GENERAL_COLLECTOR& aCollector )
1521 
1522  if( selection.Empty() )
1523  return 1;
1524 
1525  if( withAnchor )
1526  {
1527  VECTOR2I refPoint;
1528  bool rv = pickCopyReferencePoint( refPoint );
1529  frame()->SetMsgPanel( board() );
1530 
1531  if( !rv )
1532  return 1;
1533 
1534  selection.SetReferencePoint( refPoint );
1535  }
1536 
1537  io.SetBoard( board() );
1538  io.SaveSelection( selection );
1539 
1540  return 0;
1541 }
SELECTION & RequestSelection(CLIENT_SELECTION_FILTER aClientFilter, std::vector< BOARD_ITEM * > *aFiltered=NULL, bool aConfirmLockedItems=false)
Function RequestSelection()
const SELECTION & selection() const
Definition: pcb_tool.cpp:251
SELECTION_TOOL * m_selectionTool
Selection tool used for obtaining selected items
Definition: edit_tool.h:199
void SaveSelection(const SELECTION &selected)
void SetBoard(BOARD *aBoard)
void SetReferencePoint(const VECTOR2I &aP)
Definition: selection.h:205
void SetMsgPanel(const std::vector< MSG_PANEL_ITEM > &aList)
Clear the message panel and populates it with the contents of aList.
BOARD * board() const
Definition: pcb_tool.h:140
#define EXCLUDE_TRANSIENTS
Definition: edit_tool.h:48
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:116
bool pickCopyReferencePoint(VECTOR2I &aP)
Definition: edit_tool.cpp:1473
Used when the right click button is pressed, or when the select tool is in effect.
Definition: collectors.h:245
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:139
void Activate()
Function Activate() Runs the tool.
#define EXCLUDE_LOCKED_PADS
Definition: edit_tool.h:47
void EditToolSelectionFilter(GENERAL_COLLECTOR &aCollector, int aFlags)
Definition: edit_tool.cpp:173

References TOOL_INTERACTIVE::Activate(), PCB_TOOL::board(), EditToolSelectionFilter(), SELECTION::Empty(), EXCLUDE_LOCKED_PADS, EXCLUDE_TRANSIENTS, PCB_TOOL::frame(), m_selectionTool, pickCopyReferencePoint(), SELECTION_TOOL::RequestSelection(), CLIPBOARD_IO::SaveSelection(), PCB_TOOL::selection(), CLIPBOARD_IO::SetBoard(), EDA_DRAW_FRAME::SetMsgPanel(), and SELECTION::SetReferencePoint().

Referenced by copyToClipboard(), and copyToClipboardWithAnchor().

◆ doInteractiveItemPlacement()

void PCB_TOOL::doInteractiveItemPlacement ( INTERACTIVE_PLACER_BASE aPlacer,
const wxString &  aCommitMessage,
int  aOptions = IPO_ROTATE | IPO_FLIP | IPO_REPEAT 
)
protectedinherited

Helper function for performing a common interactive idiom: wait for a left click, place an item there (perhaps with a dialog or other user interaction), then have it move with the mouse and respond to rotate/flip, etc.

More complex interactive processes are not supported here, you should implement a customised event loop for those.

Parameters
aItemCreatorthe callable that will attempt to create the item
aCommitMessagethe message used on a successful commit

Definition at line 39 of file pcb_tool.cpp.

42 {
43  using namespace std::placeholders;
44  std::unique_ptr<BOARD_ITEM> newItem;
45 
46  Activate();
47 
48  BOARD_COMMIT commit( frame() );
49 
51 
52  // do not capture or auto-pan until we start placing an item
53  controls()->ShowCursor( true );
54  controls()->SetSnapping( true );
55 
56  // Add a VIEW_GROUP that serves as a preview for the new item
57  SELECTION preview;
58  view()->Add( &preview );
59 
60  aPlacer->m_board = board();
61  aPlacer->m_frame = frame();
62  aPlacer->m_modifiers = 0;
63 
64  if( aOptions & IPO_SINGLE_CLICK && !( aOptions & IPO_PROPERTIES ) )
65  {
66  VECTOR2I cursorPos = controls()->GetCursorPosition();
67 
68  newItem = aPlacer->CreateItem();
69 
70  if( newItem )
71  {
72  newItem->SetPosition( wxPoint( cursorPos.x, cursorPos.y ) );
73  preview.Add( newItem.get() );
74  }
75  }
76 
77  // Main loop: keep receiving events
78  while( OPT_TOOL_EVENT evt = Wait() )
79  {
80  VECTOR2I cursorPos = controls()->GetCursorPosition();
81  aPlacer->m_modifiers = evt->Modifier();
82 
84  {
85  if( newItem )
86  {
87  // Delete the old item and have another try
88  newItem = nullptr;
89 
90  preview.Clear();
91 
92  if( aOptions & IPO_SINGLE_CLICK )
93  break;
94 
95  controls()->SetAutoPan( false );
96  controls()->CaptureCursor( false );
97  controls()->ShowCursor( true );
98  }
99  else
100  {
101  break;
102  }
103 
104  if( evt->IsActivate() ) // now finish unconditionally
105  break;
106  }
107  else if( evt->IsClick( BUT_LEFT ) )
108  {
109  if( !newItem )
110  {
111  // create the item if possible
112  newItem = aPlacer->CreateItem();
113 
114  // no item created, so wait for another click
115  if( !newItem )
116  continue;
117 
118  controls()->CaptureCursor( true );
119  controls()->SetAutoPan( true );
120 
121  newItem->SetPosition( wxPoint( cursorPos.x, cursorPos.y ) );
122 
123  preview.Add( newItem.get() );
124 
125  if( newItem->Type() == PCB_MODULE_T )
126  {
127  auto module = dyn_cast<MODULE*>( newItem.get() );
128 
129  // modules have more drawable parts
130  module->RunOnChildren( std::bind( &KIGFX::VIEW_GROUP::Add, &preview, _1 ) );
131  }
132  }
133  else
134  {
135  auto oldFlags = newItem->GetFlags();
136  newItem->ClearFlags();
137 
138  if( !aPlacer->PlaceItem( newItem.get(), commit ) )
139  {
140  newItem->SetFlags( oldFlags );
141  continue;
142  }
143 
144  preview.Remove( newItem.get() );
145 
146  if( newItem->Type() == PCB_MODULE_T )
147  {
148  auto module = dyn_cast<MODULE*>( newItem.get() );
149  module->RunOnChildren( std::bind( &KIGFX::VIEW_GROUP::Remove, &preview, _1 ) );
150  }
151 
152  newItem.release();
153  commit.Push( aCommitMessage );
154 
155  controls()->CaptureCursor( false );
156  controls()->SetAutoPan( false );
157  controls()->ShowCursor( true );
158 
159  if( !( aOptions & IPO_REPEAT ) )
160  break;
161 
162  if( aOptions & IPO_SINGLE_CLICK && !( aOptions & IPO_PROPERTIES ) )
163  {
165 
166  newItem = aPlacer->CreateItem();
167 
168  if( newItem )
169  {
170  newItem->SetPosition( wxPoint( pos.x, pos.y ) );
171  preview.Add( newItem.get() );
172  }
173  }
174  }
175  }
176  else if( evt->IsClick( BUT_RIGHT ) )
177  {
179  }
180  else if( newItem && evt->Category() == TC_COMMAND )
181  {
182  /*
183  * Handle any events that can affect the item as we move
184  * it around, eg rotate and flip
185  */
186 
187  if( TOOL_EVT_UTILS::IsRotateToolEvt( *evt ) && ( aOptions & IPO_ROTATE ) )
188  {
189  const int rotationAngle = TOOL_EVT_UTILS::GetEventRotationAngle( *frame(), *evt );
190  newItem->Rotate( newItem->GetPosition(), rotationAngle );
191  view()->Update( &preview );
192  }
193  else if( evt->IsAction( &PCB_ACTIONS::flip ) && ( aOptions & IPO_FLIP ) )
194  {
195  newItem->Flip( newItem->GetPosition() );
196  view()->Update( &preview );
197  }
198  }
199 
200  else if( newItem && evt->IsMotion() )
201  {
202  // track the cursor
203  newItem->SetPosition( wxPoint( cursorPos.x, cursorPos.y ) );
204  aPlacer->SnapItem( newItem.get() );
205 
206  // Show a preview of the item
207  view()->Update( &preview );
208  }
209  }
210 
211  view()->Remove( &preview );
212 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
virtual void ShowCursor(bool aEnabled)
Function ShowCursor() Enables or disables display of cursor.
KIGFX::VIEW_CONTROLS * controls() const
Definition: pcb_tool.h:138
virtual void Clear() override
Function Clear() Removes all the stored items from the group.
Definition: selection.h:90
void RunOnChildren(const std::function< void(BOARD_ITEM *)> &aFunction)
Function RunOnChildren.
virtual bool PlaceItem(BOARD_ITEM *aItem, BOARD_COMMIT &aCommit)
Definition: pcb_tool.cpp:271
TOOL_MENU m_menu
Menu model displayed by the tool.
Definition: pcb_tool.h:148
virtual void Update(VIEW_ITEM *aItem, int aUpdateFlags) override
For dynamic VIEWs, informs the associated VIEW that the graphical representation of this item has cha...
Definition: pcb_view.cpp:91
virtual std::unique_ptr< BOARD_ITEM > CreateItem()=0
KIGFX::PCB_VIEW * view() const
Definition: pcb_tool.h:137
OPT_TOOL_EVENT Wait(const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
Function Wait()
virtual void SetSnapping(bool aEnabled)
Function SetSnapping() Enables/disables snapping cursor to grid.
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:125
PCB_EDIT_FRAME * m_frame
Definition: pcb_tool.h:58
bool IsRotateToolEvt(const TOOL_EVENT &aEvt)
Function isRotateToolEvt()
virtual void Remove(VIEW_ITEM *aItem) override
Function Remove() Removes a VIEW_ITEM from the view.
Definition: pcb_view.cpp:74
virtual void Add(EDA_ITEM *aItem)
Definition: selection.h:74
TOOL_MANAGER * GetManager() const
Function GetManager() Returns the instance of TOOL_MANAGER that takes care of the tool.
Definition: tool_base.h:144
virtual void SnapItem(BOARD_ITEM *aItem)
Definition: pcb_tool.cpp:266
class MODULE, a footprint
Definition: typeinfo.h:89
virtual void CaptureCursor(bool aEnabled)
Function CaptureCursor() Forces the cursor to stay within the drawing panel area.
BOARD * board() const
Definition: pcb_tool.h:140
virtual void Remove(VIEW_ITEM *aItem)
Function Remove() Removes an item from the group.
Definition: view_group.cpp:61
bool IsCancelInteractive(const TOOL_EVENT &aEvt)
Function IsCancelInteractive()
virtual void Add(VIEW_ITEM *aItem)
Function Add() Adds an item to the group.
Definition: view_group.cpp:55
virtual void SetAutoPan(bool aEnabled)
Function SetAutoPan Turns on/off auto panning (this feature is used when there is a tool active (eg.
static TOOL_ACTION flip
Flipping of selected objects.
Definition: pcb_actions.h:105
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:139
void Activate()
Function Activate() Runs the tool.
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1) override
Function Add() Adds a VIEW_ITEM to the view.
Definition: pcb_view.cpp:58
MODULE * module() const
Definition: pcb_tool.h:141
int GetEventRotationAngle(const PCB_BASE_EDIT_FRAME &aFrame, const TOOL_EVENT &aEvt)
Function getEventRotationAngle()
void ShowContextMenu(SELECTION &aSelection)
Function ShowContextMenu.
Definition: tool_menu.cpp:62
VECTOR2D GetCursorPosition() const
Returns the current cursor position in world coordinates.
OPT< TOOL_EVENT > OPT_TOOL_EVENT
Definition: tool_event.h:495
virtual void Remove(EDA_ITEM *aItem)
Definition: selection.h:82

References TOOL_INTERACTIVE::Activate(), KIGFX::PCB_VIEW::Add(), KIGFX::VIEW_GROUP::Add(), SELECTION::Add(), PCB_TOOL::board(), BUT_LEFT, BUT_RIGHT, KIGFX::VIEW_CONTROLS::CaptureCursor(), SELECTION::Clear(), PCB_TOOL::controls(), INTERACTIVE_PLACER_BASE::CreateItem(), PCB_ACTIONS::flip, PCB_TOOL::frame(), KIGFX::VIEW_CONTROLS::GetCursorPosition(), TOOL_EVT_UTILS::GetEventRotationAngle(), TOOL_BASE::GetManager(), PCB_TOOL::IPO_FLIP, PCB_TOOL::IPO_PROPERTIES, PCB_TOOL::IPO_REPEAT, PCB_TOOL::IPO_ROTATE, PCB_TOOL::IPO_SINGLE_CLICK, TOOL_EVT_UTILS::IsCancelInteractive(), TOOL_EVT_UTILS::IsRotateToolEvt(), INTERACTIVE_PLACER_BASE::m_board, INTERACTIVE_PLACER_BASE::m_frame, PCB_TOOL::m_menu, INTERACTIVE_PLACER_BASE::m_modifiers, PCB_TOOL::module(), PCB_MODULE_T, INTERACTIVE_PLACER_BASE::PlaceItem(), BOARD_COMMIT::Push(), KIGFX::PCB_VIEW::Remove(), KIGFX::VIEW_GROUP::Remove(), SELECTION::Remove(), TOOL_MANAGER::RunAction(), MODULE::RunOnChildren(), PCB_ACTIONS::selectionClear, KIGFX::VIEW_CONTROLS::SetAutoPan(), KIGFX::VIEW_CONTROLS::SetSnapping(), TOOL_MENU::ShowContextMenu(), KIGFX::VIEW_CONTROLS::ShowCursor(), INTERACTIVE_PLACER_BASE::SnapItem(), TC_COMMAND, KIGFX::PCB_VIEW::Update(), PCB_TOOL::view(), TOOL_INTERACTIVE::Wait(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by MICROWAVE_TOOL::addMicrowaveFootprint(), DRAWING_TOOL::DrawVia(), and MODULE_EDITOR_TOOLS::PlacePad().

◆ Drag()

int EDIT_TOOL::Drag ( const TOOL_EVENT aEvent)

Function Drag()

todo

Definition at line 326 of file edit_tool.cpp.

327 {
328  int mode = PNS::DM_ANY;
329 
330  if( aEvent.IsAction( &PCB_ACTIONS::dragFreeAngle ) )
331  mode |= PNS::DM_FREE_ANGLE;
332 
333  invokeInlineRouter( mode );
334 
335  return 0;
336 }
static TOOL_ACTION dragFreeAngle
Definition: pcb_actions.h:142
bool IsAction(const TOOL_ACTION *aAction) const
Function IsAction() Tests if the event contains an action issued upon activation of the given TOOL_AC...
Definition: tool_event.cpp:54
bool invokeInlineRouter(int aDragMode)
Definition: edit_tool.cpp:297

References PNS::DM_ANY, PNS::DM_FREE_ANGLE, PCB_ACTIONS::dragFreeAngle, invokeInlineRouter(), and TOOL_EVENT::IsAction().

Referenced by setTransitions().

◆ Duplicate()

int EDIT_TOOL::Duplicate ( const TOOL_EVENT aEvent)

Function Duplicate()

Duplicates the current selection and starts a move action.

Definition at line 1073 of file edit_tool.cpp.

1074 {
1075  bool increment = aEvent.IsAction( &PCB_ACTIONS::duplicateIncrement );
1076 
1077  // Be sure that there is at least one item that we can modify
1079  []( const VECTOR2I& aPt, GENERAL_COLLECTOR& aCollector )
1081 
1082  if( selection.Empty() )
1083  return 0;
1084 
1085  // we have a selection to work on now, so start the tool process
1086  PCB_BASE_EDIT_FRAME* editFrame = getEditFrame<PCB_BASE_EDIT_FRAME>();
1087 
1088  std::vector<BOARD_ITEM*> new_items;
1089  new_items.reserve( selection.Size() );
1090 
1091  BOARD_ITEM* orig_item = nullptr;
1092  BOARD_ITEM* dupe_item = nullptr;
1093 
1094  // Each selected item is duplicated and pushed to new_items list
1095  // Old selection is cleared, and new items are then selected.
1096  for( auto item : selection )
1097  {
1098  if( !item )
1099  continue;
1100 
1101  orig_item = static_cast<BOARD_ITEM*>( item );
1102 
1103  if( m_editModules )
1104  {
1105  dupe_item = editFrame->GetBoard()->m_Modules->Duplicate( orig_item, increment );
1106  }
1107  else
1108  {
1109 #if 0
1110  // @TODO: see if we allow zone duplication here
1111  // Duplicate zones is especially tricky (overlaping zones must be merged)
1112  // so zones are not duplicated
1113  if( item->Type() != PCB_ZONE_AREA_T )
1114 #endif
1115  dupe_item = editFrame->GetBoard()->Duplicate( orig_item );
1116  }
1117 
1118  if( dupe_item )
1119  {
1120  // Clear the selection flag here, otherwise the SELECTION_TOOL
1121  // will not properly select it later on
1122  dupe_item->ClearSelected();
1123 
1124  new_items.push_back( dupe_item );
1125  m_commit->Add( dupe_item );
1126  }
1127  }
1128 
1129  // Clear the old selection first
1131 
1132  // Select the new items
1133  m_toolMgr->RunAction( PCB_ACTIONS::selectItems, true, &new_items );
1134 
1135  // record the new items as added
1136  if( !selection.Empty() )
1137  {
1138  editFrame->DisplayToolMsg( wxString::Format( _( "Duplicated %d item(s)" ),
1139  (int) new_items.size() ) );
1140 
1141 
1142  // If items were duplicated, pick them up
1143  // this works well for "dropping" copies around and pushes the commit
1145  Main( evt );
1146  }
1147 
1148  return 0;
1149 }
static TOOL_ACTION selectItems
Selects a list of items (specified as the event parameter)
Definition: pcb_actions.h:59
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
int Main(const TOOL_EVENT &aEvent)
Function Main()
Definition: edit_tool.cpp:338
static TOOL_ACTION move
move an item
Definition: pcb_actions.h:96
SELECTION & RequestSelection(CLIENT_SELECTION_FILTER aClientFilter, std::vector< BOARD_ITEM * > *aFiltered=NULL, bool aConfirmLockedItems=false)
Function RequestSelection()
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class,...
std::unique_ptr< BOARD_COMMIT > m_commit
Definition: edit_tool.h:223
void ClearSelected()
Definition: base_struct.h:234
const SELECTION & selection() const
Definition: pcb_tool.cpp:251
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
class ZONE_CONTAINER, a zone area
Definition: typeinfo.h:102
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:125
SELECTION_TOOL * m_selectionTool
Selection tool used for obtaining selected items
Definition: edit_tool.h:199
bool IsAction(const TOOL_ACTION *aAction) const
Function IsAction() Tests if the event contains an action issued upon activation of the given TOOL_AC...
Definition: tool_event.cpp:54
static TOOL_ACTION duplicateIncrement
Activation of the duplication tool with incrementing (e.g. pad number)
Definition: pcb_actions.h:123
Class TOOL_EVENT.
Definition: tool_event.h:168
#define EXCLUDE_TRANSIENTS
Definition: edit_tool.h:48
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:116
bool m_editModules
Definition: pcb_tool.h:150
void DisplayToolMsg(const wxString &msg)
Common, abstract interface for edit frames.
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, CPTREE &aTree)
Function Format outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:205
DLIST< MODULE > m_Modules
Definition: class_board.h:249
Used when the right click button is pressed, or when the select tool is in effect.
Definition: collectors.h:245
TOOL_EVENT MakeEvent() const
Function HasHotKey() Checks if the action has a hot key assigned.
Definition: tool_action.h:104
int Size() const
Returns the number of selected parts.
Definition: selection.h:122
BOARD * GetBoard() const
#define EXCLUDE_LOCKED_PADS
Definition: edit_tool.h:47
void EditToolSelectionFilter(GENERAL_COLLECTOR &aCollector, int aFlags)
Definition: edit_tool.cpp:173
BOARD_ITEM * Duplicate(const BOARD_ITEM *aItem, bool aAddToBoard=false)

References EDA_ITEM::ClearSelected(), EDA_DRAW_FRAME::DisplayToolMsg(), BOARD::Duplicate(), PCB_ACTIONS::duplicateIncrement, EditToolSelectionFilter(), SELECTION::Empty(), EXCLUDE_LOCKED_PADS, EXCLUDE_TRANSIENTS, Format(), PCB_BASE_FRAME::GetBoard(), TOOL_EVENT::IsAction(), m_commit, PCB_TOOL::m_editModules, BOARD::m_Modules, m_selectionTool, TOOL_BASE::m_toolMgr, Main(), TOOL_ACTION::MakeEvent(), PCB_ACTIONS::move, PCB_ZONE_AREA_T, SELECTION_TOOL::RequestSelection(), TOOL_MANAGER::RunAction(), PCB_TOOL::selection(), PCB_ACTIONS::selectionClear, PCB_ACTIONS::selectItems, and SELECTION::Size().

Referenced by setTransitions().

◆ editFootprintInFpEditor()

int EDIT_TOOL::editFootprintInFpEditor ( const TOOL_EVENT aEvent)
private

Definition at line 1436 of file edit_tool.cpp.

1437 {
1439 
1440  if( selection.Empty() )
1441  return 0;
1442 
1444 
1445  if( !mod )
1446  return 0;
1447 
1448  PCB_BASE_EDIT_FRAME* editFrame = getEditFrame<PCB_BASE_EDIT_FRAME>();
1449 
1450  editFrame->SetCurItem( mod );
1451 
1452  if( editFrame->GetCurItem()->GetTimeStamp() == 0 ) // Module Editor needs a non null timestamp
1453  {
1454  editFrame->GetCurItem()->SetTimeStamp( GetNewTimeStamp() );
1455  editFrame->OnModify();
1456  }
1457 
1459 
1460  editor->Load_Module_From_BOARD( (MODULE*) editFrame->GetCurItem() );
1461  editFrame->SetCurItem( NULL ); // the current module could be deleted by
1462 
1463  editor->Show( true );
1464  editor->Raise(); // Iconize( false );
1465 
1466  if( selection.IsHover() )
1468 
1469  return 0;
1470 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
KIWAY & Kiway() const
Function Kiway returns a reference to the KIWAY that this object has an opportunity to participate in...
Definition: kiway_player.h:60
bool IsHover() const
Definition: selection.h:69
SELECTION & RequestSelection(CLIENT_SELECTION_FILTER aClientFilter, std::vector< BOARD_ITEM * > *aFiltered=NULL, bool aConfirmLockedItems=false)
Function RequestSelection()
const SELECTION & selection() const
Definition: pcb_tool.cpp:251
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
void SetCurItem(BOARD_ITEM *aItem, bool aDisplayInfo=true)
Function SetCurItem sets the currently selected item and displays it in the MsgPanel.
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:125
SELECTION_TOOL * m_selectionTool
Selection tool used for obtaining selected items
Definition: edit_tool.h:199
timestamp_t GetNewTimeStamp()
Definition: common.cpp:216
VTBL_ENTRY KIWAY_PLAYER * Player(FRAME_T aFrameType, bool doCreate=true, wxTopLevelWindow *aParent=NULL)
Function Player returns the KIWAY_PLAYER* given a FRAME_T.
Definition: kiway.cpp:300
timestamp_t GetTimeStamp() const
Definition: base_struct.h:207
bool Load_Module_From_BOARD(MODULE *Module)
Load in Modedit a footprint from the main board.
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:116
virtual void OnModify()
Function OnModify Virtual Must be called after a change in order to set the "modify" flag of the curr...
Common, abstract interface for edit frames.
T * FirstOfKind() const
Definition: selection.h:163
static void FootprintFilter(const VECTOR2I &, GENERAL_COLLECTOR &aCollector)
Function FootprintFilter()
Definition: edit_tool.cpp:1253
BOARD_ITEM * GetCurItem()
#define mod(a, n)
Definition: greymap.cpp:24
void SetTimeStamp(timestamp_t aNewTimeStamp)
Definition: base_struct.h:206

References SELECTION::Empty(), SELECTION::FirstOfKind(), FootprintFilter(), FRAME_PCB_MODULE_EDITOR, PCB_BASE_FRAME::GetCurItem(), GetNewTimeStamp(), EDA_ITEM::GetTimeStamp(), SELECTION::IsHover(), KIWAY_HOLDER::Kiway(), FOOTPRINT_EDIT_FRAME::Load_Module_From_BOARD(), m_selectionTool, TOOL_BASE::m_toolMgr, mod, PCB_BASE_FRAME::OnModify(), KIWAY::Player(), SELECTION_TOOL::RequestSelection(), TOOL_MANAGER::RunAction(), PCB_TOOL::selection(), PCB_ACTIONS::selectionClear, PCB_BASE_FRAME::SetCurItem(), and EDA_ITEM::SetTimeStamp().

Referenced by setTransitions().

◆ EditingModules()

bool PCB_TOOL::EditingModules ( ) const
inlineinherited

Definition at line 102 of file pcb_tool.h.

103  {
104  return m_editModules;
105  }
bool m_editModules
Definition: pcb_tool.h:150

References PCB_TOOL::m_editModules.

Referenced by BOARD_COMMIT::BOARD_COMMIT(), Flip(), PAD_TOOL::Init(), Main(), MeasureTool(), Mirror(), MoveExact(), and Rotate().

◆ evActivate()

const TOOL_EVENT TOOL_INTERACTIVE::evActivate ( std::string  aToolName = "")
protectedinherited

functions below are not yet implemented - their interface may change

◆ evButtonDown()

const TOOL_EVENT TOOL_INTERACTIVE::evButtonDown ( int  aButton = BUT_ANY)
protectedinherited

◆ evButtonUp()

const TOOL_EVENT TOOL_INTERACTIVE::evButtonUp ( int  aButton = BUT_ANY)
protectedinherited

◆ evClick()

const TOOL_EVENT TOOL_INTERACTIVE::evClick ( int  aButton = BUT_ANY)
protectedinherited

◆ evCommand() [1/2]

const TOOL_EVENT TOOL_INTERACTIVE::evCommand ( int  aCommandId = -1)
protectedinherited

◆ evCommand() [2/2]

const TOOL_EVENT TOOL_INTERACTIVE::evCommand ( std::string  aCommandStr = "")
protectedinherited

◆ evDrag()

const TOOL_EVENT TOOL_INTERACTIVE::evDrag ( int  aButton = BUT_ANY)
protectedinherited

◆ evMotion()

const TOOL_EVENT TOOL_INTERACTIVE::evMotion ( )
protectedinherited

◆ ExchangeFootprints()

int EDIT_TOOL::ExchangeFootprints ( const TOOL_EVENT aEvent)

Function ExchangeFootprints()

Invoke the dialog used to update or exchange the footprints used for modules. The mode depends on the PCB_ACTIONS held by the TOOL_EVENT.

Definition at line 1265 of file edit_tool.cpp.

1266 {
1268 
1269  bool updateMode = aEvent.IsAction( &PCB_ACTIONS::updateFootprints );
1270 
1271  MODULE* mod = (selection.Empty() ? nullptr : selection.FirstOfKind<MODULE> () );
1272 
1273  frame()->SetCurItem( mod );
1274 
1275  // Footprint exchange could remove modules, so they have to be
1276  // removed from the selection first
1278 
1279  // invoke the exchange dialog process
1280  {
1281  DIALOG_EXCHANGE_FOOTPRINTS dialog( frame(), mod, updateMode, mod != nullptr );
1282  dialog.ShowQuasiModal();
1283  }
1284 
1285  return 0;
1286 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
SELECTION & RequestSelection(CLIENT_SELECTION_FILTER aClientFilter, std::vector< BOARD_ITEM * > *aFiltered=NULL, bool aConfirmLockedItems=false)
Function RequestSelection()
const SELECTION & selection() const
Definition: pcb_tool.cpp:251
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
void SetCurItem(BOARD_ITEM *aItem, bool aDisplayInfo=true)
Function SetCurItem sets the currently selected item and displays it in the MsgPanel.
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:125
SELECTION_TOOL * m_selectionTool
Selection tool used for obtaining selected items
Definition: edit_tool.h:199
bool IsAction(const TOOL_ACTION *aAction) const
Function IsAction() Tests if the event contains an action issued upon activation of the given TOOL_AC...
Definition: tool_event.cpp:54
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:116
static TOOL_ACTION updateFootprints
Update footprints to reflect any changes in the library.
Definition: pcb_actions.h:126
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:139
T * FirstOfKind() const
Definition: selection.h:163
static void FootprintFilter(const VECTOR2I &, GENERAL_COLLECTOR &aCollector)
Function FootprintFilter()
Definition: edit_tool.cpp:1253
#define mod(a, n)
Definition: greymap.cpp:24

References SELECTION::Empty(), SELECTION::FirstOfKind(), FootprintFilter(), PCB_TOOL::frame(), TOOL_EVENT::IsAction(), m_selectionTool, TOOL_BASE::m_toolMgr, mod, SELECTION_TOOL::RequestSelection(), TOOL_MANAGER::RunAction(), PCB_TOOL::selection(), PCB_ACTIONS::selectionClear, PCB_BASE_FRAME::SetCurItem(), DIALOG_SHIM::ShowQuasiModal(), and PCB_ACTIONS::updateFootprints.

Referenced by setTransitions().

◆ Flip()

int EDIT_TOOL::Flip ( const TOOL_EVENT aEvent)

Function Flip()

Rotates currently selected items. The rotation point is the current cursor position.

Definition at line 842 of file edit_tool.cpp.

843 {
845  []( const VECTOR2I& aPt, GENERAL_COLLECTOR& aCollector )
846  { EditToolSelectionFilter( aCollector, EXCLUDE_LOCKED_PADS | EXCLUDE_TRANSIENTS ); }, nullptr, ! m_dragging );
847 
848  if( selection.Empty() )
849  return 0;
850 
852  auto modPoint = selection.GetReferencePoint();
853 
854  // When editing modules, all items have the same parent
855  if( EditingModules() )
856  {
857  m_commit->Modify( selection.Front() );
858  }
859 
860  for( auto item : selection )
861  {
862  if( !item->IsNew() && !EditingModules() )
863  m_commit->Modify( item );
864 
865  static_cast<BOARD_ITEM*>( item )->Flip( modPoint );
866  }
867 
868  if( !m_dragging )
869  m_commit->Push( _( "Flip" ) );
870 
871  if( selection.IsHover() && !m_dragging )
873 
875 
876  if( m_dragging )
878 
879  return 0;
880 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
VECTOR2I GetReferencePoint() const
Definition: selection.h:200
bool IsHover() const
Definition: selection.h:69
SELECTION & RequestSelection(CLIENT_SELECTION_FILTER aClientFilter, std::vector< BOARD_ITEM * > *aFiltered=NULL, bool aConfirmLockedItems=false)
Function RequestSelection()
std::unique_ptr< BOARD_COMMIT > m_commit
Definition: edit_tool.h:223
bool updateModificationPoint(SELECTION &aSelection)
Returns the right modification point (e.g.
Definition: edit_tool.cpp:1413
const SELECTION & selection() const
Definition: pcb_tool.cpp:251
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:125
SELECTION_TOOL * m_selectionTool
Selection tool used for obtaining selected items
Definition: edit_tool.h:199
static TOOL_ACTION selectionModified
Modified selection notification.
Definition: pcb_actions.h:114
bool m_dragging
Flag determining if anything is being dragged right now
Definition: edit_tool.h:202
#define EXCLUDE_TRANSIENTS
Definition: edit_tool.h:48
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:116
Used when the right click button is pressed, or when the select tool is in effect.
Definition: collectors.h:245
bool EditingModules() const
Definition: pcb_tool.h:102
static TOOL_ACTION updateLocalRatsnest
Definition: pcb_actions.h:388
#define EXCLUDE_LOCKED_PADS
Definition: edit_tool.h:47
void EditToolSelectionFilter(GENERAL_COLLECTOR &aCollector, int aFlags)
Definition: edit_tool.cpp:173
EDA_ITEM * Front() const
Definition: selection.h:152

References PCB_TOOL::EditingModules(), EditToolSelectionFilter(), SELECTION::Empty(), EXCLUDE_LOCKED_PADS, EXCLUDE_TRANSIENTS, SELECTION::Front(), SELECTION::GetReferencePoint(), SELECTION::IsHover(), m_commit, m_dragging, m_selectionTool, TOOL_BASE::m_toolMgr, SELECTION_TOOL::RequestSelection(), TOOL_MANAGER::RunAction(), PCB_TOOL::selection(), PCB_ACTIONS::selectionClear, PCB_ACTIONS::selectionModified, PCB_ACTIONS::updateLocalRatsnest, and updateModificationPoint().

Referenced by setTransitions().

◆ FootprintFilter()

void EDIT_TOOL::FootprintFilter ( const VECTOR2I ,
GENERAL_COLLECTOR aCollector 
)
static

Function FootprintFilter()

A selection filter which prunes the selection to contain only items of type PCB_MODULE_T

Definition at line 1253 of file edit_tool.cpp.

1254 {
1255  for( int i = aCollector.GetCount() - 1; i >= 0; i-- )
1256  {
1257  BOARD_ITEM* item = static_cast<BOARD_ITEM*>( aCollector[i] );
1258 
1259  if( item->Type() != PCB_MODULE_T )
1260  aCollector.Remove( i );
1261  }
1262 }
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class,...
void Remove(int aIndex)
Function Remove removes the item at aIndex (first position is 0);.
Definition: collector.h:143
int GetCount() const
Function GetCount returns the number of objects in the list.
Definition: collector.h:114
class MODULE, a footprint
Definition: typeinfo.h:89
size_t i
Definition: json11.cpp:597
KICAD_T Type() const
Function Type()
Definition: base_struct.h:201

References COLLECTOR::GetCount(), i, PCB_MODULE_T, COLLECTOR::Remove(), and EDA_ITEM::Type().

Referenced by editFootprintInFpEditor(), ExchangeFootprints(), and showLocalRatsnest().

◆ frame()

PCB_EDIT_FRAME* PCB_TOOL::frame ( ) const
inlineprotectedinherited

Definition at line 139 of file pcb_tool.h.

139 { return getEditFrame<PCB_EDIT_FRAME>(); }

Referenced by POINT_EDITOR::addCorner(), MICROWAVE_TOOL::addMicrowaveFootprint(), AUTOPLACE_TOOL::autoplace(), PCB_TOOL::canvas(), changeTrackWidthOnClick(), PNS::TOOL_BASE::checkSnap(), PCB_EDITOR_CONTROL::ClearHighlight(), PAD_TOOL::copyPadSettings(), MICROWAVE_TOOL::createInductorBetween(), MODULE_EDITOR_TOOLS::CreatePadFromShapes(), ROUTER_TOOL::CustomTrackWidthDialog(), PCB_TOOL::displayOptions(), doCopyToClipboard(), PCB_TOOL::doInteractiveItemPlacement(), ROUTER_TOOL::DpDimensionsDialog(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawDimension(), MICROWAVE_TOOL::drawMicrowaveInductor(), DRAWING_TOOL::drawSegment(), DRAWING_TOOL::DrawVia(), DRAWING_TOOL::drawZone(), MODULE_EDITOR_TOOLS::EnumeratePads(), ExchangeFootprints(), MODULE_EDITOR_TOOLS::ExplodePadToShapes(), ROUTER_TOOL::finishInteractive(), PAD_TOOL::Init(), Init(), SELECTION_TOOL::Init(), ROUTER_TOOL::InlineBreakTrack(), ROUTER_TOOL::InlineDrag(), PICKER_TOOL::Main(), Main(), LENGTH_TUNER_TOOL::mainLoop(), ROUTER_TOOL::mainLoop(), LENGTH_TUNER_TOOL::meanderSettingsDialog(), MeasureTool(), POINT_EDITOR::OnSelectionChange(), ROUTER_TOOL::onViaCommand(), PCBNEW_CONTROL::PasteItemsFromClipboard(), PAD_TOOL::pastePadProperties(), ROUTER_TOOL::performDragging(), ROUTER_TOOL::performRouting(), LENGTH_TUNER_TOOL::performTuning(), pickCopyReferencePoint(), MODULE_EDITOR_TOOLS::PlacePad(), DRAWING_TOOL::PlaceText(), ROUTER_TOOL::prepareInteractive(), PAD_TOOL::pushPadSettings(), POSITION_RELATIVE_TOOL::RelativeItemSelectionMove(), Remove(), POINT_EDITOR::removeCorner(), PNS::TOOL_BASE::Reset(), ROUTER_TOOL::RouteDiffPair(), ROUTER_TOOL::RouteSingleTrace(), POSITION_RELATIVE_TOOL::SelectPositionRelativeItem(), ROUTER_TOOL::SettingsDialog(), ROUTER_TOOL::switchLayerOnViaPlacement(), LENGTH_TUNER_TOOL::TuneDiffPair(), LENGTH_TUNER_TOOL::TuneDiffPairSkew(), LENGTH_TUNER_TOOL::TuneSingleTrace(), POINT_EDITOR::updateItem(), ZONE_FILLER_TOOL::ZoneFill(), and ZONE_FILLER_TOOL::ZoneFillAll().

◆ GetCurrentCommit()

BOARD_COMMIT* EDIT_TOOL::GetCurrentCommit ( ) const
inline

Definition at line 192 of file edit_tool.h.

193  {
194  return m_commit.get();
195  }
std::unique_ptr< BOARD_COMMIT > m_commit
Definition: edit_tool.h:223

References m_commit.

◆ getEditFrame()

template<typename T >
T* TOOL_BASE::getEditFrame ( ) const
inlineprotectedinherited

Function getEditFrame()

Returns the application window object, casted to requested user type.

Definition at line 188 of file tool_base.h.

189  {
190  return static_cast<T*>( getEditFrameInt() );
191  }
wxWindow * getEditFrameInt() const
Definition: tool_base.cpp:47

References TOOL_BASE::getEditFrameInt().

Referenced by ZONE_CREATE_HELPER::commitZone(), ZONE_CREATE_HELPER::createNewZone(), and TOOL_SETTINGS::getConfigBase().

◆ GetId()

TOOL_ID TOOL_BASE::GetId ( ) const
inlineinherited

Function GetId() Returns the unique identifier of the tool.

The identifier is set by an instance of TOOL_MANAGER.

Returns
Identifier of the tool.

Definition at line 122 of file tool_base.h.

123  {
124  return m_toolId;
125  }
TOOL_ID m_toolId
Unique identifier for the tool, assigned by a TOOL_MANAGER instance.
Definition: tool_base.h:210

References TOOL_BASE::m_toolId.

Referenced by TOOL_MANAGER::finishTool(), TOOL_MANAGER::InitTools(), TOOL_MANAGER::isActive(), TOOL_MANAGER::RegisterTool(), ACTION_MANAGER::RunHotKey(), TOOL_MANAGER::runTool(), and TOOL_MANAGER::saveViewControls().

◆ GetManager()

TOOL_MANAGER* TOOL_BASE::GetManager ( ) const
inlineinherited

Function GetManager() Returns the instance of TOOL_MANAGER that takes care of the tool.

Returns
Instance of the TOOL_MANAGER. If there is no TOOL_MANAGER associated, it returns NULL.

Definition at line 144 of file tool_base.h.

145  {
146  return m_toolMgr;
147  }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215

References TOOL_BASE::m_toolMgr.

Referenced by BOARD_COMMIT::BOARD_COMMIT(), ZONE_CREATE_HELPER::createNewZone(), PCB_TOOL::doInteractiveItemPlacement(), CONTEXT_MENU::getToolManager(), CONTEXT_MENU::onMenuEvent(), and ZONE_CREATE_HELPER::performZoneCutout().

◆ getModel()

template<typename T >
T* TOOL_BASE::getModel ( ) const
inlineprotectedinherited

Function getModel()

Returns the model object if it matches the requested type.

Definition at line 199 of file tool_base.h.

200  {
201  EDA_ITEM* m = getModelInt();
202 
203  return static_cast<T*>( m );
204  }
EDA_ITEM * getModelInt() const
Definition: tool_base.cpp:53
Class EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boa...
Definition: base_struct.h:154

References TOOL_BASE::getModelInt().

Referenced by ZONE_CREATE_HELPER::commitZone(), ZONE_CREATE_HELPER::createNewZone(), ZONE_CREATE_HELPER::createZoneFromExisting(), and ZONE_CREATE_HELPER::performZoneCutout().

◆ GetName()

const std::string& TOOL_BASE::GetName ( void  ) const
inlineinherited

Function GetName() Returns the name of the tool.

Tool names are expected to obey the format: application.ToolName (eg. pcbnew.InteractiveSelection).

Returns
The name of the tool.

Definition at line 133 of file tool_base.h.

134  {
135  return m_toolName;
136  }
std::string m_toolName
Name of the tool.
Definition: tool_base.h:214

References TOOL_BASE::m_toolName.

Referenced by TOOL_SETTINGS::getKeyName(), TOOL_MANAGER::InitTools(), TOOL_MANAGER::invokeTool(), and TOOL_MANAGER::RegisterTool().

◆ GetSettings()

TOOL_SETTINGS & TOOL_BASE::GetSettings ( )
inherited

Definition at line 77 of file tool_base.cpp.

78 {
79  return m_toolSettings;
80 }
TOOL_SETTINGS m_toolSettings
Definition: tool_base.h:216

References TOOL_BASE::m_toolSettings.

Referenced by ROUTER_TOOL::Init(), GERBVIEW_SELECTION_TOOL::selectable(), and ROUTER_TOOL::~ROUTER_TOOL().

◆ GetType()

TOOL_TYPE TOOL_BASE::GetType ( ) const
inlineinherited

Function GetType() Returns the type of the tool.

Returns
The type of the tool.

Definition at line 111 of file tool_base.h.

112  {
113  return m_type;
114  }
TOOL_TYPE m_type
Stores the type of the tool.
Definition: tool_base.h:207

References TOOL_BASE::m_type.

Referenced by TOOL_MANAGER::finishTool(), TOOL_MANAGER::InvokeTool(), TOOL_MANAGER::ResetTools(), and TOOL_MANAGER::runTool().

◆ getView()

KIGFX::VIEW * TOOL_BASE::getView ( ) const
protectedinherited

Function getView()

Returns the instance of VIEW object used in the application. It allows tools to draw.

Returns
The instance of VIEW.

Definition at line 35 of file tool_base.cpp.

36 {
37  return m_toolMgr->GetView();
38 }
KIGFX::VIEW * GetView() const
Definition: tool_manager.h:252
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215

References TOOL_MANAGER::GetView(), and TOOL_BASE::m_toolMgr.

Referenced by ALIGN_DISTRIBUTE_TOOL::AlignLeft(), ALIGN_DISTRIBUTE_TOOL::AlignRight(), COMMON_TOOLS::CenterContents(), PCB_EDITOR_CONTROL::CrossProbeSchToPcb(), COMMON_TOOLS::CursorControl(), GERBVIEW_SELECTION_TOOL::disambiguationMenu(), SELECTION_TOOL::doSelectionMenu(), MICROWAVE_TOOL::drawMicrowaveInductor(), PCB_EDITOR_CONTROL::DrillOrigin(), MODULE_EDITOR_TOOLS::EnumeratePads(), SELECTION_TOOL::findCallback(), ROUTER_TOOL::getStartLayer(), PCBNEW_CONTROL::GridResetOrigin(), PCBNEW_CONTROL::GridSetOrigin(), SELECTION_TOOL::guessSelectionCandidates(), SELECTION_TOOL::highlight(), GERBVIEW_CONTROL::HighlightControl(), PNS::TOOL_BASE::highlightNet(), PCBNEW_CONTROL::LayerAlphaDec(), PCBNEW_CONTROL::LayerAlphaInc(), CVPCB_SELECTION_TOOL::MeasureTool(), GERBVIEW_SELECTION_TOOL::MeasureTool(), MeasureTool(), MoveExact(), POINT_EDITOR::OnSelectionChange(), COMMON_TOOLS::PanControl(), PNS::TOOL_BASE::pickSingleItem(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), Remove(), PCB_EDITOR_CONTROL::Reset(), PNS::TOOL_BASE::Reset(), PCBNEW_CONTROL::Reset(), DRAWING_TOOL::Reset(), GERBVIEW_SELECTION_TOOL::Reset(), SELECTION_TOOL::Reset(), GERBVIEW_SELECTION_TOOL::select(), GERBVIEW_SELECTION_TOOL::selectable(), SELECTION_TOOL::selectable(), GERBVIEW_SELECTION_TOOL::selectionContains(), SELECTION_TOOL::selectionContains(), GERBVIEW_SELECTION_TOOL::selectMultiple(), SELECTION_TOOL::selectMultiple(), ZOOM_TOOL::selectRegion(), GERBVIEW_SELECTION_TOOL::selectVisually(), SELECTION_TOOL::unhighlight(), GERBVIEW_SELECTION_TOOL::unselect(), GERBVIEW_SELECTION_TOOL::unselectVisually(), POINT_EDITOR::updateEditedPoint(), COMMON_TOOLS::updateGrid(), PCBNEW_CONTROL::updateGrid(), POINT_EDITOR::updatePoints(), SELECTION_TOOL::updateSelection(), PNS::TOOL_BASE::updateStartItem(), PCB_TOOL::view(), COMMON_TOOLS::ZoomFitScreen(), GERBVIEW_SELECTION_TOOL::zoomFitSelection(), SELECTION_TOOL::zoomFitSelection(), CVPCB_SELECTION_TOOL::~CVPCB_SELECTION_TOOL(), GERBVIEW_SELECTION_TOOL::~GERBVIEW_SELECTION_TOOL(), and SELECTION_TOOL::~SELECTION_TOOL().

◆ getViewControls()

KIGFX::VIEW_CONTROLS * TOOL_BASE::getViewControls ( ) const
protectedinherited

Function getViewControls()

Returns the instance of VIEW_CONTROLS object used in the application. It allows tools to read & modify user input and its settings (eg. show cursor, enable snapping to grid, etc.)

Returns
The instance of VIEW_CONTROLS.

Definition at line 41 of file tool_base.cpp.

42 {
43  return m_toolMgr->GetViewControls();
44 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
KIGFX::VIEW_CONTROLS * GetViewControls() const
Definition: tool_manager.h:257

References TOOL_MANAGER::GetViewControls(), and TOOL_BASE::m_toolMgr.

Referenced by POINT_EDITOR::addCorner(), PCB_TOOL::controls(), COMMON_TOOLS::CursorControl(), COMMON_TOOLS::doZoomToPreset(), MICROWAVE_TOOL::drawMicrowaveInductor(), MODULE_EDITOR_TOOLS::EnumeratePads(), SELECTION_TOOL::findMove(), PCB_EDITOR_CONTROL::HighlightNet(), PCB_EDITOR_CONTROL::HighlightNetCursor(), PICKER_TOOL::Main(), CVPCB_SELECTION_TOOL::Main(), GERBVIEW_SELECTION_TOOL::Main(), Main(), ROUTER_TOOL::mainLoop(), CVPCB_SELECTION_TOOL::MeasureTool(), GERBVIEW_SELECTION_TOOL::MeasureTool(), MeasureTool(), POINT_EDITOR::OnSelectionChange(), ROUTER_TOOL::performDragging(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), POINT_EDITOR::Reset(), DRAWING_TOOL::Reset(), CVPCB_CONTROL::ResetCoords(), GERBVIEW_CONTROL::ResetCoords(), PCBNEW_CONTROL::ResetCoords(), GERBVIEW_SELECTION_TOOL::selectCursor(), SELECTION_TOOL::selectCursor(), GERBVIEW_SELECTION_TOOL::selectMultiple(), SELECTION_TOOL::selectMultiple(), ZOOM_TOOL::selectRegion(), ALIGN_DISTRIBUTE_TOOL::selectTarget(), PICKER_TOOL::setControls(), POINT_EDITOR::setEditedPoint(), updateModificationPoint(), and COMMON_TOOLS::ZoomCenter().

◆ Go()

template<class T >
void TOOL_INTERACTIVE::Go ( int(T::*)(const TOOL_EVENT &)  aStateFunc,
const TOOL_EVENT_LIST aConditions = TOOL_EVENTTC_ANYTA_ANY ) 
)
inherited

◆ Init()

bool EDIT_TOOL::Init ( )
overridevirtual

Function Init() Init() is called once upon a registration of the tool.

Returns
True if the initialization went fine, false - otherwise.

Reimplemented from PCB_TOOL.

Definition at line 230 of file edit_tool.cpp.

231 {
232  // Find the selection tool, so they can cooperate
233  m_selectionTool = static_cast<SELECTION_TOOL*>( m_toolMgr->FindTool( "pcbnew.InteractiveSelection" ) );
234 
235  if( !m_selectionTool )
236  {
237  DisplayError( NULL, _( "pcbnew.InteractiveSelection tool is not available" ) );
238  return false;
239  }
240 
241  auto editingModuleCondition = [ this ] ( const SELECTION& aSelection ) {
242  return m_editModules;
243  };
244 
245  auto singleModuleCondition = SELECTION_CONDITIONS::OnlyType( PCB_MODULE_T )
247 
248  auto noActiveToolCondition = [ this ] ( const SELECTION& aSelection ) {
249  return ( frame()->GetToolId() == ID_NO_TOOL_SELECTED );
250  };
251 
252  // Add context menu entries that are displayed when selection tool is active
254 
266 
267 
272 
273 
277  // Selection tool handles the context menu for some other tools, such as the Picker.
278  // Don't add things like Paste when another tool is active.
279  menu.AddItem( PCB_ACTIONS::pasteFromClipboard, noActiveToolCondition );
280 
281  // Mirror only available in modedit
282  menu.AddSeparator( editingModuleCondition && SELECTION_CONDITIONS::NotEmpty );
283  menu.AddItem( PCB_ACTIONS::mirror, editingModuleCondition && SELECTION_CONDITIONS::NotEmpty );
286 
287  // Footprint actions
288  menu.AddSeparator( singleModuleCondition );
289  menu.AddItem( PCB_ACTIONS::editFootprintInFpEditor, singleModuleCondition );
290  menu.AddItem( PCB_ACTIONS::updateFootprints, singleModuleCondition );
291  menu.AddItem( PCB_ACTIONS::exchangeFootprints, singleModuleCondition );
292 
293  return true;
294 }
static TOOL_ACTION move
move an item
Definition: pcb_actions.h:96
static const KICAD_T Tracks[]
A scan list for only TRACKS.
Definition: collectors.h:318
void AddSeparator(const SELECTION_CONDITION &aCondition=SELECTION_CONDITIONS::ShowAlways, int aOrder=ANY_ORDER)
Function AddSeparator()
CONDITIONAL_MENU & GetMenu()
Function GetMenu.
Definition: tool_menu.cpp:49
static TOOL_ACTION dragFreeAngle
Definition: pcb_actions.h:142
static TOOL_ACTION explodePadToShapes
Definition: pcb_actions.h:317
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
static TOOL_ACTION properties
Activation of the edit tool.
Definition: pcb_actions.h:111
static TOOL_ACTION drag45Degree
Definition: pcb_actions.h:141
static TOOL_ACTION mirror
Mirroring of selected items.
Definition: pcb_actions.h:108
TOOL_BASE * FindTool(int aId) const
Function FindTool() Searches for a tool with given ID.
SELECTION_TOOL * m_selectionTool
Selection tool used for obtaining selected items
Definition: edit_tool.h:199
static SELECTION_CONDITION Count(int aNumber)
Function Count Creates a functor that tests if the number of selected items is equal to the value giv...
static TOOL_ACTION pasteFromClipboard
Paste from clipboard.
Definition: pcb_actions.h:329
static bool NotEmpty(const SELECTION &aSelection)
Function NotEmpty Tests if there are any items selected.
static TOOL_ACTION moveExact
Activation of the exact move tool.
Definition: pcb_actions.h:117
static TOOL_ACTION duplicate
Activation of the duplication tool.
Definition: pcb_actions.h:120
class MODULE, a footprint
Definition: typeinfo.h:89
static TOOL_ACTION rotateCw
Rotation of selected objects clockwise.
Definition: pcb_actions.h:99
static SELECTION_CONDITION OnlyTypes(const std::vector< KICAD_T > &aTypes)
Function OnlyTypes Creates a functor that tests if the selected items are only of given types.
static TOOL_ACTION createArray
Tool for creating an array of objects.
Definition: pcb_actions.h:323
static TOOL_ACTION exchangeFootprints
Exchange footprints of modules.
Definition: pcb_actions.h:129
static TOOL_ACTION cutToClipboard
Paste from clipboard.
Definition: pcb_actions.h:332
static TOOL_ACTION copyToClipboard
Copy selected items to clipboard.
Definition: pcb_actions.h:326
static TOOL_ACTION inlineBreakTrack
Breaks track when router is not activated.
Definition: pcb_actions.h:139
bool m_editModules
Definition: pcb_tool.h:150
static TOOL_ACTION updateFootprints
Update footprints to reflect any changes in the library.
Definition: pcb_actions.h:126
static TOOL_ACTION rotateCcw
Rotation of selected objects counter-clockwise.
Definition: pcb_actions.h:102
static TOOL_ACTION createPadFromShapes
Definition: pcb_actions.h:316
static TOOL_ACTION flip
Flipping of selected objects.
Definition: pcb_actions.h:105
void AddItem(const TOOL_ACTION &aAction, const SELECTION_CONDITION &aCondition=SELECTION_CONDITIONS::ShowAlways, int aOrder=ANY_ORDER)
Function AddItem()
static TOOL_ACTION editFootprintInFpEditor
Definition: pcb_actions.h:396
static SELECTION_CONDITION OnlyType(KICAD_T aType)
Function OnlyType Creates a functor that tests if the selected items are only of given type.
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:139
static TOOL_ACTION positionRelative
Activation of the position relative tool.
Definition: pcb_actions.h:259
static TOOL_ACTION remove
Deleting a BOARD_ITEM.
Definition: pcb_actions.h:132
void DisplayError(wxWindow *parent, const wxString &text, int displaytime)
Function DisplayError displays an error or warning message box with aMessage.
Definition: confirm.cpp:243
int GetToolId() const
Definition: draw_frame.h:526

References CONDITIONAL_MENU::AddItem(), CONDITIONAL_MENU::AddSeparator(), PCB_ACTIONS::copyToClipboard, SELECTION_CONDITIONS::Count(), PCB_ACTIONS::createArray, PCB_ACTIONS::createPadFromShapes, PCB_ACTIONS::cutToClipboard, DisplayError(), PCB_ACTIONS::drag45Degree, PCB_ACTIONS::dragFreeAngle, PCB_ACTIONS::duplicate, PCB_ACTIONS::editFootprintInFpEditor, PCB_ACTIONS::exchangeFootprints, PCB_ACTIONS::explodePadToShapes, TOOL_MANAGER::FindTool(), PCB_ACTIONS::flip, PCB_TOOL::frame(), TOOL_MENU::GetMenu(), EDA_DRAW_FRAME::GetToolId(), SELECTION_TOOL::GetToolMenu(), ID_NO_TOOL_SELECTED, PCB_ACTIONS::inlineBreakTrack, PCB_TOOL::m_editModules, m_selectionTool, TOOL_BASE::m_toolMgr, PCB_ACTIONS::mirror, PCB_ACTIONS::move, PCB_ACTIONS::moveExact, SELECTION_CONDITIONS::NotEmpty(), SELECTION_CONDITIONS::OnlyType(), SELECTION_CONDITIONS::OnlyTypes(), PCB_ACTIONS::pasteFromClipboard, PCB_MODULE_T, PCB_ACTIONS::positionRelative, PCB_ACTIONS::properties, PCB_ACTIONS::remove, PCB_ACTIONS::rotateCcw, PCB_ACTIONS::rotateCw, GENERAL_COLLECTOR::Tracks, and PCB_ACTIONS::updateFootprints.

◆ invokeInlineRouter()

bool EDIT_TOOL::invokeInlineRouter ( int  aDragMode)
private

Definition at line 297 of file edit_tool.cpp.

298 {
299  auto theRouter = static_cast<ROUTER_TOOL*>( m_toolMgr->FindTool( "pcbnew.InteractiveRouter" ) );
300 
301  if( !theRouter )
302  return false;
303 
304  // make sure we don't accidentally invoke inline routing mode while the router is already active!
305  if( theRouter->IsToolActive() )
306  return false;
307 
308  if( theRouter->CanInlineDrag() )
309  {
311  return true;
312  }
313 
314  return false;
315 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:125
TOOL_BASE * FindTool(int aId) const
Function FindTool() Searches for a tool with given ID.
static TOOL_ACTION routerInlineDrag
Activation of the Push and Shove router (inline dragging mode)
Definition: pcb_actions.h:223
static ROUTER * theRouter
Definition: pns_router.cpp:59

References TOOL_MANAGER::FindTool(), TOOL_BASE::m_toolMgr, PCB_ACTIONS::routerInlineDrag, TOOL_MANAGER::RunAction(), and PNS::theRouter.

Referenced by Drag(), and Main().

◆ isInteractiveDragEnabled()

bool EDIT_TOOL::isInteractiveDragEnabled ( ) const
private

Definition at line 318 of file edit_tool.cpp.

319 {
320  auto theRouter = static_cast<ROUTER_TOOL*>( m_toolMgr->FindTool( "pcbnew.InteractiveRouter" ) );
321 
322  return theRouter ? theRouter->Router()->Settings().InlineDragEnabled() : false;
323 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
TOOL_BASE * FindTool(int aId) const
Function FindTool() Searches for a tool with given ID.
static ROUTER * theRouter
Definition: pns_router.cpp:59
ROUTING_SETTINGS & Settings()
Definition: pns_router.h:187

References TOOL_MANAGER::FindTool(), PNS::ROUTING_SETTINGS::InlineDragEnabled(), TOOL_BASE::m_toolMgr, PNS::ROUTER::Settings(), and PNS::theRouter.

Referenced by Main().

◆ IsToolActive()

bool TOOL_BASE::IsToolActive ( ) const
inherited

Definition at line 30 of file tool_base.cpp.

31 {
32  return m_toolMgr->IsToolActive( m_toolId );
33 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
TOOL_ID m_toolId
Unique identifier for the tool, assigned by a TOOL_MANAGER instance.
Definition: tool_base.h:210
bool IsToolActive(TOOL_ID aId) const
Function IsToolActive() Returns true if a tool with given id is active (executing)

References TOOL_MANAGER::IsToolActive(), TOOL_BASE::m_toolId, and TOOL_BASE::m_toolMgr.

◆ Main()

int EDIT_TOOL::Main ( const TOOL_EVENT aEvent)

Function Main()

Main loop in which events are handled.

Parameters
aEventis the handled event.

Definition at line 338 of file edit_tool.cpp.

339 {
341  PCB_BASE_EDIT_FRAME* editFrame = getEditFrame<PCB_BASE_EDIT_FRAME>();
342  VECTOR2I originalCursorPos = controls->GetCursorPosition();
343 
344  // Be sure that there is at least one item that we can modify. If nothing was selected before,
345  // try looking for the stuff under mouse cursor (i.e. Kicad old-style hover selection)
347  []( const VECTOR2I& aPt, GENERAL_COLLECTOR& aCollector )
348  { EditToolSelectionFilter( aCollector, EXCLUDE_TRANSIENTS ); } );
349 
350  if( m_dragging || selection.Empty() )
351  return 0;
352 
353  LSET item_layers = static_cast<BOARD_ITEM*>( selection.Front() )->GetLayerSet();
354  bool unselect = selection.IsHover(); //N.B. This must be saved before the re-selection below
355 
356  // Filter out locked pads here
357  // We cannot do this in the selection filter as we need the pad layers
358  // when it is the curr_item.
360  []( const VECTOR2I& aPt, GENERAL_COLLECTOR& aCollector )
361  { EditToolSelectionFilter( aCollector, EXCLUDE_LOCKED_PADS ); } );
362 
363  if( selection.Empty() )
364  return 0;
365 
366  Activate();
367  controls->ShowCursor( true );
368  controls->SetAutoPan( true );
369 
370  auto curr_item = static_cast<BOARD_ITEM*>( selection.Front() );
371  std::vector<BOARD_ITEM*> sel_items;
372 
373  for( auto it : selection )
374  {
375  if( auto item = dynamic_cast<BOARD_ITEM*>( it ) )
376  {
377  sel_items.push_back( item );
378 
379  if( auto mod = dyn_cast<MODULE*>( item ) )
380  {
381  for( auto pad : mod->Pads() )
382  sel_items.push_back( pad );
383  }
384  }
385  }
386 
387  bool restore_state = false;
388  VECTOR2I totalMovement;
389  GRID_HELPER grid( editFrame );
390  OPT_TOOL_EVENT evt = aEvent;
391  VECTOR2I prevPos;
392 
393  // Main loop: keep receiving events
394  do
395  {
396  grid.SetSnap( !evt->Modifier( MD_SHIFT ) );
397  grid.SetUseGrid( !evt->Modifier( MD_ALT ) );
398  controls->SetSnapping( !evt->Modifier( MD_ALT ) );
399 
400  if( evt->IsAction( &PCB_ACTIONS::editActivate ) ||
401  evt->IsAction( &PCB_ACTIONS::move ) ||
402  evt->IsMotion() || evt->IsDrag( BUT_LEFT ) )
403  {
404  if( m_dragging && evt->Category() == TC_MOUSE )
405  {
406  m_cursor = grid.BestSnapAnchor( controls->GetMousePosition(),
407  item_layers, sel_items );
409  VECTOR2I movement( m_cursor - prevPos );
411 
412  totalMovement += movement;
413  prevPos = m_cursor;
414 
415  // Drag items to the current cursor position
416  for( auto item : selection )
417  {
418  // Don't double move footprint pads, fields, etc.
419  if( item->GetParent() && item->GetParent()->IsSelected() )
420  continue;
421 
422  static_cast<BOARD_ITEM*>( item )->Move( movement );
423  }
424 
425  frame()->UpdateMsgPanel();
426  }
427  else if( !m_dragging ) // Prepare to start dragging
428  {
429  bool invokedRouter = false;
430 
431  if ( !evt->IsAction( &PCB_ACTIONS::move ) && isInteractiveDragEnabled() )
432  invokedRouter = invokeInlineRouter( PNS::DM_ANY );
433 
434  if( !invokedRouter )
435  {
436  // deal with locked items (override lock or abort the operation)
438 
439  if( lockFlags == SELECTION_LOCKED )
440  break;
441 
442  // When editing modules, all items have the same parent
443  if( EditingModules() )
444  {
445  m_commit->Modify( selection.Front() );
446  }
447  else
448  {
449  // Save items, so changes can be undone
450  for( auto item : selection )
451  {
452  // Don't double move footprint pads, fields, etc.
453  if( item->GetParent() && item->GetParent()->IsSelected() )
454  continue;
455 
456  m_commit->Modify( item );
457  }
458  }
459 
460  editFrame->UndoRedoBlock( true );
462 
464  {
465  // start moving with the reference point attached to the cursor
466  grid.SetAuxAxes( false );
467 
469 
470  // Drag items to the current cursor position
471  for( auto item : selection )
472  {
473  // Don't double move footprint pads, fields, etc.
474  if( item->GetParent() && item->GetParent()->IsSelected() )
475  continue;
476 
477  static_cast<BOARD_ITEM*>( item )->Move( delta );
478  }
479 
481  }
482  else if( selection.Size() == 1 )
483  {
484  // Set the current cursor position to the first dragged item origin, so the
485  // movement vector could be computed later
487  m_cursor = grid.BestDragOrigin( originalCursorPos, curr_item );
488  grid.SetAuxAxes( true, m_cursor );
489  }
490  else
491  {
493  m_cursor = grid.Align( m_cursor );
494  }
495 
497 
498  prevPos = m_cursor;
499  controls->SetAutoPan( true );
500  m_dragging = true;
501  }
502  }
503 
506 
507  }
508 
509  else if( evt->IsCancel() || evt->IsActivate() )
510  {
511  restore_state = true; // Canceling the tool means that items have to be restored
512  break; // Finish
513  }
514 
515  else if( evt->Action() == TA_UNDO_REDO_PRE )
516  {
517  unselect = true;
518  break;
519  }
520 
521  // Dispatch TOOL_ACTIONs
522  else if( evt->Category() == TC_COMMAND )
523  {
524  if( evt->IsAction( &PCB_ACTIONS::remove ) )
525  {
526  // exit the loop, as there is no further processing for removed items
527  break;
528  }
529  else if( evt->IsAction( &PCB_ACTIONS::duplicate ) )
530  {
531  // On duplicate, stop moving this item
532  // The duplicate tool should then select the new item and start
533  // a new move procedure
534  break;
535  }
536  else if( evt->IsAction( &PCB_ACTIONS::moveExact ) )
537  {
538  // Can't do this, because the selection will then contain
539  // stale pointers and it will all go horribly wrong...
540  //editFrame->RestoreCopyFromUndoList( dummy );
541  //
542  // So, instead, reset the position manually
543  for( auto item : selection )
544  {
545  BOARD_ITEM* i = static_cast<BOARD_ITEM*>( item );
546  auto delta = VECTOR2I( i->GetPosition() ) - totalMovement;
547  i->SetPosition( wxPoint( delta.x, delta.y ) );
548 
549  // And what about flipping and rotation?
550  // for now, they won't be undone, but maybe that is how
551  // it should be, so you can flip and move exact in the
552  // same action?
553  }
554 
555  // This causes a double event, so we will get the dialogue
556  // correctly, somehow - why does Rotate not?
557  //MoveExact( aEvent );
558  break; // exit the loop - we move exactly, so we have finished moving
559  }
560  }
561 
562  else if( evt->IsMouseUp( BUT_LEFT ) || evt->IsClick( BUT_LEFT ) )
563  {
564  break; // Finish
565  }
566 
567  } while( ( evt = Wait() ) ); //Should be assignment not equality test
568 
569  m_lockedSelected = false;
570  controls->ForceCursorPosition( false );
571  controls->ShowCursor( false );
572  controls->SetSnapping( false );
573  controls->SetAutoPan( false );
574 
575  m_dragging = false;
576  editFrame->UndoRedoBlock( false );
577 
578  // Discard reference point when selection is "dropped" onto the board (ie: not dragging anymore)
580 
581  if( unselect || restore_state )
583 
584  if( restore_state )
585  m_commit->Revert();
586  else
587  m_commit->Push( _( "Drag" ) );
588 
589  return 0;
590 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
VECTOR2I GetReferencePoint() const
Definition: selection.h:200
virtual void ShowCursor(bool aEnabled)
Function ShowCursor() Enables or disables display of cursor.
VECTOR2I m_cursor
Last cursor position (needed for getModificationPoint() to avoid changes of edit reference point).
Definition: edit_tool.h:209
void ClearReferencePoint()
Definition: selection.h:210
static TOOL_ACTION move
move an item
Definition: pcb_actions.h:96
KIGFX::VIEW_CONTROLS * controls() const
Definition: pcb_tool.h:138
bool IsHover() const
Definition: selection.h:69
static TOOL_ACTION editActivate
Activation of the edit tool.
Definition: pcb_actions.h:93
virtual VECTOR2D GetMousePosition(bool aWorldCoordinates=true) const =0
Function GetMousePosition() Returns the current mouse pointer position.
SELECTION & RequestSelection(CLIENT_SELECTION_FILTER aClientFilter, std::vector< BOARD_ITEM * > *aFiltered=NULL, bool aConfirmLockedItems=false)
Function RequestSelection()
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class,...
std::unique_ptr< BOARD_COMMIT > m_commit
Definition: edit_tool.h:223
SELECTION_LOCK_FLAGS CheckLock()
Checks if the user has agreed to modify locked items for the given selection.
bool updateModificationPoint(SELECTION &aSelection)
Returns the right modification point (e.g.
Definition: edit_tool.cpp:1413
const SELECTION & selection() const
Definition: pcb_tool.cpp:251
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
OPT_TOOL_EVENT Wait(const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
Function Wait()
virtual void SetSnapping(bool aEnabled)
Function SetSnapping() Enables/disables snapping cursor to grid.
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:125
void UndoRedoBlock(bool aBlock=true)
Function UndoRedoBlock Enables/disable undo and redo operations.
SELECTION_TOOL * m_selectionTool
Selection tool used for obtaining selected items
Definition: edit_tool.h:199
VECTOR2< int > VECTOR2I
Definition: vector2d.h:587
static const int delta[8][2]
Definition: solve.cpp:112
static TOOL_ACTION selectionModified
Modified selection notification.
Definition: pcb_actions.h:114
static TOOL_ACTION moveExact
Activation of the exact move tool.
Definition: pcb_actions.h:117
bool m_lockedSelected
Flag determining whether we are prompting for locked removal
Definition: edit_tool.h:205
static TOOL_ACTION duplicate
Activation of the duplication tool.
Definition: pcb_actions.h:120
void SetReferencePoint(const VECTOR2I &aP)
Definition: selection.h:205
bool isInteractiveDragEnabled() const
Definition: edit_tool.cpp:318
Class LSET is a set of PCB_LAYER_IDs.
bool m_dragging
Flag determining if anything is being dragged right now
Definition: edit_tool.h:202
SELECTION_LOCK_FLAGS
Definition: selection.h:229
Class VIEW_CONTROLS is an interface for classes handling user events controlling the view behaviour (...
virtual void ForceCursorPosition(bool aEnabled, const VECTOR2D &aPosition=VECTOR2D(0, 0))
Function ForceCursorPosition() Places the cursor immediately at a given point.
virtual void SetAutoPan(bool aEnabled)
Function SetAutoPan Turns on/off auto panning (this feature is used when there is a tool active (eg.
#define EXCLUDE_TRANSIENTS
Definition: edit_tool.h:48
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:116
bool invokeInlineRouter(int aDragMode)
Definition: edit_tool.cpp:297
bool HasReferencePoint() const
Definition: selection.h:195
Common, abstract interface for edit frames.
Used when the right click button is pressed, or when the select tool is in effect.
Definition: collectors.h:245
size_t i
Definition: json11.cpp:597
int Size() const
Returns the number of selected parts.
Definition: selection.h:122
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:139
void Activate()
Function Activate() Runs the tool.
bool EditingModules() const
Definition: pcb_tool.h:102
static TOOL_ACTION updateLocalRatsnest
Definition: pcb_actions.h:388
KIGFX::VIEW_CONTROLS * getViewControls() const
Function getViewControls()
Definition: tool_base.cpp:41
static TOOL_ACTION remove
Deleting a BOARD_ITEM.
Definition: pcb_actions.h:132
void UpdateMsgPanel() override
#define EXCLUDE_LOCKED_PADS
Definition: edit_tool.h:47
void EditToolSelectionFilter(GENERAL_COLLECTOR &aCollector, int aFlags)
Definition: edit_tool.cpp:173
#define mod(a, n)
Definition: greymap.cpp:24
virtual void SetCursorPosition(const VECTOR2D &aPosition, bool aWarpView=true, bool aTriggeredByArrows=false)=0
Moves cursor to the requested position expressed in world coordinates.
VECTOR2D GetCursorPosition() const
Returns the current cursor position in world coordinates.
EDA_ITEM * Front() const
Definition: selection.h:152
OPT< TOOL_EVENT > OPT_TOOL_EVENT
Definition: tool_event.h:495

References TOOL_INTERACTIVE::Activate(), GRID_HELPER::Align(), GRID_HELPER::BestDragOrigin(), GRID_HELPER::BestSnapAnchor(), BUT_LEFT, SELECTION_TOOL::CheckLock(), SELECTION::ClearReferencePoint(), PCB_TOOL::controls(), delta, PNS::DM_ANY, PCB_ACTIONS::duplicate, PCB_ACTIONS::editActivate, PCB_TOOL::EditingModules(), EditToolSelectionFilter(), SELECTION::Empty(), EXCLUDE_LOCKED_PADS, EXCLUDE_TRANSIENTS, KIGFX::VIEW_CONTROLS::ForceCursorPosition(), PCB_TOOL::frame(), SELECTION::Front(), KIGFX::VIEW_CONTROLS::GetCursorPosition(), KIGFX::VIEW_CONTROLS::GetMousePosition(), SELECTION::GetReferencePoint(), TOOL_BASE::getViewControls(), SELECTION::HasReferencePoint(), i, invokeInlineRouter(), SELECTION::IsHover(), isInteractiveDragEnabled(), m_commit, m_cursor, m_dragging, m_lockedSelected, m_selectionTool, TOOL_BASE::m_toolMgr, MD_ALT, MD_SHIFT, mod, PCB_ACTIONS::move, PCB_ACTIONS::moveExact, PCB_ACTIONS::remove, SELECTION_TOOL::RequestSelection(), TOOL_MANAGER::RunAction(), PCB_TOOL::selection(), SELECTION_LOCKED, PCB_ACTIONS::selectionClear, PCB_ACTIONS::selectionModified, KIGFX::VIEW_CONTROLS::SetAutoPan(), GRID_HELPER::SetAuxAxes(), KIGFX::VIEW_CONTROLS::SetCursorPosition(), SELECTION::SetReferencePoint(), GRID_HELPER::SetSnap(), KIGFX::VIEW_CONTROLS::SetSnapping(), GRID_HELPER::SetUseGrid(), KIGFX::VIEW_CONTROLS::ShowCursor(), SELECTION::Size(), TA_UNDO_REDO_PRE, TC_COMMAND, TC_MOUSE, PCB_BASE_EDIT_FRAME::UndoRedoBlock(), PCB_ACTIONS::updateLocalRatsnest, updateModificationPoint(), PCB_BASE_FRAME::UpdateMsgPanel(), and TOOL_INTERACTIVE::Wait().

Referenced by Duplicate(), and setTransitions().

◆ MeasureTool()

int EDIT_TOOL::MeasureTool ( const TOOL_EVENT aEvent)

Launches a tool to measure between points

Definition at line 1289 of file edit_tool.cpp.

1290 {
1291  if( EditingModules() && !frame()->GetModel())
1292  return 0;
1293 
1294  auto& view = *getView();
1295  auto& controls = *getViewControls();
1297 
1298  Activate();
1299  frame()->SetToolID( toolID, wxCURSOR_PENCIL, _( "Measure distance" ) );
1300 
1301  EDA_UNITS_T units = frame()->GetUserUnits();
1303  KIGFX::PREVIEW::RULER_ITEM ruler( twoPtMgr, units );
1304 
1305  view.Add( &ruler );
1306  view.SetVisible( &ruler, false );
1307 
1308  GRID_HELPER grid( frame() );
1309 
1310  bool originSet = false;
1311 
1312  controls.ShowCursor( true );
1313  controls.SetAutoPan( false );
1314  controls.CaptureCursor( false );
1315 
1316  while( auto evt = Wait() )
1317  {
1318  grid.SetSnap( !evt->Modifier( MD_SHIFT ) );
1319  grid.SetUseGrid( !evt->Modifier( MD_ALT ) );
1320  controls.SetSnapping( !evt->Modifier( MD_ALT ) );
1321  const VECTOR2I cursorPos = grid.BestSnapAnchor( controls.GetMousePosition(), nullptr );
1322  controls.ForceCursorPosition(true, cursorPos );
1323 
1325  {
1326  break;
1327  }
1328 
1329  // click or drag starts
1330  else if( !originSet && ( evt->IsDrag( BUT_LEFT ) || evt->IsClick( BUT_LEFT ) ) )
1331  {
1332  twoPtMgr.SetOrigin( cursorPos );
1333  twoPtMgr.SetEnd( cursorPos );
1334 
1335  controls.CaptureCursor( true );
1336  controls.SetAutoPan( true );
1337 
1338  originSet = true;
1339  }
1340 
1341  // second click or mouse up after drag ends
1342  else if( originSet && ( evt->IsClick( BUT_LEFT ) || evt->IsMouseUp( BUT_LEFT ) ) )
1343  {
1344  originSet = false;
1345 
1346  controls.SetAutoPan( false );
1347  controls.CaptureCursor( false );
1348  }
1349 
1350  // move or drag when origin set updates rules
1351  else if( originSet && ( evt->IsMotion() || evt->IsDrag( BUT_LEFT ) ) )
1352  {
1353  twoPtMgr.SetAngleSnap( evt->Modifier( MD_CTRL ) );
1354  twoPtMgr.SetEnd( cursorPos );
1355 
1356  view.SetVisible( &ruler, true );
1357  view.Update( &ruler, KIGFX::GEOMETRY );
1358  }
1359 
1360  else if( evt->IsAction( &PCB_ACTIONS::switchUnits )
1361  || evt->IsAction( &PCB_ACTIONS::updateUnits ) )
1362  {
1363  if( frame()->GetUserUnits() != units )
1364  {
1365  units = frame()->GetUserUnits();
1366  ruler.SwitchUnits();
1367  view.Update( &ruler, KIGFX::GEOMETRY );
1368  }
1369  }
1370 
1371  else if( evt->IsClick( BUT_RIGHT ) )
1372  {
1374  }
1375  }
1376 
1377  view.SetVisible( &ruler, false );
1378  view.Remove( &ruler );
1379 
1380  frame()->SetNoToolSelected();
1381 
1382  return 0;
1383 }
virtual void ShowCursor(bool aEnabled)
Function ShowCursor() Enables or disables display of cursor.
KIGFX::VIEW_CONTROLS * controls() const
Definition: pcb_tool.h:138
virtual void SetToolID(int aId, int aCursor, const wxString &aToolMsg) override
Set the tool command ID to aId and sets the cursor to aCursor.
virtual VECTOR2D GetMousePosition(bool aWorldCoordinates=true) const =0
Function GetMousePosition() Returns the current mouse pointer position.
TOOL_MENU m_menu
Menu model displayed by the tool.
Definition: pcb_tool.h:148
virtual void Update(VIEW_ITEM *aItem, int aUpdateFlags) override
For dynamic VIEWs, informs the associated VIEW that the graphical representation of this item has cha...
Definition: pcb_view.cpp:91
KIGFX::PCB_VIEW * view() const
Definition: pcb_tool.h:137
OPT_TOOL_EVENT Wait(const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
Function Wait()
virtual void SetSnapping(bool aEnabled)
Function SetSnapping() Enables/disables snapping cursor to grid.
static TOOL_ACTION updateUnits
Definition: pcb_actions.h:373
static TOOL_ACTION switchUnits
Definition: pcb_actions.h:372
virtual void Remove(VIEW_ITEM *aItem) override
Function Remove() Removes a VIEW_ITEM from the view.
Definition: pcb_view.cpp:74
virtual void CaptureCursor(bool aEnabled)
Function CaptureCursor() Forces the cursor to stay within the drawing panel area.
EDA_UNITS_T GetUserUnits() const override
Return the user units currently in use.
Definition: draw_frame.h:291
void SetOrigin(const VECTOR2I &aOrigin)
Set the origin of the ruler (the fixed end)
Class RULER_ITEM.
Definition: ruler_item.h:43
virtual void ForceCursorPosition(bool aEnabled, const VECTOR2D &aPosition=VECTOR2D(0, 0))
Function ForceCursorPosition() Places the cursor immediately at a given point.
bool IsCancelInteractive(const TOOL_EVENT &aEvt)
Function IsCancelInteractive()
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:35
virtual void SetAutoPan(bool aEnabled)
Function SetAutoPan Turns on/off auto panning (this feature is used when there is a tool active (eg.
ID_MODEDIT_MEASUREMENT_TOOL
virtual void SetNoToolSelected()
Select the ID_NO_TOOL_SELECTED id tool (Idle tool)
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:139
void SetVisible(VIEW_ITEM *aItem, bool aIsVisible=true)
Sets the item visibility.
Definition: view.cpp:1485
void Activate()
Function Activate() Runs the tool.
bool EditingModules() const
Definition: pcb_tool.h:102
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1) override
Function Add() Adds a VIEW_ITEM to the view.
Definition: pcb_view.cpp:58
KIGFX::VIEW_CONTROLS * getViewControls() const
Function getViewControls()
Definition: tool_base.cpp:41
SGLIB_API S3DMODEL * GetModel(SCENEGRAPH *aNode)
Function GetModel creates an S3DMODEL representation of aNode (raw data, no transforms)
Definition: ifsg_api.cpp:471
void ShowContextMenu(SELECTION &aSelection)
Function ShowContextMenu.
Definition: tool_menu.cpp:62
EDA_UNITS_T
Definition: common.h:160
void SetEnd(const VECTOR2I &aEnd)
Set the current end of the rectangle (the end that moves with the cursor.
Color has changed.
Definition: view_item.h:57

References TOOL_INTERACTIVE::Activate(), KIGFX::PCB_VIEW::Add(), GRID_HELPER::BestSnapAnchor(), BUT_LEFT, BUT_RIGHT, KIGFX::VIEW_CONTROLS::CaptureCursor(), PCB_TOOL::controls(), PCB_TOOL::EditingModules(), KIGFX::VIEW_CONTROLS::ForceCursorPosition(), PCB_TOOL::frame(), KIGFX::GEOMETRY, S3D::GetModel(), KIGFX::VIEW_CONTROLS::GetMousePosition(), EDA_DRAW_FRAME::GetUserUnits(), TOOL_BASE::getView(), TOOL_BASE::getViewControls(), ID_MODEDIT_MEASUREMENT_TOOL, ID_PCB_MEASUREMENT_TOOL, TOOL_EVT_UTILS::IsCancelInteractive(), PCB_TOOL::m_menu, MD_ALT, MD_CTRL, MD_SHIFT, KIGFX::PCB_VIEW::Remove(), KIGFX::PREVIEW::TWO_POINT_GEOMETRY_MANAGER::SetAngleSnap(), KIGFX::VIEW_CONTROLS::SetAutoPan(), KIGFX::PREVIEW::TWO_POINT_GEOMETRY_MANAGER::SetEnd(), EDA_DRAW_FRAME::SetNoToolSelected(), KIGFX::PREVIEW::TWO_POINT_GEOMETRY_MANAGER::SetOrigin(), GRID_HELPER::SetSnap(), KIGFX::VIEW_CONTROLS::SetSnapping(), PCB_BASE_FRAME::SetToolID(), GRID_HELPER::SetUseGrid(), KIGFX::VIEW::SetVisible(), TOOL_MENU::ShowContextMenu(), KIGFX::VIEW_CONTROLS::ShowCursor(), KIGFX::PREVIEW::RULER_ITEM::SwitchUnits(), PCB_ACTIONS::switchUnits, KIGFX::PCB_VIEW::Update(), PCB_ACTIONS::updateUnits, PCB_TOOL::view(), and TOOL_INTERACTIVE::Wait().

Referenced by setTransitions().

◆ Mirror()

int EDIT_TOOL::Mirror ( const TOOL_EVENT aEvent)

Function Mirror.

Mirrors the current selection. The mirror axis passes through the current point.

Definition at line 760 of file edit_tool.cpp.

761 {
763  []( const VECTOR2I& aPt, GENERAL_COLLECTOR& aCollector )
764  { EditToolSelectionFilter( aCollector, EXCLUDE_LOCKED_PADS | EXCLUDE_TRANSIENTS ); }, nullptr, ! m_dragging );
765 
766  if( selection.Empty() )
767  return 0;
768 
770  auto refPoint = selection.GetReferencePoint();
771  wxPoint mirrorPoint( refPoint.x, refPoint.y );
772 
773  // When editing modules, all items have the same parent
774  if( EditingModules() )
775  {
776  m_commit->Modify( selection.Front() );
777  }
778 
779  for( auto item : selection )
780  {
781  // only modify items we can mirror
782  switch( item->Type() )
783  {
784  case PCB_MODULE_EDGE_T:
785  case PCB_MODULE_TEXT_T:
786  case PCB_PAD_T:
787  // Only create undo entry for items on the board
788  if( !item->IsNew() && !EditingModules() )
789  m_commit->Modify( item );
790 
791  break;
792  default:
793  continue;
794  }
795 
796  // modify each object as necessary
797  switch( item->Type() )
798  {
799  case PCB_MODULE_EDGE_T:
800  {
801  auto& edge = static_cast<EDGE_MODULE&>( *item );
802  edge.Mirror( mirrorPoint, false );
803  break;
804  }
805 
806  case PCB_MODULE_TEXT_T:
807  {
808  auto& modText = static_cast<TEXTE_MODULE&>( *item );
809  modText.Mirror( mirrorPoint, false );
810  break;
811  }
812 
813  case PCB_PAD_T:
814  {
815  auto& pad = static_cast<D_PAD&>( *item );
816  mirrorPadX( pad, mirrorPoint );
817  break;
818  }
819 
820  default:
821  // it's likely the commit object is wrong if you get here
822  assert( false );
823  break;
824  }
825  }
826 
827  if( !m_dragging )
828  m_commit->Push( _( "Mirror" ) );
829 
830  if( selection.IsHover() && !m_dragging )
832 
834 
835  if( m_dragging )
837 
838  return 0;
839 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
VECTOR2I GetReferencePoint() const
Definition: selection.h:200
bool IsHover() const
Definition: selection.h:69
SELECTION & RequestSelection(CLIENT_SELECTION_FILTER aClientFilter, std::vector< BOARD_ITEM * > *aFiltered=NULL, bool aConfirmLockedItems=false)
Function RequestSelection()
std::unique_ptr< BOARD_COMMIT > m_commit
Definition: edit_tool.h:223
bool updateModificationPoint(SELECTION &aSelection)
Returns the right modification point (e.g.
Definition: edit_tool.cpp:1413
const SELECTION & selection() const
Definition: pcb_tool.cpp:251
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:125
class D_PAD, a pad in a footprint
Definition: typeinfo.h:90
SELECTION_TOOL * m_selectionTool
Selection tool used for obtaining selected items
Definition: edit_tool.h:199
class EDGE_MODULE, a footprint edge
Definition: typeinfo.h:94
static TOOL_ACTION selectionModified
Modified selection notification.
Definition: pcb_actions.h:114
bool m_dragging
Flag determining if anything is being dragged right now
Definition: edit_tool.h:202
#define EXCLUDE_TRANSIENTS
Definition: edit_tool.h:48
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:116
class TEXTE_MODULE, text in a footprint
Definition: typeinfo.h:93
Used when the right click button is pressed, or when the select tool is in effect.
Definition: collectors.h:245
bool EditingModules() const
Definition: pcb_tool.h:102
static TOOL_ACTION updateLocalRatsnest
Definition: pcb_actions.h:388
#define EXCLUDE_LOCKED_PADS
Definition: edit_tool.h:47
void EditToolSelectionFilter(GENERAL_COLLECTOR &aCollector, int aFlags)
Definition: edit_tool.cpp:173
static void mirrorPadX(D_PAD &aPad, const wxPoint &aMirrorPoint)
Mirror a pad in the vertical axis passing through a point.
Definition: edit_tool.cpp:737
EDA_ITEM * Front() const
Definition: selection.h:152

References PCB_TOOL::EditingModules(), EditToolSelectionFilter(), SELECTION::Empty(), EXCLUDE_LOCKED_PADS, EXCLUDE_TRANSIENTS, SELECTION::Front(), SELECTION::GetReferencePoint(), SELECTION::IsHover(), m_commit, m_dragging, m_selectionTool, TOOL_BASE::m_toolMgr, mirrorPadX(), PCB_MODULE_EDGE_T, PCB_MODULE_TEXT_T, PCB_PAD_T, SELECTION_TOOL::RequestSelection(), TOOL_MANAGER::RunAction(), PCB_TOOL::selection(), PCB_ACTIONS::selectionClear, PCB_ACTIONS::selectionModified, PCB_ACTIONS::updateLocalRatsnest, and updateModificationPoint().

Referenced by setTransitions().

◆ module()

◆ MoveExact()

int EDIT_TOOL::MoveExact ( const TOOL_EVENT aEvent)

Function MoveExact()

Invokes a dialog box to allow moving of the item by an exact amount.

Definition at line 997 of file edit_tool.cpp.

998 {
1000  []( const VECTOR2I& aPt, GENERAL_COLLECTOR& aCollector )
1002 
1003  if( selection.Empty() )
1004  return 0;
1005 
1006  PCB_BASE_FRAME* editFrame = getEditFrame<PCB_BASE_FRAME>();
1007  wxPoint translation;
1008  double rotation;
1009  ROTATION_ANCHOR rotationAnchor = selection.Size() > 1 ? ROTATE_AROUND_SEL_CENTER
1011 
1012  DIALOG_MOVE_EXACT dialog( editFrame, translation, rotation, rotationAnchor );
1013  int ret = dialog.ShowModal();
1014 
1015  if( ret == wxID_OK )
1016  {
1017  VECTOR2I rp = selection.GetCenter();
1018  wxPoint selCenter( rp.x, rp.y );
1019 
1020  // Make sure the rotation is from the right reference point
1021  selCenter += translation;
1022 
1023  // When editing modules, all items have the same parent
1024  if( EditingModules() )
1025  {
1026  m_commit->Modify( selection.Front() );
1027  }
1028 
1029  for( auto selItem : selection )
1030  {
1031  BOARD_ITEM* item = static_cast<BOARD_ITEM*>( selItem );
1032 
1033  if( !item->IsNew() && !EditingModules() )
1034  m_commit->Modify( item );
1035 
1036  item->Move( translation );
1037 
1038  switch( rotationAnchor )
1039  {
1041  item->Rotate( item->GetPosition(), rotation );
1042  break;
1044  item->Rotate( selCenter, rotation );
1045  break;
1047  item->Rotate( editFrame->GetScreen()->m_O_Curseur, rotation );
1048  break;
1050  item->Rotate( editFrame->GetAuxOrigin(), rotation );
1051  break;
1052  }
1053 
1054  if( !m_dragging )
1055  getView()->Update( item );
1056  }
1057 
1058  m_commit->Push( _( "Move exact" ) );
1059 
1060  if( selection.IsHover() )
1062 
1064 
1065  if( m_dragging )
1067  }
1068 
1069  return 0;
1070 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
VECTOR2I GetCenter() const
Returns the center point of the selection area bounding box.
Definition: selection.cpp:67
bool IsHover() const
Definition: selection.h:69
SELECTION & RequestSelection(CLIENT_SELECTION_FILTER aClientFilter, std::vector< BOARD_ITEM * > *aFiltered=NULL, bool aConfirmLockedItems=false)
Function RequestSelection()
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class,...
std::unique_ptr< BOARD_COMMIT > m_commit
Definition: edit_tool.h:223
const SELECTION & selection() const
Definition: pcb_tool.cpp:251
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:125
SELECTION_TOOL * m_selectionTool
Selection tool used for obtaining selected items
Definition: edit_tool.h:199
wxPoint m_O_Curseur
Relative Screen cursor coordinate (on grid) in user units.
Definition: base_screen.h:185
const wxPoint & GetAuxOrigin() const override
Return the origin of the axis used for plotting and various exports.
static TOOL_ACTION selectionModified
Modified selection notification.
Definition: pcb_actions.h:114
bool IsNew() const
Definition: base_struct.h:219
bool m_dragging
Flag determining if anything is being dragged right now
Definition: edit_tool.h:202
virtual void Move(const wxPoint &aMoveVector)
Function Move move this object.
virtual void Rotate(const wxPoint &aRotCentre, double aAngle)
Function Rotate Rotate this object.
virtual void Update(VIEW_ITEM *aItem, int aUpdateFlags)
For dynamic VIEWs, informs the associated VIEW that the graphical representation of this item has cha...
Definition: view.cpp:1539
ROTATION_ANCHOR
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:35
#define EXCLUDE_TRANSIENTS
Definition: edit_tool.h:48
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:116
virtual const wxPoint GetPosition() const =0
Used when the right click button is pressed, or when the select tool is in effect.
Definition: collectors.h:245
int Size() const
Returns the number of selected parts.
Definition: selection.h:122
PCB_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
bool EditingModules() const
Definition: pcb_tool.h:102
#define EXCLUDE_LOCKED
Function EditToolSelectionFilter.
Definition: edit_tool.h:46
static TOOL_ACTION updateLocalRatsnest
Definition: pcb_actions.h:388
#define EXCLUDE_LOCKED_PADS
Definition: edit_tool.h:47
void EditToolSelectionFilter(GENERAL_COLLECTOR &aCollector, int aFlags)
Definition: edit_tool.cpp:173
class PCB_BASE_FRAME basic PCB main window class for Pcbnew, Gerbview, and CvPcb footprint viewer.
EDA_ITEM * Front() const
Definition: selection.h:152

References PCB_TOOL::EditingModules(), EditToolSelectionFilter(), SELECTION::Empty(), EXCLUDE_LOCKED, EXCLUDE_LOCKED_PADS, EXCLUDE_TRANSIENTS, SELECTION::Front(), PCB_BASE_FRAME::GetAuxOrigin(), SELECTION::GetCenter(), BOARD_ITEM::GetPosition(), PCB_BASE_FRAME::GetScreen(), TOOL_BASE::getView(), SELECTION::IsHover(), EDA_ITEM::IsNew(), m_commit, m_dragging, BASE_SCREEN::m_O_Curseur, m_selectionTool, TOOL_BASE::m_toolMgr, BOARD_ITEM::Move(), SELECTION_TOOL::RequestSelection(), BOARD_ITEM::Rotate(), ROTATE_AROUND_AUX_ORIGIN, ROTATE_AROUND_ITEM_ANCHOR, ROTATE_AROUND_SEL_CENTER, ROTATE_AROUND_USER_ORIGIN, TOOL_MANAGER::RunAction(), PCB_TOOL::selection(), PCB_ACTIONS::selectionClear, PCB_ACTIONS::selectionModified, SELECTION::Size(), KIGFX::VIEW::Update(), PCB_ACTIONS::updateLocalRatsnest, VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by setTransitions().

◆ PadFilter()

void EDIT_TOOL::PadFilter ( const VECTOR2I ,
GENERAL_COLLECTOR aCollector 
)
static

Function PadFilter()

A selection filter which prunes the selection to contain only items of type PCB_PAD_T

Definition at line 1241 of file edit_tool.cpp.

1242 {
1243  for( int i = aCollector.GetCount() - 1; i >= 0; i-- )
1244  {
1245  BOARD_ITEM* item = static_cast<BOARD_ITEM*>( aCollector[i] );
1246 
1247  if( item->Type() != PCB_PAD_T )
1248  aCollector.Remove( i );
1249  }
1250 }
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class,...
class D_PAD, a pad in a footprint
Definition: typeinfo.h:90
void Remove(int aIndex)
Function Remove removes the item at aIndex (first position is 0);.
Definition: collector.h:143
int GetCount() const
Function GetCount returns the number of objects in the list.
Definition: collector.h:114
size_t i
Definition: json11.cpp:597
KICAD_T Type() const
Function Type()
Definition: base_struct.h:201

References COLLECTOR::GetCount(), i, PCB_PAD_T, COLLECTOR::Remove(), and EDA_ITEM::Type().

Referenced by showLocalRatsnest().

◆ pickCopyReferencePoint()

bool EDIT_TOOL::pickCopyReferencePoint ( VECTOR2I aP)
private

Definition at line 1473 of file edit_tool.cpp.

1474 {
1475  STATUS_TEXT_POPUP statusPopup( frame() );
1476  PICKER_TOOL* picker = m_toolMgr->GetTool<PICKER_TOOL>();
1477  bool picking = true;
1478  bool retVal = true;
1479 
1480  statusPopup.SetText( _( "Select reference point for the copy..." ) );
1481  picker->Activate();
1482  picker->SetClickHandler( [&]( const VECTOR2D& aPoint ) -> bool
1483  {
1484  aP = aPoint;
1485  statusPopup.SetText( _( "Selection copied." ) );
1486  statusPopup.Expire( 800 );
1487  picking = false;
1488  return false; // we don't need any more points
1489  } );
1490  picker->SetCancelHandler( [&]()
1491  {
1492  statusPopup.SetText( _( "Copy cancelled." ) );
1493  statusPopup.Expire( 800 );
1494  picking = false;
1495  retVal = false;
1496  } );
1497 
1498  statusPopup.Move( wxGetMousePosition() + wxPoint( 20, -50 ) );
1499  statusPopup.Popup();
1500 
1501  while( picking )
1502  {
1503  statusPopup.Move( wxGetMousePosition() + wxPoint( 20, -50 ) );
1504  Wait();
1505  }
1506 
1507  statusPopup.Hide();
1508  return retVal;
1509 }
void SetClickHandler(CLICK_HANDLER aHandler)
Function SetClickHandler() Sets a handler for mouse click event.
Definition: picker_tool.h:95
Class STATUS_TEXT_POPUP.
Definition: status_popup.h:79
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
OPT_TOOL_EVENT Wait(const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
Function Wait()
Generic tool for picking a point.
Definition: picker_tool.h:34
void SetCancelHandler(CANCEL_HANDLER aHandler)
Function SetCancelHandler() Sets a handler for cancel events (ESC or context-menu Cancel).
Definition: picker_tool.h:105
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:139
void Activate()
Function Activate() Runs the tool.

References TOOL_INTERACTIVE::Activate(), STATUS_POPUP::Expire(), PCB_TOOL::frame(), TOOL_MANAGER::GetTool(), TOOL_BASE::m_toolMgr, STATUS_POPUP::Move(), STATUS_POPUP::Popup(), PICKER_TOOL::SetCancelHandler(), PICKER_TOOL::SetClickHandler(), STATUS_TEXT_POPUP::SetText(), and TOOL_INTERACTIVE::Wait().

Referenced by doCopyToClipboard().

◆ Properties()

int EDIT_TOOL::Properties ( const TOOL_EVENT aEvent)

Function Edit()

Displays properties window for the selected object.

Definition at line 633 of file edit_tool.cpp.

634 {
635  PCB_BASE_EDIT_FRAME* editFrame = getEditFrame<PCB_BASE_EDIT_FRAME>();
636 
638  []( const VECTOR2I& aPt, GENERAL_COLLECTOR& aCollector )
639  { EditToolSelectionFilter( aCollector, EXCLUDE_TRANSIENTS ); } );
640 
641  // Tracks & vias are treated in a special way:
643  {
645  {
646  DIALOG_TRACK_VIA_PROPERTIES dlg( editFrame, selection, *m_commit );
647  dlg.ShowQuasiModal(); // QuasiModal required for NET_SELECTOR
648  }
649  }
650  else if( selection.Size() == 1 ) // Properties are displayed when there is only one item selected
651  {
652  // Display properties dialog
653  BOARD_ITEM* item = static_cast<BOARD_ITEM*>( selection.Front() );
654 
655  // Do not handle undo buffer, it is done by the properties dialogs @todo LEGACY
656  // Display properties dialog provided by the legacy canvas frame
657  editFrame->OnEditItemRequest( NULL, item );
658 
659  // Notify other tools of the changes
661  }
662 
663  if( selection.IsHover() )
664  {
666 
667  // Notify other tools of the changes -- This updates the visual ratsnest
669  }
670 
671  return 0;
672 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
bool IsHover() const
Definition: selection.h:69
static const KICAD_T Tracks[]
A scan list for only TRACKS.
Definition: collectors.h:318
SELECTION & RequestSelection(CLIENT_SELECTION_FILTER aClientFilter, std::vector< BOARD_ITEM * > *aFiltered=NULL, bool aConfirmLockedItems=false)
Function RequestSelection()
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class,...
std::unique_ptr< BOARD_COMMIT > m_commit
Definition: edit_tool.h:223
virtual void OnEditItemRequest(wxDC *aDC, BOARD_ITEM *aItem)=0
Function OnEditItemRequest Install the corresponding dialog editor for the given item.
const SELECTION & selection() const
Definition: pcb_tool.cpp:251
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:125
SELECTION_TOOL * m_selectionTool
Selection tool used for obtaining selected items
Definition: edit_tool.h:199
static TOOL_ACTION selectionModified
Modified selection notification.
Definition: pcb_actions.h:114
static SELECTION_CONDITION OnlyTypes(const std::vector< KICAD_T > &aTypes)
Function OnlyTypes Creates a functor that tests if the selected items are only of given types.
#define EXCLUDE_TRANSIENTS
Definition: edit_tool.h:48
bool changeTrackWidthOnClick(const SELECTION &selection)
Definition: edit_tool.cpp:592
Common, abstract interface for edit frames.
Used when the right click button is pressed, or when the select tool is in effect.
Definition: collectors.h:245
int Size() const
Returns the number of selected parts.
Definition: selection.h:122
void EditToolSelectionFilter(GENERAL_COLLECTOR &aCollector, int aFlags)
Definition: edit_tool.cpp:173
EDA_ITEM * Front() const
Definition: selection.h:152

References changeTrackWidthOnClick(), EditToolSelectionFilter(), EXCLUDE_TRANSIENTS, SELECTION::Front(), SELECTION::IsHover(), m_commit, m_selectionTool, TOOL_BASE::m_toolMgr, PCB_BASE_EDIT_FRAME::OnEditItemRequest(), SELECTION_CONDITIONS::OnlyTypes(), SELECTION_TOOL::RequestSelection(), TOOL_MANAGER::RunAction(), PCB_TOOL::selection(), PCB_ACTIONS::selectionClear, PCB_ACTIONS::selectionModified, DIALOG_SHIM::ShowQuasiModal(), SELECTION::Size(), and GENERAL_COLLECTOR::Tracks.

Referenced by setTransitions().

◆ Remove()

int EDIT_TOOL::Remove ( const TOOL_EVENT aEvent)

Function Remove()

Deletes currently selected items. The rotation point is the current cursor position.

Popup nag for deleting locked items

Definition at line 883 of file edit_tool.cpp.

884 {
885  ROUTER_TOOL* routerTool = static_cast<ROUTER_TOOL*>
886  ( m_toolMgr->FindTool( "pcbnew.InteractiveRouter" ) );
887 
888  // Do not delete items while actively routing.
889  if( routerTool && routerTool->Router() && routerTool->Router()->RoutingInProgress() )
890  return 1;
891 
892  std::vector<BOARD_ITEM*> lockedItems;
893 
894  // get a copy instead of reference (as we're going to clear the selection before removing items)
895  SELECTION selectionCopy;
896  bool isCut = aEvent.Parameter<intptr_t>() == static_cast<intptr_t>( PCB_ACTIONS::REMOVE_FLAGS::CUT );
897  bool isAlt = aEvent.Parameter<intptr_t>() == static_cast<intptr_t>( PCB_ACTIONS::REMOVE_FLAGS::ALT );
898 
899  // If we are in a "Cut" operation, then the copied selection exists already
900  if( isCut )
901  selectionCopy = m_selectionTool->GetSelection();
902  else
903  selectionCopy = m_selectionTool->RequestSelection(
904  []( const VECTOR2I& aPt, GENERAL_COLLECTOR& aCollector )
906 
907  bool isHover = selectionCopy.IsHover();
908 
909  // in "alternative" mode, deletion is not just a simple list of selected items,
910  // it removes whole tracks, not just segments
911  if( isAlt && isHover
912  && ( selectionCopy.HasType( PCB_TRACE_T ) || selectionCopy.HasType( PCB_VIA_T ) ) )
913  {
915  }
916 
917  if( selectionCopy.Empty() )
918  return 0;
919 
920  // N.B. Setting the CUT flag prevents lock filtering as we only want to delete the items that
921  // were copied to the clipboard, no more, no fewer. Filtering for locked item, if any will be done
922  // in the copyToClipboard() routine
923  if( !m_lockedSelected && !isCut )
924  {
925  // Second RequestSelection removes locked items but keeps a copy of their pointers
926  selectionCopy = m_selectionTool->RequestSelection(
927  []( const VECTOR2I& aPt, GENERAL_COLLECTOR& aCollector )
928  { EditToolSelectionFilter( aCollector, EXCLUDE_LOCKED ); }, &lockedItems );
929  }
930 
931 
932  // As we are about to remove items, they have to be removed from the selection first
934 
935  for( auto item : selectionCopy )
936  {
937  if( m_editModules )
938  {
939  m_commit->Remove( item );
940  continue;
941  }
942 
943  switch( item->Type() )
944  {
945  case PCB_MODULE_TEXT_T:
946  {
947  auto text = static_cast<TEXTE_MODULE*>( item );
948  auto parent = static_cast<MODULE*>( item->GetParent() );
949 
950  if( text->GetType() == TEXTE_MODULE::TEXT_is_DIVERS )
951  {
952  m_commit->Modify( text );
953  getView()->Remove( text );
954  parent->Remove( text );
955  }
956  }
957  break;
958 
959  default:
960  m_commit->Remove( item );
961  break;
962  }
963  }
964 
965  if( isCut )
966  m_commit->Push( _( "Cut" ) );
967  else
968  m_commit->Push( _( "Delete" ) );
969 
970  if( !m_lockedSelected && lockedItems.size() > 0 )
971  {
973  STATUS_TEXT_POPUP statusPopup( frame() );
974 
975  m_lockedSelected = true;
976  m_toolMgr->RunAction( PCB_ACTIONS::selectItems, true, &lockedItems );
977  statusPopup.SetText( _( "Delete again to remove locked items" ) );
978  statusPopup.Expire( 2000 );
979  statusPopup.Popup();
980  statusPopup.Move( wxGetMousePosition() + wxPoint( 20, 20 ) );
981 
982  Activate();
983 
984  while( m_lockedSelected && statusPopup.IsShown() )
985  {
986  statusPopup.Move( wxGetMousePosition() + wxPoint( 20, 20 ) );
987  Wait();
988  }
989  }
990 
991  m_lockedSelected = false;
992 
993  return 0;
994 }
static TOOL_ACTION selectItems
Selects a list of items (specified as the event parameter)
Definition: pcb_actions.h:59
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
bool IsHover() const
Definition: selection.h:69
SELECTION & RequestSelection(CLIENT_SELECTION_FILTER aClientFilter, std::vector< BOARD_ITEM * > *aFiltered=NULL, bool aConfirmLockedItems=false)
Function RequestSelection()
bool HasType(KICAD_T aType) const
Checks if there is at least one item of requested kind.
Definition: selection.h:182
std::unique_ptr< BOARD_COMMIT > m_commit
Definition: edit_tool.h:223
Class STATUS_TEXT_POPUP.
Definition: status_popup.h:79
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
virtual void Remove(VIEW_ITEM *aItem)
Function Remove() Removes a VIEW_ITEM from the view.
Definition: view.cpp:376
OPT_TOOL_EVENT Wait(const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
Function Wait()
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:125
TOOL_BASE * FindTool(int aId) const
Function FindTool() Searches for a tool with given ID.
SELECTION_TOOL * m_selectionTool
Selection tool used for obtaining selected items
Definition: edit_tool.h:199
class TRACK, a track segment (segment on a copper layer)
Definition: typeinfo.h:95
bool m_lockedSelected
Flag determining whether we are prompting for locked removal
Definition: edit_tool.h:205
T Parameter() const
Function Parameter() Returns a non-standard parameter assigned to the event.
Definition: tool_event.h:387
SELECTION & GetSelection()
Function GetSelection()
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:35
#define EXCLUDE_TRANSIENTS
Definition: edit_tool.h:48
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:116
bool m_editModules
Definition: pcb_tool.h:150
static TOOL_ACTION expandSelectedConnection
Expands the current selection to select a connection between two junctions.
Definition: pcb_actions.h:74
class TEXTE_MODULE, text in a footprint
Definition: typeinfo.h:93
Used when the right click button is pressed, or when the select tool is in effect.
Definition: collectors.h:245
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:139
void Activate()
Function Activate() Runs the tool.
class VIA, a via (like a track segment on a copper layer)
Definition: typeinfo.h:96
#define EXCLUDE_LOCKED
Function EditToolSelectionFilter.
Definition: edit_tool.h:46
bool RoutingInProgress() const
Definition: pns_router.cpp:112
ROUTER * Router() const
#define EXCLUDE_LOCKED_PADS
Definition: edit_tool.h:47
void EditToolSelectionFilter(GENERAL_COLLECTOR &aCollector, int aFlags)
Definition: edit_tool.cpp:173

References TOOL_INTERACTIVE::Activate(), ACTIONS::ALT, ACTIONS::CUT, EditToolSelectionFilter(), SELECTION::Empty(), EXCLUDE_LOCKED, EXCLUDE_LOCKED_PADS, EXCLUDE_TRANSIENTS, PCB_ACTIONS::expandSelectedConnection, STATUS_POPUP::Expire(), TOOL_MANAGER::FindTool(), PCB_TOOL::frame(), SELECTION_TOOL::GetSelection(), TOOL_BASE::getView(), SELECTION::HasType(), SELECTION::IsHover(), m_commit, PCB_TOOL::m_editModules, m_lockedSelected, m_selectionTool, TOOL_BASE::m_toolMgr, STATUS_POPUP::Move(), TOOL_EVENT::Parameter(), PCB_MODULE_TEXT_T, PCB_TRACE_T, PCB_VIA_T, STATUS_POPUP::Popup(), KIGFX::VIEW::Remove(), SELECTION_TOOL::RequestSelection(), PNS::TOOL_BASE::Router(), PNS::ROUTER::RoutingInProgress(), TOOL_MANAGER::RunAction(), PCB_ACTIONS::selectionClear, PCB_ACTIONS::selectItems, STATUS_TEXT_POPUP::SetText(), TEXTE_MODULE::TEXT_is_DIVERS, and TOOL_INTERACTIVE::Wait().

Referenced by cutToClipboard(), and setTransitions().

◆ Reset()

void EDIT_TOOL::Reset ( RESET_REASON  aReason)
overridevirtual

Function Reset() Brings the tool to a known, initial state.

If the tool claimed anything from the model or the view, it must release it when its reset.

Parameters
aReasoncontains information about the reason of tool reset.

Reimplemented from PCB_TOOL.

Definition at line 221 of file edit_tool.cpp.

222 {
223  m_dragging = false;
224 
225  if( aReason != RUN )
226  m_commit.reset( new BOARD_COMMIT( this ) );
227 }
std::unique_ptr< BOARD_COMMIT > m_commit
Definition: edit_tool.h:223
Tool is invoked after being inactive.
Definition: tool_base.h:82
bool m_dragging
Flag determining if anything is being dragged right now
Definition: edit_tool.h:202

References m_commit, m_dragging, and TOOL_BASE::RUN.

◆ Rotate()

int EDIT_TOOL::Rotate ( const TOOL_EVENT aEvent)

Function Rotate()

Rotates currently selected items.

Definition at line 675 of file edit_tool.cpp.

676 {
677  PCB_BASE_EDIT_FRAME* editFrame = getEditFrame<PCB_BASE_EDIT_FRAME>();
678 
680  []( const VECTOR2I& aPt, GENERAL_COLLECTOR& aCollector )
681  { EditToolSelectionFilter( aCollector, EXCLUDE_LOCKED_PADS | EXCLUDE_TRANSIENTS ); }, nullptr, ! m_dragging );
682 
683  if( selection.Empty() )
684  return 0;
685 
687  auto refPt = selection.GetReferencePoint();
688  const int rotateAngle = TOOL_EVT_UTILS::GetEventRotationAngle( *editFrame, aEvent );
689 
690  // When editing modules, all items have the same parent
691  if( EditingModules() )
692  {
693  m_commit->Modify( selection.Front() );
694  }
695 
696  for( auto item : selection )
697  {
698  if( !item->IsNew() && !EditingModules() )
699  m_commit->Modify( item );
700 
701  static_cast<BOARD_ITEM*>( item )->Rotate( refPt, rotateAngle );
702  }
703 
704  if( !m_dragging )
705  m_commit->Push( _( "Rotate" ) );
706 
707  if( selection.IsHover() && !m_dragging )
709 
711 
712  if( m_dragging )
714 
715  return 0;
716 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
VECTOR2I GetReferencePoint() const
Definition: selection.h:200
bool IsHover() const
Definition: selection.h:69
SELECTION & RequestSelection(CLIENT_SELECTION_FILTER aClientFilter, std::vector< BOARD_ITEM * > *aFiltered=NULL, bool aConfirmLockedItems=false)
Function RequestSelection()
std::unique_ptr< BOARD_COMMIT > m_commit
Definition: edit_tool.h:223
bool updateModificationPoint(SELECTION &aSelection)
Returns the right modification point (e.g.
Definition: edit_tool.cpp:1413
const SELECTION & selection() const
Definition: pcb_tool.cpp:251
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:125
SELECTION_TOOL * m_selectionTool
Selection tool used for obtaining selected items
Definition: edit_tool.h:199
static TOOL_ACTION selectionModified
Modified selection notification.
Definition: pcb_actions.h:114
bool m_dragging
Flag determining if anything is being dragged right now
Definition: edit_tool.h:202
#define EXCLUDE_TRANSIENTS
Definition: edit_tool.h:48
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:116
Common, abstract interface for edit frames.
Used when the right click button is pressed, or when the select tool is in effect.
Definition: collectors.h:245
bool EditingModules() const
Definition: pcb_tool.h:102
static TOOL_ACTION updateLocalRatsnest
Definition: pcb_actions.h:388
#define EXCLUDE_LOCKED_PADS
Definition: edit_tool.h:47
int GetEventRotationAngle(const PCB_BASE_EDIT_FRAME &aFrame, const TOOL_EVENT &aEvt)
Function getEventRotationAngle()
void EditToolSelectionFilter(GENERAL_COLLECTOR &aCollector, int aFlags)
Definition: edit_tool.cpp:173
EDA_ITEM * Front() const
Definition: selection.h:152

References PCB_TOOL::EditingModules(), EditToolSelectionFilter(), SELECTION::Empty(), EXCLUDE_LOCKED_PADS, EXCLUDE_TRANSIENTS, SELECTION::Front(), TOOL_EVT_UTILS::GetEventRotationAngle(), SELECTION::GetReferencePoint(), SELECTION::IsHover(), m_commit, m_dragging, m_selectionTool, TOOL_BASE::m_toolMgr, SELECTION_TOOL::RequestSelection(), TOOL_MANAGER::RunAction(), PCB_TOOL::selection(), PCB_ACTIONS::selectionClear, PCB_ACTIONS::selectionModified, PCB_ACTIONS::updateLocalRatsnest, and updateModificationPoint().

Referenced by setTransitions().

◆ RunMainStack()

void TOOL_INTERACTIVE::RunMainStack ( std::function< void()>  aFunc)
inherited

Function RunMainStack()

Calls a function using the main stack.

Parameters
aFuncis the function to be calls.

Definition at line 85 of file tool_interactive.cpp.

86 {
87  m_toolMgr->RunMainStack( this, std::move( aFunc ) );
88 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
void RunMainStack(TOOL_BASE *aTool, std::function< void()> aFunc)

References TOOL_BASE::m_toolMgr, and TOOL_MANAGER::RunMainStack().

Referenced by DRAWING_TOOL::PlaceText().

◆ selection() [1/2]

const SELECTION & PCB_TOOL::selection ( ) const
protectedinherited

Definition at line 251 of file pcb_tool.cpp.

252 {
253  auto selTool = m_toolMgr->GetTool<SELECTION_TOOL>();
254  const auto& selection = selTool->GetSelection();
255  return selection;
256 }
Class SELECTION_TOOL.
const SELECTION & selection() const
Definition: pcb_tool.cpp:251
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215

References TOOL_MANAGER::GetTool(), and TOOL_BASE::m_toolMgr.

Referenced by AUTOPLACE_TOOL::autoplaceSelected(), PCB_EDITOR_CONTROL::calculateSelectionRatsnest(), ROUTER_TOOL::CanInlineDrag(), changeTrackWidthOnClick(), PAD_TOOL::copyPadSettings(), CreateArray(), MODULE_EDITOR_TOOLS::CreatePadFromShapes(), PCB_EDITOR_CONTROL::CrossProbePcbToSch(), doCopyToClipboard(), Duplicate(), editFootprintInFpEditor(), ExchangeFootprints(), SELECTION_TOOL::expandSelectedConnection(), MODULE_EDITOR_TOOLS::ExplodePadToShapes(), SELECTION_TOOL::filterSelection(), Flip(), DRAWING_TOOL::getSourceZoneForAction(), ROUTER_TOOL::InlineBreakTrack(), ROUTER_TOOL::InlineDrag(), Main(), Mirror(), PCB_EDITOR_CONTROL::modifyLockSelected(), MoveExact(), POINT_EDITOR::OnSelectionChange(), PAD_TOOL::pastePadProperties(), PCBNEW_CONTROL::placeBoardItems(), PCB_EDITOR_CONTROL::PlaceModule(), DRAWING_TOOL::PlaceText(), POSITION_RELATIVE_TOOL::PositionRelative(), Properties(), PAD_TOOL::pushPadSettings(), Rotate(), ZONE_FILLER_TOOL::SegzoneDeleteFill(), SELECTION_TOOL::selectCopper(), PCB_TOOL::selection(), SELECTION_TOOL::selectNet(), PCB_EDITOR_CONTROL::UpdateSelectionRatsnest(), PCB_EDITOR_CONTROL::ZoneDuplicate(), ZONE_FILLER_TOOL::ZoneFill(), PCB_EDITOR_CONTROL::ZoneMerge(), and ZONE_FILLER_TOOL::ZoneUnfill().

◆ selection() [2/2]

SELECTION & PCB_TOOL::selection ( )
protectedinherited

Definition at line 258 of file pcb_tool.cpp.

259 {
260  auto selTool = m_toolMgr->GetTool<SELECTION_TOOL>();
261  auto& selection = selTool->GetSelection();
262  return selection;
263 }
Class SELECTION_TOOL.
const SELECTION & selection() const
Definition: pcb_tool.cpp:251
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215

References TOOL_MANAGER::GetTool(), TOOL_BASE::m_toolMgr, and PCB_TOOL::selection().

◆ SetContextMenu()

void TOOL_INTERACTIVE::SetContextMenu ( CONTEXT_MENU aMenu,
CONTEXT_MENU_TRIGGER  aTrigger = CMENU_BUTTON 
)
inherited

Function SetContextMenu()

Assigns a context menu and tells when it should be activated.

Parameters
aMenuis the menu to be assigned.
aTriggerdetermines conditions upon which the context menu is activated.

Definition at line 74 of file tool_interactive.cpp.

75 {
76  if( aMenu )
77  aMenu->SetTool( this );
78  else
79  aTrigger = CMENU_OFF;
80 
81  m_toolMgr->ScheduleContextMenu( this, aMenu, aTrigger );
82 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
void ScheduleContextMenu(TOOL_BASE *aTool, CONTEXT_MENU *aMenu, CONTEXT_MENU_TRIGGER aTrigger)
Sets behaviour of the tool's context popup menu.
void SetTool(TOOL_INTERACTIVE *aTool)
Function SetTool() Sets a tool that is the creator of the menu.

References CMENU_OFF, TOOL_BASE::m_toolMgr, TOOL_MANAGER::ScheduleContextMenu(), and CONTEXT_MENU::SetTool().

Referenced by GERBVIEW_SELECTION_TOOL::disambiguationMenu(), SELECTION_TOOL::doSelectionMenu(), LENGTH_TUNER_TOOL::mainLoop(), ROUTER_TOOL::mainLoop(), and TOOL_MENU::ShowContextMenu().

◆ SetEditModules()

void PCB_TOOL::SetEditModules ( bool  aEnabled)
inlineinherited

Function SetEditModules()

Toggles edit module mode. When enabled, one may select parts of modules individually (graphics, pads, etc.), so they can be modified.

Parameters
aEnableddecides if the mode should be enabled.

Definition at line 97 of file pcb_tool.h.

98  {
99  m_editModules = aEnabled;
100  }
bool m_editModules
Definition: pcb_tool.h:150

References PCB_TOOL::m_editModules.

◆ setTransitions()

void EDIT_TOOL::setTransitions ( )
overridevirtual

Sets up handlers for various events.

Reimplemented from PCB_TOOL.

Definition at line 1386 of file edit_tool.cpp.

1387 {
1388  Go( &EDIT_TOOL::Main, PCB_ACTIONS::editActivate.MakeEvent() );
1389  Go( &EDIT_TOOL::Main, PCB_ACTIONS::move.MakeEvent() );
1390  Go( &EDIT_TOOL::Drag, PCB_ACTIONS::drag45Degree.MakeEvent() );
1392  Go( &EDIT_TOOL::Rotate, PCB_ACTIONS::rotateCw.MakeEvent() );
1393  Go( &EDIT_TOOL::Rotate, PCB_ACTIONS::rotateCcw.MakeEvent() );
1394  Go( &EDIT_TOOL::Flip, PCB_ACTIONS::flip.MakeEvent() );
1395  Go( &EDIT_TOOL::Remove, PCB_ACTIONS::remove.MakeEvent() );
1396  Go( &EDIT_TOOL::Remove, PCB_ACTIONS::removeAlt.MakeEvent() );
1402  Go( &EDIT_TOOL::Mirror, PCB_ACTIONS::mirror.MakeEvent() );
1403 
1410 }
int Main(const TOOL_EVENT &aEvent)
Function Main()
Definition: edit_tool.cpp:338
int Properties(const TOOL_EVENT &aEvent)
Function Edit()
Definition: edit_tool.cpp:633
int Rotate(const TOOL_EVENT &aEvent)
Function Rotate()
Definition: edit_tool.cpp:675
static TOOL_ACTION move
move an item
Definition: pcb_actions.h:96
int ExchangeFootprints(const TOOL_EVENT &aEvent)
Function ExchangeFootprints()
Definition: edit_tool.cpp:1265
static TOOL_ACTION editActivate
Activation of the edit tool.
Definition: pcb_actions.h:93
static TOOL_ACTION dragFreeAngle
Definition: pcb_actions.h:142
static TOOL_ACTION properties
Activation of the edit tool.
Definition: pcb_actions.h:111
static TOOL_ACTION removeAlt
Definition: pcb_actions.h:133
static TOOL_ACTION drag45Degree
Definition: pcb_actions.h:141
static TOOL_ACTION mirror
Mirroring of selected items.
Definition: pcb_actions.h:108
void Go(int(T::*aStateFunc)(const TOOL_EVENT &), const TOOL_EVENT_LIST &aConditions=TOOL_EVENT(TC_ANY, TA_ANY))
Function Go()
int Mirror(const TOOL_EVENT &aEvent)
Function Mirror.
Definition: edit_tool.cpp:760
static TOOL_ACTION moveExact
Activation of the exact move tool.
Definition: pcb_actions.h:117
int cutToClipboard(const TOOL_EVENT &aEvent)
Function cutToClipboard() Cuts the current selection to the clipboard by formatting it as a fake pcb ...
Definition: edit_tool.cpp:1556
static TOOL_ACTION duplicate
Activation of the duplication tool.
Definition: pcb_actions.h:120
int Flip(const TOOL_EVENT &aEvent)
Function Flip()
Definition: edit_tool.cpp:842
static TOOL_ACTION duplicateIncrement
Activation of the duplication tool with incrementing (e.g. pad number)
Definition: pcb_actions.h:123
static TOOL_ACTION rotateCw
Rotation of selected objects clockwise.
Definition: pcb_actions.h:99
static TOOL_ACTION createArray
Tool for creating an array of objects.
Definition: pcb_actions.h:323
int Drag(const TOOL_EVENT &aEvent)
Function Drag()
Definition: edit_tool.cpp:326
static TOOL_ACTION exchangeFootprints
Exchange footprints of modules.
Definition: pcb_actions.h:129
static TOOL_ACTION cutToClipboard
Paste from clipboard.
Definition: pcb_actions.h:332
static TOOL_ACTION copyToClipboard
Copy selected items to clipboard.
Definition: pcb_actions.h:326
static TOOL_ACTION updateFootprints
Update footprints to reflect any changes in the library.
Definition: pcb_actions.h:126
static TOOL_ACTION rotateCcw
Rotation of selected objects counter-clockwise.
Definition: pcb_actions.h:102
int MoveExact(const TOOL_EVENT &aEvent)
Function MoveExact()
Definition: edit_tool.cpp:997
int Remove(const TOOL_EVENT &aEvent)
Function Remove()
Definition: edit_tool.cpp:883
static TOOL_ACTION flip
Flipping of selected objects.
Definition: pcb_actions.h:105
int CreateArray(const TOOL_EVENT &aEvent)
Function CreateArray()
Definition: edit_tool.cpp:1223
int MeasureTool(const TOOL_EVENT &aEvent)
Launches a tool to measure between points
Definition: edit_tool.cpp:1289
static TOOL_ACTION editFootprintInFpEditor
Definition: pcb_actions.h:396
int editFootprintInFpEditor(const TOOL_EVENT &aEvent)
Definition: edit_tool.cpp:1436
int copyToClipboard(const TOOL_EVENT &aEvent)
Function copyToClipboard() Sends the current selection to the clipboard by formatting it as a fake pc...
Definition: edit_tool.cpp:1544
static TOOL_ACTION remove
Deleting a BOARD_ITEM.
Definition: pcb_actions.h:132
int Duplicate(const TOOL_EVENT &aEvent)
Function Duplicate()
Definition: edit_tool.cpp:1073
static TOOL_ACTION measureTool
Definition: pcb_actions.h:370

References copyToClipboard(), PCB_ACTIONS::copyToClipboard, CreateArray(), PCB_ACTIONS::createArray, cutToClipboard(), PCB_ACTIONS::cutToClipboard, Drag(), PCB_ACTIONS::drag45Degree, PCB_ACTIONS::dragFreeAngle, PCB_ACTIONS::duplicate, Duplicate(), PCB_ACTIONS::duplicateIncrement, PCB_ACTIONS::editActivate, editFootprintInFpEditor(), PCB_ACTIONS::editFootprintInFpEditor, PCB_ACTIONS::exchangeFootprints, ExchangeFootprints(), Flip(), PCB_ACTIONS::flip, TOOL_INTERACTIVE::Go(), Main(), MeasureTool(), PCB_ACTIONS::measureTool, PCB_ACTIONS::mirror, Mirror(), PCB_ACTIONS::move, PCB_ACTIONS::moveExact, MoveExact(), Properties(), PCB_ACTIONS::properties, Remove(), PCB_ACTIONS::remove, PCB_ACTIONS::removeAlt, Rotate(), PCB_ACTIONS::rotateCcw, PCB_ACTIONS::rotateCw, and PCB_ACTIONS::updateFootprints.

◆ updateModificationPoint()

bool EDIT_TOOL::updateModificationPoint ( SELECTION aSelection)
private

Returns the right modification point (e.g.

for rotation), depending on the number of selected items.

Definition at line 1413 of file edit_tool.cpp.

1414 {
1415  if( m_dragging && aSelection.HasReferencePoint() )
1416  return false;
1417 
1418  // When there is only one item selected, the reference point is its position...
1419  if( aSelection.Size() == 1 )
1420  {
1421  auto item = static_cast<BOARD_ITEM*>( aSelection.Front() );
1422  auto pos = item->GetPosition();
1423  aSelection.SetReferencePoint( VECTOR2I( pos.x, pos.y ) );
1424  }
1425  // ...otherwise modify items with regard to the grid-snapped cursor position
1426  else
1427  {
1429  aSelection.SetReferencePoint( m_cursor );
1430  }
1431 
1432  return true;
1433 }
VECTOR2I m_cursor
Last cursor position (needed for getModificationPoint() to avoid changes of edit reference point).
Definition: edit_tool.h:209
VECTOR2< int > VECTOR2I
Definition: vector2d.h:587
void SetReferencePoint(const VECTOR2I &aP)
Definition: selection.h:205
bool m_dragging
Flag determining if anything is being dragged right now
Definition: edit_tool.h:202
bool HasReferencePoint() const
Definition: selection.h:195
int Size() const
Returns the number of selected parts.
Definition: selection.h:122
KIGFX::VIEW_CONTROLS * getViewControls() const
Function getViewControls()
Definition: tool_base.cpp:41
VECTOR2D GetCursorPosition() const
Returns the current cursor position in world coordinates.
EDA_ITEM * Front() const
Definition: selection.h:152

References SELECTION::Front(), KIGFX::VIEW_CONTROLS::GetCursorPosition(), TOOL_BASE::getViewControls(), SELECTION::HasReferencePoint(), m_cursor, m_dragging, SELECTION::SetReferencePoint(), and SELECTION::Size().

Referenced by Flip(), Main(), Mirror(), and Rotate().

◆ view()

◆ Wait()

OPT_TOOL_EVENT TOOL_INTERACTIVE::Wait ( const TOOL_EVENT_LIST aEventList = TOOL_EVENTTC_ANYTA_ANY ))
inherited

Function Wait()

Suspends execution of the tool until an event specified in aEventList arrives. No parameters means waiting for any event.

Definition at line 55 of file tool_interactive.cpp.

56 {
57  return m_toolMgr->ScheduleWait( this, aEventList );
58 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
OPT< TOOL_EVENT > ScheduleWait(TOOL_BASE *aTool, const TOOL_EVENT_LIST &aConditions)
Pauses execution of a given tool until one or more events matching aConditions arrives.

References TOOL_BASE::m_toolMgr, and TOOL_MANAGER::ScheduleWait().

Referenced by PCBNEW_CONTROL::DeleteItemCursor(), GERBVIEW_SELECTION_TOOL::disambiguationMenu(), PCB_TOOL::doInteractiveItemPlacement(), SELECTION_TOOL::doSelectionMenu(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawDimension(), MICROWAVE_TOOL::drawMicrowaveInductor(), DRAWING_TOOL::drawSegment(), DRAWING_TOOL::drawZone(), PCB_EDITOR_CONTROL::DrillOrigin(), MODULE_EDITOR_TOOLS::EnumeratePads(), PCBNEW_CONTROL::GridSetOrigin(), PCB_EDITOR_CONTROL::HighlightNetCursor(), ROUTER_TOOL::InlineDrag(), ZOOM_TOOL::Main(), PICKER_TOOL::Main(), CVPCB_SELECTION_TOOL::Main(), GERBVIEW_SELECTION_TOOL::Main(), Main(), SELECTION_TOOL::Main(), LENGTH_TUNER_TOOL::mainLoop(), ROUTER_TOOL::mainLoop(), CVPCB_SELECTION_TOOL::MeasureTool(), GERBVIEW_SELECTION_TOOL::MeasureTool(), MeasureTool(), POINT_EDITOR::OnSelectionChange(), ROUTER_TOOL::performDragging(), ROUTER_TOOL::performRouting(), LENGTH_TUNER_TOOL::performTuning(), pickCopyReferencePoint(), DRAWING_TOOL::PlaceImportedGraphics(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), DRAWING_TOOL::PlaceText(), Remove(), GERBVIEW_SELECTION_TOOL::selectMultiple(), SELECTION_TOOL::selectMultiple(), GERBVIEW_SELECTION_TOOL::selectPoint(), SELECTION_TOOL::selectPoint(), POSITION_RELATIVE_TOOL::SelectPositionRelativeItem(), ZOOM_TOOL::selectRegion(), DRAWING_TOOL::SetAnchor(), and PCB_EDITOR_CONTROL::ShowLocalRatsnest().

Member Data Documentation

◆ m_commit

std::unique_ptr<BOARD_COMMIT> EDIT_TOOL::m_commit
private

◆ m_cursor

VECTOR2I EDIT_TOOL::m_cursor
private

Last cursor position (needed for getModificationPoint() to avoid changes of edit reference point).

Definition at line 209 of file edit_tool.h.

Referenced by Main(), and updateModificationPoint().

◆ m_dragging

bool EDIT_TOOL::m_dragging
private

Flag determining if anything is being dragged right now

Definition at line 202 of file edit_tool.h.

Referenced by Flip(), Main(), Mirror(), MoveExact(), Reset(), Rotate(), and updateModificationPoint().

◆ m_editModules

◆ m_lockedSelected

bool EDIT_TOOL::m_lockedSelected
private

Flag determining whether we are prompting for locked removal

Definition at line 205 of file edit_tool.h.

Referenced by Main(), and Remove().

◆ m_menu

◆ m_selectionTool

SELECTION_TOOL* EDIT_TOOL::m_selectionTool
private

Selection tool used for obtaining selected items

Definition at line 199 of file edit_tool.h.

Referenced by CreateArray(), doCopyToClipboard(), Duplicate(), editFootprintInFpEditor(), ExchangeFootprints(), Flip(), Init(), Main(), Mirror(), MoveExact(), Properties(), Remove(), and Rotate().

◆ m_toolId

TOOL_ID TOOL_BASE::m_toolId
protectedinherited

Unique identifier for the tool, assigned by a TOOL_MANAGER instance.

Definition at line 210 of file tool_base.h.

Referenced by TOOL_INTERACTIVE::Activate(), TOOL_BASE::GetId(), and TOOL_BASE::IsToolActive().

◆ m_toolMgr

TOOL_MANAGER* TOOL_BASE::m_toolMgr
protectedinherited

Definition at line 215 of file tool_base.h.

Referenced by TOOL_INTERACTIVE::Activate(), TOOL_BASE::attachManager(), PCB_EDITOR_CONTROL::calculateSelectionRatsnest(), ROUTER_TOOL::CanInlineDrag(), PCB_EDITOR_CONTROL::ClearHighlight(), GERBVIEW_SELECTION_TOOL::clearSelection(), SELECTION_TOOL::clearSelection(), PAD_TOOL::copyPadSettings(), MODULE_EDITOR_TOOLS::CreatePadFromShapes(), PCB_EDITOR_CONTROL::CrossProbePcbToSch(), PCB_EDITOR_CONTROL::CrossProbeSchToPcb(), COMMON_TOOLS::CursorControl(), ROUTER_TOOL::CustomTrackWidthDialog(), PCBNEW_CONTROL::DeleteItemCursor(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawDimension(), DRAWING_TOOL::drawSegment(), DRAWING_TOOL::drawZone(), PCB_EDITOR_CONTROL::DrillOrigin(), Duplicate(), editFootprintInFpEditor(), MODULE_EDITOR_TOOLS::EnumeratePads(), ExchangeFootprints(), SELECTION_TOOL::expandSelectedConnection(), MODULE_EDITOR_TOOLS::ExplodePadToShapes(), SELECTION_TOOL::findCallback(), SELECTION_TOOL::findMove(), Flip(), TOOL_BASE::getEditFrameInt(), TOOL_BASE::GetManager(), TOOL_BASE::getModelInt(), DRAWING_TOOL::getSourceZoneForAction(), TOOL_BASE::getView(), TOOL_BASE::getViewControls(), TOOL_INTERACTIVE::goInternal(), PCBNEW_CONTROL::GridSetOrigin(), GERBVIEW_CONTROL::HighlightControl(), PCB_EDITOR_CONTROL::HighlightNet(), PCB_EDITOR_CONTROL::HighlightNetCursor(), PAD_TOOL::Init(), ALIGN_DISTRIBUTE_TOOL::Init(), PCB_EDITOR_CONTROL::Init(), POINT_EDITOR::Init(), POSITION_RELATIVE_TOOL::Init(), Init(), ROUTER_TOOL::InlineBreakTrack(), ROUTER_TOOL::InlineDrag(), invokeInlineRouter(), isInteractiveDragEnabled(), TOOL_BASE::IsToolActive(), ZOOM_TOOL::Main(), PICKER_TOOL::Main(), Main(), SELECTION_TOOL::Main(), LENGTH_TUNER_TOOL::mainLoop(), ROUTER_TOOL::mainLoop(), Mirror(), PCB_EDITOR_CONTROL::modifyLockSelected(), MoveExact(), POINT_EDITOR::OnSelectionChange(), PAD_TOOL::pastePadProperties(), pickCopyReferencePoint(), PCBNEW_CONTROL::placeBoardItems(), DRAWING_TOOL::PlaceImportedGraphics(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), DRAWING_TOOL::PlaceText(), Properties(), PAD_TOOL::pushPadSettings(), POSITION_RELATIVE_TOOL::RelativeItemSelectionMove(), Remove(), POINT_EDITOR::removeCorner(), SELECTION_TOOL::RequestSelection(), CVPCB_CONTROL::ResetCoords(), PCBNEW_CONTROL::ResetCoords(), TOOL_INTERACTIVE::resetTransitions(), Rotate(), TOOL_INTERACTIVE::RunMainStack(), ZONE_FILLER_TOOL::SegzoneDeleteFill(), SELECTION_TOOL::selectCopper(), PCB_TOOL::selection(), GERBVIEW_SELECTION_TOOL::SelectItem(), SELECTION_TOOL::SelectItem(), GERBVIEW_SELECTION_TOOL::SelectItems(), SELECTION_TOOL::SelectItems(), GERBVIEW_SELECTION_TOOL::selectMultiple(), SELECTION_TOOL::selectMultiple(), SELECTION_TOOL::selectNet(), SELECTION_TOOL::selectOnSheetFromEeschema(), POSITION_RELATIVE_TOOL::SelectPositionRelativeItem(), SELECTION_TOOL::selectSameSheet(), TOOL_INTERACTIVE::SetContextMenu(), PCB_EDITOR_CONTROL::ShowLocalRatsnest(), GERBVIEW_SELECTION_TOOL::toggleSelection(), SELECTION_TOOL::toggleSelection(), PCB_EDITOR_CONTROL::TrackWidthDec(), PCB_EDITOR_CONTROL::TrackWidthInc(), GERBVIEW_SELECTION_TOOL::UnselectItem(), SELECTION_TOOL::UnselectItem(), GERBVIEW_SELECTION_TOOL::UnselectItems(), SELECTION_TOOL::UnselectItems(), PCB_EDITOR_CONTROL::UpdateSelectionRatsnest(), PCB_EDITOR_CONTROL::ViaSizeDec(), PCB_EDITOR_CONTROL::ViaSizeInc(), TOOL_INTERACTIVE::Wait(), PCB_EDITOR_CONTROL::ZoneDuplicate(), and PCB_EDITOR_CONTROL::ZoneMerge().

◆ m_toolName

std::string TOOL_BASE::m_toolName
protectedinherited

Name of the tool.

Names are expected to obey the format application.ToolName (eg. pcbnew.InteractiveSelection).

Definition at line 214 of file tool_base.h.

Referenced by TOOL_BASE::GetName().

◆ m_toolSettings

TOOL_SETTINGS TOOL_BASE::m_toolSettings
protectedinherited

Definition at line 216 of file tool_base.h.

Referenced by TOOL_BASE::attachManager(), and TOOL_BASE::GetSettings().

◆ m_type

TOOL_TYPE TOOL_BASE::m_type
protectedinherited

Stores the type of the tool.

Definition at line 207 of file tool_base.h.

Referenced by TOOL_BASE::GetType().


The documentation for this class was generated from the following files: