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

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.

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 ( )

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

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.

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().

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...
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.

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

Referenced by TOOL_MANAGER::RegisterTool().

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
BOARD* PCB_TOOL::board ( ) const
inlineprotectedinherited

Definition at line 140 of file pcb_tool.h.

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(), highlightNet(), PCBNEW_CONTROL::LayerNext(), PCBNEW_CONTROL::LayerPrev(), 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().

140 { return getModel<BOARD>(); }
bool EDIT_TOOL::changeTrackWidthOnClick ( const SELECTION selection)
private

Definition at line 586 of file edit_tool.cpp.

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_BASE_FRAME::Settings(), SELECTION::Size(), and VIA_MICROVIA.

Referenced by Properties().

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

References doCopyToClipboard().

Referenced by cutToClipboard(), and setTransitions().

1522 {
1523  return doCopyToClipboard( true );
1524 }
int doCopyToClipboard(bool withAnchor)
Definition: edit_tool.cpp:1489
int EDIT_TOOL::copyToClipboardWithAnchor ( const TOOL_EVENT aEvent)

Definition at line 1527 of file edit_tool.cpp.

References doCopyToClipboard().

1528 {
1529  return doCopyToClipboard( true );
1530 }
int doCopyToClipboard(bool withAnchor)
Definition: edit_tool.cpp:1489
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 1200 of file edit_tool.cpp.

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

Referenced by setTransitions().

1201 {
1203  []( const VECTOR2I& aPt, GENERAL_COLLECTOR& aCollector )
1205 
1206  if( selection.Empty() )
1207  return 0;
1208 
1209  // we have a selection to work on now, so start the tool process
1210  PCB_BASE_FRAME* editFrame = getEditFrame<PCB_BASE_FRAME>();
1211  GAL_ARRAY_CREATOR array_creator( *editFrame, m_editModules, selection );
1212  array_creator.Invoke();
1213 
1214  return 0;
1215 }
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:116
SELECTION & RequestSelection(CLIENT_SELECTION_FILTER aClientFilter, std::vector< BOARD_ITEM * > *aFiltered=NULL)
Function RequestSelection()
SELECTION_TOOL * m_selectionTool
Selection tool used for obtaining selected items
Definition: edit_tool.h:199
const SELECTION & selection() const
Definition: pcb_tool.cpp:245
#define EXCLUDE_TRANSIENTS
Definition: edit_tool.h:48
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...
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 1533 of file edit_tool.cpp.

References copyToClipboard(), and Remove().

Referenced by setTransitions().

1534 {
1535  if( !copyToClipboard( aEvent ) )
1536  Remove( aEvent );
1537 
1538  return 0;
1539 }
int Remove(const TOOL_EVENT &aEvent)
Function Remove()
Definition: edit_tool.cpp:873
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:1521
PCB_DISPLAY_OPTIONS * PCB_TOOL::displayOptions ( ) const
protectedinherited

Definition at line 235 of file pcb_tool.cpp.

References PCB_TOOL::frame(), and PCB_BASE_FRAME::GetDisplayOptions().

Referenced by PCBNEW_CONTROL::GraphicDisplayMode(), PCBNEW_CONTROL::HighContrastMode(), PCBNEW_CONTROL::ModuleEdgeOutlines(), PCBNEW_CONTROL::ModuleTextOutlines(), PCBNEW_CONTROL::PadDisplayMode(), PNS::TOOL_BASE::pickSingleItem(), PCBNEW_CONTROL::TrackDisplayMode(), PCBNEW_CONTROL::ViaDisplayMode(), and PCBNEW_CONTROL::ZoneDisplayMode().

236 {
237  return static_cast<PCB_DISPLAY_OPTIONS*>( frame()->GetDisplayOptions() );
238 }
void * GetDisplayOptions() override
Function GetDisplayOptions returns the display options current in use Display options are relative to...
Class PCB_DISPLAY_OPTIONS handles display options like enable/disable some optional drawings...
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:139
int EDIT_TOOL::doCopyToClipboard ( bool  withAnchor)

Definition at line 1489 of file edit_tool.cpp.

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().

1490 {
1491  CLIPBOARD_IO io;
1492 
1493  Activate();
1494 
1496  []( const VECTOR2I& aPt, GENERAL_COLLECTOR& aCollector )
1498 
1499  if( selection.Empty() )
1500  return 1;
1501 
1502  if( withAnchor )
1503  {
1504  VECTOR2I refPoint;
1505  bool rv = pickCopyReferencePoint( refPoint );
1506  frame()->SetMsgPanel( board() );
1507 
1508  if( !rv )
1509  return 1;
1510 
1511  selection.SetReferencePoint( refPoint );
1512  }
1513 
1514  io.SetBoard( board() );
1515  io.SaveSelection( selection );
1516 
1517  return 0;
1518 }
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:116
SELECTION & RequestSelection(CLIENT_SELECTION_FILTER aClientFilter, std::vector< BOARD_ITEM * > *aFiltered=NULL)
Function RequestSelection()
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.
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:139
const SELECTION & selection() const
Definition: pcb_tool.cpp:245
#define EXCLUDE_TRANSIENTS
Definition: edit_tool.h:48
bool pickCopyReferencePoint(VECTOR2I &aP)
Definition: edit_tool.cpp:1450
Used when the right click button is pressed, or when the select tool is in effect.
Definition: collectors.h:245
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
BOARD * board() const
Definition: pcb_tool.h:140
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.

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(), dyn_cast(), 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().

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  newItem->ClearFlags();
136  preview.Remove( newItem.get() );
137 
138  aPlacer->PlaceItem( newItem.get(), commit );
139 
140  if( newItem->Type() == PCB_MODULE_T )
141  {
142  auto module = dyn_cast<MODULE*>( newItem.get() );
143  module->RunOnChildren( std::bind( &KIGFX::VIEW_GROUP::Remove, &preview, _1 ) );
144  }
145 
146  newItem.release();
147  commit.Push( aCommitMessage );
148 
149  controls()->CaptureCursor( false );
150  controls()->SetAutoPan( false );
151  controls()->ShowCursor( true );
152 
153  if( !( aOptions & IPO_REPEAT ) )
154  break;
155 
156  if( aOptions & IPO_SINGLE_CLICK && !( aOptions & IPO_PROPERTIES ) )
157  {
159 
160  newItem = aPlacer->CreateItem();
161 
162  if( newItem )
163  {
164  newItem->SetPosition( wxPoint( pos.x, pos.y ) );
165  preview.Add( newItem.get() );
166  }
167  }
168  }
169  }
170  else if( evt->IsClick( BUT_RIGHT ) )
171  {
173  }
174  else if( newItem && evt->Category() == TC_COMMAND )
175  {
176  /*
177  * Handle any events that can affect the item as we move
178  * it around, eg rotate and flip
179  */
180 
181  if( TOOL_EVT_UTILS::IsRotateToolEvt( *evt ) && ( aOptions & IPO_ROTATE ) )
182  {
183  const int rotationAngle = TOOL_EVT_UTILS::GetEventRotationAngle( *frame(), *evt );
184  newItem->Rotate( newItem->GetPosition(), rotationAngle );
185  view()->Update( &preview );
186  }
187  else if( evt->IsAction( &PCB_ACTIONS::flip ) && ( aOptions & IPO_FLIP ) )
188  {
189  newItem->Flip( newItem->GetPosition() );
190  view()->Update( &preview );
191  }
192  }
193 
194  else if( newItem && evt->IsMotion() )
195  {
196  // track the cursor
197  newItem->SetPosition( wxPoint( cursorPos.x, cursorPos.y ) );
198  aPlacer->SnapItem( newItem.get() );
199 
200  // Show a preview of the item
201  view()->Update( &preview );
202  }
203  }
204 
205  view()->Remove( &preview );
206 }
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.
virtual void PlaceItem(BOARD_ITEM *aItem, BOARD_COMMIT &aCommit)
Definition: pcb_tool.cpp:265
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.
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
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()
Casted dyn_cast(From aObject)
Function dyn_cast()
Definition: typeinfo.h:61
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
virtual void SnapItem(BOARD_ITEM *aItem)
Definition: pcb_tool.cpp:260
KIGFX::VIEW_CONTROLS * controls() const
Definition: pcb_tool.h:138
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. ...
VECTOR2D GetCursorPosition() const
Returns the current cursor position in world coordinates.
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:139
MODULE * module() const
Definition: pcb_tool.h:141
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
KIGFX::PCB_VIEW * view() const
Definition: pcb_tool.h:137
TOOL_MANAGER * GetManager() const
Function GetManager() Returns the instance of TOOL_MANAGER that takes care of the tool...
Definition: tool_base.h:144
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
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
OPT< TOOL_EVENT > OPT_TOOL_EVENT
Definition: tool_event.h:495
BOARD * board() const
Definition: pcb_tool.h:140
virtual void Remove(EDA_ITEM *aItem)
Definition: selection.h:82
int EDIT_TOOL::Drag ( const TOOL_EVENT aEvent)

