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

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::VIEWview () const
 
KIGFX::VIEW_CONTROLScontrols () const
 
PCB_EDIT_FRAMEframe () const
 
BOARDboard () const
 
MODULEmodule () const
 
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

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)
 
bool hoverSelection (bool aSanitize=true)
 Function hoverSelection() More...
 
template<class T >
T * uniqueSelected ()
 Function uniqueSelected() More...
 
template<class T >
T * uniqueHoverSelection (bool aSanitize=true)
 Function uniqueHoverSelection() More...
 

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...
 
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 to move, rotate, flip and change properties of items selected using the pcbnew.InteractiveSelection tool.

Definition at line 45 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 98 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 251 of file edit_tool.cpp.

251  :
252  PCB_TOOL( "pcbnew.InteractiveEdit" ), m_selectionTool( NULL ),
253  m_dragging( false )
254 {
255 }
SELECTION_TOOL * m_selectionTool
Selection tool used for obtaining selected items
Definition: edit_tool.h:165
bool m_dragging
Flag determining if anything is being dragged right now
Definition: edit_tool.h:168
PCB_TOOL(TOOL_ID aId, const std::string &aName)
Constructor.
Definition: pcb_tool.h:65

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 copyToClipboard(), PCBNEW_CONTROL::DeleteItemCursor(), PCB_TOOL::doInteractiveItemPlacement(), ROUTER_TOOL::DpDimensionsDialog(), 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(), Main(), LENGTH_TUNER_TOOL::mainLoop(), ROUTER_TOOL::mainLoop(), GERBVIEW_SELECTION_TOOL::MeasureTool(), MeasureTool(), POINT_EDITOR::OnSelectionChange(), pickCopyReferencePoint(), DRAWING_TOOL::PlaceDXF(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), DRAWING_TOOL::PlaceText(), POSITION_RELATIVE_TOOL::SelectPositionRelativeItem(), DRAWING_TOOL::SetAnchor(), ROUTER_TOOL::SettingsDialog(), 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 126 of file pcb_tool.h.

Referenced by PCBNEW_CONTROL::AppendBoard(), PCB_EDITOR_CONTROL::calculateSelectionRatsnest(), changeTrackWidthOnClick(), copyToClipboard(), MICROWAVE_TOOL::createInductorBetween(), MODULE_EDITOR_TOOLS::CreatePadFromShapes(), ROUTER_TOOL::CustomTrackWidthDialog(), PCB_TOOL::doInteractiveItemPlacement(), MODULE_EDITOR_TOOLS::EnumeratePads(), MODULE_EDITOR_TOOLS::ExplodePadToShapes(), SELECTION_TOOL::filterSelection(), ROUTER_TOOL::getNetclassDimensions(), PCBNEW_CONTROL::GridResetOrigin(), PAD_TOOL::haveFootprints(), PCBNEW_CONTROL::LayerNext(), PCBNEW_CONTROL::LayerPrev(), ROUTER_TOOL::mainLoop(), PCB_TOOL::module(), MODULE_EDITOR_TOOLS::ModuleEdgeOutlines(), MODULE_EDITOR_TOOLS::ModuleTextOutlines(), ROUTER_TOOL::onTrackViaSizeChanged(), ROUTER_TOOL::onViaCommand(), PCBNEW_CONTROL::PadDisplayMode(), PCBNEW_CONTROL::PasteItemsFromClipboard(), PCB_EDITOR_CONTROL::PlaceModule(), MODULE_EDITOR_TOOLS::PlacePad(), PCB_EDITOR_CONTROL::PlaceTarget(), ROUTER_TOOL::prepareInteractive(), PCBNEW_CONTROL::Reset(), PNS::TOOL_BASE::Reset(), SELECTION_TOOL::selectable(), SELECTION_TOOL::selectAllItemsConnectedToItem(), SELECTION_TOOL::selectAllItemsConnectedToTrack(), SELECTION_TOOL::selectAllItemsOnNet(), SELECTION_TOOL::selectAllItemsOnSheet(), SELECTION_TOOL::selectPoint(), 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(), PCB_EDITOR_CONTROL::ZoneFillAll(), PCB_EDITOR_CONTROL::ZoneMerge(), and PCB_EDITOR_CONTROL::ZoneUnfillAll().

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

Definition at line 571 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().

572 {
573  if ( selection.Size() == 1 && frame()->Settings().m_editActionChangesTrackWidth )
574  {
575  auto item = static_cast<BOARD_ITEM *>( selection[0] );
576 
577  m_commit->Modify( item );
578 
579  if( auto via = dyn_cast<VIA*>( item ) )
580  {
581  int new_width, new_drill;
582 
583  if( via->GetViaType() == VIA_MICROVIA )
584  {
585  auto net = via->GetNet();
586 
587  new_width = net->GetMicroViaSize();
588  new_drill = net->GetMicroViaDrillSize();
589  }
590  else
591  {
592  new_width = board()->GetDesignSettings().GetCurrentViaSize();
593  new_drill = board()->GetDesignSettings().GetCurrentViaDrill();
594  }
595 
596  via->SetDrill( new_drill );
597  via->SetWidth( new_width );
598  }
599  else if ( auto track = dyn_cast<TRACK*>( item ) )
600  {
601  int new_width = board()->GetDesignSettings().GetCurrentTrackWidth();
602  track->SetWidth( new_width );
603  }
604 
605  m_commit->Push( _("Edit track width/via size") );
606  return true;
607  }
608 
609  return false;
610 }
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:233
int GetCurrentViaSize() const
Function GetCurrentViaSize.
PCB_GENERAL_SETTINGS & Settings()
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:125
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Function GetDesignSettings.
Definition: class_board.h:532
int Size() const
Returns the number of selected parts.
Definition: selection.h:112
int GetCurrentTrackWidth() const
Function GetCurrentTrackWidth.
BOARD * board() const
Definition: pcb_tool.h:126
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 1319 of file edit_tool.cpp.

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

Referenced by cutToClipboard(), and setTransitions().

1320 {
1321  CLIPBOARD_IO io;
1322  VECTOR2I refPoint;
1323 
1324  Activate();
1325 
1326  auto item1 = MSG_PANEL_ITEM( "", _( "Select reference point for the block being copied..." ),
1327  COLOR4D::BLACK );
1328 
1329  std::vector<MSG_PANEL_ITEM> msgItems = { item1 };
1330 
1332 
1333  if( selection.Empty() )
1334  return 0;
1335 
1336  frame()->SetMsgPanel( msgItems );
1337  bool rv = pickCopyReferencePoint( refPoint );
1338  frame()->SetMsgPanel( board() );
1339 
1340  if( !rv )
1341  return 0;
1342 
1343  selection.SetReferencePoint( refPoint );
1344  io.SetBoard( board() );
1345  io.SaveSelection( selection );
1346 
1347  return 0;
1348 }
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:106
SELECTION & RequestSelection(int aFlags=SELECTION_DEFAULT)
Function RequestSelection()
SELECTION_TOOL * m_selectionTool
Selection tool used for obtaining selected items
Definition: edit_tool.h:165
void SaveSelection(const SELECTION &selected)
void SetBoard(BOARD *aBoard)
void SetReferencePoint(const VECTOR2I &aP)
Definition: selection.h:183
void SetMsgPanel(const std::vector< MSG_PANEL_ITEM > &aList)
Function SetMsgPanel clears the message panel and populates it with the contents of aList...
Definition: draw_frame.cpp:784
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:125
bool pickCopyReferencePoint(VECTOR2I &aP)
Definition: edit_tool.cpp:1301
void Activate()
Function Activate() Runs the tool.
Definition: colors.h:45
Class EDA_MSG_ITEM is used EDA_MSG_PANEL as the item type for displaying messages.
Definition: msgpanel.h:53
BOARD * board() const
Definition: pcb_tool.h:126
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 1072 of file edit_tool.cpp.

References PCB_TOOL::m_editModules, m_selectionTool, and SELECTION_TOOL::RequestSelection().

Referenced by setTransitions().

1073 {
1074  const auto& selection = m_selectionTool->RequestSelection();
1075 
1076  if( selection.Empty() )
1077  return 0;
1078 
1079  // we have a selection to work on now, so start the tool process
1080  PCB_BASE_FRAME* editFrame = getEditFrame<PCB_BASE_FRAME>();
1081  GAL_ARRAY_CREATOR array_creator( *editFrame, m_editModules, selection );
1082  array_creator.Invoke();
1083 
1084  return 0;
1085 }
SELECTION & RequestSelection(int aFlags=SELECTION_DEFAULT)
Function RequestSelection()
SELECTION_TOOL * m_selectionTool
Selection tool used for obtaining selected items
Definition: edit_tool.h:165
bool m_editModules
Definition: pcb_tool.h:129
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 1351 of file edit_tool.cpp.

References copyToClipboard(), and Remove().

Referenced by setTransitions().

1352 {
1353  copyToClipboard( aEvent );
1354  Remove( aEvent );
1355  return 0;
1356 }
int Remove(const TOOL_EVENT &aEvent)
Function Remove()
Definition: edit_tool.cpp:835
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:1319
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 38 of file pcb_tool.cpp.

References TOOL_INTERACTIVE::Activate(), KIGFX::VIEW_GROUP::Add(), SELECTION::Add(), COMMIT::Add(), KIGFX::VIEW::Add(), PCB_TOOL::board(), BUT_LEFT, 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_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::module(), PCB_MODULE_T, INTERACTIVE_PLACER_BASE::PlaceItem(), BOARD_COMMIT::Push(), KIGFX::VIEW_GROUP::Remove(), SELECTION::Remove(), KIGFX::VIEW::Remove(), TOOL_MANAGER::RunAction(), MODULE::RunOnChildren(), PCB_ACTIONS::selectionClear, KIGFX::VIEW_CONTROLS::SetAutoPan(), KIGFX::VIEW_CONTROLS::SetSnapping(), KIGFX::VIEW_CONTROLS::ShowCursor(), TC_COMMAND, KIGFX::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().

