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

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

wxPoint getModificationPoint (const SELECTION &aSelection)
 

Returns the right modification point (e.g.

More...
 
int editFootprintInFpEditor (const TOOL_EVENT &aEvent)
 
bool invokeInlineRouter (int aDragMode)
 
bool changeTrackWidthOnClick (const SELECTION &selection)
 
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...
 
wxPoint m_offset
 

Offset from the dragged item's center (anchor)

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 240 of file edit_tool.cpp.

240  :
241  PCB_TOOL( "pcbnew.InteractiveEdit" ), m_selectionTool( NULL ),
242  m_dragging( false )
243 {
244 }
SELECTION_TOOL * m_selectionTool
Selection tool used for obtaining selected items
Definition: edit_tool.h:144
bool m_dragging
Flag determining if anything is being dragged right now
Definition: edit_tool.h:147
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 MODULE_EDITOR_TOOLS::CopyItems(), 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(), MeasureTool(), POINT_EDITOR::OnSelectionChange(), MODULE_EDITOR_TOOLS::PasteItems(), 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:213
TOOL_ID m_toolId
Unique identifier for the tool, assigned by a TOOL_MANAGER instance.
Definition: tool_base.h:208
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 54 of file tool_base.cpp.

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

Referenced by TOOL_MANAGER::RegisterTool().

55 {
56  m_toolMgr = aManager;
57  m_toolSettings = TOOL_SETTINGS( this );
58 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:213
TOOL_SETTINGS m_toolSettings
Definition: tool_base.h:214
friend class TOOL_SETTINGS
Definition: tool_base.h:153
bool EDIT_TOOL::changeTrackWidthOnClick ( const SELECTION selection)
private

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

541 {
542  if ( selection.Size() == 1 && frame()->Settings().m_editActionChangesTrackWidth )
543  {
544  auto item = static_cast<BOARD_ITEM *>( selection[0] );
545 
546  m_commit->Modify( item );
547 
548  if( auto via = dyn_cast<VIA*>( item ) )
549  {
550  int new_width, new_drill;
551 
552  if( via->GetViaType() == VIA_MICROVIA )
553  {
554  auto net = via->GetNet();
555 
556  new_width = net->GetMicroViaSize();
557  new_drill = net->GetMicroViaDrillSize();
558  }
559  else
560  {
561  new_width = board()->GetDesignSettings().GetCurrentViaSize();
562  new_drill = board()->GetDesignSettings().GetCurrentViaDrill();
563  }
564 
565  via->SetDrill( new_drill );
566  via->SetWidth( new_width );
567  }
568  else if ( auto track = dyn_cast<TRACK*>( item ) )
569  {
570  int new_width = board()->GetDesignSettings().GetCurrentTrackWidth();
571  track->SetWidth( new_width );
572  }
573 
574  m_commit->Push( _("Edit track width/via size") );
575  return true;
576  }
577 
578  return false;
579 }
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:213
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::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 1044 of file edit_tool.cpp.

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

Referenced by setTransitions().

1045 {
1046  const auto& selection = m_selectionTool->RequestSelection();
1047 
1048  if( selection.Empty() )
1049  return 0;
1050 
1051  // we have a selection to work on now, so start the tool process
1052  PCB_BASE_FRAME* editFrame = getEditFrame<PCB_BASE_FRAME>();
1053  GAL_ARRAY_CREATOR array_creator( *editFrame, m_editModules, selection );
1054  array_creator.Invoke();
1055 
1056  return 0;
1057 }
SELECTION & RequestSelection(int aFlags=SELECTION_DEFAULT)
Function RequestSelection()
SELECTION_TOOL * m_selectionTool
Selection tool used for obtaining selected items
Definition: edit_tool.h:144
bool m_editModules
Definition: pcb_tool.h:128
class PCB_BASE_FRAME basic PCB main window class for Pcbnew, Gerbview, and CvPcb footprint viewer...
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_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:341
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
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:1389
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:311
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 330 of file edit_tool.cpp.

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

Referenced by setTransitions().

331 {
332  int mode = PNS::DM_ANY;
333 
334  if( aEvent.IsAction( &PCB_ACTIONS::dragFreeAngle ) )
335  mode |= PNS::DM_FREE_ANGLE;
336 
337  invokeInlineRouter( mode );
338 
339  return 0;
340 }
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:308
int EDIT_TOOL::Duplicate ( const TOOL_EVENT aEvent)

Function Duplicate()

Duplicates the current selection and starts a move action.

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

898 {
899  bool increment = aEvent.IsAction( &PCB_ACTIONS::duplicateIncrement );
900 
901  // Be sure that there is at least one item that we can modify
903 
904  if( selection.Empty() )
905  return 0;
906 
907  // we have a selection to work on now, so start the tool process
908  PCB_BASE_EDIT_FRAME* editFrame = getEditFrame<PCB_BASE_EDIT_FRAME>();
909 
910  std::vector<BOARD_ITEM*> new_items;
911  new_items.reserve( selection.Size() );
912 
913  BOARD_ITEM* orig_item = nullptr;
914  BOARD_ITEM* dupe_item = nullptr;
915 
916  // Each selected item is duplicated and pushed to new_items list
917  // Old selection is cleared, and new items are then selected.
918  for( auto item : selection )
919  {
920  if( !item )
921  continue;
922 
923  orig_item = static_cast<BOARD_ITEM*>( item );
924 
925  if( m_editModules )
926  {
927  dupe_item = editFrame->GetBoard()->m_Modules->Duplicate( orig_item, increment );
928  }
929  else
930  {
931 #if 0
932  // @TODO: see if we allow zone duplication here
933  // Duplicate zones is especially tricky (overlaping zones must be merged)
934  // so zones are not duplicated
935  if( item->Type() != PCB_ZONE_AREA_T )
936 #endif
937  dupe_item = editFrame->GetBoard()->Duplicate( orig_item );
938  }
939 
940  if( dupe_item )
941  {
942  // Clear the selection flag here, otherwise the SELECTION_TOOL
943  // will not properly select it later on
944  dupe_item->ClearSelected();
945 
946  new_items.push_back( dupe_item );
947  m_commit->Add( dupe_item );
948  }
949  }
950 
951  // Clear the old selection first
953 
954  // Select the new items
955  m_toolMgr->RunAction( PCB_ACTIONS::selectItems, true, &new_items );
956 
957  // record the new items as added
958  if( !selection.Empty() )
959  {
960  editFrame->DisplayToolMsg( wxString::Format( _( "Duplicated %d item(s)" ),
961  (int) new_items.size() ) );
962 
963  // If items were duplicated, pick them up
964  // this works well for "dropping" copies around and pushes the commit
966  Main( evt );
967  }
968 
969  return 0;
970 }
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:342
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:213
void ClearSelected()
Definition: base_struct.h:231
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:213
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:144
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:128
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:497
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 1226 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().

1227 {
1228  const auto& selection = m_selectionTool->RequestSelection();
1229 
1230  if( selection.Empty() )
1231  return 0;
1232 
1233  MODULE* mod = selection.FirstOfKind<MODULE>();
1234 
1235  if( !mod )
1236  return 0;
1237 
1238  PCB_BASE_EDIT_FRAME* editFrame = getEditFrame<PCB_BASE_EDIT_FRAME>();
1239 
1240  editFrame->SetCurItem( mod );
1241 
1242  if( editFrame->GetCurItem()->GetTimeStamp() == 0 ) // Module Editor needs a non null timestamp
1243  {
1244  editFrame->GetCurItem()->SetTimeStamp( GetNewTimeStamp() );
1245  editFrame->OnModify();
1246  }
1247 
1249 
1250  editor->Load_Module_From_BOARD( (MODULE*) editFrame->GetCurItem() );
1251  editFrame->SetCurItem( NULL ); // the current module could be deleted by
1252 
1253  editor->Show( true );
1254  editor->Raise(); // Iconize( false );
1255 
1256  if( selection.IsHover() )
1258 
1259  return 0;
1260 }
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:213
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:144
void SetTimeStamp(time_t aNewTimeStamp)
Definition: base_struct.h:203
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:204
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:128
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 1060 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().

1061 {
1062  const auto& selection = m_selectionTool->RequestSelection();
1063 
1064  if( selection.Empty() )
1065  return 0;
1066 
1067  MODULE* mod = selection.FirstOfKind<MODULE> ();
1068 
1069  if( !mod )
1070  return 0;
1071 
1072  frame()->SetCurItem( mod );
1073 
1074  // Footprint exchange could remove modules, so they have to be
1075  // removed from the selection first
1077 
1078  // invoke the exchange dialog process
1079  {
1080  DIALOG_EXCHANGE_MODULE dialog( frame(), mod );
1081  dialog.ShowQuasiModal();
1082  }
1083 
1084  // The current item can be deleted by exchange module, and the
1085  // selection is emptied, so remove current item from frame info area
1086  frame()->SetCurItem( nullptr );
1087 
1088  return 0;
1089 }
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:213
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:144
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 774 of file edit_tool.cpp.

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

Referenced by setTransitions().

775 {
776  const auto& selection = m_selectionTool->RequestSelection();
777 
779  return 0;
780 
781  if( selection.Empty() )
782  return 0;
783 
784  wxPoint modPoint = getModificationPoint( selection );
785 
786  for( auto item : selection )
787  {
788  m_commit->Modify( item );
789  static_cast<BOARD_ITEM*>( item )->Flip( modPoint );
790  }
791 
792  // Update the dragging point offset
793  m_offset = static_cast<BOARD_ITEM*>( selection.Front() )->GetPosition() - modPoint;
794 
795  if( !m_dragging )
796  m_commit->Push( _( "Flip" ) );
797 
798  if( selection.IsHover() && !m_dragging )
800 
802 
803  return 0;
804 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
wxPoint getModificationPoint(const SELECTION &aSelection)
Returns the right modification point (e.g.
Definition: edit_tool.cpp:1208
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:213
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:213
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:144
wxPoint m_offset
Offset from the dragged item's center (anchor)
Definition: edit_tool.h:150
static TOOL_ACTION selectionModified
Modified selection notification.
Definition: pcb_actions.h:108
int Flip(const TOOL_EVENT &aEvent)
Function Flip()
Definition: edit_tool.cpp:774
bool m_dragging
Flag determining if anything is being dragged right now
Definition: edit_tool.h:147
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(), MODULE_EDITOR_TOOLS::CopyItems(), PAD_TOOL::copyPadSettings(), MICROWAVE_TOOL::createInductorBetween(), ROUTER_TOOL::CustomTrackWidthDialog(), PCB_TOOL::doInteractiveItemPlacement(), ROUTER_TOOL::DpDimensionsDialog(), MICROWAVE_TOOL::drawMicrowaveInductor(), DRAWING_TOOL::drawSegment(), DRAWING_TOOL::DrawVia(), MODULE_EDITOR_TOOLS::EnumeratePads(), ExchangeFootprints(), ROUTER_TOOL::finishInteractive(), ROUTER_TOOL::InlineDrag(), LENGTH_TUNER_TOOL::mainLoop(), ROUTER_TOOL::mainLoop(), LENGTH_TUNER_TOOL::meanderSettingsDialog(), MeasureTool(), MODULE_EDITOR_TOOLS::ModuleEdgeOutlines(), MODULE_EDITOR_TOOLS::ModuleTextOutlines(), ROUTER_TOOL::onViaCommand(), MODULE_EDITOR_TOOLS::PasteItems(), 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(), LENGTH_TUNER_TOOL::routerOptionsDialog(), 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>(); }
template<typename T >
T* TOOL_BASE::getEditFrame ( ) const
inlineprotectedinherited

Function getEditFrame()

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

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

187  {
188  return static_cast<T*>( getEditFrameInt() );
189  }
T
enum T contains all this lexer's tokens.
wxWindow * getEditFrameInt() const
Definition: tool_base.cpp:42
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:208
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:213
template<typename T >
T* TOOL_BASE::getModel ( ) const
inlineprotectedinherited

Function getModel()

Returns the model object if it matches the requested type.

Definition at line 197 of file tool_base.h.

References TOOL_BASE::getModelInt().

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

198  {
199  EDA_ITEM* m = getModelInt();
200 
201  return static_cast<T*>( m );
202  }
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:151
EDA_ITEM * getModelInt() const
Definition: tool_base.cpp:48
wxPoint EDIT_TOOL::getModificationPoint ( const SELECTION aSelection)
private

Returns the right modification point (e.g.

for rotation), depending on the number of

selected items.

Definition at line 1208 of file edit_tool.cpp.

References SELECTION::Front(), TOOL_MANAGER::GetCurrentToolId(), KIGFX::VIEW_CONTROLS::GetCursorPosition(), TOOL_BASE::getViewControls(), m_cursor, m_offset, TOOL_BASE::m_toolId, TOOL_BASE::m_toolMgr, SELECTION::Size(), VECTOR2< T >::x, and VECTOR2< T >::y.

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

1209 {
1210  if( aSelection.Size() == 1 )
1211  {
1212  return static_cast<BOARD_ITEM*>( aSelection.Front() )->GetPosition() - m_offset;
1213  }
1214  else
1215  {
1216  // If EDIT_TOOL is not currently active then it means that the cursor position is not
1217  // updated, so we have to fetch the latest value
1218  if( m_toolMgr->GetCurrentToolId() != m_toolId )
1220 
1221  return wxPoint( m_cursor.x, m_cursor.y );
1222  }
1223 }
VECTOR2I m_cursor
Last cursor position (needed for getModificationPoint() to avoid changes of edit reference point)...
Definition: edit_tool.h:154
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:268
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:213
TOOL_ID m_toolId
Unique identifier for the tool, assigned by a TOOL_MANAGER instance.
Definition: tool_base.h:208
wxPoint m_offset
Offset from the dragged item's center (anchor)
Definition: edit_tool.h:150
VECTOR2D GetCursorPosition() const
Returns the current cursor position in world coordinates.
KIGFX::VIEW_CONTROLS * getViewControls() const
Function getViewControls()
Definition: tool_base.cpp:36
int Size() const
Returns the number of selected parts.
Definition: selection.h:112
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:212
TOOL_SETTINGS & TOOL_BASE::GetSettings ( )
inherited

Definition at line 72 of file tool_base.cpp.

References TOOL_BASE::m_toolSettings.

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

73 {
74  return m_toolSettings;
75 }
TOOL_SETTINGS m_toolSettings
Definition: tool_base.h:214
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:205
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 30 of file tool_base.cpp.

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

Referenced by PCB_EDITOR_CONTROL::CrossProbeSchToPcb(), PCBNEW_CONTROL::CursorControl(), 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(), PNS::TOOL_BASE::highlightNet(), PCBNEW_CONTROL::LayerAlphaDec(), PCBNEW_CONTROL::LayerAlphaInc(), 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(), DRAWING_TOOL::Reset(), SELECTION_TOOL::Reset(), SELECTION_TOOL::selectable(), SELECTION_TOOL::selectionContains(), SELECTION_TOOL::selectMultiple(), ZOOM_TOOL::selectRegion(), PCBNEW_CONTROL::TrackDisplayMode(), 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(), SELECTION_TOOL::zoomFitSelection(), COMMON_TOOLS::ZoomInOutCenter(), and SELECTION_TOOL::~SELECTION_TOOL().

31 {
32  return m_toolMgr->GetView();
33 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:213
KIGFX::VIEW * GetView() const
Definition: tool_manager.h:243
KIGFX::VIEW_CONTROLS * TOOL_BASE::getViewControls ( ) const
protectedinherited
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(), MICROWAVE_TOOL::setTransitions(), PAD_TOOL::setTransitions(), POINT_EDITOR::setTransitions(), COMMON_TOOLS::setTransitions(), ALIGN_DISTRIBUTE_TOOL::setTransitions(), PCBNEW_CONTROL::setTransitions(), POSITION_RELATIVE_TOOL::setTransitions(), MODULE_EDITOR_TOOLS::setTransitions(), PICKER_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 256 of file edit_tool.cpp.

References CONDITIONAL_MENU::AddItem(), SELECTION_CONDITIONS::Count(), PCB_ACTIONS::createArray, DisplayError(), PCB_ACTIONS::drag45Degree, PCB_ACTIONS::dragFreeAngle, PCB_ACTIONS::duplicate, PCB_ACTIONS::editFootprintInFpEditor, PCB_ACTIONS::exchangeFootprints, TOOL_MANAGER::FindTool(), PCB_ACTIONS::flip, TOOL_MENU::GetMenu(), SELECTION_TOOL::GetToolMenu(), PCB_TOOL::m_editModules, m_offset, 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_MODULE_T, PCB_ACTIONS::positionRelative, PCB_ACTIONS::properties, PCB_ACTIONS::remove, PCB_ACTIONS::rotateCcw, PCB_ACTIONS::rotateCw, GENERAL_COLLECTOR::Tracks, wxPoint::x, and wxPoint::y.

257 {
258  // Find the selection tool, so they can cooperate
259  m_selectionTool = static_cast<SELECTION_TOOL*>( m_toolMgr->FindTool( "pcbnew.InteractiveSelection" ) );
260 
261  if( !m_selectionTool )
262  {
263  DisplayError( NULL, wxT( "pcbnew.InteractiveSelection tool is not available" ) );
264  return false;
265  }
266 
267  auto editingModuleCondition = [ this ] ( const SELECTION& aSelection ) {
268  return m_editModules;
269  };
270 
271  auto singleModuleCondition = SELECTION_CONDITIONS::OnlyType( PCB_MODULE_T )
273 
274  // Add context menu entries that are displayed when selection tool is active
276 
286 
291 
292  // Mirror only available in modedit
293  menu.AddItem( PCB_ACTIONS::mirror, editingModuleCondition && SELECTION_CONDITIONS::NotEmpty );
294 
295  // Footprint actions
297  singleModuleCondition );
299  singleModuleCondition );
300 
301  m_offset.x = 0;
302  m_offset.y = 0;
303 
304  return true;
305 }
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:294
Class SELECTION_TOOL.
CONDITIONAL_MENU & GetMenu()
Function GetMenu.
Definition: tool_menu.cpp:49
static TOOL_ACTION dragFreeAngle
Definition: pcb_actions.h:128
TOOL_MENU & GetToolMenu()
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:213
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:144
wxPoint m_offset
Offset from the dragged item's center (anchor)
Definition: edit_tool.h:150
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 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:295
static TOOL_ACTION exchangeFootprints
Exchange footprints of modules.
Definition: pcb_actions.h:120
bool m_editModules
Definition: pcb_tool.h:128
static TOOL_ACTION rotateCcw
Rotation of selected objects counter-clockwise.
Definition: pcb_actions.h:96
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:379
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:236
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 308 of file edit_tool.cpp.

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

Referenced by Drag(), and Main().

309 {
310  TRACK* track = uniqueSelected<TRACK>();
311  VIA* via = uniqueSelected<VIA>();
312 
313 
314 
315  if( track || via )
316  {
317  auto theRouter = static_cast<ROUTER_TOOL*>( m_toolMgr->FindTool( "pcbnew.InteractiveRouter" ) );
318  assert( theRouter );
319 
320  if( !theRouter->Router()->Settings().InlineDragEnabled() )
321  return false;
322 
324  return true;
325  }
326 
327  return false;
328 }
TOOL_BASE * FindTool(int aId) const
Function FindTool() Searches for a tool with given ID.
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:213
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:206
static ROUTER * theRouter
Definition: pns_router.cpp:59
ROUTING_SETTINGS & Settings()
Definition: pns_router.h:187
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 342 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(), PNS::DM_ANY, PCB_ACTIONS::duplicate, PCB_ACTIONS::editActivate, KIGFX::VIEW_CONTROLS::ForceCursorPosition(), KIGFX::VIEW_CONTROLS::GetCursorPosition(), getModificationPoint(), BOARD_ITEM::GetPosition(), TOOL_BASE::getViewControls(), invokeInlineRouter(), SELECTION::IsHover(), m_commit, m_cursor, m_dragging, m_offset, 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(), BOARD_ITEM::SetPosition(), KIGFX::VIEW_CONTROLS::SetSnapping(), KIGFX::VIEW_CONTROLS::ShowCursor(), TA_UNDO_REDO_PRE, TC_COMMAND, TC_MOUSE, TOOL_INTERACTIVE::Wait(), KIGFX::VIEW_CONTROLS::WarpCursor(), wxPoint::x, VECTOR2< T >::x, wxPoint::y, and VECTOR2< T >::y.

Referenced by Duplicate(), and setTransitions().

343 {
345  PCB_BASE_EDIT_FRAME* editFrame = getEditFrame<PCB_BASE_EDIT_FRAME>();
346 
347  VECTOR2I originalCursorPos = controls->GetCursorPosition();
348 
349  // Be sure that there is at least one item that we can modify. If nothing was selected before,
350  // try looking for the stuff under mouse cursor (i.e. Kicad old-style hover selection)
351  auto& selection = m_selectionTool->RequestSelection( SELECTION_DEFAULT );
352 
353  if( selection.Empty() )
354  return 0;
355 
356  bool unselect = selection.IsHover();
357 
358  Activate();
359 
360  m_dragging = false; // Are selected items being dragged?
361  bool restore = false; // Should items' state be restored when finishing the tool?
362  bool lockOverride = false;
363 
364  controls->ShowCursor( true );
365  controls->SetSnapping( true );
366  controls->SetAutoPan( true );
367 
368  // cumulative translation
369  wxPoint totalMovement( 0, 0 );
370 
371  GRID_HELPER grid( editFrame );
372  OPT_TOOL_EVENT evt = aEvent;
373 
374  // Main loop: keep receiving events
375  do
376  {
377  bool matchingAction = evt->IsAction( &PCB_ACTIONS::editActivate )
378  || evt->IsAction( &PCB_ACTIONS::move );
379 
380  if( matchingAction
381  || evt->IsMotion() || evt->IsDrag( BUT_LEFT ) )
382  {
383  if( selection.Empty() )
384  break;
385 
386  auto curr_item = static_cast<BOARD_ITEM*>( selection.Front() );
387 
388  if( m_dragging && evt->Category() == TC_MOUSE )
389  {
390  m_cursor = grid.BestSnapAnchor( evt->Position(), curr_item );
391  controls->ForceCursorPosition( true, m_cursor );
392 
393  wxPoint movement = wxPoint( m_cursor.x, m_cursor.y ) - curr_item->GetPosition();
394  totalMovement += movement;
395 
396  // Drag items to the current cursor position
397  for( auto item : selection )
398  static_cast<BOARD_ITEM*>( item )->Move( movement + m_offset );
399  }
400  else if( !m_dragging ) // Prepare to start dragging
401  {
402  bool invokedRouter = false;
403 
404  if ( !evt->IsAction( &PCB_ACTIONS::move ) )
405  invokedRouter = invokeInlineRouter( PNS::DM_ANY );
406 
407  if( !invokedRouter )
408  {
409  // deal with locked items (override lock or abort the operation)
411 
412  if( lockFlags == SELECTION_LOCKED )
413  break;
414  else if( lockFlags == SELECTION_LOCK_OVERRIDE )
415  lockOverride = true;
416 
417  // Save items, so changes can be undone
418  for( auto item : selection )
419  m_commit->Modify( item );
420 
421  m_cursor = controls->GetCursorPosition();
422 
423  if( selection.Size() == 1 )
424  {
425  // Set the current cursor position to the first dragged item origin, so the
426  // movement vector could be computed later
427  m_cursor = grid.BestDragOrigin( originalCursorPos, curr_item );
428  grid.SetAuxAxes( true, m_cursor );
429  }
430  else
431  {
432  m_cursor = grid.Align( m_cursor );
433  }
434 
435  controls->ForceCursorPosition( true, m_cursor );
436  controls->WarpCursor( m_cursor, true );
437 
438  VECTOR2I o = VECTOR2I( curr_item->GetPosition() );
439  m_offset.x = o.x - m_cursor.x;
440  m_offset.y = o.y - m_cursor.y;
441 
442  controls->SetAutoPan( true );
443  m_dragging = true;
444  }
445  }
446 
448  }
449 
450  else if( evt->IsCancel() || evt->IsActivate() )
451  {
452  restore = true; // Cancelling the tool means that items have to be restored
453  break; // Finish
454  }
455 
456  else if( evt->Action() == TA_UNDO_REDO_PRE )
457  {
458  unselect = true;
459  break;
460  }
461 
462  // Dispatch TOOL_ACTIONs
463  else if( evt->Category() == TC_COMMAND )
464  {
465  wxPoint modPoint = getModificationPoint( selection );
466 
467  if( evt->IsAction( &PCB_ACTIONS::remove ) )
468  {
469  // exit the loop, as there is no further processing for removed items
470  break;
471  }
472  else if( evt->IsAction( &PCB_ACTIONS::duplicate ) )
473  {
474  // On duplicate, stop moving this item
475  // The duplicate tool should then select the new item and start
476  // a new move procedure
477  break;
478  }
479  else if( evt->IsAction( &PCB_ACTIONS::moveExact ) )
480  {
481  // Can't do this, because the selection will then contain
482  // stale pointers and it will all go horribly wrong...
483  //editFrame->RestoreCopyFromUndoList( dummy );
484  //
485  // So, instead, reset the position manually
486  for( auto item : selection )
487  {
488  BOARD_ITEM* i = static_cast<BOARD_ITEM*>( item );
489  i->SetPosition( i->GetPosition() - totalMovement );
490 
491  // And what about flipping and rotation?
492  // for now, they won't be undone, but maybe that is how
493  // it should be, so you can flip and move exact in the
494  // same action?
495  }
496 
497  // This causes a double event, so we will get the dialogue
498  // correctly, somehow - why does Rotate not?
499  //MoveExact( aEvent );
500  break; // exit the loop - we move exactly, so we have finished moving
501  }
502 
503  // TODO check if the following can be removed
504  if( m_dragging && !selection.Empty() )
505  {
506  // Update dragging offset (distance between cursor and the first dragged item)
507  m_offset = static_cast<BOARD_ITEM*>( selection.Front() )->GetPosition() - modPoint;
508  }
509  }
510 
511  else if( evt->IsMouseUp( BUT_LEFT ) || evt->IsClick( BUT_LEFT ) )
512  {
513  if( !lockOverride )
514  break; // Finish
515 
516  lockOverride = false;
517  }
518  } while( ( evt = Wait() ) ); //Should be assignment not equality test
519 
520  controls->ForceCursorPosition( false );
521  controls->ShowCursor( false );
522  controls->SetSnapping( false );
523  controls->SetAutoPan( false );
524 
525  m_dragging = false;
526  m_offset.x = 0;
527  m_offset.y = 0;
528 
529  if( unselect || restore )
531 
532  if( restore )
533  m_commit->Revert();
534  else
535  m_commit->Push( _( "Drag" ) );
536 
537  return 0;
538 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
wxPoint getModificationPoint(const SELECTION &aSelection)
Returns the right modification point (e.g.
Definition: edit_tool.cpp:1208
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:154
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:213
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:213
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:144
wxPoint m_offset
Offset from the dragged item's center (anchor)
Definition: edit_tool.h:150
VECTOR2< int > VECTOR2I
Definition: vector2d.h:590
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
KIGFX::VIEW_CONTROLS * controls() const
Definition: pcb_tool.h:124
static TOOL_ACTION duplicate
Activation of the duplication tool.
Definition: pcb_actions.h:114
virtual void WarpCursor(const VECTOR2D &aPosition, bool aWorldCoordinates=false, bool aWarpView=false) const =0
Function WarpCursor() If enabled (.
bool m_dragging
Flag determining if anything is being dragged right now
Definition: edit_tool.h:147
SELECTION_LOCK_FLAGS
Definition: selection.h:184
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 (...
Definition: view_controls.h:94
virtual void ForceCursorPosition(bool aEnabled, const VECTOR2D &aPosition=VECTOR2D(0, 0))
Function ForceCursorPosition() Places the cursor immediately at a given point.
virtual void SetAutoPan(bool aEnabled)
Function SetAutoPan Turns on/off auto panning (this feature is used when there is a tool active (eg...
KIGFX::VIEW_CONTROLS * getViewControls() const
Function getViewControls()
Definition: tool_base.cpp:36
bool invokeInlineRouter(int aDragMode)
Definition: edit_tool.cpp:308
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 1092 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().

1093 {
1094  auto& view = *getView();
1095  auto& controls = *getViewControls();
1096 
1097  Activate();
1100  wxCURSOR_PENCIL, _( "Measure distance" ) );
1101 
1103 
1104  KIGFX::PREVIEW::RULER_ITEM ruler( twoPtMgr );
1105 
1106  view.Add( &ruler );
1107  view.SetVisible( &ruler, false );
1108 
1109  bool originSet = false;
1110 
1111  controls.ShowCursor( true );
1112  controls.SetSnapping( true );
1113 
1114  while( auto evt = Wait() )
1115  {
1116  const VECTOR2I cursorPos = controls.GetCursorPosition();
1117 
1118  if( evt->IsCancel() || evt->IsActivate() )
1119  {
1120  break;
1121  }
1122 
1123  // click or drag starts
1124  else if( !originSet &&
1125  ( evt->IsDrag( BUT_LEFT ) || evt->IsClick( BUT_LEFT ) ) )
1126  {
1127  if( !evt->IsDrag( BUT_LEFT ) )
1128  {
1129  twoPtMgr.SetOrigin( cursorPos );
1130  twoPtMgr.SetEnd( cursorPos );
1131  }
1132 
1133  controls.CaptureCursor( true );
1134  controls.SetAutoPan( true );
1135 
1136  originSet = true;
1137  }
1138 
1139  else if( !originSet && evt->IsMotion() )
1140  {
1141  // make sure the origin is set before a drag starts
1142  // otherwise you can miss a step
1143  twoPtMgr.SetOrigin( cursorPos );
1144  twoPtMgr.SetEnd( cursorPos );
1145  }
1146 
1147  // second click or mouse up after drag ends
1148  else if( originSet &&
1149  ( evt->IsClick( BUT_LEFT ) || evt->IsMouseUp( BUT_LEFT ) ) )
1150  {
1151  originSet = false;
1152 
1153  controls.SetAutoPan( false );
1154  controls.CaptureCursor( false );
1155 
1156  view.SetVisible( &ruler, false );
1157  }
1158 
1159  // move or drag when origin set updates rules
1160  else if( originSet &&
1161  ( evt->IsMotion() || evt->IsDrag( BUT_LEFT ) ) )
1162  {
1163  twoPtMgr.SetAngleSnap( evt->Modifier( MD_CTRL ) );
1164  twoPtMgr.SetEnd( cursorPos );
1165 
1166  view.SetVisible( &ruler, true );
1167  view.Update( &ruler, KIGFX::GEOMETRY );
1168  }
1169 
1170  else if( evt->IsClick( BUT_RIGHT ) )
1171  {
1172  GetManager()->PassEvent();
1173  }
1174  }
1175 
1176  view.SetVisible( &ruler, false );
1177  view.Remove( &ruler );
1178 
1179  frame()->SetNoToolSelected();
1180 
1181  return 0;
1182 }
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:341
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:342
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:1389
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:36
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:30
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:560
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:1335
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:311
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 705 of file edit_tool.cpp.

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

Referenced by setTransitions().

706 {
707  const auto& selection = m_selectionTool->RequestSelection();
708 
710  return 0;
711 
712  if( selection.Empty() )
713  return 0;
714 
715  wxPoint mirrorPoint = getModificationPoint( selection );
716 
717  for( auto item : selection )
718  {
719  // only modify items we can mirror
720  switch( item->Type() )
721  {
722  case PCB_MODULE_EDGE_T:
723  case PCB_MODULE_TEXT_T:
724  case PCB_PAD_T:
725  m_commit->Modify( item );
726  break;
727  default:
728  continue;
729  }
730 
731  // modify each object as necessary
732  switch( item->Type() )
733  {
734  case PCB_MODULE_EDGE_T:
735  {
736  auto& edge = static_cast<EDGE_MODULE&>( *item );
737  edge.Mirror( mirrorPoint, false );
738  break;
739  }
740 
741  case PCB_MODULE_TEXT_T:
742  {
743  auto& modText = static_cast<TEXTE_MODULE&>( *item );
744  modText.Mirror( mirrorPoint, false );
745  break;
746  }
747 
748  case PCB_PAD_T:
749  {
750  auto& pad = static_cast<D_PAD&>( *item );
751  mirrorPadX( pad, mirrorPoint );
752  break;
753  }
754 
755  default:
756  // it's likely the commit object is wrong if you get here
757  assert( false );
758  break;
759  }
760  }
761 
762  if( !m_dragging )
763  m_commit->Push( _( "Mirror" ) );
764 
765  if( selection.IsHover() && !m_dragging )
767 
769 
770  return 0;
771 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
wxPoint getModificationPoint(const SELECTION &aSelection)
Returns the right modification point (e.g.
Definition: edit_tool.cpp:1208
SELECTION & RequestSelection(int aFlags=SELECTION_DEFAULT)
Function RequestSelection()
std::unique_ptr< BOARD_COMMIT > m_commit
Definition: edit_tool.h:213
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:213
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:144
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:147
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:685
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 845 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().

846 {
847  const auto& selection = m_selectionTool->RequestSelection();
848 
850  return 0;
851 
852  if( selection.Empty() )
853  return 0;
854 
855  PCB_BASE_FRAME* editFrame = getEditFrame<PCB_BASE_FRAME>();
856 
857  MOVE_PARAMETERS params;
859 
860  DIALOG_MOVE_EXACT dialog( editFrame, params );
861  int ret = dialog.ShowModal();
862 
863  if( ret == wxID_OK )
864  {
865  VECTOR2I rp = selection.GetCenter();
866  wxPoint rotPoint( rp.x, rp.y );
867 
868  wxPoint anchorPoint = getAnchorPoint( selection, params );
869 
870  wxPoint finalMoveVector = params.translation - anchorPoint;
871 
872  // Make sure the rotation is from the right reference point
873  rotPoint += finalMoveVector;
874 
875  for( auto item : selection )
876  {
877  m_commit->Modify( item );
878  static_cast<BOARD_ITEM*>( item )->Move( finalMoveVector );
879  static_cast<BOARD_ITEM*>( item )->Rotate( rotPoint, params.rotation );
880 
881  if( !m_dragging )
882  getView()->Update( item );
883  }
884 
885  m_commit->Push( _( "Move exact" ) );
886 
887  if( selection.IsHover() )
889 
891  }
892 
893  return 0;
894 }
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:164
int Rotate(const TOOL_EVENT &aEvent)
Function Rotate()
Definition: edit_tool.cpp:631
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:213
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:213
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:144
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:147
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:1389
bool m_editModules
Definition: pcb_tool.h:128
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:30
class PCB_BASE_FRAME basic PCB main window class for Pcbnew, Gerbview, and CvPcb footprint viewer...
int EDIT_TOOL::Properties ( const TOOL_EVENT aEvent)

Function Edit()

Displays properties window for the selected object.

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

582 {
583  PCB_BASE_EDIT_FRAME* editFrame = getEditFrame<PCB_BASE_EDIT_FRAME>();
584 
586 
587  if( selection.Empty() )
588  return 0;
589 
590  // Tracks & vias are treated in a special way:
592  {
593  if ( !changeTrackWidthOnClick( selection ) )
594  {
595  DIALOG_TRACK_VIA_PROPERTIES dlg( editFrame, selection );
596 
597  if( dlg.ShowModal() )
598  {
599  dlg.Apply( *m_commit );
600  m_commit->Push( _( "Edit track/via properties" ) );
601  }
602  }
603  }
604  else if( selection.Size() == 1 ) // Properties are displayed when there is only one item selected
605  {
606  // Display properties dialog
607  BOARD_ITEM* item = static_cast<BOARD_ITEM*>( selection.Front() );
608 
609  // Some of properties dialogs alter pointers, so we should deselect them
611 
612  // Store flags, so they can be restored later
613  STATUS_FLAGS flags = item->GetFlags();
614  item->ClearFlags();
615 
616  // Do not handle undo buffer, it is done by the properties dialogs @todo LEGACY
617  // Display properties dialog provided by the legacy canvas frame
618  editFrame->OnEditItemRequest( NULL, item );
619 
621  item->SetFlags( flags );
622  }
623 
624  if( selection.IsHover() )
626 
627  return 0;
628 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
STATUS_FLAGS GetFlags() const
Definition: base_struct.h:255
static const KICAD_T Tracks[]
A scan list for only TRACKS.
Definition: collectors.h:294
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:213
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:213
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:144
static TOOL_ACTION selectionModified
Modified selection notification.
Definition: pcb_actions.h:108
void SetFlags(STATUS_FLAGS aMask)
Definition: base_struct.h:253
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:144
bool changeTrackWidthOnClick(const SELECTION &selection)
Definition: edit_tool.cpp:540
Common, abstract interface for edit frames.
void ClearFlags(STATUS_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: base_struct.h:254
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 807 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 setTransitions().

808 {
809  // get a copy instead of reference (as we're going to clear the selectio before removing items)
811 
813  return 0;
814 
815  if( selection.Empty() )
816  return 0;
817 
818  // is this "alternative" remove?
819  const bool isAlt = aEvent.Parameter<intptr_t>() ==
820  (int) PCB_ACTIONS::REMOVE_FLAGS::ALT;
821 
822  // in "alternative" mode, deletion is not just a simple list
823  // of selected items, it is:
824  // - whole tracks, not just segments
825  if( isAlt && selection.IsHover() )
826  {
829  }
830 
831  // As we are about to remove items, they have to be removed from the selection first
833 
834  for( auto item : selection )
835  {
836  m_commit->Remove( item );
837  }
838 
839  m_commit->Push( _( "Delete" ) );
840 
841  return 0;
842 }
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:213
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:213
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:144
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 247 of file edit_tool.cpp.

References m_commit, m_dragging, and TOOL_BASE::RUN.

248 {
249  m_dragging = false;
250 
251  if( aReason != RUN )
252  m_commit.reset( new BOARD_COMMIT( this ) );
253 }
std::unique_ptr< BOARD_COMMIT > m_commit
Definition: edit_tool.h:213
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:147
int EDIT_TOOL::Rotate ( const TOOL_EVENT aEvent)

Function Rotate()

Rotates currently selected items.

Definition at line 631 of file edit_tool.cpp.

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

Referenced by MoveExact(), and setTransitions().

632 {
633  PCB_BASE_EDIT_FRAME* editFrame = getEditFrame<PCB_BASE_EDIT_FRAME>();
634 
635  const auto& selection = m_selectionTool->RequestSelection();
636 
637  if( selection.Empty() )
638  return 0;
639 
641  return 0;
642 
643  wxPoint modPoint = getModificationPoint( selection );
644  const int rotateAngle = TOOL_EVT_UTILS::GetEventRotationAngle( *editFrame, aEvent );
645 
646  for( auto item : selection )
647  {
648  m_commit->Modify( item );
649  static_cast<BOARD_ITEM*>( item )->Rotate( modPoint, rotateAngle );
650  }
651 
652  // Update the dragging point offset
653  m_offset = static_cast<BOARD_ITEM*>( selection.Front() )->GetPosition() - modPoint;
654 
655  if( !m_dragging )
656  m_commit->Push( _( "Rotate" ) );
657 
658  if( selection.IsHover() && !m_dragging )
660 
662 
663  return 0;
664 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
wxPoint getModificationPoint(const SELECTION &aSelection)
Returns the right modification point (e.g.
Definition: edit_tool.cpp:1208
int Rotate(const TOOL_EVENT &aEvent)
Function Rotate()
Definition: edit_tool.cpp:631
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:213
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:213
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:144
wxPoint m_offset
Offset from the dragged item's center (anchor)
Definition: edit_tool.h:150
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:147
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:213
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 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:213
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:128
void EDIT_TOOL::setTransitions ( )
overridevirtual

Sets up handlers for various events.

Implements TOOL_INTERACTIVE.

Definition at line 1185 of file edit_tool.cpp.

References CreateArray(), PCB_ACTIONS::createArray, 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.

1186 {
1187  Go( &EDIT_TOOL::Main, PCB_ACTIONS::editActivate.MakeEvent() );
1188  Go( &EDIT_TOOL::Main, PCB_ACTIONS::move.MakeEvent() );
1189  Go( &EDIT_TOOL::Drag, PCB_ACTIONS::drag45Degree.MakeEvent() );
1191  Go( &EDIT_TOOL::Rotate, PCB_ACTIONS::rotateCw.MakeEvent() );
1192  Go( &EDIT_TOOL::Rotate, PCB_ACTIONS::rotateCcw.MakeEvent() );
1193  Go( &EDIT_TOOL::Flip, PCB_ACTIONS::flip.MakeEvent() );
1194  Go( &EDIT_TOOL::Remove, PCB_ACTIONS::remove.MakeEvent() );
1195  Go( &EDIT_TOOL::Remove, PCB_ACTIONS::removeAlt.MakeEvent() );
1201  Go( &EDIT_TOOL::Mirror, PCB_ACTIONS::mirror.MakeEvent() );
1205 }
int Main(const TOOL_EVENT &aEvent)
Function Main()
Definition: edit_tool.cpp:342
int Properties(const TOOL_EVENT &aEvent)
Function Edit()
Definition: edit_tool.cpp:581
int Rotate(const TOOL_EVENT &aEvent)
Function Rotate()
Definition: edit_tool.cpp:631
static TOOL_ACTION move
move an item
Definition: pcb_actions.h:90
int ExchangeFootprints(const TOOL_EVENT &aEvent)
Function ExchangeFootprints()
Definition: edit_tool.cpp:1060
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:705
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
int Flip(const TOOL_EVENT &aEvent)
Function Flip()
Definition: edit_tool.cpp:774
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:295
int Drag(const TOOL_EVENT &aEvent)
Function Drag()
Definition: edit_tool.cpp:330
static TOOL_ACTION exchangeFootprints
Exchange footprints of modules.
Definition: pcb_actions.h:120
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:845
int Remove(const TOOL_EVENT &aEvent)
Function Remove()
Definition: edit_tool.cpp:807
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:1044
int MeasureTool(const TOOL_EVENT &aEvent)
Launches a tool to measure between points
Definition: edit_tool.cpp:1092
static TOOL_ACTION editFootprintInFpEditor
Definition: pcb_actions.h:379
int editFootprintInFpEditor(const TOOL_EVENT &aEvent)
Definition: edit_tool.cpp:1226
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:897
static TOOL_ACTION measureTool
Definition: pcb_actions.h:360
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 203 of file edit_tool.h.

References hoverSelection().

204  {
205  if( !hoverSelection( aSanitize ) )
206  return nullptr;
207 
208  T* item = uniqueSelected<T>();
209 
210  return item;
211  }
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 1264 of file edit_tool.cpp.

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

1265 {
1266  auto& selection = m_selectionTool->RequestSelection( SELECTION_DEFAULT );
1267 
1268  if( selection.Size() != 1 )
1269  return nullptr;
1270 
1271  auto item = selection[0];
1272  return dyn_cast<T*>( item );
1273 }
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:144
Casted dyn_cast(From aObject)
Function dyn_cast()
Definition: typeinfo.h:73
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 MODULE_EDITOR_TOOLS::CopyItems(), PCBNEW_CONTROL::DeleteItemCursor(), 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(), SELECTION_TOOL::Main(), LENGTH_TUNER_TOOL::mainLoop(), ROUTER_TOOL::mainLoop(), MeasureTool(), POINT_EDITOR::OnSelectionChange(), MODULE_EDITOR_TOOLS::PasteItems(), ROUTER_TOOL::performDragging(), ROUTER_TOOL::performRouting(), LENGTH_TUNER_TOOL::performTuning(), DRAWING_TOOL::PlaceDXF(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), DRAWING_TOOL::PlaceText(), DRAWING_TOOL::runPolygonEventLoop(), SELECTION_TOOL::selectMultiple(), 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:213
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 154 of file edit_tool.h.

Referenced by getModificationPoint(), and Main().

bool EDIT_TOOL::m_dragging
private

Flag determining if anything is being dragged right now

Definition at line 147 of file edit_tool.h.

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

wxPoint EDIT_TOOL::m_offset
private

Offset from the dragged item's center (anchor)

Definition at line 150 of file edit_tool.h.

Referenced by Flip(), getModificationPoint(), Init(), Main(), and Rotate().

SELECTION_TOOL* EDIT_TOOL::m_selectionTool
private

Selection tool used for obtaining selected items

Definition at line 144 of file edit_tool.h.

Referenced by 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 208 of file tool_base.h.

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

TOOL_MANAGER* TOOL_BASE::m_toolMgr
protectedinherited

Definition at line 213 of file tool_base.h.

Referenced by TOOL_INTERACTIVE::Activate(), PCBNEW_CONTROL::AppendBoard(), PAD_TOOL::applyPadSettings(), TOOL_BASE::attachManager(), PCB_EDITOR_CONTROL::calculateSelectionRatsnest(), SELECTION_TOOL::clearSelection(), MODULE_EDITOR_TOOLS::CopyItems(), PAD_TOOL::copyPadSettings(), 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(), SELECTION_TOOL::findCallback(), SELECTION_TOOL::findMove(), Flip(), TOOL_BASE::getEditFrameInt(), TOOL_BASE::GetManager(), TOOL_BASE::getModelInt(), getModificationPoint(), DRAWING_TOOL::getSourceZoneForAction(), TOOL_BASE::getView(), TOOL_BASE::getViewControls(), TOOL_INTERACTIVE::goInternal(), PCBNEW_CONTROL::GridSetOrigin(), 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(), 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(), MODULE_EDITOR_TOOLS::PasteItems(), 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(), SELECTION_TOOL::RequestSelection(), TOOL_INTERACTIVE::resetTransitions(), Rotate(), TOOL_INTERACTIVE::RunMainStack(), SELECTION_TOOL::SanitizeSelection(), SELECTION_TOOL::selectConnection(), SELECTION_TOOL::selectCopper(), SELECTION_TOOL::SelectItem(), SELECTION_TOOL::SelectItems(), SELECTION_TOOL::selectMultiple(), SELECTION_TOOL::selectNet(), SELECTION_TOOL::selectOnSheetFromEeschema(), POSITION_RELATIVE_TOOL::SelectPositionRelativeItem(), SELECTION_TOOL::selectSameSheet(), TOOL_INTERACTIVE::SetContextMenu(), PCB_EDITOR_CONTROL::ShowLocalRatsnest(), SELECTION_TOOL::toggleSelection(), PCB_EDITOR_CONTROL::TrackWidthDec(), PCB_EDITOR_CONTROL::TrackWidthInc(), SELECTION_TOOL::UnselectItem(), SELECTION_TOOL::UnselectItems(), 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 212 of file tool_base.h.

Referenced by TOOL_BASE::GetName().

TOOL_SETTINGS TOOL_BASE::m_toolSettings
protectedinherited

Definition at line 214 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 205 of file tool_base.h.

Referenced by TOOL_BASE::GetType().


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