Function Drag()

todo

Definition at line 326 of file edit_tool.cpp.

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

Referenced by setTransitions().

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
int EDIT_TOOL::Duplicate ( const TOOL_EVENT aEvent)

Function Duplicate()

Duplicates the current selection and starts a move action.

Definition at line 1050 of file edit_tool.cpp.

References EDA_ITEM::ClearSelected(), EDA_DRAW_FRAME::DisplayToolMsg(), BOARD::Duplicate(), MODULE::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().

1051 {
1052  bool increment = aEvent.IsAction( &PCB_ACTIONS::duplicateIncrement );
1053 
1054  // Be sure that there is at least one item that we can modify
1056  []( const VECTOR2I& aPt, GENERAL_COLLECTOR& aCollector )
1058 
1059  if( selection.Empty() )
1060  return 0;
1061 
1062  // we have a selection to work on now, so start the tool process
1063  PCB_BASE_EDIT_FRAME* editFrame = getEditFrame<PCB_BASE_EDIT_FRAME>();
1064 
1065  std::vector<BOARD_ITEM*> new_items;
1066  new_items.reserve( selection.Size() );
1067 
1068  BOARD_ITEM* orig_item = nullptr;
1069  BOARD_ITEM* dupe_item = nullptr;
1070 
1071  // Each selected item is duplicated and pushed to new_items list
1072  // Old selection is cleared, and new items are then selected.
1073  for( auto item : selection )
1074  {
1075  if( !item )
1076  continue;
1077 
1078  orig_item = static_cast<BOARD_ITEM*>( item );
1079 
1080  if( m_editModules )
1081  {
1082  dupe_item = editFrame->GetBoard()->m_Modules->Duplicate( orig_item, increment );
1083  }
1084  else
1085  {
1086 #if 0
1087  // @TODO: see if we allow zone duplication here
1088  // Duplicate zones is especially tricky (overlaping zones must be merged)
1089  // so zones are not duplicated
1090  if( item->Type() != PCB_ZONE_AREA_T )
1091 #endif
1092  dupe_item = editFrame->GetBoard()->Duplicate( orig_item );
1093  }
1094 
1095  if( dupe_item )
1096  {
1097  // Clear the selection flag here, otherwise the SELECTION_TOOL
1098  // will not properly select it later on
1099  dupe_item->ClearSelected();
1100 
1101  new_items.push_back( dupe_item );
1102  m_commit->Add( dupe_item );
1103  }
1104  }
1105 
1106  // Clear the old selection first
1108 
1109  // Select the new items
1110  m_toolMgr->RunAction( PCB_ACTIONS::selectItems, true, &new_items );
1111 
1112  // record the new items as added
1113  if( !selection.Empty() )
1114  {
1115  editFrame->DisplayToolMsg( wxString::Format( _( "Duplicated %d item(s)" ),
1116  (int) new_items.size() ) );
1117 
1118 
1119  // If items were duplicated, pick them up
1120  // this works well for "dropping" copies around and pushes the commit
1122  Main( evt );
1123  }
1124 
1125  return 0;
1126 }
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 Empty() const
Checks if there is anything selected.
Definition: selection.h:116
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)
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
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
BOARD_ITEM * Duplicate(const BOARD_ITEM *aItem, bool aIncrementPadNumbers, bool aAddToModule=false)
Function Duplicate Duplicate a given item within the module, without adding to the board...
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
BOARD * GetBoard() const
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
SELECTION_TOOL * m_selectionTool
Selection tool used for obtaining selected items
Definition: edit_tool.h:199
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
const SELECTION & selection() const
Definition: pcb_tool.cpp:245
#define EXCLUDE_TRANSIENTS
Definition: edit_tool.h:48
bool m_editModules
Definition: pcb_tool.h:150
TOOL_EVENT MakeEvent() const
Function HasHotKey() Checks if the action has a hot key assigned.
Definition: tool_action.h:104
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
int Size() const
Returns the number of selected parts.
Definition: selection.h:122
#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)
int EDIT_TOOL::editFootprintInFpEditor ( const TOOL_EVENT aEvent)
private

Definition at line 1413 of file edit_tool.cpp.

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().