41 {
42  using namespace std::placeholders;
43  std::unique_ptr<BOARD_ITEM> newItem;
44 
45  Activate();
46 
47  BOARD_COMMIT commit( frame() );
48 
50 
51  // do not capture or auto-pan until we start placing an item
52  controls()->ShowCursor( true );
53  controls()->SetSnapping( true );
54 
55  // Add a VIEW_GROUP that serves as a preview for the new item
56  SELECTION preview;
57  view()->Add( &preview );
58 
59  aPlacer->m_board = board();
60  aPlacer->m_frame = frame();
61 
62  if( aOptions & IPO_SINGLE_CLICK )
63  {
64  VECTOR2I cursorPos = controls()->GetCursorPosition();
65 
66  newItem = aPlacer->CreateItem();
67  newItem->SetPosition( wxPoint( cursorPos.x, cursorPos.y ) );
68 
69  preview.Add( newItem.get() );
70  }
71 
72  // Main loop: keep receiving events
73  while( OPT_TOOL_EVENT evt = Wait() )
74  {
75  VECTOR2I cursorPos = controls()->GetCursorPosition();
76 
78  {
79  if( newItem )
80  {
81  // Delete the old item and have another try
82  newItem = nullptr;
83 
84  preview.Clear();
85 
86  if( aOptions & IPO_SINGLE_CLICK )
87  break;
88 
89  controls()->SetAutoPan( false );
90  controls()->CaptureCursor( false );
91  controls()->ShowCursor( true );
92  }
93  else
94  {
95  break;
96  }
97 
98  if( evt->IsActivate() ) // now finish unconditionally
99  break;
100  }
101 
102  else if( evt->IsClick( BUT_LEFT ) )
103  {
104  if( !newItem )
105  {
106  // create the item if possible
107  newItem = aPlacer->CreateItem();
108 
109  // no item created, so wait for another click
110  if( !newItem )
111  continue;
112 
113  controls()->CaptureCursor( true );
114  controls()->SetAutoPan( true );
115 
116  newItem->SetPosition( wxPoint( cursorPos.x, cursorPos.y ) );
117 
118  preview.Add( newItem.get() );
119 
120  if( newItem->Type() == PCB_MODULE_T )
121  {
122  auto module = dyn_cast<MODULE*>( newItem.get() );
123 
124  // modules have more drawable parts
125  module->RunOnChildren( std::bind( &KIGFX::VIEW_GROUP::Add, &preview, _1 ) );
126  }
127  }
128  else
129  {
130  newItem->ClearFlags();
131  preview.Remove( newItem.get() );
132 
133  aPlacer->PlaceItem( newItem.get() );
134 
135  if( newItem->Type() == PCB_MODULE_T )
136  {
137  auto module = dyn_cast<MODULE*>( newItem.get() );
138  module->RunOnChildren( std::bind( &KIGFX::VIEW_GROUP::Remove, &preview, _1 ) );
139  }
140 
141  commit.Add( newItem.release() );
142  commit.Push( aCommitMessage );
143 
144  controls()->CaptureCursor( false );
145  controls()->SetAutoPan( false );
146  controls()->ShowCursor( true );
147 
148  if( !( aOptions & IPO_REPEAT ) )
149  break;
150 
151  if( aOptions & IPO_SINGLE_CLICK )
152  {
154 
155  newItem = aPlacer->CreateItem();
156  newItem->SetPosition( wxPoint( pos.x, pos.y ) );
157 
158  preview.Add( newItem.get() );
159  }
160  }
161  }
162 
163  else if( newItem && evt->Category() == TC_COMMAND )
164  {
165  /*
166  * Handle any events that can affect the item as we move
167  * it around, eg rotate and flip
168  */
169 
170  if( TOOL_EVT_UTILS::IsRotateToolEvt( *evt ) && ( aOptions & IPO_ROTATE ) )
171  {
172  const auto rotationAngle = TOOL_EVT_UTILS::GetEventRotationAngle(
173  *frame(), *evt );
174  newItem->Rotate( newItem->GetPosition(), rotationAngle );
175  view()->Update( &preview );
176  }
177  else if( evt->IsAction( &PCB_ACTIONS::flip ) && ( aOptions & IPO_FLIP ) )
178  {
179  newItem->Flip( newItem->GetPosition() );
180  view()->Update( &preview );
181  }
182  }
183 
184  else if( newItem && evt->IsMotion() )
185  {
186  // track the cursor
187  newItem->SetPosition( wxPoint( cursorPos.x, cursorPos.y ) );
188 
189  // Show a preview of the item
190  view()->Update( &preview );
191  }
192  }
193 
194  view()->Remove( &preview );
195 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
virtual void ShowCursor(bool aEnabled)
Function ShowCursor() Enables or disables display of cursor.
KIGFX::VIEW * view() const
Definition: pcb_tool.h:123
void RunOnChildren(std::function< void(BOARD_ITEM *)> aFunction)
Function RunOnChildren.
virtual void Clear() override
Function Clear() Removes all the stored items from the group.
Definition: selection.h:81
virtual bool PlaceItem(BOARD_ITEM *aItem)
Definition: pcb_tool.h:51
virtual std::unique_ptr< BOARD_ITEM > CreateItem()=0
void Remove(VIEW_ITEM *aItem)
Function Remove() Removes a VIEW_ITEM from the view.
Definition: view.cpp:342
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:53
bool IsRotateToolEvt(const TOOL_EVENT &aEvt)
Function isRotateToolEvt()
Casted dyn_cast(From aObject)
Function dyn_cast()
Definition: typeinfo.h:73
virtual void Add(EDA_ITEM *aItem)
Definition: selection.h:71
KIGFX::VIEW_CONTROLS * controls() const
Definition: pcb_tool.h:124
class MODULE, a footprint
Definition: typeinfo.h:101
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:125
MODULE * module() const
Definition: pcb_tool.h:127
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
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:1385
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:99
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.
void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Function Add() Adds a VIEW_ITEM to the view.
Definition: view.cpp:312
int GetEventRotationAngle(const PCB_BASE_EDIT_FRAME &aFrame, const TOOL_EVENT &aEvt)
Function getEventRotationAngle()
BOARD * board() const
Definition: pcb_tool.h:126
virtual void Remove(EDA_ITEM *aItem)
Definition: selection.h:76
int EDIT_TOOL::Drag ( const TOOL_EVENT aEvent)

Function Drag()

todo

Definition at line 357 of file edit_tool.cpp.

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

Referenced by setTransitions().

358 {
359  int mode = PNS::DM_ANY;
360 
361  if( aEvent.IsAction( &PCB_ACTIONS::dragFreeAngle ) )
362  mode |= PNS::DM_FREE_ANGLE;
363 
364  invokeInlineRouter( mode );
365 
366  return 0;
367 }
static TOOL_ACTION dragFreeAngle
Definition: pcb_actions.h:128
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:325
int EDIT_TOOL::Duplicate ( const TOOL_EVENT aEvent)

Function Duplicate()

Duplicates the current selection and starts a move action.

Definition at line 925 of file edit_tool.cpp.

References EDA_ITEM::ClearSelected(), EDA_DRAW_FRAME::DisplayToolMsg(), BOARD::Duplicate(), MODULE::Duplicate(), PCB_ACTIONS::duplicateIncrement, PCB_ACTIONS::editActivate, 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_ZONE_AREA_T, SELECTION_TOOL::RequestSelection(), TOOL_MANAGER::RunAction(), SELECTION_DELETABLE, SELECTION_SANITIZE_PADS, PCB_ACTIONS::selectionClear, and PCB_ACTIONS::selectItems.

Referenced by setTransitions().

926 {
927  bool increment = aEvent.IsAction( &PCB_ACTIONS::duplicateIncrement );
928 
929  // Be sure that there is at least one item that we can modify
931 
932  if( selection.Empty() )
933  return 0;
934 
935  // we have a selection to work on now, so start the tool process
936  PCB_BASE_EDIT_FRAME* editFrame = getEditFrame<PCB_BASE_EDIT_FRAME>();
937 
938  std::vector<BOARD_ITEM*> new_items;
939  new_items.reserve( selection.Size() );
940 
941  BOARD_ITEM* orig_item = nullptr;
942  BOARD_ITEM* dupe_item = nullptr;
943 
944  // Each selected item is duplicated and pushed to new_items list
945  // Old selection is cleared, and new items are then selected.
946  for( auto item : selection )
947  {
948  if( !item )
949  continue;
950 
951  orig_item = static_cast<BOARD_ITEM*>( item );
952 
953  if( m_editModules )
954  {
955  dupe_item = editFrame->GetBoard()->m_Modules->Duplicate( orig_item, increment );
956  }
957  else
958  {
959 #if 0
960  // @TODO: see if we allow zone duplication here
961  // Duplicate zones is especially tricky (overlaping zones must be merged)
962  // so zones are not duplicated
963  if( item->Type() != PCB_ZONE_AREA_T )
964 #endif
965  dupe_item = editFrame->GetBoard()->Duplicate( orig_item );
966  }
967 
968  if( dupe_item )
969  {
970  // Clear the selection flag here, otherwise the SELECTION_TOOL
971  // will not properly select it later on
972  dupe_item->ClearSelected();
973 
974  new_items.push_back( dupe_item );
975  m_commit->Add( dupe_item );
976  }
977  }
978 
979  // Clear the old selection first
981 
982  // Select the new items
983  m_toolMgr->RunAction( PCB_ACTIONS::selectItems, true, &new_items );
984 
985  // record the new items as added
986  if( !selection.Empty() )
987  {
988  editFrame->DisplayToolMsg( wxString::Format( _( "Duplicated %d item(s)" ),
989  (int) new_items.size() ) );
990 
991  // If items were duplicated, pick them up
992  // this works well for "dropping" copies around and pushes the commit
994  Main( evt );
995  }
996 
997  return 0;
998 }
static TOOL_ACTION selectItems
Selects a list of items (specified as the event parameter)
Definition: pcb_actions.h:59
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
int Main(const TOOL_EVENT &aEvent)
Function Main()
Definition: edit_tool.cpp:369
static TOOL_ACTION editActivate
Activation of the edit tool.
Definition: pcb_actions.h:87
SELECTION & RequestSelection(int aFlags=SELECTION_DEFAULT)
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:233
void ClearSelected()
Definition: base_struct.h:245
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:114
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:165
static TOOL_ACTION duplicateIncrement
Activation of the duplication tool with incrementing (e.g. pad number)
Definition: pcb_actions.h:117
Class TOOL_EVENT.
Definition: tool_event.h:162
bool m_editModules
Definition: pcb_tool.h:129
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)
Definition: draw_frame.cpp:508
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:245
BOARD_ITEM * Duplicate(const BOARD_ITEM *aItem, bool aAddToBoard=false)
int EDIT_TOOL::editFootprintInFpEditor ( const TOOL_EVENT aEvent)
private

Definition at line 1264 of file edit_tool.cpp.

References FRAME_PCB_MODULE_EDITOR, PCB_BASE_FRAME::GetCurItem(), GetNewTimeStamp(), EDA_ITEM::GetTimeStamp(), 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_ACTIONS::selectionClear, PCB_BASE_FRAME::SetCurItem(), and EDA_ITEM::SetTimeStamp().

Referenced by setTransitions().

1265 {
1266  const auto& selection = m_selectionTool->RequestSelection();
1267 
1268  if( selection.Empty() )
1269  return 0;
1270 
1271  MODULE* mod = selection.FirstOfKind<MODULE>();
1272 
1273  if( !mod )
1274  return 0;
1275 
1276  PCB_BASE_EDIT_FRAME* editFrame = getEditFrame<PCB_BASE_EDIT_FRAME>();
1277 
1278  editFrame->SetCurItem( mod );
1279 
1280  if( editFrame->GetCurItem()->GetTimeStamp() == 0 ) // Module Editor needs a non null timestamp
1281  {
1282  editFrame->GetCurItem()->SetTimeStamp( GetNewTimeStamp() );
1283  editFrame->OnModify();
1284  }
1285 
1287 
1288  editor->Load_Module_From_BOARD( (MODULE*) editFrame->GetCurItem() );
1289  editFrame->SetCurItem( NULL ); // the current module could be deleted by
1290 
1291  editor->Show( true );
1292  editor->Raise(); // Iconize( false );
1293 
1294  if( selection.IsHover() )
1296 
1297  return 0;
1298 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
KIWAY & Kiway() const
Function Kiway returns a reference to the KIWAY that this object has an opportunity to participate in...
Definition: kiway_player.h:60
SELECTION & RequestSelection(int aFlags=SELECTION_DEFAULT)
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.
time_t GetNewTimeStamp()
Definition: common.cpp:166
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:165
void SetTimeStamp(time_t aNewTimeStamp)
Definition: base_struct.h:217
VTBL_ENTRY KIWAY_PLAYER * Player(FRAME_T aFrameType, bool doCreate=true, KIWAY_PLAYER *aParent=NULL)
Function Player returns the KIWAY_PLAYER* given a FRAME_T.
Definition: kiway.cpp:302
bool Load_Module_From_BOARD(MODULE *Module)
Function Load_Module_From_BOARD load in Modedit a footprint from the main board.
Definition: loadcmp.cpp:75
time_t GetTimeStamp() const
Definition: base_struct.h:218
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.
BOARD_ITEM * GetCurItem()
#define mod(a, n)
Definition: greymap.cpp:24
bool PCB_TOOL::EditingModules ( ) const
inlineinherited

Definition at line 91 of file pcb_tool.h.

References PCB_TOOL::m_editModules.

Referenced by BOARD_COMMIT::BOARD_COMMIT(), PAD_TOOL::Init(), and MeasureTool().

92  {
93  return m_editModules;
94  }
bool m_editModules
Definition: pcb_tool.h:129
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 change the footprints used for modules and update module footprints based on result

Definition at line 1088 of file edit_tool.cpp.

References PCB_TOOL::frame(), m_selectionTool, TOOL_BASE::m_toolMgr, mod, SELECTION_TOOL::RequestSelection(), TOOL_MANAGER::RunAction(), PCB_ACTIONS::selectionClear, PCB_BASE_FRAME::SetCurItem(), and DIALOG_SHIM::ShowQuasiModal().

Referenced by setTransitions().

1089 {
1090  const auto& selection = m_selectionTool->RequestSelection();
1091 
1092  if( selection.Empty() )
1093  return 0;
1094 
1095  MODULE* mod = selection.FirstOfKind<MODULE> ();
1096 
1097  if( !mod )
1098  return 0;
1099 
1100  frame()->SetCurItem( mod );
1101 
1102  // Footprint exchange could remove modules, so they have to be
1103  // removed from the selection first
1105 
1106  // invoke the exchange dialog process
1107  {
1108  DIALOG_EXCHANGE_MODULE dialog( frame(), mod );
1109  dialog.ShowQuasiModal();
1110  }
1111 
1112  // The current item can be deleted by exchange module, and the
1113  // selection is emptied, so remove current item from frame info area
1114  frame()->SetCurItem( nullptr );
1115 
1116  return 0;
1117 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
SELECTION & RequestSelection(int aFlags=SELECTION_DEFAULT)
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:165
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:125
#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 804 of file edit_tool.cpp.

References SELECTION_TOOL::CheckLock(), m_commit, m_dragging, m_selectionTool, TOOL_BASE::m_toolMgr, SELECTION_TOOL::RequestSelection(), TOOL_MANAGER::RunAction(), SELECTION_LOCKED, PCB_ACTIONS::selectionClear, PCB_ACTIONS::selectionModified, and updateModificationPoint().

Referenced by setTransitions().

805 {
806  auto& selection = m_selectionTool->RequestSelection();
807 
809  return 0;
810 
811  if( selection.Empty() )
812  return 0;
813 
814  updateModificationPoint( selection );
815  auto modPoint = selection.GetReferencePoint();
816 
817  for( auto item : selection )
818  {
819  m_commit->Modify( item );
820  static_cast<BOARD_ITEM*>( item )->Flip( modPoint );
821  }
822 
823  if( !m_dragging )
824  m_commit->Push( _( "Flip" ) );
825 
826  if( selection.IsHover() && !m_dragging )
828 
830 
831  return 0;
832 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
SELECTION & RequestSelection(int aFlags=SELECTION_DEFAULT)
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:233
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:1239
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:165
static TOOL_ACTION selectionModified
Modified selection notification.
Definition: pcb_actions.h:108
int Flip(const TOOL_EVENT &aEvent)
Function Flip()
Definition: edit_tool.cpp:804
bool m_dragging
Flag determining if anything is being dragged right now
Definition: edit_tool.h:168
PCB_EDIT_FRAME* PCB_TOOL::frame ( ) const
inlineprotectedinherited

Definition at line 125 of file pcb_tool.h.

Referenced by MICROWAVE_TOOL::addMicrowaveFootprint(), PAD_TOOL::applyPadSettings(), changeTrackWidthOnClick(), PNS::TOOL_BASE::checkSnap(), PAD_TOOL::copyPadSettings(), copyToClipboard(), MICROWAVE_TOOL::createInductorBetween(), MODULE_EDITOR_TOOLS::CreatePadFromShapes(), ROUTER_TOOL::CustomTrackWidthDialog(), PCB_TOOL::doInteractiveItemPlacement(), ROUTER_TOOL::DpDimensionsDialog(), MICROWAVE_TOOL::drawMicrowaveInductor(), DRAWING_TOOL::drawSegment(), DRAWING_TOOL::DrawVia(), MODULE_EDITOR_TOOLS::EnumeratePads(), ExchangeFootprints(), MODULE_EDITOR_TOOLS::ExplodePadToShapes(), ROUTER_TOOL::finishInteractive(), ROUTER_TOOL::InlineDrag(), PICKER_TOOL::Main(), LENGTH_TUNER_TOOL::mainLoop(), ROUTER_TOOL::mainLoop(), LENGTH_TUNER_TOOL::meanderSettingsDialog(), MeasureTool(), MODULE_EDITOR_TOOLS::ModuleEdgeOutlines(), MODULE_EDITOR_TOOLS::ModuleTextOutlines(), ROUTER_TOOL::onViaCommand(), PCBNEW_CONTROL::PasteItemsFromClipboard(), ROUTER_TOOL::performDragging(), ROUTER_TOOL::performRouting(), LENGTH_TUNER_TOOL::performTuning(), PNS::TOOL_BASE::pickSingleItem(), MODULE_EDITOR_TOOLS::PlacePad(), ROUTER_TOOL::prepareInteractive(), PAD_TOOL::pushPadSettings(), PNS::TOOL_BASE::Reset(), ROUTER_TOOL::RouteDiffPair(), ROUTER_TOOL::RouteSingleTrace(), ROUTER_TOOL::SettingsDialog(), ROUTER_TOOL::switchLayerOnViaPlacement(), LENGTH_TUNER_TOOL::TuneDiffPair(), LENGTH_TUNER_TOOL::TuneDiffPairSkew(), LENGTH_TUNER_TOOL::TuneSingleTrace(), and PCB_EDITOR_CONTROL::ZoneFillAll().

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

Definition at line 158 of file edit_tool.h.

References m_commit.

159  {
160  return m_commit.get();
161  }
std::unique_ptr< BOARD_COMMIT > m_commit
Definition: edit_tool.h:233
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.

References TOOL_BASE::getEditFrameInt().

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

189  {
190  return static_cast<T*>( getEditFrameInt() );
191  }
T
enum T contains all this lexer's tokens.
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.

References TOOL_BASE::m_toolId.

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

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.

References TOOL_BASE::m_toolMgr.

Referenced by BOARD_COMMIT::BOARD_COMMIT(), PCB_TOOL::doInteractiveItemPlacement(), CONTEXT_MENU::getToolManager(), MeasureTool(), and CONTEXT_MENU::onMenuEvent().

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.

References TOOL_BASE::getModelInt().

Referenced by 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  }
T
enum T contains all this lexer's tokens.
Class EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boa...
Definition: base_struct.h:165
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.

References TOOL_BASE::m_toolName.

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.

References TOOL_BASE::m_toolSettings.

Referenced by GERBVIEW_CONTROL::HighlightControl(), ROUTER_TOOL::Init(), SELECTION_TOOL::selectable(), 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.

References TOOL_BASE::m_type.

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 PCB_EDITOR_CONTROL::CrossProbeSchToPcb(), PCBNEW_CONTROL::CursorControl(), GERBVIEW_SELECTION_TOOL::disambiguationMenu(), SELECTION_TOOL::disambiguationMenu(), MICROWAVE_TOOL::drawMicrowaveInductor(), PCB_EDITOR_CONTROL::DrillOrigin(), MODULE_EDITOR_TOOLS::EnumeratePads(), SELECTION_TOOL::findCallback(), ROUTER_TOOL::getStartLayer(), PCBNEW_CONTROL::GridSetOrigin(), SELECTION_TOOL::guessSelectionCandidates(), PCBNEW_CONTROL::HighContrastMode(), GERBVIEW_CONTROL::HighlightControl(), PNS::TOOL_BASE::highlightNet(), PCBNEW_CONTROL::LayerAlphaDec(), PCBNEW_CONTROL::LayerAlphaInc(), GERBVIEW_SELECTION_TOOL::MeasureTool(), MeasureTool(), MODULE_EDITOR_TOOLS::ModuleEdgeOutlines(), MODULE_EDITOR_TOOLS::ModuleTextOutlines(), MoveExact(), POINT_EDITOR::OnSelectionChange(), PCBNEW_CONTROL::PadDisplayMode(), PCBNEW_CONTROL::PanControl(), PNS::TOOL_BASE::pickSingleItem(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), PCB_EDITOR_CONTROL::Reset(), PCBNEW_CONTROL::Reset(), PNS::TOOL_BASE::Reset(), GERBVIEW_SELECTION_TOOL::Reset(), DRAWING_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(), PCBNEW_CONTROL::TrackDisplayMode(), 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(), PCBNEW_CONTROL::ViaDisplayMode(), PCB_TOOL::view(), PCBNEW_CONTROL::ZoneDisplayMode(), COMMON_TOOLS::ZoomFitScreen(), GERBVIEW_SELECTION_TOOL::zoomFitSelection(), SELECTION_TOOL::zoomFitSelection(), COMMON_TOOLS::ZoomInOutCenter(), 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(), PCB_TOOL::controls(), PCBNEW_CONTROL::CursorControl(), MICROWAVE_TOOL::drawMicrowaveInductor(), DRAWING_TOOL::drawZone(), MODULE_EDITOR_TOOLS::EnumeratePads(), SELECTION_TOOL::findMove(), PCB_EDITOR_CONTROL::HighlightNet(), PICKER_TOOL::Main(), Main(), GERBVIEW_SELECTION_TOOL::Main(), ROUTER_TOOL::mainLoop(), GERBVIEW_SELECTION_TOOL::MeasureTool(), MeasureTool(), POINT_EDITOR::OnSelectionChange(), ROUTER_TOOL::performDragging(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), DRAWING_TOOL::Reset(), PCBNEW_CONTROL::ResetCoords(), DRAWING_TOOL::runPolygonEventLoop(), GERBVIEW_SELECTION_TOOL::selectCursor(), SELECTION_TOOL::selectCursor(), GERBVIEW_SELECTION_TOOL::selectMultiple(), SELECTION_TOOL::selectMultiple(), ZOOM_TOOL::selectRegion(), PICKER_TOOL::setControls(), POINT_EDITOR::setEditedPoint(), updateModificationPoint(), COMMON_TOOLS::ZoomCenter(), and COMMON_TOOLS::ZoomInOut().

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

Function Go()

Defines which state (aStateFunc) to go when a certain event arrives (aConditions). No conditions means any event.

Definition at line 135 of file tool_interactive.h.

References TOOL_INTERACTIVE::goInternal().

Referenced by ZOOM_TOOL::setTransitions(), LENGTH_TUNER_TOOL::setTransitions(), ROUTER_TOOL::setTransitions(), PAD_TOOL::setTransitions(), MICROWAVE_TOOL::setTransitions(), GERBVIEW_CONTROL::setTransitions(), POINT_EDITOR::setTransitions(), COMMON_TOOLS::setTransitions(), ALIGN_DISTRIBUTE_TOOL::setTransitions(), PCBNEW_CONTROL::setTransitions(), POSITION_RELATIVE_TOOL::setTransitions(), PICKER_TOOL::setTransitions(), MODULE_EDITOR_TOOLS::setTransitions(), GERBVIEW_SELECTION_TOOL::setTransitions(), PCB_EDITOR_CONTROL::setTransitions(), SELECTION_TOOL::setTransitions(), setTransitions(), and DRAWING_TOOL::setTransitions().

137 {
138  TOOL_STATE_FUNC sptr = std::bind( aStateFunc, static_cast<T*>( this ), std::placeholders::_1 );
139 
140  goInternal( sptr, aConditions );
141 }
std::function< int(const TOOL_EVENT &)> TOOL_STATE_FUNC
Definition: tool_base.h:59
void goInternal(TOOL_STATE_FUNC &aState, const TOOL_EVENT_LIST &aConditions)
bool EDIT_TOOL::hoverSelection ( bool  aSanitize = true)
private

Function hoverSelection()

If there are no items currently selected, it tries to choose the item that is under he cursor or displays a disambiguation menu if there are multiple items.

Parameters
aSanitizesanitize selection using SanitizeSelection()
Returns
true if the eventual selection contains any items, or false if it fails to select any items.

Referenced by uniqueHoverSelection().

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

Definition at line 267 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, TOOL_MENU::GetMenu(), SELECTION_TOOL::GetToolMenu(), 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, and GENERAL_COLLECTOR::Tracks.

268 {
269  // Find the selection tool, so they can cooperate
270  m_selectionTool = static_cast<SELECTION_TOOL*>( m_toolMgr->FindTool( "pcbnew.InteractiveSelection" ) );
271 
272  if( !m_selectionTool )
273  {
274  DisplayError( NULL, wxT( "pcbnew.InteractiveSelection tool is not available" ) );
275  return false;
276  }
277 
278  auto editingModuleCondition = [ this ] ( const SELECTION& aSelection ) {
279  return m_editModules;
280  };
281 
282  auto singleModuleCondition = SELECTION_CONDITIONS::OnlyType( PCB_MODULE_T )
284 
285  // Add context menu entries that are displayed when selection tool is active
287 
297 
298 
303 
304 
308  menu.AddSeparator();
309 
310  // Mirror only available in modedit
311  menu.AddItem( PCB_ACTIONS::mirror, editingModuleCondition && SELECTION_CONDITIONS::NotEmpty );
314 
315  // Footprint actions
317  singleModuleCondition );
319  singleModuleCondition );
320 
321  return true;
322 }
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:90
static const KICAD_T Tracks[]
A scan list for only TRACKS.
Definition: collectors.h:285
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:128
static TOOL_ACTION explodePadToShapes
Definition: pcb_actions.h:295
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
static TOOL_ACTION properties
Activation of the edit tool.
Definition: pcb_actions.h:105
static TOOL_ACTION drag45Degree
Definition: pcb_actions.h:127
static TOOL_ACTION mirror
Mirroring of selected items.
Definition: pcb_actions.h:102
SELECTION_TOOL * m_selectionTool
Selection tool used for obtaining selected items
Definition: edit_tool.h:165
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:307
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:111
static TOOL_ACTION duplicate
Activation of the duplication tool.
Definition: pcb_actions.h:114
class MODULE, a footprint
Definition: typeinfo.h:101
static TOOL_ACTION rotateCw
Rotation of selected objects clockwise.
Definition: pcb_actions.h:93
static SELECTION_CONDITION OnlyTypes(const std::vector< KICAD_T > &aTypes)
Function OnlyTypes Creates a functor that tests if the selected items are only of given types...
static TOOL_ACTION createArray
Tool for creating an array of objects.
Definition: pcb_actions.h:301
static TOOL_ACTION exchangeFootprints
Exchange footprints of modules.
Definition: pcb_actions.h:120
static TOOL_ACTION cutToClipboard
Paste from clipboard.
Definition: pcb_actions.h:310
static TOOL_ACTION copyToClipboard
Copy selected items to clipboard.
Definition: pcb_actions.h:304
bool m_editModules
Definition: pcb_tool.h:129
static TOOL_ACTION rotateCcw
Rotation of selected objects counter-clockwise.
Definition: pcb_actions.h:96
static TOOL_ACTION createPadFromShapes
Definition: pcb_actions.h:294
static TOOL_ACTION flip
Flipping of selected objects.
Definition: pcb_actions.h:99
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:387
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:239
static TOOL_ACTION remove
Deleting a BOARD_ITEM.
Definition: pcb_actions.h:123
void DisplayError(wxWindow *parent, const wxString &text, int displaytime)
Function DisplayError displays an error or warning message box with aMessage.
Definition: confirm.cpp:71
bool EDIT_TOOL::invokeInlineRouter ( int  aDragMode)
private