1414 {
1416 
1417  if( selection.Empty() )
1418  return 0;
1419 
1421 
1422  if( !mod )
1423  return 0;
1424 
1425  PCB_BASE_EDIT_FRAME* editFrame = getEditFrame<PCB_BASE_EDIT_FRAME>();
1426 
1427  editFrame->SetCurItem( mod );
1428 
1429  if( editFrame->GetCurItem()->GetTimeStamp() == 0 ) // Module Editor needs a non null timestamp
1430  {
1431  editFrame->GetCurItem()->SetTimeStamp( GetNewTimeStamp() );
1432  editFrame->OnModify();
1433  }
1434 
1436 
1437  editor->Load_Module_From_BOARD( (MODULE*) editFrame->GetCurItem() );
1438  editFrame->SetCurItem( NULL ); // the current module could be deleted by
1439 
1440  editor->Show( true );
1441  editor->Raise(); // Iconize( false );
1442 
1443  if( selection.IsHover() )
1445 
1446  return 0;
1447 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:116
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
SELECTION & RequestSelection(CLIENT_SELECTION_FILTER aClientFilter, std::vector< BOARD_ITEM * > *aFiltered=NULL)
Function RequestSelection()
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:212
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
bool Load_Module_From_BOARD(MODULE *Module)
Load in Modedit a footprint from the main board.
const SELECTION & selection() const
Definition: pcb_tool.cpp:245
T * FirstOfKind() const
Definition: selection.h:163
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.
bool IsHover() const
Definition: selection.h:69
static void FootprintFilter(const VECTOR2I &, GENERAL_COLLECTOR &aCollector)
Function FootprintFilter()
Definition: edit_tool.cpp:1230
BOARD_ITEM * GetCurItem()
#define mod(a, n)
Definition: greymap.cpp:24
timestamp_t GetTimeStamp() const
Definition: base_struct.h:207
void SetTimeStamp(timestamp_t aNewTimeStamp)
Definition: base_struct.h:206
bool PCB_TOOL::EditingModules ( ) const
inlineinherited

Definition at line 102 of file pcb_tool.h.

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

103  {
104  return m_editModules;
105  }
bool m_editModules
Definition: pcb_tool.h:150
const TOOL_EVENT TOOL_INTERACTIVE::evActivate ( std::string  aToolName = "")
protectedinherited

functions below are not yet implemented - their interface may change

const TOOL_EVENT TOOL_INTERACTIVE::evButtonDown ( int  aButton = BUT_ANY)
protectedinherited
const TOOL_EVENT TOOL_INTERACTIVE::evButtonUp ( int  aButton = BUT_ANY)
protectedinherited
const TOOL_EVENT TOOL_INTERACTIVE::evClick ( int  aButton = BUT_ANY)
protectedinherited
const TOOL_EVENT TOOL_INTERACTIVE::evCommand ( int  aCommandId = -1)
protectedinherited
const TOOL_EVENT TOOL_INTERACTIVE::evCommand ( std::string  aCommandStr = "")
protectedinherited
const TOOL_EVENT TOOL_INTERACTIVE::evDrag ( int  aButton = BUT_ANY)
protectedinherited
const TOOL_EVENT TOOL_INTERACTIVE::evMotion ( )
protectedinherited
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 1242 of file edit_tool.cpp.

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().

1243 {
1245 
1246  bool updateMode = aEvent.IsAction( &PCB_ACTIONS::updateFootprints );
1247 
1248  MODULE* mod = (selection.Empty() ? nullptr : selection.FirstOfKind<MODULE> () );
1249 
1250  frame()->SetCurItem( mod );
1251 
1252  // Footprint exchange could remove modules, so they have to be
1253  // removed from the selection first
1255 
1256  // invoke the exchange dialog process
1257  {
1258  DIALOG_EXCHANGE_FOOTPRINTS dialog( frame(), mod, updateMode, mod != nullptr );
1259  dialog.ShowQuasiModal();
1260  }
1261 
1262  return 0;
1263 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:116
SELECTION & RequestSelection(CLIENT_SELECTION_FILTER aClientFilter, std::vector< BOARD_ITEM * > *aFiltered=NULL)
Function RequestSelection()
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
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
SELECTION_TOOL * m_selectionTool
Selection tool used for obtaining selected items
Definition: edit_tool.h:199
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:139
const SELECTION & selection() const
Definition: pcb_tool.cpp:245
T * FirstOfKind() const
Definition: selection.h:163
static TOOL_ACTION updateFootprints
Update footprints to reflect any changes in the library.
Definition: pcb_actions.h:126
static void FootprintFilter(const VECTOR2I &, GENERAL_COLLECTOR &aCollector)
Function FootprintFilter()
Definition: edit_tool.cpp:1230
#define mod(a, n)
Definition: greymap.cpp:24
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 832 of file edit_tool.cpp.

References PCB_TOOL::EditingModules(), EditToolSelectionFilter(), SELECTION::Empty(), EXCLUDE_LOCKED, EXCLUDE_LOCKED_PADS, EXCLUDE_TRANSIENTS, SELECTION::Front(), SELECTION::GetReferencePoint(), 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().

833 {
835  []( const VECTOR2I& aPt, GENERAL_COLLECTOR& aCollector )
837 
838  if( selection.Empty() )
839  return 0;
840 
842  auto modPoint = selection.GetReferencePoint();
843 
844  // When editing modules, all items have the same parent
845  if( EditingModules() )
846  {
847  m_commit->Modify( selection.Front() );
848  }
849 
850  for( auto item : selection )
851  {
852  if( !item->IsNew() && !EditingModules() )
853  m_commit->Modify( item );
854 
855  static_cast<BOARD_ITEM*>( item )->Flip( modPoint );
856  }
857 
858  if( !m_dragging )
859  m_commit->Push( _( "Flip" ) );
860 
861  if( selection.IsHover() && !m_dragging )
863 
865 
866  if( m_dragging )
868 
869  return 0;
870 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:116
VECTOR2I GetReferencePoint() const
Definition: selection.h:200
SELECTION & RequestSelection(CLIENT_SELECTION_FILTER aClientFilter, std::vector< BOARD_ITEM * > *aFiltered=NULL)
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
bool updateModificationPoint(SELECTION &aSelection)
Returns the right modification point (e.g.
Definition: edit_tool.cpp:1390
EDA_ITEM * Front() const
Definition: selection.h:152
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
int Flip(const TOOL_EVENT &aEvent)
Function Flip()
Definition: edit_tool.cpp:832
bool m_dragging
Flag determining if anything is being dragged right now
Definition: edit_tool.h:202
const SELECTION & selection() const
Definition: pcb_tool.cpp:245
#define EXCLUDE_TRANSIENTS
Definition: edit_tool.h:48
bool EditingModules() const
Definition: pcb_tool.h:102
Used when the right click button is pressed, or when the select tool is in effect.
Definition: collectors.h:245
#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
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 1230 of file edit_tool.cpp.

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

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

1231 {
1232  for( int i = aCollector.GetCount() - 1; i >= 0; i-- )
1233  {
1234  BOARD_ITEM* item = static_cast<BOARD_ITEM*>( aCollector[i] );
1235 
1236  if( item->Type() != PCB_MODULE_T )
1237  aCollector.Remove( i );
1238  }
1239 }
int GetCount() const
Function GetCount returns the number of objects in the list.
Definition: collector.h:114
KICAD_T Type() const
Function Type()
Definition: base_struct.h:201
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
class MODULE, a footprint
Definition: typeinfo.h:89
size_t i
Definition: json11.cpp:597
PCB_EDIT_FRAME* PCB_TOOL::frame ( ) const
inlineprotectedinherited

Definition at line 139 of file pcb_tool.h.

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(), getMicrowaveItemCreator(), highlightNet(), 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().

139 { return getEditFrame<PCB_EDIT_FRAME>(); }
BOARD_COMMIT* EDIT_TOOL::GetCurrentCommit ( ) const
inline

Definition at line 192 of file edit_tool.h.

References m_commit.

193  {
194  return m_commit.get();
195  }
std::unique_ptr< BOARD_COMMIT > m_commit
Definition: edit_tool.h:223
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.

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

189  {
190  return static_cast<T*>( getEditFrameInt() );
191  }
wxWindow * getEditFrameInt() const
Definition: tool_base.cpp:47
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.

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

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
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.

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

145  {
146  return m_toolMgr;
147  }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
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.

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

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

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

134  {
135  return m_toolName;
136  }
std::string m_toolName
Name of the tool.
Definition: tool_base.h:214
TOOL_SETTINGS & TOOL_BASE::GetSettings ( )
inherited

Definition at line 77 of file tool_base.cpp.

Referenced by GERBVIEW_CONTROL::HighlightControl(), ROUTER_TOOL::Init(), and ROUTER_TOOL::~ROUTER_TOOL().

78 {
79  return m_toolSettings;
80 }
TOOL_SETTINGS m_toolSettings
Definition: tool_base.h:216
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.

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

112  {
113  return m_type;
114  }
TOOL_TYPE m_type
Stores the type of the tool.
Definition: tool_base.h:207
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.

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(), 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().

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

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

Referenced by POINT_EDITOR::addCorner(), 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().

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
template<class T >
void TOOL_INTERACTIVE::Go ( int(T::*)(const TOOL_EVENT &)  aStateFunc,
const TOOL_EVENT_LIST aConditions = TOOL_EVENTTC_ANYTA_ANY ) 
)
inherited
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.

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.

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 }
TOOL_BASE * FindTool(int aId) const
Function FindTool() Searches for a tool with given ID.
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()
Class SELECTION_TOOL.
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
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...
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:139
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
int GetToolId() const
Definition: draw_frame.h:516
static SELECTION_CONDITION OnlyType(KICAD_T aType)
Function OnlyType Creates a functor that tests if the selected items are only of given type...
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:245
bool EDIT_TOOL::invokeInlineRouter ( int  aDragMode)
private

Definition at line 297 of file edit_tool.cpp.

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

Referenced by Drag(), and Main().

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_BASE * FindTool(int aId) const
Function FindTool() Searches for a tool with given ID.
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
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
bool EDIT_TOOL::isInteractiveDragEnabled ( ) const
private

Definition at line 318 of file edit_tool.cpp.

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

Referenced by Main().

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

Definition at line 30 of file tool_base.cpp.

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

31 {
32  return m_toolMgr->IsToolActive( m_toolId );
33 }
bool IsToolActive(TOOL_ID aId) const
Function IsToolActive() Returns true if a tool with given id is active (executing) ...
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
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.

References TOOL_INTERACTIVE::Activate(), GRID_HELPER::Align(), GRID_HELPER::BestDragOrigin(), GRID_HELPER::BestSnapAnchor(), BUT_LEFT, SELECTION_TOOL::CheckLock(), 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(), BOARD_ITEM::GetPosition(), TOOL_BASE::getViewControls(), i, invokeInlineRouter(), SELECTION::IsHover(), isInteractiveDragEnabled(), m_commit, m_cursor, m_dragging, m_lockedSelected, m_selectionTool, TOOL_BASE::m_toolMgr, MD_ALT, MD_SHIFT, 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(), BOARD_ITEM::SetPosition(), GRID_HELPER::SetSnap(), KIGFX::VIEW_CONTROLS::SetSnapping(), GRID_HELPER::SetUseGrid(), KIGFX::VIEW_CONTROLS::ShowCursor(), 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().

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  auto item = dynamic_cast<BOARD_ITEM*>( it );
376 
377  if( item )
378  sel_items.push_back( item );
379  }
380 
381  bool restore_state = false;
382  VECTOR2I totalMovement;
383  GRID_HELPER grid( editFrame );
384  OPT_TOOL_EVENT evt = aEvent;
385  VECTOR2I prevPos;
386 
387  // Main loop: keep receiving events
388  do
389  {
390  grid.SetSnap( !evt->Modifier( MD_SHIFT ) );
391  grid.SetUseGrid( !evt->Modifier( MD_ALT ) );
392  controls->SetSnapping( !evt->Modifier( MD_ALT ) );
393 
394  if( evt->IsAction( &PCB_ACTIONS::editActivate ) ||
395  evt->IsAction( &PCB_ACTIONS::move ) ||
396  evt->IsMotion() || evt->IsDrag( BUT_LEFT ) )
397  {
398  if( m_dragging && evt->Category() == TC_MOUSE )
399  {
400  m_cursor = grid.BestSnapAnchor( controls->GetMousePosition(),
401  item_layers, sel_items );
402  controls->ForceCursorPosition(true, m_cursor );
403  VECTOR2I movement( m_cursor - prevPos );
404  selection.SetReferencePoint( m_cursor );
405 
406  totalMovement += movement;
407  prevPos = m_cursor;
408 
409  // Drag items to the current cursor position
410  for( auto item : selection )
411  {
412  // Don't double move footprint pads, fields, etc.
413  if( item->GetParent() && item->GetParent()->IsSelected() )
414  continue;
415 
416  static_cast<BOARD_ITEM*>( item )->Move( movement );
417  }
418 
419  frame()->UpdateMsgPanel();
420  }
421  else if( !m_dragging ) // Prepare to start dragging
422  {
423  bool invokedRouter = false;
424 
425  if ( !evt->IsAction( &PCB_ACTIONS::move ) && isInteractiveDragEnabled() )
426  invokedRouter = invokeInlineRouter( PNS::DM_ANY );
427 
428  if( !invokedRouter )
429  {
430  // deal with locked items (override lock or abort the operation)
432 
433  if( lockFlags == SELECTION_LOCKED )
434  break;
435 
436  // When editing modules, all items have the same parent
437  if( EditingModules() )
438  {
439  m_commit->Modify( selection.Front() );
440  }
441  else
442  {
443  // Save items, so changes can be undone
444  for( auto item : selection )
445  {
446  // Don't double move footprint pads, fields, etc.
447  if( item->GetParent() && item->GetParent()->IsSelected() )
448  continue;
449 
450  m_commit->Modify( item );
451  }
452  }
453 
454  editFrame->UndoRedoBlock( true );
455  m_cursor = controls->GetCursorPosition();
456 
457  if ( selection.HasReferencePoint() )
458  {
459  // start moving with the reference point attached to the cursor
460  grid.SetAuxAxes( false );
461 
462  auto delta = m_cursor - selection.GetReferencePoint();
463 
464  // Drag items to the current cursor position
465  for( auto item : selection )
466  {
467  // Don't double move footprint pads, fields, etc.
468  if( item->GetParent() && item->GetParent()->IsSelected() )
469  continue;
470 
471  static_cast<BOARD_ITEM*>( item )->Move( delta );
472  }
473 
474  selection.SetReferencePoint( m_cursor );
475  }
476  else if( selection.Size() == 1 )
477  {
478  // Set the current cursor position to the first dragged item origin, so the
479  // movement vector could be computed later
480  updateModificationPoint( selection );
481  m_cursor = grid.BestDragOrigin( originalCursorPos, curr_item );
482  grid.SetAuxAxes( true, m_cursor );
483  }
484  else
485  {
486  updateModificationPoint( selection );
487  m_cursor = grid.Align( m_cursor );
488  }
489 
490  controls->SetCursorPosition( m_cursor, false );
491 
492  prevPos = m_cursor;
493  controls->SetAutoPan( true );
494  m_dragging = true;
495  }
496  }
497 
500 
501  }
502 
503  else if( evt->IsCancel() || evt->IsActivate() )
504  {
505  restore_state = true; // Canceling the tool means that items have to be restored
506  break; // Finish
507  }
508 
509  else if( evt->Action() == TA_UNDO_REDO_PRE )
510  {
511  unselect = true;
512  break;
513  }
514 
515  // Dispatch TOOL_ACTIONs
516  else if( evt->Category() == TC_COMMAND )
517  {
518  if( evt->IsAction( &PCB_ACTIONS::remove ) )
519  {
520  // exit the loop, as there is no further processing for removed items
521  break;
522  }
523  else if( evt->IsAction( &PCB_ACTIONS::duplicate ) )
524  {
525  // On duplicate, stop moving this item
526  // The duplicate tool should then select the new item and start
527  // a new move procedure
528  break;
529  }
530  else if( evt->IsAction( &PCB_ACTIONS::moveExact ) )
531  {
532  // Can't do this, because the selection will then contain
533  // stale pointers and it will all go horribly wrong...
534  //editFrame->RestoreCopyFromUndoList( dummy );
535  //
536  // So, instead, reset the position manually
537  for( auto item : selection )
538  {
539  BOARD_ITEM* i = static_cast<BOARD_ITEM*>( item );
540  auto delta = VECTOR2I( i->GetPosition() ) - totalMovement;
541  i->SetPosition( wxPoint( delta.x, delta.y ) );
542 
543  // And what about flipping and rotation?
544  // for now, they won't be undone, but maybe that is how
545  // it should be, so you can flip and move exact in the
546  // same action?
547  }
548 
549  // This causes a double event, so we will get the dialogue
550  // correctly, somehow - why does Rotate not?
551  //MoveExact( aEvent );
552  break; // exit the loop - we move exactly, so we have finished moving
553  }
554  }
555 
556  else if( evt->IsMouseUp( BUT_LEFT ) || evt->IsClick( BUT_LEFT ) )
557  {
558  break; // Finish
559  }
560 
561  } while( ( evt = Wait() ) ); //Should be assignment not equality test
562 
563  m_lockedSelected = false;
564  controls->ForceCursorPosition( false );
565  controls->ShowCursor( false );
566  controls->SetSnapping( false );
567  controls->SetAutoPan( false );
568 
569  m_dragging = false;
570  editFrame->UndoRedoBlock( false );
571 
572  // Discard reference point when selection is "dropped" onto the board (ie: not dragging anymore)
573  selection.ClearReferencePoint();
574 
575  if( unselect || restore_state )
577 
578  if( restore_state )
579  m_commit->Revert();
580  else
581  m_commit->Push( _( "Drag" ) );
582 
583  return 0;
584 }
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.
VECTOR2I m_cursor
Last cursor position (needed for getModificationPoint() to avoid changes of edit reference point)...
Definition: edit_tool.h:209
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:116
static TOOL_ACTION move
move an item
Definition: pcb_actions.h:96
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.
virtual void SetPosition(const wxPoint &aPos)=0
SELECTION & RequestSelection(CLIENT_SELECTION_FILTER aClientFilter, std::vector< BOARD_ITEM * > *aFiltered=NULL)
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:1390
EDA_ITEM * Front() const
Definition: selection.h:152
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
KIGFX::VIEW_CONTROLS * controls() const
Definition: pcb_tool.h:138
static TOOL_ACTION duplicate
Activation of the duplication tool.
Definition: pcb_actions.h:120
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
VECTOR2D GetCursorPosition() const
Returns the current cursor position in world coordinates.
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:139
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.
const SELECTION & selection() const
Definition: pcb_tool.cpp:245
bool isInteractiveDragEnabled() const
Definition: edit_tool.cpp:318
virtual void SetAutoPan(bool aEnabled)
Function SetAutoPan Turns on/off auto panning (this feature is used when there is a tool active (eg...
KIGFX::VIEW_CONTROLS * getViewControls() const
Function getViewControls()
Definition: tool_base.cpp:41
#define EXCLUDE_TRANSIENTS
Definition: edit_tool.h:48
virtual const wxPoint GetPosition() const =0
bool EditingModules() const
Definition: pcb_tool.h:102
bool invokeInlineRouter(int aDragMode)
Definition: edit_tool.cpp:297
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
bool IsHover() const
Definition: selection.h:69
void Activate()
Function Activate() Runs the tool.
static TOOL_ACTION updateLocalRatsnest
Definition: pcb_actions.h:388
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
virtual void SetCursorPosition(const VECTOR2D &aPosition, bool aWarpView=true, bool aTriggeredByArrows=false)=0
Moves cursor to the requested position expressed in world coordinates.
OPT< TOOL_EVENT > OPT_TOOL_EVENT
Definition: tool_event.h:495
int EDIT_TOOL::MeasureTool ( const TOOL_EVENT aEvent)

Launches a tool to measure between points

Definition at line 1266 of file edit_tool.cpp.

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().

1267 {
1268  if( EditingModules() && !frame()->GetModel())
1269  return 0;
1270 
1271  auto& view = *getView();
1272  auto& controls = *getViewControls();
1274 
1275  Activate();
1276  frame()->SetToolID( toolID, wxCURSOR_PENCIL, _( "Measure distance" ) );
1277 
1278  EDA_UNITS_T units = frame()->GetUserUnits();
1280  KIGFX::PREVIEW::RULER_ITEM ruler( twoPtMgr, units );
1281 
1282  view.Add( &ruler );
1283  view.SetVisible( &ruler, false );
1284 
1285  GRID_HELPER grid( frame() );
1286 
1287  bool originSet = false;
1288 
1289  controls.ShowCursor( true );
1290  controls.SetAutoPan( false );
1291  controls.CaptureCursor( false );
1292 
1293  while( auto evt = Wait() )
1294  {
1295  grid.SetSnap( !evt->Modifier( MD_SHIFT ) );
1296  grid.SetUseGrid( !evt->Modifier( MD_ALT ) );
1297  controls.SetSnapping( !evt->Modifier( MD_ALT ) );
1298  const VECTOR2I cursorPos = grid.BestSnapAnchor( controls.GetMousePosition(), nullptr );
1299  controls.ForceCursorPosition(true, cursorPos );
1300 
1302  {
1303  break;
1304  }
1305 
1306  // click or drag starts
1307  else if( !originSet && ( evt->IsDrag( BUT_LEFT ) || evt->IsClick( BUT_LEFT ) ) )
1308  {
1309  twoPtMgr.SetOrigin( cursorPos );
1310  twoPtMgr.SetEnd( cursorPos );
1311 
1312  controls.CaptureCursor( true );
1313  controls.SetAutoPan( true );
1314 
1315  originSet = true;
1316  }
1317 
1318  // second click or mouse up after drag ends
1319  else if( originSet && ( evt->IsClick( BUT_LEFT ) || evt->IsMouseUp( BUT_LEFT ) ) )
1320  {
1321  originSet = false;
1322 
1323  controls.SetAutoPan( false );
1324  controls.CaptureCursor( false );
1325  }
1326 
1327  // move or drag when origin set updates rules
1328  else if( originSet && ( evt->IsMotion() || evt->IsDrag( BUT_LEFT ) ) )
1329  {
1330  twoPtMgr.SetAngleSnap( evt->Modifier( MD_CTRL ) );
1331  twoPtMgr.SetEnd( cursorPos );
1332 
1333  view.SetVisible( &ruler, true );
1334  view.Update( &ruler, KIGFX::GEOMETRY );
1335  }
1336 
1337  else if( evt->IsAction( &PCB_ACTIONS::switchUnits )
1338  || evt->IsAction( &PCB_ACTIONS::updateUnits ) )
1339  {
1340  if( frame()->GetUserUnits() != units )
1341  {
1342  units = frame()->GetUserUnits();
1343  ruler.SwitchUnits();
1344  view.Update( &ruler, KIGFX::GEOMETRY );
1345  }
1346  }
1347 
1348  else if( evt->IsClick( BUT_RIGHT ) )
1349  {
1351  }
1352  }
1353 
1354  view.SetVisible( &ruler, false );
1355  view.Remove( &ruler );
1356 
1357  frame()->SetNoToolSelected();
1358 
1359  return 0;
1360 }
virtual void ShowCursor(bool aEnabled)
Function ShowCursor() Enables or disables display of cursor.
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
Class TWO_POINT_GEOMETRY_MANAGER.
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
KIGFX::VIEW_CONTROLS * controls() const
Definition: pcb_tool.h:138
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:281
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:139
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()
virtual void SetAutoPan(bool aEnabled)
Function SetAutoPan Turns on/off auto panning (this feature is used when there is a tool active (eg...
KIGFX::VIEW_CONTROLS * getViewControls() const
Function getViewControls()
Definition: tool_base.cpp:41
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:35
ID_MODEDIT_MEASUREMENT_TOOL
bool EditingModules() const
Definition: pcb_tool.h:102
virtual void SetNoToolSelected()
Select the ID_NO_TOOL_SELECTED id tool (Idle tool)
KIGFX::PCB_VIEW * view() const
Definition: pcb_tool.h:137
void SetVisible(VIEW_ITEM *aItem, bool aIsVisible=true)
Sets the item visibility.
Definition: view.cpp:1484
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
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
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 750 of file edit_tool.cpp.

References PCB_TOOL::EditingModules(), EditToolSelectionFilter(), SELECTION::Empty(), EXCLUDE_LOCKED, EXCLUDE_LOCKED_PADS, EXCLUDE_TRANSIENTS, SELECTION::Front(), SELECTION::GetReferencePoint(), m_commit, m_dragging, m_selectionTool, TOOL_BASE::m_toolMgr, EDGE_MODULE::Mirror(), TEXTE_MODULE::Mirror(), 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().

751 {
753  []( const VECTOR2I& aPt, GENERAL_COLLECTOR& aCollector )
755 
756  if( selection.Empty() )
757  return 0;
758 
760  auto refPoint = selection.GetReferencePoint();
761  wxPoint mirrorPoint( refPoint.x, refPoint.y );
762 
763  // When editing modules, all items have the same parent
764  if( EditingModules() )
765  {
766  m_commit->Modify( selection.Front() );
767  }
768 
769  for( auto item : selection )
770  {
771  // only modify items we can mirror
772  switch( item->Type() )
773  {
774  case PCB_MODULE_EDGE_T:
775  case PCB_MODULE_TEXT_T:
776  case PCB_PAD_T:
777  // Only create undo entry for items on the board
778  if( !item->IsNew() && !EditingModules() )
779  m_commit->Modify( item );
780 
781  break;
782  default:
783  continue;
784  }
785 
786  // modify each object as necessary
787  switch( item->Type() )
788  {
789  case PCB_MODULE_EDGE_T:
790  {
791  auto& edge = static_cast<EDGE_MODULE&>( *item );
792  edge.Mirror( mirrorPoint, false );
793  break;
794  }
795 
796  case PCB_MODULE_TEXT_T:
797  {
798  auto& modText = static_cast<TEXTE_MODULE&>( *item );
799  modText.Mirror( mirrorPoint, false );
800  break;
801  }
802 
803  case PCB_PAD_T:
804  {
805  auto& pad = static_cast<D_PAD&>( *item );
806  mirrorPadX( pad, mirrorPoint );
807  break;
808  }
809 
810  default:
811  // it's likely the commit object is wrong if you get here
812  assert( false );
813  break;
814  }
815  }
816 
817  if( !m_dragging )
818  m_commit->Push( _( "Mirror" ) );
819 
820  if( selection.IsHover() && !m_dragging )
822 
824 
825  if( m_dragging )
827 
828  return 0;
829 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:116
VECTOR2I GetReferencePoint() const
Definition: selection.h:200
SELECTION & RequestSelection(CLIENT_SELECTION_FILTER aClientFilter, std::vector< BOARD_ITEM * > *aFiltered=NULL)
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:1390
EDA_ITEM * Front() const
Definition: selection.h:152
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
void Mirror(const wxPoint aCentre, bool aMirrorAroundXAxis)
Mirror an edge of the footprint.
bool m_dragging
Flag determining if anything is being dragged right now
Definition: edit_tool.h:202
const SELECTION & selection() const
Definition: pcb_tool.cpp:245
#define EXCLUDE_TRANSIENTS
Definition: edit_tool.h:48
class TEXTE_MODULE, text in a footprint
Definition: typeinfo.h:93
bool EditingModules() const
Definition: pcb_tool.h:102
Used when the right click button is pressed, or when the select tool is in effect.
Definition: collectors.h:245
void Mirror(const wxPoint &aCentre, bool aMirrorAroundXAxis)
Mirror text position in footprint editing the text itself is not mirrored, and the layer not modified...
#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
static void mirrorPadX(D_PAD &aPad, const wxPoint &aMirrorPoint)
Mirror a pad in the vertical axis passing through a point.
Definition: edit_tool.cpp:730
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 974 of file edit_tool.cpp.

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(), 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().

975 {
977  []( const VECTOR2I& aPt, GENERAL_COLLECTOR& aCollector )
979 
980  if( selection.Empty() )
981  return 0;
982 
983  PCB_BASE_FRAME* editFrame = getEditFrame<PCB_BASE_FRAME>();
984  wxPoint translation;
985  double rotation;
986  ROTATION_ANCHOR rotationAnchor = selection.Size() > 1 ? ROTATE_AROUND_SEL_CENTER
988 
989  DIALOG_MOVE_EXACT dialog( editFrame, translation, rotation, rotationAnchor );
990  int ret = dialog.ShowModal();
991 
992  if( ret == wxID_OK )
993  {
995  wxPoint selCenter( rp.x, rp.y );
996 
997  // Make sure the rotation is from the right reference point
998  selCenter += translation;
999 
1000  // When editing modules, all items have the same parent
1001  if( EditingModules() )
1002  {
1003  m_commit->Modify( selection.Front() );
1004  }
1005 
1006  for( auto selItem : selection )
1007  {
1008  BOARD_ITEM* item = dynamic_cast<BOARD_ITEM*>( selItem );
1009 
1010  if( !item->IsNew() && !EditingModules() )
1011  m_commit->Modify( item );
1012 
1013  item->Move( translation );
1014 
1015  switch( rotationAnchor )
1016  {
1018  item->Rotate( item->GetPosition(), rotation );
1019  break;
1021  item->Rotate( selCenter, rotation );
1022  break;
1024  item->Rotate( editFrame->GetScreen()->m_O_Curseur, rotation );
1025  break;
1027  item->Rotate( editFrame->GetAuxOrigin(), rotation );
1028  break;
1029  }
1030 
1031  if( !m_dragging )
1032  getView()->Update( item );
1033  }
1034 
1035  m_commit->Push( _( "Move exact" ) );
1036 
1037  if( selection.IsHover() )
1039 
1041 
1042  if( m_dragging )
1044  }
1045 
1046  return 0;
1047 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:116
SELECTION & RequestSelection(CLIENT_SELECTION_FILTER aClientFilter, std::vector< BOARD_ITEM * > *aFiltered=NULL)
Function RequestSelection()
bool IsNew() const
Definition: base_struct.h:219
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
EDA_ITEM * Front() const
Definition: selection.h:152
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 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.
const SELECTION & selection() const
Definition: pcb_tool.cpp:245
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:1538
ROTATION_ANCHOR
#define EXCLUDE_TRANSIENTS
Definition: edit_tool.h:48
virtual const wxPoint GetPosition() const =0
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:35
bool EditingModules() const
Definition: pcb_tool.h:102
Used when the right click button is pressed, or when the select tool is in effect.
Definition: collectors.h:245
PCB_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
int Size() const
Returns the number of selected parts.
Definition: selection.h:122
#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
VECTOR2I GetCenter() const
Returns the center point of the selection area bounding box.
Definition: selection.cpp:67
class PCB_BASE_FRAME basic PCB main window class for Pcbnew, Gerbview, and CvPcb footprint viewer...
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 1218 of file edit_tool.cpp.

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

Referenced by showLocalRatsnest().

1219 {
1220  for( int i = aCollector.GetCount() - 1; i >= 0; i-- )
1221  {
1222  BOARD_ITEM* item = static_cast<BOARD_ITEM*>( aCollector[i] );
1223 
1224  if( item->Type() != PCB_PAD_T )
1225  aCollector.Remove( i );
1226  }
1227 }
int GetCount() const
Function GetCount returns the number of objects in the list.
Definition: collector.h:114
KICAD_T Type() const
Function Type()
Definition: base_struct.h:201
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
size_t i
Definition: json11.cpp:597
bool EDIT_TOOL::pickCopyReferencePoint ( VECTOR2I aP)
private

Definition at line 1450 of file edit_tool.cpp.

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().

1451 {
1452  STATUS_TEXT_POPUP statusPopup( frame() );
1453  PICKER_TOOL* picker = m_toolMgr->GetTool<PICKER_TOOL>();
1454  bool picking = true;
1455  bool retVal = true;
1456 
1457  statusPopup.SetText( _( "Select reference point for the copy..." ) );
1458  picker->Activate();
1459  picker->SetClickHandler( [&]( const VECTOR2D& aPoint ) -> bool
1460  {
1461  aP = aPoint;
1462  statusPopup.SetText( _( "Selection copied." ) );
1463  statusPopup.Expire( 800 );
1464  picking = false;
1465  return false; // we don't need any more points
1466  } );
1467  picker->SetCancelHandler( [&]()
1468  {
1469  statusPopup.SetText( _( "Copy cancelled." ) );
1470  statusPopup.Expire( 800 );
1471  picking = false;
1472  retVal = false;
1473  } );
1474 
1475  statusPopup.Move( wxGetMousePosition() + wxPoint( 20, -50 ) );
1476  statusPopup.Popup();
1477 
1478  while( picking )
1479  {
1480  statusPopup.Move( wxGetMousePosition() + wxPoint( 20, -50 ) );
1481  Wait();
1482  }
1483 
1484  statusPopup.Hide();
1485  return retVal;
1486 }
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
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:139
void SetCancelHandler(CANCEL_HANDLER aHandler)
Function SetCancelHandler() Sets a handler for cancel events (ESC or context-menu Cancel)...
Definition: picker_tool.h:105
void Activate()
Function Activate() Runs the tool.
int EDIT_TOOL::Properties ( const TOOL_EVENT aEvent)

Function Edit()

Displays properties window for the selected object.

Definition at line 627 of file edit_tool.cpp.

References changeTrackWidthOnClick(), EditToolSelectionFilter(), EXCLUDE_TRANSIENTS, 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(), and GENERAL_COLLECTOR::Tracks.

Referenced by setTransitions().

628 {
629  PCB_BASE_EDIT_FRAME* editFrame = getEditFrame<PCB_BASE_EDIT_FRAME>();
630 
632  []( const VECTOR2I& aPt, GENERAL_COLLECTOR& aCollector )
633  { EditToolSelectionFilter( aCollector, EXCLUDE_TRANSIENTS ); } );
634 
635  // Tracks & vias are treated in a special way:
637  {
638  if ( !changeTrackWidthOnClick( selection ) )
639  {
640  DIALOG_TRACK_VIA_PROPERTIES dlg( editFrame, selection, *m_commit );
641  dlg.ShowQuasiModal(); // QuasiModal required for NET_SELECTOR
642  }
643  }
644  else if( selection.Size() == 1 ) // Properties are displayed when there is only one item selected
645  {
646  // Display properties dialog
647  BOARD_ITEM* item = static_cast<BOARD_ITEM*>( selection.Front() );
648 
649  // Do not handle undo buffer, it is done by the properties dialogs @todo LEGACY
650  // Display properties dialog provided by the legacy canvas frame
651  editFrame->OnEditItemRequest( NULL, item );
652 
653  // Notify other tools of the changes
655  }
656 
657  if( selection.IsHover() )
658  {
660 
661  // Notify other tools of the changes -- This updates the visual ratsnest
663  }
664 
665  return 0;
666 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
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)
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.
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...
const SELECTION & selection() const
Definition: pcb_tool.cpp:245
#define EXCLUDE_TRANSIENTS
Definition: edit_tool.h:48
bool changeTrackWidthOnClick(const SELECTION &selection)
Definition: edit_tool.cpp:586
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
void EditToolSelectionFilter(GENERAL_COLLECTOR &aCollector, int aFlags)
Definition: edit_tool.cpp:173
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 873 of file edit_tool.cpp.

References TOOL_INTERACTIVE::Activate(), ACTIONS::ALT, EditToolSelectionFilter(), EXCLUDE_LOCKED, EXCLUDE_LOCKED_PADS, EXCLUDE_TRANSIENTS, PCB_ACTIONS::expandSelectedConnection, STATUS_POPUP::Expire(), TOOL_MANAGER::FindTool(), PCB_TOOL::frame(), TOOL_BASE::getView(), 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().

874 {
875  ROUTER_TOOL* routerTool = static_cast<ROUTER_TOOL*>
876  ( m_toolMgr->FindTool( "pcbnew.InteractiveRouter" ) );
877 
878  // Do not delete items while actively routing.
879  if( routerTool && routerTool->Router() && routerTool->Router()->RoutingInProgress() )
880  return 0;
881 
882  std::vector<BOARD_ITEM*> lockedItems;
883 
884  // get a copy instead of reference (as we're going to clear the selection before removing items)
885  auto selectionCopy = m_selectionTool->RequestSelection(
886  []( const VECTOR2I& aPt, GENERAL_COLLECTOR& aCollector )
888 
889  bool isHover = selectionCopy.IsHover();
890  const bool isAlt = aEvent.Parameter<intptr_t>() == (int) PCB_ACTIONS::REMOVE_FLAGS::ALT;
891 
892  // in "alternative" mode, deletion is not just a simple list of selected items,
893  // it removes whole tracks, not just segments
894  if( isAlt && isHover
895  && ( selectionCopy.HasType( PCB_TRACE_T ) || selectionCopy.HasType( PCB_VIA_T ) ) )
896  {
898  }
899 
900  if( selectionCopy.Empty() )
901  return 0;
902 
903  if( !m_lockedSelected )
904  {
905  // Second RequestSelection removes locked items but keeps a copy of their pointers
906  selectionCopy = m_selectionTool->RequestSelection(
907  []( const VECTOR2I& aPt, GENERAL_COLLECTOR& aCollector )
908  { EditToolSelectionFilter( aCollector, EXCLUDE_LOCKED ); }, &lockedItems );
909  }
910 
911 
912  // As we are about to remove items, they have to be removed from the selection first
914 
915  for( auto item : selectionCopy )
916  {
917  if( m_editModules )
918  {
919  m_commit->Remove( item );
920  continue;
921  }
922 
923  switch( item->Type() )
924  {
925  case PCB_MODULE_TEXT_T:
926  {
927  auto text = static_cast<TEXTE_MODULE*>( item );
928  auto parent = static_cast<MODULE*>( item->GetParent() );
929 
930  if( text->GetType() == TEXTE_MODULE::TEXT_is_DIVERS )
931  {
932  m_commit->Modify( text );
933  getView()->Remove( text );
934  parent->Remove( text );
935  }
936  }
937  break;
938 
939  default:
940  m_commit->Remove( item );
941  break;
942  }
943  }
944 
945  m_commit->Push( _( "Delete" ) );
946 
947  if( !m_lockedSelected && lockedItems.size() > 0 )
948  {
950  STATUS_TEXT_POPUP statusPopup( frame() );
951 
952  m_lockedSelected = true;
953  m_toolMgr->RunAction( PCB_ACTIONS::selectItems, true, &lockedItems );
954  statusPopup.SetText( _( "Delete again to remove locked items" ) );
955  statusPopup.Expire( 2000 );
956  statusPopup.Popup();
957  statusPopup.Move( wxGetMousePosition() + wxPoint( 20, 20 ) );
958 
959  Activate();
960 
961  while( m_lockedSelected && statusPopup.IsShown() )
962  {
963  statusPopup.Move( wxGetMousePosition() + wxPoint( 20, 20 ) );
964  Wait();
965  }
966  }
967 
968  m_lockedSelected = false;
969 
970  return 0;
971 }
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
TOOL_BASE * FindTool(int aId) const
Function FindTool() Searches for a tool with given ID.
if(dlg.ShowModal()==wxID_OK)
Definition: selcolor.cpp:76
SELECTION & RequestSelection(CLIENT_SELECTION_FILTER aClientFilter, std::vector< BOARD_ITEM * > *aFiltered=NULL)
Function RequestSelection()
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:375
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
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 RoutingInProgress() const
Definition: pns_router.cpp:112
bool m_lockedSelected
Flag determining whether we are prompting for locked removal
Definition: edit_tool.h:205
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:139
#define EXCLUDE_TRANSIENTS
Definition: edit_tool.h:48
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
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:35
class TEXTE_MODULE, text in a footprint
Definition: typeinfo.h:93
T Parameter() const
Function Parameter() Returns a non-standard parameter assigned to the event.
Definition: tool_event.h:387
Class PCB_ACTIONS.
Definition: pcb_actions.h:42
Used when the right click button is pressed, or when the select tool is in effect.
Definition: collectors.h:245
bool IsHover() const
Definition: selection.h:69
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
#define EXCLUDE_LOCKED_PADS
Definition: edit_tool.h:47
ROUTER * Router() const
void EditToolSelectionFilter(GENERAL_COLLECTOR &aCollector, int aFlags)
Definition: edit_tool.cpp:173
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.

References m_commit, m_dragging, and TOOL_BASE::RUN.

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
int EDIT_TOOL::Rotate ( const TOOL_EVENT aEvent)

Function Rotate()

Rotates currently selected items.

Definition at line 669 of file edit_tool.cpp.

References PCB_TOOL::EditingModules(), EditToolSelectionFilter(), EXCLUDE_LOCKED, EXCLUDE_LOCKED_PADS, EXCLUDE_TRANSIENTS, TOOL_EVT_UTILS::GetEventRotationAngle(), 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().

670 {
671  PCB_BASE_EDIT_FRAME* editFrame = getEditFrame<PCB_BASE_EDIT_FRAME>();
672 
674  []( const VECTOR2I& aPt, GENERAL_COLLECTOR& aCollector )
676 
677  if( selection.Empty() )
678  return 0;
679 
680  updateModificationPoint( selection );
681  const int rotateAngle = TOOL_EVT_UTILS::GetEventRotationAngle( *editFrame, aEvent );
682 
683  // When editing modules, all items have the same parent
684  if( EditingModules() )
685  {
686  m_commit->Modify( selection.Front() );
687  }
688 
689  for( auto item : selection )
690  {
691  if( !item->IsNew() && !EditingModules() )
692  m_commit->Modify( item );
693 
694  static_cast<BOARD_ITEM*>( item )->Rotate( selection.GetReferencePoint(), rotateAngle );
695  }
696 
697  if( !m_dragging )
698  m_commit->Push( _( "Rotate" ) );
699 
700  if( selection.IsHover() && !m_dragging )
702 
704 
705  if( m_dragging )
707 
708  return 0;
709 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
int Rotate(const TOOL_EVENT &aEvent)
Function Rotate()
Definition: edit_tool.cpp:669
SELECTION & RequestSelection(CLIENT_SELECTION_FILTER aClientFilter, std::vector< BOARD_ITEM * > *aFiltered=NULL)
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
bool updateModificationPoint(SELECTION &aSelection)
Returns the right modification point (e.g.
Definition: edit_tool.cpp:1390
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
const SELECTION & selection() const
Definition: pcb_tool.cpp:245
#define EXCLUDE_TRANSIENTS
Definition: edit_tool.h:48
bool EditingModules() const
Definition: pcb_tool.h:102
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
#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
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
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.

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

Referenced by DRAWING_TOOL::PlaceText().

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)
const SELECTION & PCB_TOOL::selection ( ) const
protectedinherited

Definition at line 245 of file pcb_tool.cpp.

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

Referenced by AUTOPLACE_TOOL::autoplaceSelected(), PCB_EDITOR_CONTROL::calculateSelectionRatsnest(), ROUTER_TOOL::CanInlineDrag(), PAD_TOOL::copyPadSettings(), CreateArray(), MODULE_EDITOR_TOOLS::CreatePadFromShapes(), PCB_EDITOR_CONTROL::CrossProbePcbToSch(), deleteItem(), doCopyToClipboard(), Duplicate(), editFootprintInFpEditor(), ExchangeFootprints(), SELECTION_TOOL::expandSelectedConnection(), MODULE_EDITOR_TOOLS::ExplodePadToShapes(), SELECTION_TOOL::filterSelection(), Flip(), DRAWING_TOOL::getSourceZoneForAction(), highlightNet(), 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(), showLocalRatsnest(), PCB_EDITOR_CONTROL::UpdateSelectionRatsnest(), PCB_EDITOR_CONTROL::ZoneDuplicate(), ZONE_FILLER_TOOL::ZoneFill(), PCB_EDITOR_CONTROL::ZoneMerge(), and ZONE_FILLER_TOOL::ZoneUnfill().

246 {
247  auto selTool = m_toolMgr->GetTool<SELECTION_TOOL>();
248  const auto& selection = selTool->GetSelection();
249  return selection;
250 }
Class SELECTION_TOOL.
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
const SELECTION & selection() const
Definition: pcb_tool.cpp:245
SELECTION & PCB_TOOL::selection ( )
protectedinherited

Definition at line 252 of file pcb_tool.cpp.

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

253 {
254  auto selTool = m_toolMgr->GetTool<SELECTION_TOOL>();
255  auto& selection = selTool->GetSelection();
256  return selection;
257 }
Class SELECTION_TOOL.
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
const SELECTION & selection() const
Definition: pcb_tool.cpp:245
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.

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().

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&#39;s context popup menu.
void SetTool(TOOL_INTERACTIVE *aTool)
Function SetTool() Sets a tool that is the creator of the menu.
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
void EDIT_TOOL::setTransitions ( )
overridevirtual

Sets up handlers for various events.

Reimplemented from PCB_TOOL.

Definition at line 1363 of file edit_tool.cpp.

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.

1364 {
1365  Go( &EDIT_TOOL::Main, PCB_ACTIONS::editActivate.MakeEvent() );
1366  Go( &EDIT_TOOL::Main, PCB_ACTIONS::move.MakeEvent() );
1367  Go( &EDIT_TOOL::Drag, PCB_ACTIONS::drag45Degree.MakeEvent() );
1369  Go( &EDIT_TOOL::Rotate, PCB_ACTIONS::rotateCw.MakeEvent() );
1370  Go( &EDIT_TOOL::Rotate, PCB_ACTIONS::rotateCcw.MakeEvent() );
1371  Go( &EDIT_TOOL::Flip, PCB_ACTIONS::flip.MakeEvent() );
1372  Go( &EDIT_TOOL::Remove, PCB_ACTIONS::remove.MakeEvent() );
1373  Go( &EDIT_TOOL::Remove, PCB_ACTIONS::removeAlt.MakeEvent() );
1379  Go( &EDIT_TOOL::Mirror, PCB_ACTIONS::mirror.MakeEvent() );
1380 
1387 }
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:627
int Rotate(const TOOL_EVENT &aEvent)
Function Rotate()
Definition: edit_tool.cpp:669
static TOOL_ACTION move
move an item
Definition: pcb_actions.h:96
int ExchangeFootprints(const TOOL_EVENT &aEvent)
Function ExchangeFootprints()
Definition: edit_tool.cpp:1242
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:750
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:1533
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:832
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:974
int Remove(const TOOL_EVENT &aEvent)
Function Remove()
Definition: edit_tool.cpp:873
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:1200
int MeasureTool(const TOOL_EVENT &aEvent)
Launches a tool to measure between points
Definition: edit_tool.cpp:1266
static TOOL_ACTION editFootprintInFpEditor
Definition: pcb_actions.h:396
int editFootprintInFpEditor(const TOOL_EVENT &aEvent)
Definition: edit_tool.cpp:1413
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:1521
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:1050
static TOOL_ACTION measureTool
Definition: pcb_actions.h:370
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 1390 of file edit_tool.cpp.

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

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

1391 {
1392  if( m_dragging && aSelection.HasReferencePoint() )
1393  return false;
1394 
1395  // When there is only one item selected, the reference point is its position...
1396  if( aSelection.Size() == 1 )
1397  {
1398  auto item = static_cast<BOARD_ITEM*>( aSelection.Front() );
1399  auto pos = item->GetPosition();
1400  aSelection.SetReferencePoint( VECTOR2I( pos.x, pos.y ) );
1401  }
1402  // ...otherwise modify items with regard to the cursor position
1403  else
1404  {
1406  aSelection.SetReferencePoint( m_cursor );
1407  }
1408 
1409  return true;
1410 }
VECTOR2I m_cursor
Last cursor position (needed for getModificationPoint() to avoid changes of edit reference point)...
Definition: edit_tool.h:209
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class...
EDA_ITEM * Front() const
Definition: selection.h:152
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
VECTOR2D GetCursorPosition() const
Returns the current cursor position in world coordinates.
KIGFX::VIEW_CONTROLS * getViewControls() const
Function getViewControls()
Definition: tool_base.cpp:41
virtual const wxPoint GetPosition() const =0
int Size() const
Returns the number of selected parts.
Definition: selection.h:122
bool HasReferencePoint() const
Definition: selection.h:195
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.

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().

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.

Member Data Documentation

std::unique_ptr<BOARD_COMMIT> EDIT_TOOL::m_commit
private
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().

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().

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().

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().

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(), and TOOL_BASE::IsToolActive().

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::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().

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.

TOOL_SETTINGS TOOL_BASE::m_toolSettings
protectedinherited

Definition at line 216 of file tool_base.h.

Referenced by TOOL_BASE::attachManager().

TOOL_TYPE TOOL_BASE::m_type
protectedinherited

Stores the type of the tool.

Definition at line 207 of file tool_base.h.


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