Definition at line 325 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().

326 {
327  auto theRouter = static_cast<ROUTER_TOOL*>( m_toolMgr->FindTool( "pcbnew.InteractiveRouter" ) );
328 
329  if( !theRouter )
330  return false;
331 
332  // make sure we don't accidentally invoke inline routing mode while the router is already active!
333  if ( theRouter->IsToolActive() )
334  return false;
335 
336  TRACK* track = uniqueSelected<TRACK>();
337  VIA* via = uniqueSelected<VIA>();
338 
339  if( track || via )
340  {
342  return true;
343  }
344 
345  return false;
346 }
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:209
static ROUTER * theRouter
Definition: pns_router.cpp:59
bool EDIT_TOOL::isInteractiveDragEnabled ( ) const
private

Definition at line 349 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().

350 {
351  auto theRouter = static_cast<ROUTER_TOOL*>( m_toolMgr->FindTool( "pcbnew.InteractiveRouter" ) );
352 
353  return theRouter ? theRouter->Router()->Settings().InlineDragEnabled() : false;
354 }
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 369 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, KIGFX::VIEW_CONTROLS::ForceCursorPosition(), KIGFX::VIEW_CONTROLS::GetCursorPosition(), BOARD_ITEM::GetPosition(), TOOL_BASE::getViewControls(), invokeInlineRouter(), SELECTION::IsHover(), isInteractiveDragEnabled(), m_commit, m_cursor, m_dragging, m_selectionTool, TOOL_BASE::m_toolMgr, PCB_ACTIONS::move, PCB_ACTIONS::moveExact, PCB_ACTIONS::remove, SELECTION_TOOL::RequestSelection(), TOOL_MANAGER::RunAction(), SELECTION_DEFAULT, SELECTION_LOCK_OVERRIDE, SELECTION_LOCKED, PCB_ACTIONS::selectionClear, PCB_ACTIONS::selectionModified, KIGFX::VIEW_CONTROLS::SetAutoPan(), GRID_HELPER::SetAuxAxes(), KIGFX::VIEW_CONTROLS::SetCursorPosition(), BOARD_ITEM::SetPosition(), KIGFX::VIEW_CONTROLS::SetSnapping(), KIGFX::VIEW_CONTROLS::ShowCursor(), TA_UNDO_REDO_PRE, TC_COMMAND, TC_MOUSE, updateModificationPoint(), and TOOL_INTERACTIVE::Wait().

Referenced by Duplicate(), and setTransitions().

370 {
372  PCB_BASE_EDIT_FRAME* editFrame = getEditFrame<PCB_BASE_EDIT_FRAME>();
373 
374  VECTOR2I originalCursorPos = controls->GetCursorPosition();
375 
376  // Be sure that there is at least one item that we can modify. If nothing was selected before,
377  // try looking for the stuff under mouse cursor (i.e. Kicad old-style hover selection)
378  auto& selection = m_selectionTool->RequestSelection( SELECTION_DEFAULT );
379 
380  if( selection.Empty() )
381  return 0;
382 
383  bool unselect = selection.IsHover();
384 
385  Activate();
386 
387  m_dragging = false; // Are selected items being dragged?
388  bool restore = false; // Should items' state be restored when finishing the tool?
389  bool lockOverride = false;
390 
391  controls->ShowCursor( true );
392  controls->SetSnapping( true );
393  controls->SetAutoPan( true );
394 
395  // cumulative translation
396  VECTOR2I totalMovement;
397  GRID_HELPER grid( editFrame );
398  OPT_TOOL_EVENT evt = aEvent;
399  VECTOR2I prevPos;
400 
401  // Main loop: keep receiving events
402  do
403  {
404  bool matchingAction = evt->IsAction( &PCB_ACTIONS::editActivate )
405  || evt->IsAction( &PCB_ACTIONS::move );
406 
407  if( matchingAction
408  || evt->IsMotion() || evt->IsDrag( BUT_LEFT ) )
409  {
410  if( selection.Empty() )
411  break;
412 
413  auto curr_item = static_cast<BOARD_ITEM*>( selection.Front() );
414 
415  if( m_dragging && evt->Category() == TC_MOUSE )
416  {
417  m_cursor = grid.BestSnapAnchor( evt->Position(), curr_item );
418  controls->ForceCursorPosition( true, m_cursor );
419 
420  VECTOR2I movement( m_cursor - prevPos );
421  selection.SetReferencePoint(m_cursor);
422 
423  totalMovement += movement;
424  prevPos = m_cursor;
425 
426  // Drag items to the current cursor position
427  for( auto item : selection )
428  static_cast<BOARD_ITEM*>( item )->Move( movement );
429  }
430  else if( !m_dragging ) // Prepare to start dragging
431  {
432  bool invokedRouter = false;
433 
434  if ( !evt->IsAction( &PCB_ACTIONS::move ) && isInteractiveDragEnabled() )
435  invokedRouter = invokeInlineRouter( PNS::DM_ANY );
436 
437  if( !invokedRouter )
438  {
439  // deal with locked items (override lock or abort the operation)
441 
442  if( lockFlags == SELECTION_LOCKED )
443  break;
444  else if( lockFlags == SELECTION_LOCK_OVERRIDE )
445  lockOverride = true;
446 
447  // Save items, so changes can be undone
448  for( auto item : selection )
449  m_commit->Modify( item );
450 
451  m_cursor = controls->GetCursorPosition();
452 
453  updateModificationPoint( selection );
454 
455  if ( selection.HasReferencePoint() )
456  {
457  // start moving with the reference point attached to the cursor
458  grid.SetAuxAxes( false );
459 
460  auto delta = m_cursor - selection.GetReferencePoint();
461 
462  // Drag items to the current cursor position
463  for( auto item : selection )
464  static_cast<BOARD_ITEM*>( item )->Move( delta );
465 
466  selection.SetReferencePoint( m_cursor );
467  }
468  else if( selection.Size() == 1 )
469  {
470  // Set the current cursor position to the first dragged item origin, so the
471  // movement vector could be computed later
472  m_cursor = grid.BestDragOrigin( originalCursorPos, curr_item );
473  grid.SetAuxAxes( true, m_cursor );
474  }
475  else
476  {
477  m_cursor = grid.Align( m_cursor );
478  }
479 
480  controls->SetCursorPosition( m_cursor, false );
481 
482  prevPos = m_cursor;
483  controls->SetAutoPan( true );
484  m_dragging = true;
485  }
486  }
487 
489  }
490 
491  else if( evt->IsCancel() || evt->IsActivate() )
492  {
493  restore = true; // Cancelling the tool means that items have to be restored
494  break; // Finish
495  }
496 
497  else if( evt->Action() == TA_UNDO_REDO_PRE )
498  {
499  unselect = true;
500  break;
501  }
502 
503  // Dispatch TOOL_ACTIONs
504  else if( evt->Category() == TC_COMMAND )
505  {
506  if( evt->IsAction( &PCB_ACTIONS::remove ) )
507  {
508  // exit the loop, as there is no further processing for removed items
509  break;
510  }
511  else if( evt->IsAction( &PCB_ACTIONS::duplicate ) )
512  {
513  // On duplicate, stop moving this item
514  // The duplicate tool should then select the new item and start
515  // a new move procedure
516  break;
517  }
518  else if( evt->IsAction( &PCB_ACTIONS::moveExact ) )
519  {
520  // Can't do this, because the selection will then contain
521  // stale pointers and it will all go horribly wrong...
522  //editFrame->RestoreCopyFromUndoList( dummy );
523  //
524  // So, instead, reset the position manually
525  for( auto item : selection )
526  {
527  BOARD_ITEM* i = static_cast<BOARD_ITEM*>( item );
528  auto delta = VECTOR2I( i->GetPosition() ) - totalMovement;
529  i->SetPosition( wxPoint( delta.x, delta.y ) );
530 
531  // And what about flipping and rotation?
532  // for now, they won't be undone, but maybe that is how
533  // it should be, so you can flip and move exact in the
534  // same action?
535  }
536 
537  // This causes a double event, so we will get the dialogue
538  // correctly, somehow - why does Rotate not?
539  //MoveExact( aEvent );
540  break; // exit the loop - we move exactly, so we have finished moving
541  }
542  }
543 
544  else if( evt->IsMouseUp( BUT_LEFT ) || evt->IsClick( BUT_LEFT ) )
545  {
546  if( !lockOverride )
547  break; // Finish
548 
549  lockOverride = false;
550  }
551  } while( ( evt = Wait() ) ); //Should be assignment not equality test
552 
553  controls->ForceCursorPosition( false );
554  controls->ShowCursor( false );
555  controls->SetSnapping( false );
556  controls->SetAutoPan( false );
557 
558  m_dragging = false;
559 
560  if( unselect || restore )
562 
563  if( restore )
564  m_commit->Revert();
565  else
566  m_commit->Push( _( "Drag" ) );
567 
568  return 0;
569 }
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:172
static TOOL_ACTION move
move an item
Definition: pcb_actions.h:90
static TOOL_ACTION editActivate
Activation of the edit tool.
Definition: pcb_actions.h:87
SELECTION & RequestSelection(int aFlags=SELECTION_DEFAULT)
Function RequestSelection()
virtual void SetPosition(const wxPoint &aPos)=0
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:233
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:1239
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 const wxPoint & GetPosition() const =0
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
SELECTION_TOOL * m_selectionTool
Selection tool used for obtaining selected items
Definition: edit_tool.h:165
VECTOR2< int > VECTOR2I
Definition: vector2d.h:590
static const int delta[8][2]
Definition: solve.cpp:112
static TOOL_ACTION selectionModified
Modified selection notification.
Definition: pcb_actions.h:108
static TOOL_ACTION moveExact
Activation of the exact move tool.
Definition: pcb_actions.h:111
virtual void SetCursorPosition(const VECTOR2D &aPosition, bool aWarpView=true)=0
Moves cursor to the requested position expressed in world coordinates.
KIGFX::VIEW_CONTROLS * controls() const
Definition: pcb_tool.h:124
static TOOL_ACTION duplicate
Activation of the duplication tool.
Definition: pcb_actions.h:114
bool m_dragging
Flag determining if anything is being dragged right now
Definition: edit_tool.h:168
SELECTION_LOCK_FLAGS
Definition: selection.h:207
VECTOR2D GetCursorPosition() const
Returns the current cursor position in world coordinates.
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.
bool isInteractiveDragEnabled() const
Definition: edit_tool.cpp:349
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
bool invokeInlineRouter(int aDragMode)
Definition: edit_tool.cpp:325
Common, abstract interface for edit frames.
bool IsHover() const
Definition: selection.h:66
void Activate()
Function Activate() Runs the tool.
static TOOL_ACTION remove
Deleting a BOARD_ITEM.
Definition: pcb_actions.h:123
int EDIT_TOOL::MeasureTool ( const TOOL_EVENT aEvent)

Launches a tool to measure between points

Definition at line 1120 of file edit_tool.cpp.

References TOOL_INTERACTIVE::Activate(), KIGFX::VIEW::Add(), BUT_LEFT, BUT_RIGHT, KIGFX::VIEW_CONTROLS::CaptureCursor(), PCB_TOOL::controls(), PCB_TOOL::EditingModules(), PCB_TOOL::frame(), KIGFX::GEOMETRY, KIGFX::VIEW_CONTROLS::GetCursorPosition(), TOOL_BASE::GetManager(), TOOL_BASE::getView(), TOOL_BASE::getViewControls(), ID_MODEDIT_MEASUREMENT_TOOL, ID_PCB_MEASUREMENT_TOOL, MD_CTRL, TOOL_MANAGER::PassEvent(), KIGFX::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(), KIGFX::VIEW_CONTROLS::SetSnapping(), PCB_BASE_FRAME::SetToolID(), KIGFX::VIEW::SetVisible(), KIGFX::VIEW_CONTROLS::ShowCursor(), KIGFX::VIEW::Update(), PCB_TOOL::view(), and TOOL_INTERACTIVE::Wait().

Referenced by setTransitions().

1121 {
1122  auto& view = *getView();
1123  auto& controls = *getViewControls();
1124 
1125  Activate();
1128  wxCURSOR_PENCIL, _( "Measure distance" ) );
1129 
1131 
1132  KIGFX::PREVIEW::RULER_ITEM ruler( twoPtMgr );
1133 
1134  view.Add( &ruler );
1135  view.SetVisible( &ruler, false );
1136 
1137  bool originSet = false;
1138 
1139  controls.ShowCursor( true );
1140  controls.SetSnapping( true );
1141 
1142  while( auto evt = Wait() )
1143  {
1144  const VECTOR2I cursorPos = controls.GetCursorPosition();
1145 
1146  if( evt->IsCancel() || evt->IsActivate() )
1147  {
1148  break;
1149  }
1150 
1151  // click or drag starts
1152  else if( !originSet &&
1153  ( evt->IsDrag( BUT_LEFT ) || evt->IsClick( BUT_LEFT ) ) )
1154  {
1155  if( !evt->IsDrag( BUT_LEFT ) )
1156  {
1157  twoPtMgr.SetOrigin( cursorPos );
1158  twoPtMgr.SetEnd( cursorPos );
1159  }
1160 
1161  controls.CaptureCursor( true );
1162  controls.SetAutoPan( true );
1163 
1164  originSet = true;
1165  }
1166 
1167  else if( !originSet && evt->IsMotion() )
1168  {
1169  // make sure the origin is set before a drag starts
1170  // otherwise you can miss a step
1171  twoPtMgr.SetOrigin( cursorPos );
1172  twoPtMgr.SetEnd( cursorPos );
1173  }
1174 
1175  // second click or mouse up after drag ends
1176  else if( originSet &&
1177  ( evt->IsClick( BUT_LEFT ) || evt->IsMouseUp( BUT_LEFT ) ) )
1178  {
1179  originSet = false;
1180 
1181  controls.SetAutoPan( false );
1182  controls.CaptureCursor( false );
1183 
1184  view.SetVisible( &ruler, false );
1185  }
1186 
1187  // move or drag when origin set updates rules
1188  else if( originSet &&
1189  ( evt->IsMotion() || evt->IsDrag( BUT_LEFT ) ) )
1190  {
1191  twoPtMgr.SetAngleSnap( evt->Modifier( MD_CTRL ) );
1192  twoPtMgr.SetEnd( cursorPos );
1193 
1194  view.SetVisible( &ruler, true );
1195  view.Update( &ruler, KIGFX::GEOMETRY );
1196  }
1197 
1198  else if( evt->IsClick( BUT_RIGHT ) )
1199  {
1200  GetManager()->PassEvent();
1201  }
1202  }
1203 
1204  view.SetVisible( &ruler, false );
1205  view.Remove( &ruler );
1206 
1207  frame()->SetNoToolSelected();
1208 
1209  return 0;
1210 }
virtual void ShowCursor(bool aEnabled)
Function ShowCursor() Enables or disables display of cursor.
KIGFX::VIEW * view() const
Definition: pcb_tool.h:123
virtual void SetToolID(int aId, int aCursor, const wxString &aToolMsg) override
Function SetToolID sets the tool command ID to aId and sets the cursor to aCursor.
Class TWO_POINT_GEOMETRY_MANAGER.
void Remove(VIEW_ITEM *aItem)
Function Remove() Removes a VIEW_ITEM from the view.
Definition: view.cpp:342
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.
void PassEvent()
Allows a tool to pass the already handled event to the next tool on the stack.
Definition: tool_manager.h:351
KIGFX::VIEW_CONTROLS * controls() const
Definition: pcb_tool.h:124
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:125
void SetOrigin(const VECTOR2I &aOrigin)
Set the origin of the ruler (the fixed end)
Class RULER_ITEM.
Definition: ruler_item.h:43
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:1385
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
bool EditingModules() const
Definition: pcb_tool.h:91
virtual void SetNoToolSelected()
Select the ID_NO_TOOL_SELECTED id tool (Idle tool)
Definition: draw_frame.cpp:571
TOOL_MANAGER * GetManager() const
Function GetManager() Returns the instance of TOOL_MANAGER that takes care of the tool...
Definition: tool_base.h:144
void SetVisible(VIEW_ITEM *aItem, bool aIsVisible=true)
Sets the item visibility.
Definition: view.cpp:1331
void Activate()
Function Activate() Runs the tool.
void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Function Add() Adds a VIEW_ITEM to the view.
Definition: view.cpp:312
PCB_EDIT_FRAME::OnResetModuleTextSizes PCB_EDIT_FRAME::OnSelectOptionToolbar PCB_EDIT_FRAME::OnSelectOptionToolbar PCB_EDIT_FRAME::OnSelectOptionToolbar PCB_EDIT_FRAME::OnSelectOptionToolbar ID_PCB_MEASUREMENT_TOOL
Definition: pcbframe.cpp:262
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 733 of file edit_tool.cpp.

References SELECTION_TOOL::CheckLock(), 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(), SELECTION_LOCKED, PCB_ACTIONS::selectionClear, PCB_ACTIONS::selectionModified, and updateModificationPoint().

Referenced by setTransitions().

734 {
735  auto& selection = m_selectionTool->RequestSelection();
736 
738  return 0;
739 
740  if( selection.Empty() )
741  return 0;
742 
743  updateModificationPoint( selection );
744  auto refPoint = selection.GetReferencePoint();
745  wxPoint mirrorPoint( refPoint.x, refPoint.y );
746 
747  for( auto item : selection )
748  {
749  // only modify items we can mirror
750  switch( item->Type() )
751  {
752  case PCB_MODULE_EDGE_T:
753  case PCB_MODULE_TEXT_T:
754  case PCB_PAD_T:
755  m_commit->Modify( item );
756  break;
757  default:
758  continue;
759  }
760 
761  // modify each object as necessary
762  switch( item->Type() )
763  {
764  case PCB_MODULE_EDGE_T:
765  {
766  auto& edge = static_cast<EDGE_MODULE&>( *item );
767  edge.Mirror( mirrorPoint, false );
768  break;
769  }
770 
771  case PCB_MODULE_TEXT_T:
772  {
773  auto& modText = static_cast<TEXTE_MODULE&>( *item );
774  modText.Mirror( mirrorPoint, false );
775  break;
776  }
777 
778  case PCB_PAD_T:
779  {
780  auto& pad = static_cast<D_PAD&>( *item );
781  mirrorPadX( pad, mirrorPoint );
782  break;
783  }
784 
785  default:
786  // it's likely the commit object is wrong if you get here
787  assert( false );
788  break;
789  }
790  }
791 
792  if( !m_dragging )
793  m_commit->Push( _( "Mirror" ) );
794 
795  if( selection.IsHover() && !m_dragging )
797 
799 
800  return 0;
801 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
SELECTION & RequestSelection(int aFlags=SELECTION_DEFAULT)
Function RequestSelection()
std::unique_ptr< BOARD_COMMIT > m_commit
Definition: edit_tool.h:233
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:1239
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:102
SELECTION_TOOL * m_selectionTool
Selection tool used for obtaining selected items
Definition: edit_tool.h:165
class EDGE_MODULE, a footprint edge
Definition: typeinfo.h:106
static TOOL_ACTION selectionModified
Modified selection notification.
Definition: pcb_actions.h:108
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:168
class TEXTE_MODULE, text in a footprint
Definition: typeinfo.h:105
void Mirror(const wxPoint &aCentre, bool aMirrorAroundXAxis)
Mirror text position in footprint edition the text itself is not mirrored, and the layer not modified...
static void mirrorPadX(D_PAD &aPad, const wxPoint &aMirrorPoint)
Mirror a pad in the vertical axis passing through a point.
Definition: edit_tool.cpp:713
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 873 of file edit_tool.cpp.

References SELECTION_TOOL::CheckLock(), MOVE_PARAMETERS::editingFootprint, getAnchorPoint(), TOOL_BASE::getView(), m_commit, m_dragging, PCB_TOOL::m_editModules, m_selectionTool, TOOL_BASE::m_toolMgr, SELECTION_TOOL::RequestSelection(), Rotate(), TOOL_MANAGER::RunAction(), SELECTION_LOCKED, PCB_ACTIONS::selectionClear, PCB_ACTIONS::selectionModified, KIGFX::VIEW::Update(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by setTransitions().

874 {
875  const auto& selection = m_selectionTool->RequestSelection();
876 
878  return 0;
879 
880  if( selection.Empty() )
881  return 0;
882 
883  PCB_BASE_FRAME* editFrame = getEditFrame<PCB_BASE_FRAME>();
884 
885  MOVE_PARAMETERS params;
887 
888  DIALOG_MOVE_EXACT dialog( editFrame, params );
889  int ret = dialog.ShowModal();
890 
891  if( ret == wxID_OK )
892  {
893  VECTOR2I rp = selection.GetCenter();
894  wxPoint rotPoint( rp.x, rp.y );
895 
896  wxPoint anchorPoint = getAnchorPoint( selection, params );
897 
898  wxPoint finalMoveVector = params.translation - anchorPoint;
899 
900  // Make sure the rotation is from the right reference point
901  rotPoint += finalMoveVector;
902 
903  for( auto item : selection )
904  {
905  m_commit->Modify( item );
906  static_cast<BOARD_ITEM*>( item )->Move( finalMoveVector );
907  static_cast<BOARD_ITEM*>( item )->Rotate( rotPoint, params.rotation );
908 
909  if( !m_dragging )
910  getView()->Update( item );
911  }
912 
913  m_commit->Push( _( "Move exact" ) );
914 
915  if( selection.IsHover() )
917 
919  }
920 
921  return 0;
922 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
static wxPoint getAnchorPoint(const SELECTION &selection, const MOVE_PARAMETERS &params)
Definition: edit_tool.cpp:177
int Rotate(const TOOL_EVENT &aEvent)
Function Rotate()
Definition: edit_tool.cpp:662
SELECTION & RequestSelection(int aFlags=SELECTION_DEFAULT)
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:233
SELECTION_LOCK_FLAGS CheckLock()
Checks if the user has agreed to modify locked items for the given selection.
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:165
static TOOL_ACTION selectionModified
Modified selection notification.
Definition: pcb_actions.h:108
bool m_dragging
Flag determining if anything is being dragged right now
Definition: edit_tool.h:168
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:1385
bool m_editModules
Definition: pcb_tool.h:129
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:35
class PCB_BASE_FRAME basic PCB main window class for Pcbnew, Gerbview, and CvPcb footprint viewer...
bool EDIT_TOOL::pickCopyReferencePoint ( VECTOR2I aP)
private

Definition at line 1301 of file edit_tool.cpp.

References TOOL_INTERACTIVE::Activate(), PICKER_TOOL::GetPoint(), TOOL_MANAGER::GetTool(), PICKER_TOOL::IsPicking(), TOOL_BASE::m_toolMgr, and TOOL_INTERACTIVE::Wait().

Referenced by copyToClipboard().

1302 {
1303  PICKER_TOOL* picker = m_toolMgr->GetTool<PICKER_TOOL>();
1304  assert( picker );
1305 
1306  picker->Activate();
1307 
1308  while ( picker->IsPicking() )
1309  Wait();
1310 
1311  if( !picker->GetPoint() )
1312  return false;
1313 
1314  aP = *picker->GetPoint();
1315  return true;
1316 }
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
boost::optional< VECTOR2D > GetPoint() const
Function GetPoint() Returns picked point.
Definition: picker_tool.h:77
bool IsPicking() const
Function IsPicking() Returns information whether the tool is still active.
Definition: picker_tool.h:87
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 612 of file edit_tool.cpp.

References DIALOG_TRACK_VIA_PROPERTIES::Apply(), changeTrackWidthOnClick(), EDA_ITEM::ClearFlags(), EDA_ITEM::GetFlags(), m_commit, m_selectionTool, TOOL_BASE::m_toolMgr, PCB_BASE_EDIT_FRAME::OnEditItemRequest(), SELECTION_CONDITIONS::OnlyTypes(), SELECTION_TOOL::RequestSelection(), TOOL_MANAGER::RunAction(), SELECTION_DELETABLE, SELECTION_EDITABLE, PCB_ACTIONS::selectionClear, PCB_ACTIONS::selectionModified, EDA_ITEM::SetFlags(), and GENERAL_COLLECTOR::Tracks.

Referenced by setTransitions().

613 {
614  PCB_BASE_EDIT_FRAME* editFrame = getEditFrame<PCB_BASE_EDIT_FRAME>();
615 
617 
618  if( selection.Empty() )
619  return 0;
620 
621  // Tracks & vias are treated in a special way:
623  {
624  if ( !changeTrackWidthOnClick( selection ) )
625  {
626  DIALOG_TRACK_VIA_PROPERTIES dlg( editFrame, selection );
627 
628  if( dlg.ShowModal() )
629  {
630  dlg.Apply( *m_commit );
631  m_commit->Push( _( "Edit track/via properties" ) );
632  }
633  }
634  }
635  else if( selection.Size() == 1 ) // Properties are displayed when there is only one item selected
636  {
637  // Display properties dialog
638  BOARD_ITEM* item = static_cast<BOARD_ITEM*>( selection.Front() );
639 
640  // Some of properties dialogs alter pointers, so we should deselect them
642 
643  // Store flags, so they can be restored later
644  STATUS_FLAGS flags = item->GetFlags();
645  item->ClearFlags();
646 
647  // Do not handle undo buffer, it is done by the properties dialogs @todo LEGACY
648  // Display properties dialog provided by the legacy canvas frame
649  editFrame->OnEditItemRequest( NULL, item );
650 
652  item->SetFlags( flags );
653  }
654 
655  if( selection.IsHover() )
657 
658  return 0;
659 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
STATUS_FLAGS GetFlags() const
Definition: base_struct.h:269
static const KICAD_T Tracks[]
A scan list for only TRACKS.
Definition: collectors.h:285
SELECTION & RequestSelection(int aFlags=SELECTION_DEFAULT)
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:233
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:165
static TOOL_ACTION selectionModified
Modified selection notification.
Definition: pcb_actions.h:108
void SetFlags(STATUS_FLAGS aMask)
Definition: base_struct.h:267
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...
unsigned STATUS_FLAGS
Definition: base_struct.h:158
bool changeTrackWidthOnClick(const SELECTION &selection)
Definition: edit_tool.cpp:571
Common, abstract interface for edit frames.
void ClearFlags(STATUS_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: base_struct.h:268
int EDIT_TOOL::Remove ( const TOOL_EVENT aEvent)

Function Remove()

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

Definition at line 835 of file edit_tool.cpp.

References ACTIONS::ALT, SELECTION_TOOL::CheckLock(), m_commit, m_selectionTool, TOOL_BASE::m_toolMgr, TOOL_EVENT::Parameter(), SELECTION_TOOL::RequestSelection(), TOOL_MANAGER::RunAction(), PCB_ACTIONS::selectConnection, SELECTION_DELETABLE, SELECTION_LOCKED, SELECTION_SANITIZE_PADS, and PCB_ACTIONS::selectionClear.

Referenced by cutToClipboard(), and setTransitions().

836 {
837  // get a copy instead of reference (as we're going to clear the selectio before removing items)
839 
841  return 0;
842 
843  if( selection.Empty() )
844  return 0;
845 
846  // is this "alternative" remove?
847  const bool isAlt = aEvent.Parameter<intptr_t>() ==
848  (int) PCB_ACTIONS::REMOVE_FLAGS::ALT;
849 
850  // in "alternative" mode, deletion is not just a simple list
851  // of selected items, it is:
852  // - whole tracks, not just segments
853  if( isAlt && selection.IsHover() )
854  {
857  }
858 
859  // As we are about to remove items, they have to be removed from the selection first
861 
862  for( auto item : selection )
863  {
864  m_commit->Remove( item );
865  }
866 
867  m_commit->Push( _( "Delete" ) );
868 
869  return 0;
870 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
if(dlg.ShowModal()==wxID_OK)
Definition: selcolor.cpp:75
SELECTION & RequestSelection(int aFlags=SELECTION_DEFAULT)
Function RequestSelection()
std::unique_ptr< BOARD_COMMIT > m_commit
Definition: edit_tool.h:233
SELECTION_LOCK_FLAGS CheckLock()
Checks if the user has agreed to modify locked items for the given selection.
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 selectConnection
Selects a connection between junctions.
Definition: pcb_actions.h:68
SELECTION_TOOL * m_selectionTool
Selection tool used for obtaining selected items
Definition: edit_tool.h:165
T Parameter() const
Function Parameter() Returns a non-standard parameter assigned to the event.
Definition: tool_event.h:373
Class PCB_ACTIONS.
Definition: pcb_actions.h:42
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.

Implements TOOL_BASE.

Definition at line 258 of file edit_tool.cpp.

References m_commit, m_dragging, and TOOL_BASE::RUN.

259 {
260  m_dragging = false;
261 
262  if( aReason != RUN )
263  m_commit.reset( new BOARD_COMMIT( this ) );
264 }
std::unique_ptr< BOARD_COMMIT > m_commit
Definition: edit_tool.h:233
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:168
int EDIT_TOOL::Rotate ( const TOOL_EVENT aEvent)

Function Rotate()

Rotates currently selected items.

Definition at line 662 of file edit_tool.cpp.

References SELECTION_TOOL::CheckLock(), TOOL_EVT_UTILS::GetEventRotationAngle(), m_commit, m_dragging, m_selectionTool, TOOL_BASE::m_toolMgr, SELECTION_TOOL::RequestSelection(), TOOL_MANAGER::RunAction(), SELECTION_LOCKED, PCB_ACTIONS::selectionClear, PCB_ACTIONS::selectionModified, and updateModificationPoint().

Referenced by MoveExact(), and setTransitions().

663 {
664  PCB_BASE_EDIT_FRAME* editFrame = getEditFrame<PCB_BASE_EDIT_FRAME>();
665 
666  auto& selection = m_selectionTool->RequestSelection();
667 
668  if( selection.Empty() )
669  return 0;
670 
672  return 0;
673 
674  updateModificationPoint( selection );
675  const int rotateAngle = TOOL_EVT_UTILS::GetEventRotationAngle( *editFrame, aEvent );
676 
677  for( auto item : selection )
678  {
679  m_commit->Modify( item );
680  static_cast<BOARD_ITEM*>( item )->Rotate( selection.GetReferencePoint(), rotateAngle );
681  }
682 
683  if( !m_dragging )
684  m_commit->Push( _( "Rotate" ) );
685 
686  if( selection.IsHover() && !m_dragging )
688 
690 
691  return 0;
692 }
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:662
SELECTION & RequestSelection(int aFlags=SELECTION_DEFAULT)
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:233
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:1239
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:165
static TOOL_ACTION selectionModified
Modified selection notification.
Definition: pcb_actions.h:108
bool m_dragging
Flag determining if anything is being dragged right now
Definition: edit_tool.h:168
Common, abstract interface for edit frames.
int GetEventRotationAngle(const PCB_BASE_EDIT_FRAME &aFrame, const TOOL_EVENT &aEvt)
Function getEventRotationAngle()
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)
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::disambiguationMenu(), 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'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 86 of file pcb_tool.h.

References PCB_TOOL::m_editModules.

87  {
88  m_editModules = aEnabled;
89  }
bool m_editModules
Definition: pcb_tool.h:129
void EDIT_TOOL::setTransitions ( )
overridevirtual

Sets up handlers for various events.

Implements TOOL_INTERACTIVE.

Definition at line 1213 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, Duplicate(), PCB_ACTIONS::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, Mirror(), PCB_ACTIONS::mirror, PCB_ACTIONS::move, PCB_ACTIONS::moveExact, MoveExact(), Properties(), PCB_ACTIONS::properties, Remove(), PCB_ACTIONS::remove, PCB_ACTIONS::removeAlt, Rotate(), PCB_ACTIONS::rotateCcw, and PCB_ACTIONS::rotateCw.

1214 {
1215  Go( &EDIT_TOOL::Main, PCB_ACTIONS::editActivate.MakeEvent() );
1216  Go( &EDIT_TOOL::Main, PCB_ACTIONS::move.MakeEvent() );
1217  Go( &EDIT_TOOL::Drag, PCB_ACTIONS::drag45Degree.MakeEvent() );
1219  Go( &EDIT_TOOL::Rotate, PCB_ACTIONS::rotateCw.MakeEvent() );
1220  Go( &EDIT_TOOL::Rotate, PCB_ACTIONS::rotateCcw.MakeEvent() );
1221  Go( &EDIT_TOOL::Flip, PCB_ACTIONS::flip.MakeEvent() );
1222  Go( &EDIT_TOOL::Remove, PCB_ACTIONS::remove.MakeEvent() );
1223  Go( &EDIT_TOOL::Remove, PCB_ACTIONS::removeAlt.MakeEvent() );
1229  Go( &EDIT_TOOL::Mirror, PCB_ACTIONS::mirror.MakeEvent() );
1230 
1236 }
int Main(const TOOL_EVENT &aEvent)
Function Main()
Definition: edit_tool.cpp:369
int Properties(const TOOL_EVENT &aEvent)
Function Edit()
Definition: edit_tool.cpp:612
int Rotate(const TOOL_EVENT &aEvent)
Function Rotate()
Definition: edit_tool.cpp:662
static TOOL_ACTION move
move an item
Definition: pcb_actions.h:90
int ExchangeFootprints(const TOOL_EVENT &aEvent)
Function ExchangeFootprints()
Definition: edit_tool.cpp:1088
static TOOL_ACTION editActivate
Activation of the edit tool.
Definition: pcb_actions.h:87
static TOOL_ACTION dragFreeAngle
Definition: pcb_actions.h:128
static TOOL_ACTION properties
Activation of the edit tool.
Definition: pcb_actions.h:105
static TOOL_ACTION removeAlt
Definition: pcb_actions.h:124
static TOOL_ACTION drag45Degree
Definition: pcb_actions.h:127
static TOOL_ACTION mirror
Mirroring of selected items.
Definition: pcb_actions.h:102
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:733
static TOOL_ACTION moveExact
Activation of the exact move tool.
Definition: pcb_actions.h:111
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:1351
static TOOL_ACTION duplicate
Activation of the duplication tool.
Definition: pcb_actions.h:114
int Flip(const TOOL_EVENT &aEvent)
Function Flip()
Definition: edit_tool.cpp:804
static TOOL_ACTION duplicateIncrement
Activation of the duplication tool with incrementing (e.g. pad number)
Definition: pcb_actions.h:117
static TOOL_ACTION rotateCw
Rotation of selected objects clockwise.
Definition: pcb_actions.h:93
static TOOL_ACTION createArray
Tool for creating an array of objects.
Definition: pcb_actions.h:301
int Drag(const TOOL_EVENT &aEvent)
Function Drag()
Definition: edit_tool.cpp:357
static TOOL_ACTION exchangeFootprints
Exchange footprints of modules.
Definition: pcb_actions.h:120
static TOOL_ACTION cutToClipboard
Paste from clipboard.
Definition: pcb_actions.h:310
static TOOL_ACTION copyToClipboard
Copy selected items to clipboard.
Definition: pcb_actions.h:304
static TOOL_ACTION rotateCcw
Rotation of selected objects counter-clockwise.
Definition: pcb_actions.h:96
int MoveExact(const TOOL_EVENT &aEvent)
Function MoveExact()
Definition: edit_tool.cpp:873
int Remove(const TOOL_EVENT &aEvent)
Function Remove()
Definition: edit_tool.cpp:835
static TOOL_ACTION flip
Flipping of selected objects.
Definition: pcb_actions.h:99
int CreateArray(const TOOL_EVENT &aEvent)
Function CreateArray()
Definition: edit_tool.cpp:1072
int MeasureTool(const TOOL_EVENT &aEvent)
Launches a tool to measure between points
Definition: edit_tool.cpp:1120
static TOOL_ACTION editFootprintInFpEditor
Definition: pcb_actions.h:387
int editFootprintInFpEditor(const TOOL_EVENT &aEvent)
Definition: edit_tool.cpp:1264
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:1319
static TOOL_ACTION remove
Deleting a BOARD_ITEM.
Definition: pcb_actions.h:123
int Duplicate(const TOOL_EVENT &aEvent)
Function Duplicate()
Definition: edit_tool.cpp:925
static TOOL_ACTION measureTool
Definition: pcb_actions.h:368
template<class T >
T* EDIT_TOOL::uniqueHoverSelection ( bool  aSanitize = true)
inlineprivate

Function uniqueHoverSelection()

Get a single unique selection of an item, either from the current selection, or from the items under cursor via hoverSelection()

Template Parameters
Ttype of item to select
Returns
pointer to a selected item, or nullptr if none could be found.

Definition at line 223 of file edit_tool.h.

References hoverSelection().

224  {
225  if( !hoverSelection( aSanitize ) )
226  return nullptr;
227 
228  T* item = uniqueSelected<T>();
229 
230  return item;
231  }
T
enum T contains all this lexer's tokens.
bool hoverSelection(bool aSanitize=true)
Function hoverSelection()
template<class T >
T * EDIT_TOOL::uniqueSelected ( )
private

Function uniqueSelected()

Get a single selected item of a certain type

Template Parameters
Ttype of item to select
Returns
pointer to the item (of type T), or nullptr if there isn't a single selected item, or it's not of the right type.

Definition at line 1360 of file edit_tool.cpp.

References dyn_cast(), m_selectionTool, SELECTION_TOOL::RequestSelection(), and SELECTION_DEFAULT.

1361 {
1362  auto& selection = m_selectionTool->RequestSelection( SELECTION_DEFAULT );
1363 
1364  if( selection.Size() != 1 )
1365  return nullptr;
1366 
1367  auto item = selection[0];
1368  return dyn_cast<T*>( item );
1369 }
SELECTION & RequestSelection(int aFlags=SELECTION_DEFAULT)
Function RequestSelection()
T
enum T contains all this lexer's tokens.
SELECTION_TOOL * m_selectionTool
Selection tool used for obtaining selected items
Definition: edit_tool.h:165
Casted dyn_cast(From aObject)
Function dyn_cast()
Definition: typeinfo.h:73
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 1239 of file edit_tool.cpp.

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

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

1240 {
1241  if( aSelection.HasReferencePoint() )
1242  return false;
1243 
1244  if( aSelection.Size() == 1 )
1245  {
1246  auto item = static_cast<BOARD_ITEM*>( aSelection.Front() );
1247  auto pos = item->GetPosition();
1248  aSelection.SetReferencePoint( VECTOR2I( pos.x, pos.y ) );
1249  }
1250  else
1251  {
1252  // If EDIT_TOOL is not currently active then it means that the cursor position is not
1253  // updated, so we have to fetch the latest value
1254  if( m_toolMgr->GetCurrentToolId() != m_toolId )
1256 
1257  aSelection.SetReferencePoint( m_cursor );
1258  }
1259 
1260  return true;
1261 }
VECTOR2I m_cursor
Last cursor position (needed for getModificationPoint() to avoid changes of edit reference point)...
Definition: edit_tool.h:172
int GetCurrentToolId() const
Returns id of the tool that is on the top of the active tools stack (was invoked the most recently)...
Definition: tool_manager.h:277
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:144
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
virtual const wxPoint & GetPosition() const =0
VECTOR2< int > VECTOR2I
Definition: vector2d.h:590
void SetReferencePoint(const VECTOR2I &aP)
Definition: selection.h:183
VECTOR2D GetCursorPosition() const
Returns the current cursor position in world coordinates.
KIGFX::VIEW_CONTROLS * getViewControls() const
Function getViewControls()
Definition: tool_base.cpp:41
int Size() const
Returns the number of selected parts.
Definition: selection.h:112
bool HasReferencePoint() const
Definition: selection.h:173
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(), SELECTION_TOOL::disambiguationMenu(), PCB_TOOL::doInteractiveItemPlacement(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawDimension(), MICROWAVE_TOOL::drawMicrowaveInductor(), DRAWING_TOOL::drawSegment(), PCB_EDITOR_CONTROL::DrillOrigin(), MODULE_EDITOR_TOOLS::EnumeratePads(), PCBNEW_CONTROL::GridSetOrigin(), PCB_EDITOR_CONTROL::HighlightNetCursor(), ROUTER_TOOL::InlineDrag(), ZOOM_TOOL::Main(), PICKER_TOOL::Main(), Main(), GERBVIEW_SELECTION_TOOL::Main(), SELECTION_TOOL::Main(), LENGTH_TUNER_TOOL::mainLoop(), ROUTER_TOOL::mainLoop(), GERBVIEW_SELECTION_TOOL::MeasureTool(), MeasureTool(), POINT_EDITOR::OnSelectionChange(), ROUTER_TOOL::performDragging(), ROUTER_TOOL::performRouting(), LENGTH_TUNER_TOOL::performTuning(), pickCopyReferencePoint(), DRAWING_TOOL::PlaceDXF(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), DRAWING_TOOL::PlaceText(), DRAWING_TOOL::runPolygonEventLoop(), 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
boost::optional< 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 172 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 168 of file edit_tool.h.

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

SELECTION_TOOL* EDIT_TOOL::m_selectionTool
private

Selection tool used for obtaining selected items

Definition at line 165 of file edit_tool.h.

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

TOOL_ID TOOL_BASE::m_toolId
protectedinherited

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

Definition at line 210 of file tool_base.h.

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

TOOL_MANAGER* TOOL_BASE::m_toolMgr
protectedinherited

Definition at line 215 of file tool_base.h.

Referenced by TOOL_INTERACTIVE::Activate(), PAD_TOOL::applyPadSettings(), TOOL_BASE::attachManager(), PCB_EDITOR_CONTROL::calculateSelectionRatsnest(), GERBVIEW_SELECTION_TOOL::clearSelection(), SELECTION_TOOL::clearSelection(), PAD_TOOL::copyPadSettings(), MODULE_EDITOR_TOOLS::CreatePadFromShapes(), PCB_EDITOR_CONTROL::CrossProbePcbToSch(), PCB_EDITOR_CONTROL::CrossProbeSchToPcb(), PCBNEW_CONTROL::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(), MODULE_EDITOR_TOOLS::ExplodePadToShapes(), SELECTION_TOOL::findCallback(), SELECTION_TOOL::findMove(), Flip(), TOOL_BASE::getEditFrameInt(), TOOL_BASE::GetManager(), TOOL_BASE::getModelInt(), DRAWING_TOOL::getSourceZoneForAction(), TOOL_BASE::getView(), TOOL_BASE::getViewControls(), TOOL_INTERACTIVE::goInternal(), PCBNEW_CONTROL::GridSetOrigin(), GERBVIEW_CONTROL::HighlightControl(), PCB_EDITOR_CONTROL::HighlightNet(), PCB_EDITOR_CONTROL::HighlightNetCursor(), ALIGN_DISTRIBUTE_TOOL::Init(), PAD_TOOL::Init(), POINT_EDITOR::Init(), PCB_EDITOR_CONTROL::Init(), POSITION_RELATIVE_TOOL::Init(), Init(), 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(), pickCopyReferencePoint(), PCBNEW_CONTROL::placeBoardItems(), DRAWING_TOOL::PlaceDXF(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), DRAWING_TOOL::PlaceText(), POSITION_RELATIVE_TOOL::PositionRelative(), Properties(), PAD_TOOL::pushPadSettings(), POSITION_RELATIVE_TOOL::RelativeItemSelectionMove(), Remove(), GERBVIEW_SELECTION_TOOL::RequestSelection(), SELECTION_TOOL::RequestSelection(), TOOL_INTERACTIVE::resetTransitions(), Rotate(), TOOL_INTERACTIVE::RunMainStack(), SELECTION_TOOL::SanitizeSelection(), SELECTION_TOOL::selectConnection(), SELECTION_TOOL::selectCopper(), 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(), updateModificationPoint(), PCB_EDITOR_CONTROL::UpdateSelectionRatsnest(), PCB_EDITOR_CONTROL::ViaSizeDec(), PCB_EDITOR_CONTROL::ViaSizeInc(), TOOL_INTERACTIVE::Wait(), PCB_EDITOR_CONTROL::ZoneDuplicate(), PCB_EDITOR_CONTROL::ZoneFill(), PCB_EDITOR_CONTROL::ZoneMerge(), and PCB_EDITOR_CONTROL::ZoneUnfill().

std::string TOOL_BASE::m_toolName
protectedinherited

Name of the tool.

Names are expected to obey the format application.ToolName

(eg. pcbnew.InteractiveSelection).

Definition at line 214 of file tool_base.h.

Referenced by TOOL_BASE::GetName().

TOOL_SETTINGS TOOL_BASE::m_toolSettings
protectedinherited

Definition at line 216 of file tool_base.h.

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

TOOL_TYPE TOOL_BASE::m_type
protectedinherited

Stores the type of the tool.

Definition at line 207 of file tool_base.h.

Referenced by TOOL_BASE::GetType().


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