KiCad PCB EDA Suite
TOOL_MANAGER Class Reference

TOOL_MANAGER. More...

#include <tool_manager.h>

Classes

struct  TOOL_STATE
 Struct describing the current execution state of a TOOL. More...
 

Public Types

typedef std::map< TOOL_BASE *, TOOL_STATE * > TOOL_STATE_MAP
 
typedef std::map< std::string, TOOL_STATE * > NAME_STATE_MAP
 
typedef std::map< TOOL_ID, TOOL_STATE * > ID_STATE_MAP
 
typedef std::list< TOOL_IDID_LIST
 

Public Member Functions

 TOOL_MANAGER ()
 
 ~TOOL_MANAGER ()
 
void RegisterTool (TOOL_BASE *aTool)
 Function RegisterTool() Adds a tool to the manager set and sets it up. More...
 
bool InvokeTool (TOOL_ID aToolId)
 Function InvokeTool() Calls a tool by sending a tool activation event to tool of given ID. More...
 
bool InvokeTool (const std::string &aToolName)
 Function InvokeTool() Calls a tool by sending a tool activation event to tool of given name. More...
 
template<typename T >
bool RunAction (const std::string &aActionName, bool aNow=false, T aParam=NULL)
 Function RunAction() Runs the specified action. More...
 
bool RunAction (const std::string &aActionName, bool aNow, void *aParam)
 
bool RunAction (const std::string &aActionName, bool aNow=false)
 
template<typename T >
bool RunAction (const TOOL_ACTION &aAction, bool aNow=false, T aParam=NULL)
 Function RunAction() Runs the specified action. More...
 
bool RunAction (const TOOL_ACTION &aAction, bool aNow, void *aParam)
 
bool RunAction (const TOOL_ACTION &aAction, bool aNow=false)
 
const std::map< std::string, TOOL_ACTION * > & GetActions ()
 
void PrimeTool (const VECTOR2D &aPosition)
 Function PrimeTool() "Primes" a tool by sending a cursor left-click event with the mouse position set to the passed in position. More...
 
int GetHotKey (const TOOL_ACTION &aAction)
 

More...
 
ACTION_MANAGERGetActionManager ()
 
TOOL_BASEFindTool (int aId) const
 Function FindTool() Searches for a tool with given ID. More...
 
TOOL_BASEFindTool (const std::string &aName) const
 Function FindTool() Searches for a tool with given name. More...
 
template<typename T >
T * GetTool ()
 
void DeactivateTool ()
 Function DeactivateTool() Deactivates the currently active tool. More...
 
bool IsToolActive (TOOL_ID aId) const
 Function IsToolActive() Returns true if a tool with given id is active (executing) More...
 
void ResetTools (TOOL_BASE::RESET_REASON aReason)
 Function ResetTools() Resets all tools (i.e. More...
 
void InitTools ()
 Function InitTools() Initializes all registered tools. More...
 
bool ProcessEvent (const TOOL_EVENT &aEvent)
 Propagates an event to tools that requested events of matching type(s). More...
 
void PostEvent (const TOOL_EVENT &aEvent)
 Puts an event to the event queue to be processed at the end of event processing cycle. More...
 
void SetEnvironment (EDA_ITEM *aModel, KIGFX::VIEW *aView, KIGFX::VIEW_CONTROLS *aViewControls, EDA_BASE_FRAME *aFrame)
 Sets the work environment (model, view, view controls and the parent window). More...
 
KIGFX::VIEWGetView () const
 
KIGFX::VIEW_CONTROLSGetViewControls () const
 
VECTOR2D GetMousePosition ()
 
VECTOR2D GetCursorPosition ()
 
EDA_ITEMGetModel () const
 
EDA_BASE_FRAMEGetEditFrame () const
 
int GetCurrentToolId () const
 Returns id of the tool that is on the top of the active tools stack (was invoked the most recently). More...
 
TOOL_BASEGetCurrentTool () const
 Returns the tool that is on the top of the active tools stack (was invoked the most recently). More...
 
TOOL_STATEGetCurrentToolState () const
 Returns the TOOL_STATE object representing the state of the active tool. More...
 
int GetPriority (int aToolId) const
 Returns priority of a given tool. More...
 
void ScheduleNextState (TOOL_BASE *aTool, TOOL_STATE_FUNC &aHandler, const TOOL_EVENT_LIST &aConditions)
 Defines a state transition - the events that cause a given handler method in the tool to be called. More...
 
void ClearTransitions (TOOL_BASE *aTool)
 Clears the state transition map for a tool. More...
 
void RunMainStack (TOOL_BASE *aTool, std::function< void()> aFunc)
 
void UpdateUI (const TOOL_EVENT &aEvent)
 Updates the status bar and synchronizes toolbars. More...
 
TOOL_EVENTScheduleWait (TOOL_BASE *aTool, const TOOL_EVENT_LIST &aConditions)
 Pauses execution of a given tool until one or more events matching aConditions arrives. More...
 
void ScheduleContextMenu (TOOL_BASE *aTool, ACTION_MENU *aMenu, CONTEXT_MENU_TRIGGER aTrigger)
 Sets behaviour of the tool's context popup menu. More...
 
bool SaveClipboard (const std::string &aText)
 Stores an information to the system clipboard. More...
 
std::string GetClipboard () const
 Returns the information currently stored in the system clipboard. More...
 
const KIGFX::VC_SETTINGSGetCurrentToolVC () const
 Returns the view controls settings for the current tool or the general settings if there is no active tool. More...
 
bool IsContextMenuActive ()
 True while processing a context menu. More...
 
void VetoContextMenuMouseWarp ()
 Disables mouse warping after the current context menu is closed. More...
 
void DispatchContextMenu (const TOOL_EVENT &aEvent)
 Function DispatchContextMenu() Handles context menu related events. More...
 

Static Public Member Functions

static TOOL_ID MakeToolId (const std::string &aToolName)
 Generates a unique ID from for a tool with given name. More...
 

Private Types

typedef std::pair< TOOL_EVENT_LIST, TOOL_STATE_FUNCTRANSITION
 

Private Member Functions

bool dispatchInternal (const TOOL_EVENT &aEvent)
 Function dispatchInternal Passes an event at first to the active tools, then to all others. More...
 
bool dispatchHotKey (const TOOL_EVENT &aEvent)
 Function dispatchStandardEvents() Handles specific events, that are intended for TOOL_MANAGER rather than tools. More...
 
bool dispatchActivation (const TOOL_EVENT &aEvent)
 Function dispatchActivation() Checks if it is a valid activation event and invokes a proper tool. More...
 
bool invokeTool (TOOL_BASE *aTool)
 Function invokeTool() Invokes a tool by sending a proper event (in contrary to runTool, which makes the tool run for real). More...
 
bool runTool (TOOL_ID aToolId)
 Function runTool() Makes a tool active, so it can receive events and react to them. More...
 
bool runTool (const std::string &aName)
 Function runTool() Makes a tool active, so it can receive events and react to them. More...
 
bool runTool (TOOL_BASE *aTool)
 Function runTool() Makes a tool active, so it can receive events and react to them. More...
 
template<class Parameters >
void invokeTool (const std::string &aName, const Parameters &aToolParams)
 
ID_LIST::iterator finishTool (TOOL_STATE *aState)
 Function finishTool() Deactivates a tool and does the necessary clean up. More...
 
bool isRegistered (TOOL_BASE *aTool) const
 Function isRegistered() Returns information about a tool registration status. More...
 
bool isActive (TOOL_BASE *aTool)
 Function isActive() Returns information about a tool activation status. More...
 
void saveViewControls (TOOL_STATE *aState)
 Function saveViewControls() Saves the VIEW_CONTROLS settings to the tool state object. More...
 
void applyViewControls (TOOL_STATE *aState)
 Function applyViewControls() Applies VIEW_CONTROLS settings stored in a TOOL_STATE object. More...
 
bool processEvent (const TOOL_EVENT &aEvent)
 

Main function for event processing.

More...
 
void setActiveState (TOOL_STATE *aState)
 Saves the previous active state and sets a new one. More...
 

Private Attributes

TOOL_STATE_MAP m_toolState
 Index of registered tools current states, associated by tools' objects. More...
 
NAME_STATE_MAP m_toolNameIndex
 Index of the registered tools current states, associated by tools' names. More...
 
ID_STATE_MAP m_toolIdIndex
 Index of the registered tools current states, associated by tools' ID numbers. More...
 
std::map< const char *, TOOL_BASE * > m_toolTypes
 Index of the registered tools to easily lookup by their type. More...
 
ID_LIST m_activeTools
 Stack of the active tools. More...
 
ACTION_MANAGERm_actionMgr
 Instance of ACTION_MANAGER that handles TOOL_ACTIONs. More...
 
std::map< TOOL_ID, OPT< VECTOR2D > > m_cursorSettings
 Original cursor position, if overridden by the context menu handler. More...
 
EDA_ITEMm_model
 
KIGFX::VIEWm_view
 
KIGFX::VIEW_CONTROLSm_viewControls
 
EDA_BASE_FRAMEm_frame
 
std::list< TOOL_EVENTm_eventQueue
 Queue that stores events to be processed at the end of the event processing cycle. More...
 
VECTOR2D m_menuCursor
 Right click context menu position. More...
 
bool m_warpMouseAfterContextMenu
 
bool m_menuActive
 Flag indicating whether a context menu is currently displayed. More...
 
TOOL_ID m_menuOwner
 Tool currently displaying a popup menu. It is negative when there is no menu displayed. More...
 
TOOL_STATEm_activeState
 Pointer to the state object corresponding to the currently executed tool. More...
 

Detailed Description

TOOL_MANAGER.

Master controller class:

  • registers editing tools
  • pumps UI events to tools requesting them
  • manages tool state machines (transitions and wait requests)

Definition at line 50 of file tool_manager.h.

Member Typedef Documentation

◆ ID_LIST

typedef std::list<TOOL_ID> TOOL_MANAGER::ID_LIST

Definition at line 64 of file tool_manager.h.

◆ ID_STATE_MAP

Definition at line 63 of file tool_manager.h.

◆ NAME_STATE_MAP

typedef std::map<std::string, TOOL_STATE*> TOOL_MANAGER::NAME_STATE_MAP

Definition at line 62 of file tool_manager.h.

◆ TOOL_STATE_MAP

Definition at line 61 of file tool_manager.h.

◆ TRANSITION

Definition at line 396 of file tool_manager.h.

Constructor & Destructor Documentation

◆ TOOL_MANAGER()

TOOL_MANAGER::TOOL_MANAGER ( )

Definition at line 194 of file tool_manager.cpp.

194  :
195  m_model( NULL ),
196  m_view( NULL ),
197  m_viewControls( NULL ),
198  m_frame( NULL ),
200  m_menuActive( false ),
201  m_menuOwner( -1 ),
202  m_activeState( nullptr )
203 {
204  m_actionMgr = new ACTION_MANAGER( this );
205 }
bool m_menuActive
Flag indicating whether a context menu is currently displayed.
Definition: tool_manager.h:548
ACTION_MANAGER * m_actionMgr
Instance of ACTION_MANAGER that handles TOOL_ACTIONs.
Definition: tool_manager.h:529
ACTION_MANAGER.
EDA_BASE_FRAME * m_frame
Definition: tool_manager.h:537
EDA_ITEM * m_model
Definition: tool_manager.h:534
TOOL_ID m_menuOwner
Tool currently displaying a popup menu. It is negative when there is no menu displayed.
Definition: tool_manager.h:551
#define NULL
KIGFX::VIEW_CONTROLS * m_viewControls
Definition: tool_manager.h:536
KIGFX::VIEW * m_view
Definition: tool_manager.h:535
bool m_warpMouseAfterContextMenu
Definition: tool_manager.h:545
TOOL_STATE * m_activeState
Pointer to the state object corresponding to the currently executed tool.
Definition: tool_manager.h:554

References m_actionMgr.

◆ ~TOOL_MANAGER()

TOOL_MANAGER::~TOOL_MANAGER ( )

Definition at line 208 of file tool_manager.cpp.

209 {
210  std::map<TOOL_BASE*, TOOL_STATE*>::iterator it, it_end;
211 
212  for( it = m_toolState.begin(), it_end = m_toolState.end(); it != it_end; ++it )
213  {
214  delete it->second->cofunc; // delete cofunction
215  delete it->second; // delete TOOL_STATE
216  delete it->first; // delete the tool itself
217  }
218 
219  delete m_actionMgr;
220 }
ACTION_MANAGER * m_actionMgr
Instance of ACTION_MANAGER that handles TOOL_ACTIONs.
Definition: tool_manager.h:529
TOOL_STATE_MAP m_toolState
Index of registered tools current states, associated by tools' objects.
Definition: tool_manager.h:514

References m_actionMgr, and m_toolState.

Member Function Documentation

◆ applyViewControls()

void TOOL_MANAGER::applyViewControls ( TOOL_STATE aState)
private

Function applyViewControls() Applies VIEW_CONTROLS settings stored in a TOOL_STATE object.

Definition at line 992 of file tool_manager.cpp.

993 {
994  m_viewControls->ApplySettings( aState->vcSettings );
995 }
void ApplySettings(const VC_SETTINGS &aSettings)
Applies VIEW_CONTROLS settings from an object
KIGFX::VIEW_CONTROLS * m_viewControls
Definition: tool_manager.h:536

References KIGFX::VIEW_CONTROLS::ApplySettings(), m_viewControls, and TOOL_MANAGER::TOOL_STATE::vcSettings.

Referenced by setActiveState().

◆ ClearTransitions()

void TOOL_MANAGER::ClearTransitions ( TOOL_BASE aTool)

Clears the state transition map for a tool.

Parameters
aToolis the tool that should have the transition map cleared.

Definition at line 535 of file tool_manager.cpp.

536 {
537  m_toolState[aTool]->transitions.clear();
538 }
TOOL_STATE_MAP m_toolState
Index of registered tools current states, associated by tools' objects.
Definition: tool_manager.h:514

References m_toolState.

Referenced by TOOL_INTERACTIVE::resetTransitions().

◆ DeactivateTool()

void TOOL_MANAGER::DeactivateTool ( )

Function DeactivateTool() Deactivates the currently active tool.

Definition at line 454 of file tool_manager.cpp.

455 {
456  // Deactivate the active tool, but do not run anything new
458  processEvent( evt );
459 }
bool processEvent(const TOOL_EVENT &aEvent)
Main function for event processing.
TOOL_EVENT.
Definition: tool_event.h:171

References processEvent(), TA_CANCEL_TOOL, and TC_COMMAND.

Referenced by LIB_DRAWING_TOOLS::DrawShape(), GERBVIEW_FRAME::OnCloseWindow(), LIB_EDIT_FRAME::OnExportBody(), LIB_EDIT_FRAME::OnImportBody(), ResetTools(), CVPCB_MAINFRAME::~CVPCB_MAINFRAME(), DISPLAY_FOOTPRINTS_FRAME::~DISPLAY_FOOTPRINTS_FRAME(), FOOTPRINT_WIZARD_FRAME::~FOOTPRINT_WIZARD_FRAME(), and KICAD_MANAGER_FRAME::~KICAD_MANAGER_FRAME().

◆ dispatchActivation()

bool TOOL_MANAGER::dispatchActivation ( const TOOL_EVENT aEvent)
private

Function dispatchActivation() Checks if it is a valid activation event and invokes a proper tool.

Parameters
aEventis an event to be tested.
Returns
True if a tool was invoked, false otherwise.

Definition at line 699 of file tool_manager.cpp.

700 {
701  wxLogTrace( kicadTraceToolStack, "TOOL_MANAGER::dispatchActivation %s", aEvent.Format() );
702  if( aEvent.IsActivate() )
703  {
704  wxString cmdStr( *aEvent.GetCommandStr() );
705 
706  auto tool = m_toolNameIndex.find( *aEvent.GetCommandStr() );
707 
708  if( tool != m_toolNameIndex.end() )
709  {
710  wxLogTrace( kicadTraceToolStack,
711  "TOOL_MANAGER::dispatchActivation Running tool %s for event: %s",
712  tool->second->theTool->GetName(), aEvent.Format() );
713 
714  runTool( tool->second->theTool );
715  return true;
716  }
717  }
718 
719  return false;
720 }
const std::string Format() const
Function Format() Returns information about event in form of a human-readable string.
Definition: tool_event.cpp:73
bool runTool(TOOL_ID aToolId)
Function runTool() Makes a tool active, so it can receive events and react to them.
NAME_STATE_MAP m_toolNameIndex
Index of the registered tools current states, associated by tools' names.
Definition: tool_manager.h:517
OPT< std::string > GetCommandStr() const
Definition: tool_event.h:463
bool IsActivate() const
Definition: tool_event.h:321
const wxChar *const kicadTraceToolStack
Flag to enable tracing of the tool handling stack.

References TOOL_EVENT::Format(), TOOL_EVENT::GetCommandStr(), TOOL_EVENT::IsActivate(), kicadTraceToolStack, m_toolNameIndex, and runTool().

Referenced by processEvent().

◆ DispatchContextMenu()

void TOOL_MANAGER::DispatchContextMenu ( const TOOL_EVENT aEvent)

Function DispatchContextMenu() Handles context menu related events.

Definition at line 722 of file tool_manager.cpp.

723 {
724  for( TOOL_ID toolId : m_activeTools )
725  {
726  TOOL_STATE* st = m_toolIdIndex[toolId];
727 
728  // the tool requested a context menu. The menu is activated on RMB click (CMENU_BUTTON mode)
729  // or immediately (CMENU_NOW) mode. The latter is used for clarification lists.
730  if( st->contextMenuTrigger == CMENU_OFF )
731  continue;
732 
733  if( st->contextMenuTrigger == CMENU_BUTTON && !aEvent.IsClick( BUT_RIGHT ) )
734  break;
735 
736  st->pendingWait = true;
737  st->waitEvents = TOOL_EVENT( TC_ANY, TA_ANY );
738 
739  // Store the menu pointer in case it is changed by the TOOL when handling menu events
740  ACTION_MENU* m = st->contextMenu;
741 
742  if( st->contextMenuTrigger == CMENU_NOW )
743  st->contextMenuTrigger = CMENU_OFF;
744 
745  // Store the cursor position, so the tools could execute actions
746  // using the point where the user has invoked a context menu
748 
749  // Save all tools cursor settings, as they will be overridden
750  for( auto idState : m_toolIdIndex )
751  {
752  TOOL_STATE* s = idState.second;
753  const auto& vc = s->vcSettings;
754 
755  if( vc.m_forceCursorPosition )
756  m_cursorSettings[idState.first] = vc.m_forcedPosition;
757  else
758  m_cursorSettings[idState.first] = NULLOPT;
759  }
760 
762 
763  // Display a copy of menu
764  std::unique_ptr<ACTION_MENU> menu( m->Clone() );
765 
766  m_menuOwner = toolId;
767  m_menuActive = true;
768 
769  if( auto frame = dynamic_cast<wxFrame*>( m_frame ) )
770  frame->PopupMenu( menu.get() );
771 
772  // Warp the cursor if a menu item was selected
773  if( menu->GetSelected() >= 0 && m_warpMouseAfterContextMenu )
774  m_viewControls->WarpCursor( m_menuCursor, true, false );
775  // Otherwise notify the tool of a cancelled menu
776  else
777  {
779  evt.SetHasPosition( false );
780  evt.SetParameter( m );
781  dispatchInternal( evt );
782  }
783 
784  // Restore setting in case it was vetoed
786 
787  // Notify the tools that menu has been closed
789  evt.SetHasPosition( false );
790  evt.SetParameter( m );
791  dispatchInternal( evt );
792 
793  m_menuActive = false;
794  m_menuOwner = -1;
795 
796  // Restore cursor settings
797  for( auto cursorSetting : m_cursorSettings )
798  {
799  auto it = m_toolIdIndex.find( cursorSetting.first );
800  wxASSERT( it != m_toolIdIndex.end() );
801 
802  if( it == m_toolIdIndex.end() )
803  continue;
804 
805  KIGFX::VC_SETTINGS& vc = it->second->vcSettings;
806  vc.m_forceCursorPosition = (bool) cursorSetting.second;
807  vc.m_forcedPosition = cursorSetting.second ? *cursorSetting.second : VECTOR2D( 0, 0 );
808  }
809 
810  m_cursorSettings.clear();
811  break;
812  }
813 }
bool m_menuActive
Flag indicating whether a context menu is currently displayed.
Definition: tool_manager.h:548
VECTOR2D m_menuCursor
Right click context menu position.
Definition: tool_manager.h:543
ACTION_MENU.
Definition: action_menu.h:43
ID_STATE_MAP m_toolIdIndex
Index of the registered tools current states, associated by tools' ID numbers.
Definition: tool_manager.h:520
bool IsClick(int aButtonMask=BUT_ANY) const
Definition: tool_event.cpp:178
std::map< TOOL_ID, OPT< VECTOR2D > > m_cursorSettings
Original cursor position, if overridden by the context menu handler.
Definition: tool_manager.h:532
VECTOR2D m_forcedPosition
Forced cursor position (world coordinates)
Definition: view_controls.h:58
EDA_BASE_FRAME * m_frame
Definition: tool_manager.h:537
int TOOL_ID
Unique identifier for tools.
Definition: tool_base.h:56
virtual void WarpCursor(const VECTOR2D &aPosition, bool aWorldCoordinates=false, bool aWarpView=false)=0
Function WarpCursor() If enabled (.
const auto NULLOPT
Definition: optional.h:9
bool m_forceCursorPosition
Is the forced cursor position enabled
Definition: view_controls.h:61
TOOL_ID m_menuOwner
Tool currently displaying a popup menu. It is negative when there is no menu displayed.
Definition: tool_manager.h:551
TOOL_EVENT.
Definition: tool_event.h:171
Structure to keep VIEW_CONTROLS settings for easy store/restore operations
Definition: view_controls.h:44
ACTION_MENU * Clone() const
Creates a deep, recursive copy of this ACTION_MENU.
virtual void ForceCursorPosition(bool aEnabled, const VECTOR2D &aPosition=VECTOR2D(0, 0))
Function ForceCursorPosition() Places the cursor immediately at a given point.
KIGFX::VIEW_CONTROLS * m_viewControls
Definition: tool_manager.h:536
bool m_warpMouseAfterContextMenu
Definition: tool_manager.h:545
ID_LIST m_activeTools
Stack of the active tools.
Definition: tool_manager.h:526
VECTOR2D GetCursorPosition() const
Returns the current cursor position in world coordinates.
bool dispatchInternal(const TOOL_EVENT &aEvent)
Function dispatchInternal Passes an event at first to the active tools, then to all others.

References BUT_RIGHT, ACTION_MENU::Clone(), CMENU_BUTTON, CMENU_NOW, CMENU_OFF, TOOL_MANAGER::TOOL_STATE::contextMenu, TOOL_MANAGER::TOOL_STATE::contextMenuTrigger, dispatchInternal(), KIGFX::VIEW_CONTROLS::ForceCursorPosition(), KIGFX::VIEW_CONTROLS::GetCursorPosition(), TOOL_EVENT::IsClick(), m_activeTools, m_cursorSettings, KIGFX::VC_SETTINGS::m_forceCursorPosition, KIGFX::VC_SETTINGS::m_forcedPosition, m_frame, m_menuActive, m_menuCursor, m_menuOwner, m_toolIdIndex, m_viewControls, m_warpMouseAfterContextMenu, NULLOPT, TOOL_MANAGER::TOOL_STATE::pendingWait, TOOL_EVENT::SetHasPosition(), TOOL_EVENT::SetParameter(), TA_ANY, TA_CHOICE_MENU_CHOICE, TA_CHOICE_MENU_CLOSED, TC_ANY, TC_COMMAND, TOOL_MANAGER::TOOL_STATE::vcSettings, TOOL_MANAGER::TOOL_STATE::waitEvents, and KIGFX::VIEW_CONTROLS::WarpCursor().

Referenced by LIB_TREE::onContextMenu(), and processEvent().

◆ dispatchHotKey()

bool TOOL_MANAGER::dispatchHotKey ( const TOOL_EVENT aEvent)
private

Function dispatchStandardEvents() Handles specific events, that are intended for TOOL_MANAGER rather than tools.

Parameters
aEventis the event to be processed.
Returns
true if the event was processed and should not go any further.

Definition at line 690 of file tool_manager.cpp.

691 {
692  if( aEvent.Action() == TA_KEY_PRESSED )
693  return m_actionMgr->RunHotKey( aEvent.Modifier() | aEvent.KeyCode() );
694 
695  return false;
696 }
ACTION_MANAGER * m_actionMgr
Instance of ACTION_MANAGER that handles TOOL_ACTIONs.
Definition: tool_manager.h:529
TOOL_ACTIONS Action() const
Returns more specific information about the type of an event.
Definition: tool_event.h:250
bool RunHotKey(int aHotKey) const
Function RunHotKey() Runs an action associated with a hotkey (if there is one available).
int Modifier(int aMask=MD_MODIFIER_MASK) const
Returns information about key modifiers state (Ctrl, Alt, etc.)
Definition: tool_event.h:342
int KeyCode() const
Definition: tool_event.h:347

References TOOL_EVENT::Action(), TOOL_EVENT::KeyCode(), m_actionMgr, TOOL_EVENT::Modifier(), ACTION_MANAGER::RunHotKey(), and TA_KEY_PRESSED.

Referenced by processEvent().

◆ dispatchInternal()

bool TOOL_MANAGER::dispatchInternal ( const TOOL_EVENT aEvent)
private

Function dispatchInternal Passes an event at first to the active tools, then to all others.

Definition at line 567 of file tool_manager.cpp.

568 {
569  bool handled = false;
570 
571  wxLogTrace( kicadTraceToolStack, "TOOL_MANAGER::dispatchInternal %s", aEvent.Format() );
572 
573  // iterate over active tool stack
574  for( auto it = m_activeTools.begin(); it != m_activeTools.end(); ++it )
575  {
576  TOOL_STATE* st = m_toolIdIndex[*it];
577 
578  // forward context menu events to the tool that created the menu
579  if( aEvent.IsChoiceMenu() )
580  {
581  if( *it != m_menuOwner )
582  continue;
583  }
584 
585  // the tool state handler is waiting for events (i.e. called Wait() method)
586  if( st && st->pendingWait )
587  {
588  if( st->waitEvents.Matches( aEvent ) )
589  {
590  if( !aEvent.FirstResponder() )
591  const_cast<TOOL_EVENT*>( &aEvent )->SetFirstResponder( st->theTool );
592 
593  // got matching event? clear wait list and wake up the coroutine
594  st->wakeupEvent = aEvent;
595  st->pendingWait = false;
596  st->waitEvents.clear();
597 
598  if( st->cofunc )
599  {
600  wxLogTrace( kicadTraceToolStack,
601  "TOOL_MANAGER::dispatchInternal Waking tool %s for event: %s",
602  st->theTool->GetName(), aEvent.Format() );
603 
604  setActiveState( st );
605  bool end = !st->cofunc->Resume();
606 
607  if( end )
608  it = finishTool( st );
609  }
610 
611  // If the tool did not request the event be passed to other tools, we're done
612  if( !st->wakeupEvent.PassEvent() )
613  {
614  wxLogTrace( kicadTraceToolStack,
615  "TOOL_MANAGER::dispatchInternal %s stopped passing event: %s",
616  st->theTool->GetName(), aEvent.Format() );
617 
618  handled = true;
619  break;
620  }
621  }
622  }
623  }
624 
625  for( auto& state : m_toolState )
626  {
627  TOOL_STATE* st = state.second;
628  bool finished = false;
629 
630  // no state handler in progress - check if there are any transitions (defined by
631  // Go() method that match the event.
632  if( !st->transitions.empty() )
633  {
634  for( TRANSITION& tr : st->transitions )
635  {
636  if( tr.first.Matches( aEvent ) )
637  {
638  auto func_copy = tr.second;
639 
640  if( !aEvent.FirstResponder() )
641  const_cast<TOOL_EVENT*>( &aEvent )->SetFirstResponder( st->theTool );
642 
643  // if there is already a context, then push it on the stack
644  // and transfer the previous view control settings to the new context
645  if( st->cofunc )
646  {
647  auto vc = st->vcSettings;
648  st->Push();
649  st->vcSettings = vc;
650  }
651 
652  st->cofunc = new COROUTINE<int, const TOOL_EVENT&>( std::move( func_copy ) );
653 
654  // as the state changes, the transition table has to be set up again
655  st->transitions.clear();
656 
657  wxLogTrace( kicadTraceToolStack,
658  "TOOL_MANAGER::dispatchInternal Running tool %s for event: %s",
659  st->theTool->GetName(), aEvent.Format() );
660 
661  // got match? Run the handler.
662  setActiveState( st );
663  st->idle = false;
664  st->cofunc->Call( aEvent );
665  handled = true;
666 
667  if( !st->cofunc->Running() )
668  finishTool( st ); // The couroutine has finished immediately?
669 
670  // if it is a message, continue processing
671  finished = !( aEvent.Category() == TC_MESSAGE );
672 
673  // there is no point in further checking, as transitions got cleared
674  break;
675  }
676  }
677  }
678 
679  if( finished )
680  break; // only the first tool gets the event
681  }
682 
683  wxLogTrace( kicadTraceToolStack, "TOOL_MANAGER::dispatchInternal handled: %s %s",
684  ( handled ? "true" : "false" ), aEvent.Format() );
685 
686  return handled;
687 }
const std::string Format() const
Function Format() Returns information about event in form of a human-readable string.
Definition: tool_event.cpp:73
ID_STATE_MAP m_toolIdIndex
Index of the registered tools current states, associated by tools' ID numbers.
Definition: tool_manager.h:520
ID_LIST::iterator finishTool(TOOL_STATE *aState)
Function finishTool() Deactivates a tool and does the necessary clean up.
TOOL_EVENT_CATEGORY Category() const
Returns the category (eg. mouse/keyboard/action) of an event..
Definition: tool_event.h:247
TOOL_ID m_menuOwner
Tool currently displaying a popup menu. It is negative when there is no menu displayed.
Definition: tool_manager.h:551
void setActiveState(TOOL_STATE *aState)
Saves the previous active state and sets a new one.
bool IsChoiceMenu() const
Definition: tool_event.h:331
const wxChar *const kicadTraceToolStack
Flag to enable tracing of the tool handling stack.
TOOL_BASE * FirstResponder() const
Definition: tool_event.h:263
ID_LIST m_activeTools
Stack of the active tools.
Definition: tool_manager.h:526
TOOL_STATE_MAP m_toolState
Index of registered tools current states, associated by tools' objects.
Definition: tool_manager.h:514
std::pair< TOOL_EVENT_LIST, TOOL_STATE_FUNC > TRANSITION
Definition: tool_manager.h:396

References COROUTINE< ReturnType, ArgType >::Call(), TOOL_EVENT::Category(), TOOL_EVENT_LIST::clear(), TOOL_MANAGER::TOOL_STATE::cofunc, finishTool(), TOOL_EVENT::FirstResponder(), TOOL_EVENT::Format(), TOOL_BASE::GetName(), TOOL_MANAGER::TOOL_STATE::idle, TOOL_EVENT::IsChoiceMenu(), kicadTraceToolStack, m_activeTools, m_menuOwner, m_toolIdIndex, m_toolState, TOOL_EVENT_LIST::Matches(), TOOL_EVENT::PassEvent(), TOOL_MANAGER::TOOL_STATE::pendingWait, TOOL_MANAGER::TOOL_STATE::Push(), COROUTINE< ReturnType, ArgType >::Resume(), COROUTINE< ReturnType, ArgType >::Running(), setActiveState(), TC_MESSAGE, TOOL_MANAGER::TOOL_STATE::theTool, TOOL_MANAGER::TOOL_STATE::transitions, TOOL_MANAGER::TOOL_STATE::vcSettings, TOOL_MANAGER::TOOL_STATE::waitEvents, and TOOL_MANAGER::TOOL_STATE::wakeupEvent.

Referenced by DispatchContextMenu(), and processEvent().

◆ FindTool() [1/2]

TOOL_BASE * TOOL_MANAGER::FindTool ( int  aId) const

Function FindTool() Searches for a tool with given ID.

Parameters
aIdis the ID number of the requested tool.
Returns
Pointer to the requested tool or NULL in case of failure.

Definition at line 432 of file tool_manager.cpp.

433 {
434  std::map<TOOL_ID, TOOL_STATE*>::const_iterator it = m_toolIdIndex.find( aId );
435 
436  if( it != m_toolIdIndex.end() )
437  return it->second->theTool;
438 
439  return NULL;
440 }
ID_STATE_MAP m_toolIdIndex
Index of the registered tools current states, associated by tools' ID numbers.
Definition: tool_manager.h:520
#define NULL

References m_toolIdIndex, and NULL.

Referenced by GetCurrentTool(), GLOBAL_EDIT_TOOL::Init(), EDIT_TOOL::Init(), InvokeTool(), EDIT_TOOL::isInteractiveDragEnabled(), EDIT_TOOL::Remove(), ACTION_MANAGER::RunHotKey(), and runTool().

◆ FindTool() [2/2]

TOOL_BASE * TOOL_MANAGER::FindTool ( const std::string &  aName) const

Function FindTool() Searches for a tool with given name.

Parameters
aNameis the name of the requested tool.
Returns
Pointer to the requested tool or NULL in case of failure.

Definition at line 443 of file tool_manager.cpp.

444 {
445  std::map<std::string, TOOL_STATE*>::const_iterator it = m_toolNameIndex.find( aName );
446 
447  if( it != m_toolNameIndex.end() )
448  return it->second->theTool;
449 
450  return NULL;
451 }
NAME_STATE_MAP m_toolNameIndex
Index of the registered tools current states, associated by tools' names.
Definition: tool_manager.h:517
#define NULL

References m_toolNameIndex, and NULL.

◆ finishTool()

TOOL_MANAGER::ID_LIST::iterator TOOL_MANAGER::finishTool ( TOOL_STATE aState)
private

Function finishTool() Deactivates a tool and does the necessary clean up.

Parameters
aStateis the state variable of the tool to be stopped.
Returns
m_activeTools iterator. If the tool has been completely deactivated, it points to the next active tool on the list. Otherwise it is an iterator pointing to aState.

Definition at line 816 of file tool_manager.cpp.

817 {
818  auto it = std::find( m_activeTools.begin(), m_activeTools.end(), aState->theTool->GetId() );
819 
820  if( !aState->Pop() )
821  {
822  // Deactivate the tool if there are no other contexts saved on the stack
823  if( it != m_activeTools.end() )
824  it = m_activeTools.erase( it );
825 
826  aState->idle = true;
827  }
828 
829  if( aState == m_activeState )
830  setActiveState( nullptr );
831 
832  // Set transitions to be ready for future TOOL_EVENTs
833  TOOL_BASE* tool = aState->theTool;
834 
835  if( tool->GetType() == INTERACTIVE )
836  static_cast<TOOL_INTERACTIVE*>( tool )->resetTransitions();
837 
838  // Don't move the iterator past the stack beginning
839  if( it == m_activeTools.begin() )
840  return it;
841 
842  return --it;
843 }
TOOL_TYPE GetType() const
Function GetType() Returns the type of the tool.
Definition: tool_base.h:110
Tool that interacts with the user
Definition: tool_base.h:49
void setActiveState(TOOL_STATE *aState)
Saves the previous active state and sets a new one.
TOOL_STATE * m_activeState
Pointer to the state object corresponding to the currently executed tool.
Definition: tool_manager.h:554
TOOL_BASE.
Definition: tool_base.h:67
ID_LIST m_activeTools
Stack of the active tools.
Definition: tool_manager.h:526

References TOOL_BASE::GetId(), TOOL_BASE::GetType(), TOOL_MANAGER::TOOL_STATE::idle, INTERACTIVE, m_activeState, m_activeTools, TOOL_MANAGER::TOOL_STATE::Pop(), setActiveState(), and TOOL_MANAGER::TOOL_STATE::theTool.

Referenced by dispatchInternal().

◆ GetActionManager()

ACTION_MANAGER* TOOL_MANAGER::GetActionManager ( )
inline

Definition at line 163 of file tool_manager.h.

163 { return m_actionMgr; }
ACTION_MANAGER * m_actionMgr
Instance of ACTION_MANAGER that handles TOOL_ACTIONs.
Definition: tool_manager.h:529

References m_actionMgr.

Referenced by EDA_BASE_FRAME::CommonSettingsChanged(), EDA_BASE_FRAME::PopTool(), and EDA_BASE_FRAME::PushTool().

◆ GetActions()

const std::map< std::string, TOOL_ACTION * > & TOOL_MANAGER::GetActions ( )

Definition at line 341 of file tool_manager.cpp.

342 {
343  return m_actionMgr->GetActions();
344 }
ACTION_MANAGER * m_actionMgr
Instance of ACTION_MANAGER that handles TOOL_ACTIONs.
Definition: tool_manager.h:529
const std::map< std::string, TOOL_ACTION * > & GetActions()
Get a list of currently-registered actions mapped by their name.

References ACTION_MANAGER::GetActions(), and m_actionMgr.

◆ GetClipboard()

std::string TOOL_MANAGER::GetClipboard ( ) const

Returns the information currently stored in the system clipboard.

If data stored in the clipboard is in non-text format, empty string is returned.

Definition at line 894 of file tool_manager.cpp.

895 {
896  std::string result;
897 
898  if( wxTheClipboard->Open() )
899  {
900  if( wxTheClipboard->IsSupported( wxDF_TEXT ) )
901  {
902  wxTextDataObject data;
903  wxTheClipboard->GetData( data );
904 
905  result = data.GetText().mb_str();
906  }
907 
908  wxTheClipboard->Close();
909  }
910 
911  return result;
912 }

Referenced by LIB_EDIT_TOOL::Paste(), and SCH_EDITOR_CONTROL::Paste().

◆ GetCurrentTool()

TOOL_BASE* TOOL_MANAGER::GetCurrentTool ( ) const
inline

Returns the tool that is on the top of the active tools stack (was invoked the most recently).

Returns
Pointer to the currently used tool.

Definition at line 288 of file tool_manager.h.

289  {
290  return FindTool( GetCurrentToolId() );
291  }
TOOL_BASE * FindTool(int aId) const
Function FindTool() Searches for a tool with given ID.
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:278

References FindTool(), and GetCurrentToolId().

◆ GetCurrentToolId()

int TOOL_MANAGER::GetCurrentToolId ( ) const
inline

Returns id of the tool that is on the top of the active tools stack (was invoked the most recently).

Returns
Id of the currently used tool.

Definition at line 278 of file tool_manager.h.

279  {
280  return m_activeTools.empty() ? -1 : m_activeTools.front();
281  }
ID_LIST m_activeTools
Stack of the active tools.
Definition: tool_manager.h:526

References m_activeTools.

Referenced by GetCurrentTool(), and GetCurrentToolState().

◆ GetCurrentToolState()

TOOL_STATE* TOOL_MANAGER::GetCurrentToolState ( ) const
inline

Returns the TOOL_STATE object representing the state of the active tool.

If there are no tools active, it returns nullptr.

Definition at line 297 of file tool_manager.h.

298  {
299  auto it = m_toolIdIndex.find( GetCurrentToolId() );
300  return ( it != m_toolIdIndex.end() ) ? it->second : nullptr;
301  }
ID_STATE_MAP m_toolIdIndex
Index of the registered tools current states, associated by tools' ID numbers.
Definition: tool_manager.h:520
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:278

References GetCurrentToolId(), and m_toolIdIndex.

Referenced by GetCurrentToolVC(), invokeTool(), and ProcessEvent().

◆ GetCurrentToolVC()

const KIGFX::VC_SETTINGS & TOOL_MANAGER::GetCurrentToolVC ( ) const

Returns the view controls settings for the current tool or the general settings if there is no active tool.

Definition at line 915 of file tool_manager.cpp.

916 {
917  if( TOOL_STATE* active = GetCurrentToolState() )
918  return active->vcSettings;
919 
920  return m_viewControls->GetSettings();
921 }
const VC_SETTINGS & GetSettings() const
Returns the current VIEW_CONTROLS settings
KIGFX::VIEW_CONTROLS * m_viewControls
Definition: tool_manager.h:536
TOOL_STATE * GetCurrentToolState() const
Returns the TOOL_STATE object representing the state of the active tool.
Definition: tool_manager.h:297

References GetCurrentToolState(), KIGFX::VIEW_CONTROLS::GetSettings(), and m_viewControls.

Referenced by COMMON_TOOLS::ResetLocalCoords().

◆ GetCursorPosition()

VECTOR2D TOOL_MANAGER::GetCursorPosition ( )

Definition at line 290 of file tool_manager.cpp.

291 {
292  if( m_viewControls )
294  else
295  return wxGetMousePosition();
296 }
KIGFX::VIEW_CONTROLS * m_viewControls
Definition: tool_manager.h:536
VECTOR2D GetCursorPosition() const
Returns the current cursor position in world coordinates.

References KIGFX::VIEW_CONTROLS::GetCursorPosition(), and m_viewControls.

Referenced by invokeTool(), and RunAction().

◆ GetEditFrame()

◆ GetHotKey()

int TOOL_MANAGER::GetHotKey ( const TOOL_ACTION aAction)

Definition at line 347 of file tool_manager.cpp.

348 {
349  return m_actionMgr->GetHotKey( aAction );
350 }
ACTION_MANAGER * m_actionMgr
Instance of ACTION_MANAGER that handles TOOL_ACTIONs.
Definition: tool_manager.h:529
int GetHotKey(const TOOL_ACTION &aAction) const
Function GetHotKey() Returns the hot key associated with a given action or 0 if there is none.

References ACTION_MANAGER::GetHotKey(), and m_actionMgr.

Referenced by ACTION_MENU::updateHotKeys().

◆ GetModel()

EDA_ITEM* TOOL_MANAGER::GetModel ( ) const
inline

◆ GetMousePosition()

VECTOR2D TOOL_MANAGER::GetMousePosition ( )

Definition at line 281 of file tool_manager.cpp.

282 {
283  if( m_viewControls )
285  else
286  return wxGetMousePosition();
287 }
virtual VECTOR2D GetMousePosition(bool aWorldCoordinates=true) const =0
Function GetMousePosition() Returns the current mouse pointer position.
KIGFX::VIEW_CONTROLS * m_viewControls
Definition: tool_manager.h:536

References KIGFX::VIEW_CONTROLS::GetMousePosition(), and m_viewControls.

Referenced by ACTION_MENU::OnMenuEvent().

◆ GetPriority()

int TOOL_MANAGER::GetPriority ( int  aToolId) const

Returns priority of a given tool.

Higher number means that the tool is closer to the beginning of the active tools queue (i.e. receives events earlier, tools with lower priority receive events later).

Parameters
aToolIdis the id of queried tool.
Returns
The priority of a given tool. If returned number is negative, then it means that the tool id is invalid or the tool is not active.

Definition at line 510 of file tool_manager.cpp.

511 {
512  int priority = 0;
513 
514  for( TOOL_ID tool : m_activeTools )
515  {
516  if( tool == aToolId )
517  return priority;
518 
519  ++priority;
520  }
521 
522  return -1;
523 }
int TOOL_ID
Unique identifier for tools.
Definition: tool_base.h:56
ID_LIST m_activeTools
Stack of the active tools.
Definition: tool_manager.h:526

References m_activeTools.

Referenced by ACTION_MANAGER::RunHotKey().

◆ GetTool()

template<typename T >
T* TOOL_MANAGER::GetTool ( )
inline

Definition at line 188 of file tool_manager.h.

189  {
190  std::map<const char*, TOOL_BASE*>::iterator tool = m_toolTypes.find( typeid( T ).name() );
191 
192  if( tool != m_toolTypes.end() )
193  return static_cast<T*>( tool->second );
194 
195  return NULL;
196  }
#define NULL
const char * name
Definition: DXF_plotter.cpp:60
std::map< const char *, TOOL_BASE * > m_toolTypes
Index of the registered tools to easily lookup by their type.
Definition: tool_manager.h:523

References m_toolTypes, name, and NULL.

Referenced by EDA_BASE_FRAME::AddStandardHelpMenu(), EDA_DRAW_FRAME::AddStandardSubMenus(), PCB_INSPECTION_TOOL::calculateSelectionRatsnest(), ROUTER_TOOL::CanInlineDrag(), PAD_TOOL::copyPadSettings(), EDA_3D_VIEWER::CreateMenuBar(), MODULE_EDITOR_TOOLS::CreatePadFromShapes(), PCB_INSPECTION_TOOL::CrossProbePcbToSch(), LIB_EDIT_TOOL::DeleteItemCursor(), SCH_EDIT_TOOL::DeleteItemCursor(), PCBNEW_CONTROL::DeleteItemCursor(), SCH_EDIT_FRAME::DeleteJunction(), SCH_EDIT_FRAME::DisplayCurrentSheet(), SCH_EDITOR_CONTROL::doCopy(), SCH_EDITOR_CONTROL::doCrossProbeSchToPcb(), SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), DRAWING_TOOL::DrawDimension(), DRAWING_TOOL::drawSegment(), LIB_DRAWING_TOOLS::DrawShape(), SCH_DRAWING_TOOLS::DrawSheet(), PCB_EDITOR_CONTROL::DrillOrigin(), SCH_EDITOR_CONTROL::EditWithLibEdit(), SCH_EDITOR_CONTROL::EnterSheet(), SCH_EDIT_FRAME::ExecuteRemoteCommand(), MODULE_EDITOR_TOOLS::ExplodePadToShapes(), EDIT_TOOL::GetAndPlace(), FP_TREE_SYNCHRONIZING_ADAPTER::GetContextMenuTool(), SYMBOL_TREE_SYNCHRONIZING_ADAPTER::GetContextMenuTool(), DRAWING_TOOL::getSourceZoneForAction(), PCBNEW_CONTROL::GridSetOrigin(), GERBVIEW_CONTROL::HighlightControl(), PCB_INSPECTION_TOOL::highlightNet(), highlightNet(), SCH_EDITOR_CONTROL::HighlightNetCursor(), PCB_INSPECTION_TOOL::HighlightNetTool(), LIB_EDIT_TOOL::Init(), SCH_EDIT_TOOL::Init(), PAD_TOOL::Init(), ALIGN_DISTRIBUTE_TOOL::Init(), LIB_CONTROL::Init(), POINT_EDITOR::Init(), PCB_EDITOR_CONTROL::Init(), POSITION_RELATIVE_TOOL::Init(), EE_TOOL_BASE< SCH_BASE_FRAME >::Init(), ROUTER_TOOL::InlineBreakTrack(), ROUTER_TOOL::InlineDrag(), EDIT_TOOL::invokeInlineRouter(), SCH_EDIT_FRAME::KiwayMailIn(), LIB_EDIT_FRAME::LoadOneSymbol(), PCB_INSPECTION_TOOL::LocalRatsnestTool(), LIB_MOVE_TOOL::Main(), PCB_EDITOR_CONTROL::modifyLockSelected(), DIALOG_POSITION_RELATIVE::OnOkClick(), DIALOG_PLOT::onRunDRC(), DIALOG_POSITION_RELATIVE::OnSelectItemClick(), DIALOG_FIELDS_EDITOR_GLOBAL::OnTableCellClick(), SCH_EDITOR_CONTROL::Paste(), PAD_TOOL::pastePadProperties(), EDIT_TOOL::pickCopyReferencePoint(), PCBNEW_CONTROL::placeBoardItems(), DIALOG_PLOT::Plot(), LIB_EDIT_TOOL::Properties(), PAD_TOOL::pushPadSettings(), SCH_EDIT_FRAME::PutDataInPreviousState(), KICAD_MANAGER_FRAME::ReCreateMenuBar(), LIB_VIEW_FRAME::ReCreateMenuBar(), FOOTPRINT_VIEWER_FRAME::ReCreateMenuBar(), FOOTPRINT_EDIT_FRAME::ReCreateMenuBar(), LIB_EDIT_FRAME::ReCreateMenuBar(), CVPCB_MAINFRAME::ReCreateMenuBar(), GERBVIEW_FRAME::ReCreateMenuBar(), SCH_EDIT_FRAME::ReCreateMenuBar(), PCB_EDIT_FRAME::ReCreateMenuBar(), LIB_EDIT_TOOL::Redo(), SCH_EDITOR_CONTROL::Redo(), SCH_BASE_FRAME::RefreshSelection(), LIB_DRAWING_TOOLS::RepeatDrawItem(), LIB_EDIT_FRAME::RollbackPartFromUndo(), DRC::RunTests(), SCH_EDIT_FRAME::SchematicCleanUp(), PCB_TOOL_BASE::selection(), POSITION_RELATIVE_TOOL::SelectPositionRelativeItem(), FOOTPRINT_EDIT_FRAME::setupTools(), CVPCB_MAINFRAME::setupTools(), PCB_EDITOR_CONTROL::TrackWidthDec(), PCB_EDITOR_CONTROL::TrackWidthInc(), DIALOG_FIELDS_EDITOR_GLOBAL::TransferDataToWindow(), DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::TransferDataToWindow(), DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::TransferDataToWindow(), LIB_DRAWING_TOOLS::TwoClickPlace(), LIB_EDIT_TOOL::Undo(), SCH_EDITOR_CONTROL::Undo(), SYMBOL_UNIT_MENU::update(), BUS_UNFOLD_MENU::update(), EE_INSPECTION_TOOL::UpdateMessagePanel(), GERBVIEW_CONTROL::UpdateMessagePanel(), PCBNEW_CONTROL::UpdateMessagePanel(), PCB_INSPECTION_TOOL::UpdateSelectionRatsnest(), PCB_EDITOR_CONTROL::ViaSizeDec(), PCB_EDITOR_CONTROL::ViaSizeInc(), PCB_EDITOR_CONTROL::ZoneDuplicate(), and PCB_EDITOR_CONTROL::ZoneMerge().

◆ GetView()

◆ GetViewControls()

KIGFX::VIEW_CONTROLS* TOOL_MANAGER::GetViewControls ( ) const
inline

Definition at line 255 of file tool_manager.h.

256  {
257  return m_viewControls;
258  }
KIGFX::VIEW_CONTROLS * m_viewControls
Definition: tool_manager.h:536

References m_viewControls.

Referenced by ZONE_CREATE_HELPER::createNewZone(), TOOL_DISPATCHER::DispatchWxEvent(), and TOOL_BASE::getViewControls().

◆ InitTools()

void TOOL_MANAGER::InitTools ( )

Function InitTools() Initializes all registered tools.

If a tool fails during the initialization, it is deactivated and becomes unavailable for further use. Initialization should be done only once.

Definition at line 478 of file tool_manager.cpp.

479 {
480  for( auto it = m_toolState.begin(); it != m_toolState.end(); /* iteration in the loop */ )
481  {
482  TOOL_BASE* tool = it->first;
483  TOOL_STATE* state = it->second;
484  setActiveState( state );
485  ++it; // keep the iterator valid if the element is going to be erased
486 
487  if( !tool->Init() )
488  {
489  wxMessageBox( wxString::Format( "Initialization of tool \"%s\" failed",
490  tool->GetName() ) );
491 
492  // Unregister the tool
493  setActiveState( nullptr );
494  m_toolState.erase( tool );
495  m_toolNameIndex.erase( tool->GetName() );
496  m_toolIdIndex.erase( tool->GetId() );
497  m_toolTypes.erase( typeid( *tool ).name() );
498 
499  delete state;
500  delete tool;
501  }
502  }
503 
504  m_actionMgr->UpdateHotKeys( true );
505 
507 }
virtual bool Init()
Function Init() Init() is called once upon a registration of the tool.
Definition: tool_base.h:92
ACTION_MANAGER * m_actionMgr
Instance of ACTION_MANAGER that handles TOOL_ACTIONs.
Definition: tool_manager.h:529
ID_STATE_MAP m_toolIdIndex
Index of the registered tools current states, associated by tools' ID numbers.
Definition: tool_manager.h:520
TOOL_ID GetId() const
Function GetId() Returns the unique identifier of the tool.
Definition: tool_base.h:121
Tool is invoked after being inactive.
Definition: tool_base.h:81
void UpdateHotKeys(bool aFullUpdate)
Function UpdateHotKeys() Optionally reads the hotkey config files and then rebuilds the internal hotk...
NAME_STATE_MAP m_toolNameIndex
Index of the registered tools current states, associated by tools' names.
Definition: tool_manager.h:517
void setActiveState(TOOL_STATE *aState)
Saves the previous active state and sets a new one.
void ResetTools(TOOL_BASE::RESET_REASON aReason)
Function ResetTools() Resets all tools (i.e.
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
TOOL_BASE.
Definition: tool_base.h:67
const std::string & GetName() const
Function GetName() Returns the name of the tool.
Definition: tool_base.h:132
TOOL_STATE_MAP m_toolState
Index of registered tools current states, associated by tools' objects.
Definition: tool_manager.h:514
std::map< const char *, TOOL_BASE * > m_toolTypes
Index of the registered tools to easily lookup by their type.
Definition: tool_manager.h:523

References Format(), TOOL_BASE::GetId(), TOOL_BASE::GetName(), TOOL_BASE::Init(), m_actionMgr, m_toolIdIndex, m_toolNameIndex, m_toolState, m_toolTypes, ResetTools(), TOOL_BASE::RUN, setActiveState(), and ACTION_MANAGER::UpdateHotKeys().

Referenced by FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME(), FOOTPRINT_EDIT_FRAME::setupTools(), LIB_VIEW_FRAME::setupTools(), GERBVIEW_FRAME::setupTools(), LIB_EDIT_FRAME::setupTools(), CVPCB_MAINFRAME::setupTools(), and SCH_EDIT_FRAME::setupTools().

◆ InvokeTool() [1/2]

bool TOOL_MANAGER::InvokeTool ( TOOL_ID  aToolId)

Function InvokeTool() Calls a tool by sending a tool activation event to tool of given ID.

Parameters
aToolIdis the ID number of the requested tool.
Returns
True if the requested tool was invoked successfully.

Definition at line 243 of file tool_manager.cpp.

244 {
245  TOOL_BASE* tool = FindTool( aToolId );
246 
247  if( tool && tool->GetType() == INTERACTIVE )
248  return invokeTool( tool );
249 
250  return false; // there is no tool with the given id
251 }
TOOL_TYPE GetType() const
Function GetType() Returns the type of the tool.
Definition: tool_base.h:110
TOOL_BASE * FindTool(int aId) const
Function FindTool() Searches for a tool with given ID.
Tool that interacts with the user
Definition: tool_base.h:49
TOOL_BASE.
Definition: tool_base.h:67
bool invokeTool(TOOL_BASE *aTool)
Function invokeTool() Invokes a tool by sending a proper event (in contrary to runTool,...

References FindTool(), TOOL_BASE::GetType(), INTERACTIVE, and invokeTool().

Referenced by TOOL_INTERACTIVE::Activate(), CVPCB_MAINFRAME::CVPCB_MAINFRAME(), FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME(), EE_SELECTION_TOOL::Main(), FOOTPRINT_EDIT_FRAME::setupTools(), LIB_VIEW_FRAME::setupTools(), GERBVIEW_FRAME::setupTools(), and LIB_EDIT_FRAME::setupTools().

◆ InvokeTool() [2/2]

bool TOOL_MANAGER::InvokeTool ( const std::string &  aToolName)

Function InvokeTool() Calls a tool by sending a tool activation event to tool of given name.

Parameters
aToolNameis the name of the requested tool.
Returns
True if the requested tool was invoked successfully.

Definition at line 254 of file tool_manager.cpp.

255 {
256  TOOL_BASE* tool = FindTool( aToolName );
257 
258  if( tool && tool->GetType() == INTERACTIVE )
259  return invokeTool( tool );
260 
261  return false; // there is no tool with the given name
262 }
TOOL_TYPE GetType() const
Function GetType() Returns the type of the tool.
Definition: tool_base.h:110
TOOL_BASE * FindTool(int aId) const
Function FindTool() Searches for a tool with given ID.
Tool that interacts with the user
Definition: tool_base.h:49
TOOL_BASE.
Definition: tool_base.h:67
bool invokeTool(TOOL_BASE *aTool)
Function invokeTool() Invokes a tool by sending a proper event (in contrary to runTool,...

References FindTool(), TOOL_BASE::GetType(), INTERACTIVE, and invokeTool().

◆ invokeTool() [1/2]

bool TOOL_MANAGER::invokeTool ( TOOL_BASE aTool)
private

Function invokeTool() Invokes a tool by sending a proper event (in contrary to runTool, which makes the tool run for real).

Parameters
aToolis the tool to be invoked.

Definition at line 353 of file tool_manager.cpp.

354 {
355  wxASSERT( aTool != NULL );
356 
357  TOOL_EVENT evt( TC_COMMAND, TA_ACTIVATE, aTool->GetName() );
359  processEvent( evt );
360 
361  if( TOOL_STATE* active = GetCurrentToolState() )
362  setActiveState( active );
363 
364  return true;
365 }
VECTOR2D GetCursorPosition()
bool processEvent(const TOOL_EVENT &aEvent)
Main function for event processing.
void SetMousePosition(const VECTOR2D &aP)
Definition: tool_event.h:468
#define NULL
void setActiveState(TOOL_STATE *aState)
Saves the previous active state and sets a new one.
TOOL_EVENT.
Definition: tool_event.h:171
TOOL_STATE * GetCurrentToolState() const
Returns the TOOL_STATE object representing the state of the active tool.
Definition: tool_manager.h:297
const std::string & GetName() const
Function GetName() Returns the name of the tool.
Definition: tool_base.h:132

References GetCurrentToolState(), GetCursorPosition(), TOOL_BASE::GetName(), NULL, processEvent(), setActiveState(), TOOL_EVENT::SetMousePosition(), TA_ACTIVATE, and TC_COMMAND.

Referenced by InvokeTool().

◆ invokeTool() [2/2]

template<class Parameters >
void TOOL_MANAGER::invokeTool ( const std::string &  aName,
const Parameters &  aToolParams 
)
private

◆ isActive()

bool TOOL_MANAGER::isActive ( TOOL_BASE aTool)
private

Function isActive() Returns information about a tool activation status.

Parameters
aToolis the tool to be checked.
Returns
True if the tool is on the active tools stack, false otherwise.

Definition at line 942 of file tool_manager.cpp.

943 {
944  if( !isRegistered( aTool ) )
945  return false;
946 
947  // Just check if the tool is on the active tools stack
948  return std::find( m_activeTools.begin(), m_activeTools.end(), aTool->GetId() ) != m_activeTools.end();
949 }
TOOL_ID GetId() const
Function GetId() Returns the unique identifier of the tool.
Definition: tool_base.h:121
bool isRegistered(TOOL_BASE *aTool) const
Function isRegistered() Returns information about a tool registration status.
Definition: tool_manager.h:475
ID_LIST m_activeTools
Stack of the active tools.
Definition: tool_manager.h:526

References TOOL_BASE::GetId(), isRegistered(), and m_activeTools.

Referenced by runTool().

◆ IsContextMenuActive()

bool TOOL_MANAGER::IsContextMenuActive ( )
inline

True while processing a context menu.

Definition at line 374 of file tool_manager.h.

375  {
376  return m_menuActive;
377  }
bool m_menuActive
Flag indicating whether a context menu is currently displayed.
Definition: tool_manager.h:548

References m_menuActive.

Referenced by DIALOG_SHIM::DIALOG_SHIM().

◆ isRegistered()

bool TOOL_MANAGER::isRegistered ( TOOL_BASE aTool) const
inlineprivate

Function isRegistered() Returns information about a tool registration status.

Parameters
aToolis the tool to be checked.
Returns
true if the tool is in the registered tools list, false otherwise.

Definition at line 475 of file tool_manager.h.

476  {
477  return m_toolState.count( aTool ) > 0;
478  }
TOOL_STATE_MAP m_toolState
Index of registered tools current states, associated by tools' objects.
Definition: tool_manager.h:514

References m_toolState.

Referenced by isActive(), and runTool().

◆ IsToolActive()

bool TOOL_MANAGER::IsToolActive ( TOOL_ID  aId) const

Function IsToolActive() Returns true if a tool with given id is active (executing)

Definition at line 1043 of file tool_manager.cpp.

1044 {
1045  auto it = m_toolIdIndex.find( aId );
1046  return !it->second->idle;
1047 }
ID_STATE_MAP m_toolIdIndex
Index of the registered tools current states, associated by tools' ID numbers.
Definition: tool_manager.h:520

References m_toolIdIndex.

Referenced by TOOL_BASE::IsToolActive().

◆ MakeToolId()

TOOL_ID TOOL_MANAGER::MakeToolId ( const std::string &  aToolName)
static

Generates a unique ID from for a tool with given name.

Definition at line 924 of file tool_manager.cpp.

925 {
926  static int currentId;
927 
928  return currentId++;
929 }

◆ PostEvent()

void TOOL_MANAGER::PostEvent ( const TOOL_EVENT aEvent)
inline

Puts an event to the event queue to be processed at the end of event processing cycle.

Parameters
aEventis the event to be put into the queue.

Definition at line 237 of file tool_manager.h.

238  {
239  m_eventQueue.push_back( aEvent );
240  }
std::list< TOOL_EVENT > m_eventQueue
Queue that stores events to be processed at the end of the event processing cycle.
Definition: tool_manager.h:540

References m_eventQueue.

Referenced by SCH_EDIT_FRAME::AddJunction(), SCH_EDIT_TOOL::editComponentFieldText(), SCH_LINE_WIRE_BUS_TOOL::finishSegments(), SCH_MOVE_TOOL::Main(), LIB_MOVE_TOOL::Main(), LIB_EDIT_TOOL::Mirror(), SCH_EDIT_TOOL::Mirror(), PCB_EDITOR_CONTROL::modifyLockSelected(), EDIT_TOOL::Move(), EDA_BASE_FRAME::PopTool(), PrimeTool(), LIB_EDIT_TOOL::Properties(), SCH_EDIT_TOOL::Properties(), LIB_EDIT_TOOL::Rotate(), SCH_EDIT_TOOL::Rotate(), RunAction(), and EDA_DRAW_FRAME::UpdateMsgPanel().

◆ PrimeTool()

void TOOL_MANAGER::PrimeTool ( const VECTOR2D aPosition)

Function PrimeTool() "Primes" a tool by sending a cursor left-click event with the mouse position set to the passed in position.

Parameters
aPositionis the mouse position to use in the event

Definition at line 327 of file tool_manager.cpp.

328 {
329  int modifiers = 0;
330  modifiers |= wxGetKeyState( WXK_SHIFT ) ? MD_SHIFT : 0;
331  modifiers |= wxGetKeyState( WXK_CONTROL ) ? MD_CTRL : 0;
332  modifiers |= wxGetKeyState( WXK_ALT ) ? MD_ALT : 0;
333 
334  TOOL_EVENT evt( TC_MOUSE, TA_PRIME, BUT_LEFT | modifiers );
335  evt.SetMousePosition( aPosition );
336 
337  PostEvent( evt );
338 }
TOOL_EVENT.
Definition: tool_event.h:171
void PostEvent(const TOOL_EVENT &aEvent)
Puts an event to the event queue to be processed at the end of event processing cycle.
Definition: tool_manager.h:237

References BUT_LEFT, MD_ALT, MD_CTRL, MD_SHIFT, PostEvent(), TOOL_EVENT::SetMousePosition(), TA_PRIME, and TC_MOUSE.

Referenced by DRAWING_TOOL::DrawDimension(), DRAWING_TOOL::DrawZone(), and ROUTER_TOOL::MainLoop().

◆ ProcessEvent()

bool TOOL_MANAGER::ProcessEvent ( const TOOL_EVENT aEvent)

Propagates an event to tools that requested events of matching type(s).

Parameters
aEventis the event to be processed.
Returns
true if the event is a managed hotkey

Definition at line 846 of file tool_manager.cpp.

847 {
848  bool handled = processEvent( aEvent );
849 
850  TOOL_STATE* activeTool = GetCurrentToolState();
851 
852  if( activeTool )
853  setActiveState( activeTool );
854 
855  if( m_view && m_view->IsDirty() )
856  {
858 
859 #if defined( __WXMAC__ ) || defined( __WINDOWS__ )
860  wxTheApp->ProcessPendingEvents(); // required for updating brightening behind a popup menu
861 #endif
862  }
863 
864  UpdateUI( aEvent );
865 
866  return handled;
867 }
void UpdateUI(const TOOL_EVENT &aEvent)
Updates the status bar and synchronizes toolbars.
EDA_BASE_FRAME * GetEditFrame() const
Definition: tool_manager.h:268
bool processEvent(const TOOL_EVENT &aEvent)
Main function for event processing.
void setActiveState(TOOL_STATE *aState)
Saves the previous active state and sets a new one.
TOOL_STATE * GetCurrentToolState() const
Returns the TOOL_STATE object representing the state of the active tool.
Definition: tool_manager.h:297
KIGFX::VIEW * m_view
Definition: tool_manager.h:535
bool IsDirty() const
Function IsDirty() Returns true if any of the VIEW layers needs to be refreshened.
Definition: view.h:557
virtual void RefreshCanvas()
Notification to refresh the drawing canvas (if any).

References GetCurrentToolState(), GetEditFrame(), KIGFX::VIEW::IsDirty(), m_view, processEvent(), EDA_BASE_FRAME::RefreshCanvas(), setActiveState(), and UpdateUI().

Referenced by EE_SELECTION_TOOL::AddItemsToSel(), EE_SELECTION_TOOL::AddItemToSel(), SELECTION_TOOL::AddItemToSel(), EDIT_TOOL::ChangeTrackWidth(), SELECTION_TOOL::ClearSelection(), GERBVIEW_SELECTION_TOOL::clearSelection(), EE_SELECTION_TOOL::ClearSelection(), COMMON_TOOLS::CursorControl(), TOOL_DISPATCHER::DispatchWxCommand(), TOOL_DISPATCHER::DispatchWxEvent(), SELECTION_TOOL::expandConnection(), SELECTION_TOOL::filterSelection(), SELECTION_TOOL::findCallback(), EDIT_TOOL::Flip(), TOOL_DISPATCHER::handleMouseButton(), LIB_MOVE_TOOL::Main(), EDIT_TOOL::Mirror(), EDIT_TOOL::MoveExact(), ACTION_MENU::OnMenuEvent(), ACTION_TOOLBAR::onToolEvent(), PAD_TOOL::pastePadProperties(), PCBNEW_CONTROL::placeBoardItems(), EDIT_TOOL::Properties(), PAD_TOOL::pushPadSettings(), EE_SELECTION_TOOL::RebuildSelection(), SCH_EDITOR_CONTROL::Redo(), POSITION_RELATIVE_TOOL::RelativeItemSelectionMove(), EE_SELECTION_TOOL::RemoveItemFromSel(), SELECTION_TOOL::RemoveItemFromSel(), EE_SELECTION_TOOL::RemoveItemsFromSel(), EE_SELECTION_TOOL::RequestSelection(), EDIT_TOOL::Rotate(), EE_SELECTION_TOOL::SelectConnection(), COMMON_TOOLS::SelectionTool(), GERBVIEW_SELECTION_TOOL::SelectItem(), GERBVIEW_SELECTION_TOOL::SelectItems(), SELECTION_TOOL::SelectItems(), EE_SELECTION_TOOL::selectMultiple(), SELECTION_TOOL::selectMultiple(), SELECTION_TOOL::selectNet(), GERBVIEW_SELECTION_TOOL::selectPoint(), EE_SELECTION_TOOL::SelectPoint(), SELECTION_TOOL::selectPoint(), SELECTION_TOOL::selectSameSheet(), SELECTION_TOOL::selectSheetContents(), SCH_EDITOR_CONTROL::Undo(), GERBVIEW_SELECTION_TOOL::UnselectItem(), GERBVIEW_SELECTION_TOOL::UnselectItems(), and SELECTION_TOOL::UnselectItems().

◆ processEvent()

bool TOOL_MANAGER::processEvent ( const TOOL_EVENT aEvent)
private

Main function for event processing.

Returns
true if a hotkey was handled

Definition at line 998 of file tool_manager.cpp.

999 {
1000  wxLogTrace( kicadTraceToolStack, "TOOL_MANAGER::processEvent %s", aEvent.Format() );
1001 
1002  // First try to dispatch the action associated with the event if it is a key press event
1003  bool handled = dispatchHotKey( aEvent );
1004 
1005  if( !handled )
1006  {
1007  // If the event is not handled through a hotkey activation, pass it to the currently
1008  // running tool loops
1009  handled |= dispatchInternal( aEvent );
1010  handled |= dispatchActivation( aEvent );
1011 
1012  // Open the context menu if requested by a tool
1013  DispatchContextMenu( aEvent );
1014 
1015  // Dispatch any remaining events in the event queue
1016  while( !m_eventQueue.empty() )
1017  {
1018  TOOL_EVENT event = m_eventQueue.front();
1019  m_eventQueue.pop_front();
1020  processEvent( event );
1021  }
1022  }
1023 
1024  wxLogTrace( kicadTraceToolStack, "TOOL_MANAGER::processEvent handled: %s %s",
1025  ( handled ? "true" : "false" ), aEvent.Format() );
1026 
1027  return handled;
1028 }
void DispatchContextMenu(const TOOL_EVENT &aEvent)
Function DispatchContextMenu() Handles context menu related events.
const std::string Format() const
Function Format() Returns information about event in form of a human-readable string.
Definition: tool_event.cpp:73
bool processEvent(const TOOL_EVENT &aEvent)
Main function for event processing.
bool dispatchActivation(const TOOL_EVENT &aEvent)
Function dispatchActivation() Checks if it is a valid activation event and invokes a proper tool.
bool dispatchHotKey(const TOOL_EVENT &aEvent)
Function dispatchStandardEvents() Handles specific events, that are intended for TOOL_MANAGER rather ...
TOOL_EVENT.
Definition: tool_event.h:171
std::list< TOOL_EVENT > m_eventQueue
Queue that stores events to be processed at the end of the event processing cycle.
Definition: tool_manager.h:540
const wxChar *const kicadTraceToolStack
Flag to enable tracing of the tool handling stack.
bool dispatchInternal(const TOOL_EVENT &aEvent)
Function dispatchInternal Passes an event at first to the active tools, then to all others.

References dispatchActivation(), DispatchContextMenu(), dispatchHotKey(), dispatchInternal(), TOOL_EVENT::Format(), kicadTraceToolStack, and m_eventQueue.

Referenced by DeactivateTool(), invokeTool(), ProcessEvent(), and RunAction().

◆ RegisterTool()

void TOOL_MANAGER::RegisterTool ( TOOL_BASE aTool)

Function RegisterTool() Adds a tool to the manager set and sets it up.

Called once for each tool during application initialization.

Parameters
aTooltool to be added. Ownership is transferred.

Definition at line 223 of file tool_manager.cpp.

224 {
225  wxASSERT_MSG( m_toolNameIndex.find( aTool->GetName() ) == m_toolNameIndex.end(),
226  wxT( "Adding two tools with the same name may result in unexpected behaviour.") );
227  wxASSERT_MSG( m_toolIdIndex.find( aTool->GetId() ) == m_toolIdIndex.end(),
228  wxT( "Adding two tools with the same ID may result in unexpected behaviour.") );
229  wxASSERT_MSG( m_toolTypes.find( typeid( *aTool ).name() ) == m_toolTypes.end(),
230  wxT( "Adding two tools of the same type may result in unexpected behaviour.") );
231 
232  TOOL_STATE* st = new TOOL_STATE( aTool );
233 
234  m_toolState[aTool] = st;
235  m_toolNameIndex[aTool->GetName()] = st;
236  m_toolIdIndex[aTool->GetId()] = st;
237  m_toolTypes[typeid( *aTool ).name()] = st->theTool;
238 
239  aTool->attachManager( this );
240 }
ID_STATE_MAP m_toolIdIndex
Index of the registered tools current states, associated by tools' ID numbers.
Definition: tool_manager.h:520
TOOL_ID GetId() const
Function GetId() Returns the unique identifier of the tool.
Definition: tool_base.h:121
void attachManager(TOOL_MANAGER *aManager)
Function attachManager()
Definition: tool_base.cpp:60
NAME_STATE_MAP m_toolNameIndex
Index of the registered tools current states, associated by tools' names.
Definition: tool_manager.h:517
const std::string & GetName() const
Function GetName() Returns the name of the tool.
Definition: tool_base.h:132
TOOL_STATE_MAP m_toolState
Index of registered tools current states, associated by tools' objects.
Definition: tool_manager.h:514
std::map< const char *, TOOL_BASE * > m_toolTypes
Index of the registered tools to easily lookup by their type.
Definition: tool_manager.h:523

References TOOL_BASE::attachManager(), TOOL_BASE::GetId(), TOOL_BASE::GetName(), m_toolIdIndex, m_toolNameIndex, m_toolState, and m_toolTypes.

Referenced by FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME(), FOOTPRINT_EDIT_FRAME::setupTools(), LIB_VIEW_FRAME::setupTools(), GERBVIEW_FRAME::setupTools(), LIB_EDIT_FRAME::setupTools(), CVPCB_MAINFRAME::setupTools(), and SCH_EDIT_FRAME::setupTools().

◆ ResetTools()

void TOOL_MANAGER::ResetTools ( TOOL_BASE::RESET_REASON  aReason)

Function ResetTools() Resets all tools (i.e.

calls their Reset() method).

Definition at line 462 of file tool_manager.cpp.

463 {
464  DeactivateTool();
465 
466  for( auto& state : m_toolState )
467  {
468  TOOL_BASE* tool = state.first;
469  setActiveState( state.second );
470  tool->Reset( aReason );
471 
472  if( tool->GetType() == INTERACTIVE )
473  static_cast<TOOL_INTERACTIVE*>( tool )->resetTransitions();
474  }
475 }
TOOL_TYPE GetType() const
Function GetType() Returns the type of the tool.
Definition: tool_base.h:110
void DeactivateTool()
Function DeactivateTool() Deactivates the currently active tool.
virtual void Reset(RESET_REASON aReason)=0
Function Reset() Brings the tool to a known, initial state.
Tool that interacts with the user
Definition: tool_base.h:49
void setActiveState(TOOL_STATE *aState)
Saves the previous active state and sets a new one.
TOOL_BASE.
Definition: tool_base.h:67
TOOL_STATE_MAP m_toolState
Index of registered tools current states, associated by tools' objects.
Definition: tool_manager.h:514

References DeactivateTool(), TOOL_BASE::GetType(), INTERACTIVE, m_toolState, TOOL_BASE::Reset(), and setActiveState().

Referenced by PCB_BASE_FRAME::ActivateGalCanvas(), GERBVIEW_FRAME::ActivateGalCanvas(), GERBVIEW_FRAME::Clear_DrawLayers(), FOOTPRINT_VIEWER_FRAME::ClickOnFootprintList(), GERBVIEW_FRAME::Erase_Current_DrawLayer(), InitTools(), LIB_CONTROL::OnDeMorgan(), LIB_EDIT_FRAME::OnSelectUnit(), FOOTPRINT_WIZARD_FRAME::ReloadFootprint(), PCB_BASE_EDIT_FRAME::SetBoard(), LIB_EDIT_FRAME::SetCurPart(), DISPLAY_FOOTPRINTS_FRAME::updateView(), FOOTPRINT_WIZARD_FRAME::updateView(), FOOTPRINT_VIEWER_FRAME::updateView(), and FOOTPRINT_EDIT_FRAME::updateView().

◆ RunAction() [1/6]

template<typename T >
bool TOOL_MANAGER::RunAction ( const std::string &  aActionName,
bool  aNow = false,
aParam = NULL 
)
inline

Function RunAction() Runs the specified action.

The common format for action names is "application.ToolName.Action".

Parameters
aActionNameis the name of action to be invoked.
aNowdecides if the action has to be run immediately or after the current coroutine is preemptied.
aParamis an optional parameter that might be used by the invoked action. Its meaning depends on the action.
Returns
False if the action was not found.

Definition at line 109 of file tool_manager.h.

110  {
111  return RunAction( aActionName, aNow, reinterpret_cast<void*>( aParam ) );
112  }
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:109

Referenced by DIALOG_GLOBAL_DELETION::AcceptPcbDelete(), TREEPROJECT_ITEM::Activate(), FOOTPRINT_VIEWER_FRAME::AddFootprintToPCB(), LIB_CONTROL::AddSymbolToSchematic(), SCH_EDIT_FRAME::AppendSchematic(), CVPCB_ASSOCIATION_TOOL::Associate(), ROUTER_TOOL::CanInlineDrag(), EDIT_TOOL::ChangeTrackWidth(), SELECTION_TOOL::ClearSelection(), ZONE_CREATE_HELPER::commitZone(), SCH_EDIT_TOOL::ConvertDeMorgan(), SCH_EDIT_FRAME::ConvertPart(), SCH_EDIT_FRAME::ConvertTextType(), MICROWAVE_TOOL::createInductorBetween(), LIB_EDIT_FRAME::CreateNewPart(), MODULE_EDITOR_TOOLS::CreatePadFromShapes(), COMMON_TOOLS::CursorControl(), ROUTER_TOOL::CustomTrackWidthDialog(), SCH_EDITOR_CONTROL::Cut(), LIB_VIEW_FRAME::DClickOnCmpList(), DIALOG_DRC_CONTROL::DelDRCMarkers(), LIB_EDIT_TOOL::DeleteItemCursor(), SCH_EDIT_TOOL::DeleteItemCursor(), PCBNEW_CONTROL::DeleteItemCursor(), DIALOG_MIGRATE_BUSES::DIALOG_MIGRATE_BUSES(), SCH_EDIT_FRAME::DisplayCurrentSheet(), DIALOG_CLEANUP_TRACKS_AND_VIAS::doCleanup(), LIB_EDIT_TOOL::DoDelete(), SCH_EDIT_TOOL::DoDelete(), SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), PCB_TOOL_BASE::doInteractiveItemPlacement(), DIALOG_DRC_CONTROL::doSelectionMenu(), SCH_LINE_WIRE_BUS_TOOL::doUnfoldBus(), DRAWING_TOOL::DrawArc(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawCircle(), DRAWING_TOOL::DrawDimension(), DRAWING_TOOL::drawSegment(), LIB_DRAWING_TOOLS::DrawShape(), SCH_DRAWING_TOOLS::DrawSheet(), PCB_EDITOR_CONTROL::DrillOrigin(), LIB_EDIT_TOOL::Duplicate(), SCH_EDIT_TOOL::Duplicate(), EDIT_TOOL::Duplicate(), EDIT_TOOL::EditFpInFpEditor(), LIB_EDIT_TOOL::editSymbolProperties(), SCH_EDITOR_CONTROL::EditWithLibEdit(), LIB_EDIT_FRAME::emptyScreen(), SCH_EDITOR_CONTROL::EnterSheet(), PAD_TOOL::EnumeratePads(), TRACK_WIDTH_MENU::eventHandler(), DIFF_PAIR_MENU::eventHandler(), GLOBAL_EDIT_TOOL::ExchangeFootprints(), PCB_EDIT_FRAME::ExecuteRemoteCommand(), SCH_EDIT_FRAME::ExecuteRemoteCommand(), MODULE_EDITOR_TOOLS::ExplodePadToShapes(), SCH_EDITOR_CONTROL::FindComponentAndItem(), POINT_EDITOR::finishItem(), SCH_LINE_WIRE_BUS_TOOL::finishSegments(), EDIT_TOOL::Flip(), GERBVIEW_FRAME::GERBVIEW_FRAME(), EDIT_TOOL::GetAndPlace(), LIB_EDIT_FRAME::GetComponentFromRedoList(), LIB_EDIT_FRAME::GetComponentFromUndoList(), DRAWING_TOOL::getSourceZoneForAction(), PCBNEW_CONTROL::GridSetOrigin(), PCB_INSPECTION_TOOL::HighlightItem(), SCH_EDITOR_CONTROL::HighlightNetCursor(), PCB_INSPECTION_TOOL::HighlightNetTool(), SCH_EDIT_FRAME::importFile(), MODULE_EDITOR_TOOLS::ImportFootprint(), ROUTER_TOOL::InlineBreakTrack(), ROUTER_TOOL::InlineDrag(), EDIT_TOOL::invokeInlineRouter(), PCB_EDIT_FRAME::KiwayMailIn(), SCH_EDITOR_CONTROL::LeaveSheet(), LIB_VIEW_FRAME::LIB_VIEW_FRAME(), LIB_EDIT_FRAME::LoadComponentFromCurrentLib(), LIB_EDIT_FRAME::LoadOneLibraryPartAux(), PCB_INSPECTION_TOOL::LocalRatsnestTool(), SCH_MOVE_TOOL::Main(), CVPCB_CONTROL::Main(), LIB_MOVE_TOOL::Main(), EE_SELECTION_TOOL::Main(), SELECTION_TOOL::Main(), ROUTER_TOOL::MainLoop(), LENGTH_TUNER_TOOL::MainLoop(), LIB_EDIT_TOOL::Mirror(), SCH_EDIT_TOOL::Mirror(), EDIT_TOOL::Mirror(), PCB_EDITOR_CONTROL::modifyLockSelected(), EDIT_TOOL::Move(), EDIT_TOOL::MoveExact(), SIM_PLOT_FRAME::onClose(), SYMBOL_TREE_PANE::onComponentSelected(), DIALOG_DRC_CONTROL::OnDeleteOneClick(), LIB_CONTROL::OnDeMorgan(), ZONE_CREATE_HELPER::OnFirstPoint(), DIALOG_ERC::OnLeftClickMarkersList(), FOOTPRINTS_LISTBOX::OnLeftDClick(), ACTION_MENU::OnMenuEvent(), KICAD_MANAGER_FRAME::OnOpenFileInTextEditor(), SIM_PLOT_FRAME::onProbe(), DIALOG_CLEANUP_TRACKS_AND_VIAS::OnRightUpItem(), EDA_DRAW_FRAME::OnSelectGrid(), DIALOG_POSITION_RELATIVE::OnSelectItemClick(), HIERARCHY_NAVIG_DLG::onSelectSheetPath(), LIB_EDIT_FRAME::OnSelectUnit(), EDA_DRAW_FRAME::OnSelectZoom(), SIM_PLOT_FRAME::onTune(), SCH_EDIT_FRAME::OpenProjectFiles(), LIB_EDIT_TOOL::Paste(), SCH_EDITOR_CONTROL::Paste(), ZONE_CREATE_HELPER::performZoneCutout(), EDIT_TOOL::pickCopyReferencePoint(), LIB_EDIT_TOOL::PinTable(), PCBNEW_CONTROL::placeBoardItems(), SCH_DRAWING_TOOLS::PlaceComponent(), SCH_DRAWING_TOOLS::PlaceImage(), DRAWING_TOOL::PlaceImportedGraphics(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), DRAWING_TOOL::PlaceText(), PCBNEW_CONTROL::Print(), GERBVIEW_CONTROL::Print(), SCH_EDIT_TOOL::Properties(), EDIT_TOOL::Properties(), SCH_EDIT_FRAME::PutDataInPreviousState(), CVPCB_MAINFRAME::refreshAfterComponentSearch(), POSITION_RELATIVE_TOOL::RelativeItemSelectionMove(), EDIT_TOOL::Remove(), POINT_EDITOR::removeCorner(), SCH_EDIT_TOOL::RepeatDrawItem(), LIB_DRAWING_TOOLS::RepeatDrawItem(), SELECTION_TOOL::RequestSelection(), LIB_EDIT_FRAME::RollbackPartFromUndo(), LIB_EDIT_TOOL::Rotate(), SCH_EDIT_TOOL::Rotate(), EDIT_TOOL::Rotate(), RunAction(), ACTION_MANAGER::RunHotKey(), FOOTPRINT_EDIT_FRAME::SaveFootprintToBoard(), LIB_EDIT_FRAME::saveLibrary(), DIALOG_FIND::search(), EE_SELECTION_TOOL::SelectPoint(), POSITION_RELATIVE_TOOL::SelectPositionRelativeItem(), GERBVIEW_FRAME::SetActiveLayer(), DRAWING_TOOL::SetAnchor(), LIB_EDIT_FRAME::SetCurPart(), PCB_BASE_FRAME::SetFastGrid1(), PCB_BASE_FRAME::SetFastGrid2(), LIB_VIEW_FRAME::SetSelectedComponent(), CVPCB_MAINFRAME::setupEventHandlers(), SCH_EDIT_FRAME::setupTools(), DRC::ShowDRCDialog(), SCH_DRAWING_TOOLS::SingleClickPlace(), PCB_EDITOR_CONTROL::TrackWidthDec(), PCB_EDITOR_CONTROL::TrackWidthInc(), LIB_DRAWING_TOOLS::TwoClickPlace(), SCH_DRAWING_TOOLS::TwoClickPlace(), PCB_BASE_EDIT_FRAME::unitsChangeRefresh(), DISPLAY_FOOTPRINTS_FRAME::updateView(), FOOTPRINT_WIZARD_FRAME::updateView(), FOOTPRINT_VIEWER_FRAME::updateView(), FOOTPRINT_EDIT_FRAME::updateView(), PCB_EDITOR_CONTROL::ViaSizeDec(), PCB_EDITOR_CONTROL::ViaSizeInc(), PCB_EDITOR_CONTROL::ZoneMerge(), EDA_DRAW_FRAME::Zoom_Automatique(), DIALOG_NETLIST::~DIALOG_NETLIST(), and DIALOG_UPDATE_PCB::~DIALOG_UPDATE_PCB().

◆ RunAction() [2/6]

bool TOOL_MANAGER::RunAction ( const std::string &  aActionName,
bool  aNow,
void *  aParam 
)

Definition at line 265 of file tool_manager.cpp.

266 {
267  TOOL_ACTION* action = m_actionMgr->FindAction( aActionName );
268 
269  if( !action )
270  {
271  wxASSERT_MSG( false, wxString::Format( wxT( "Could not find action %s." ), aActionName ) );
272  return false;
273  }
274 
275  RunAction( *action, aNow, aParam );
276 
277  return false;
278 }
ACTION_MANAGER * m_actionMgr
Instance of ACTION_MANAGER that handles TOOL_ACTIONs.
Definition: tool_manager.h:529
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:109
TOOL_ACTION * FindAction(const std::string &aActionName) const
Function FindAction() Finds an action with a given name (if there is one available).
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
TOOL_ACTION.
Definition: tool_action.h:46

References ACTION_MANAGER::FindAction(), Format(), m_actionMgr, and RunAction().

◆ RunAction() [3/6]

bool TOOL_MANAGER::RunAction ( const std::string &  aActionName,
bool  aNow = false 
)
inline

Definition at line 116 of file tool_manager.h.

117  {
118  return RunAction( aActionName, aNow, (void*) NULL );
119  }
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:109
#define NULL

References NULL, and RunAction().

◆ RunAction() [4/6]

template<typename T >
bool TOOL_MANAGER::RunAction ( const TOOL_ACTION aAction,
bool  aNow = false,
aParam = NULL 
)
inline

Function RunAction() Runs the specified action.

This function will only return if the action has been handled when the action is run immediately (aNow = true), otherwise it will always return false.

Parameters
aActionis the action to be invoked.
aNowdecides if the action has to be run immediately or after the current coroutine is preemptied.
aParamis an optional parameter that might be used by the invoked action. Its meaning depends on the action.
Returns
True if the action was handled immediately

Definition at line 137 of file tool_manager.h.

138  {
139  return RunAction( aAction, aNow, reinterpret_cast<void*>( aParam ) );
140  }
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:109

References RunAction().

◆ RunAction() [5/6]

bool TOOL_MANAGER::RunAction ( const TOOL_ACTION aAction,
bool  aNow,
void *  aParam 
)

Definition at line 299 of file tool_manager.cpp.

300 {
301  bool handled = false;
302  TOOL_EVENT event = aAction.MakeEvent();
303 
304  if( event.Category() == TC_COMMAND )
306 
307  // Allow to override the action parameter
308  if( aParam )
309  event.SetParameter( aParam );
310 
311  if( aNow )
312  {
313  TOOL_STATE* current = m_activeState;
314  handled = processEvent( event );
315  setActiveState( current );
316  UpdateUI( event );
317  }
318  else
319  {
320  PostEvent( event );
321  }
322 
323  return handled;
324 }
VECTOR2D GetCursorPosition()
void UpdateUI(const TOOL_EVENT &aEvent)
Updates the status bar and synchronizes toolbars.
bool processEvent(const TOOL_EVENT &aEvent)
Main function for event processing.
void SetMousePosition(const VECTOR2D &aP)
Definition: tool_event.h:468
void setActiveState(TOOL_STATE *aState)
Saves the previous active state and sets a new one.
TOOL_EVENT.
Definition: tool_event.h:171
TOOL_STATE * m_activeState
Pointer to the state object corresponding to the currently executed tool.
Definition: tool_manager.h:554
TOOL_EVENT MakeEvent() const
Function MakeEvent() Returns the event associated with the action (i.e.
Definition: tool_action.h:107
void PostEvent(const TOOL_EVENT &aEvent)
Puts an event to the event queue to be processed at the end of event processing cycle.
Definition: tool_manager.h:237

References GetCursorPosition(), m_activeState, TOOL_ACTION::MakeEvent(), PostEvent(), processEvent(), setActiveState(), TOOL_EVENT::SetMousePosition(), TC_COMMAND, and UpdateUI().

◆ RunAction() [6/6]

bool TOOL_MANAGER::RunAction ( const TOOL_ACTION aAction,
bool  aNow = false 
)
inline

Definition at line 144 of file tool_manager.h.

145  {
146  return RunAction( aAction, aNow, (void*) NULL );
147  }
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:109
#define NULL

References NULL, and RunAction().

◆ RunMainStack()

void TOOL_MANAGER::RunMainStack ( TOOL_BASE aTool,
std::function< void()>  aFunc 
)

Definition at line 541 of file tool_manager.cpp.

542 {
543  TOOL_STATE* st = m_toolState[aTool];
544  setActiveState( st );
545  st->cofunc->RunMainStack( std::move( aFunc ) );
546 }
void setActiveState(TOOL_STATE *aState)
Saves the previous active state and sets a new one.
TOOL_STATE_MAP m_toolState
Index of registered tools current states, associated by tools' objects.
Definition: tool_manager.h:514

References TOOL_MANAGER::TOOL_STATE::cofunc, m_toolState, COROUTINE< ReturnType, ArgType >::RunMainStack(), and setActiveState().

Referenced by TOOL_INTERACTIVE::RunMainStack().

◆ runTool() [1/3]

bool TOOL_MANAGER::runTool ( TOOL_ID  aToolId)
private

Function runTool() Makes a tool active, so it can receive events and react to them.

Activated tool is pushed on the active tools stack, so the last activated tool receives events first.

Parameters
aToolIdis the ID number of tool to be run.

Definition at line 368 of file tool_manager.cpp.

369 {
370  TOOL_BASE* tool = FindTool( aToolId );
371 
372  if( tool && tool->GetType() == INTERACTIVE )
373  return runTool( tool );
374 
375  return false; // there is no tool with the given id
376 }
TOOL_TYPE GetType() const
Function GetType() Returns the type of the tool.
Definition: tool_base.h:110
TOOL_BASE * FindTool(int aId) const
Function FindTool() Searches for a tool with given ID.
bool runTool(TOOL_ID aToolId)
Function runTool() Makes a tool active, so it can receive events and react to them.
Tool that interacts with the user
Definition: tool_base.h:49
TOOL_BASE.
Definition: tool_base.h:67

References FindTool(), TOOL_BASE::GetType(), and INTERACTIVE.

Referenced by dispatchActivation(), and runTool().

◆ runTool() [2/3]

bool TOOL_MANAGER::runTool ( const std::string &  aName)
private

Function runTool() Makes a tool active, so it can receive events and react to them.

Activated tool is pushed on the active tools stack, so the last activated tool receives events first.

Parameters
aNameis the name of tool to be run.

Definition at line 379 of file tool_manager.cpp.

380 {
381  TOOL_BASE* tool = FindTool( aToolName );
382 
383  if( tool && tool->GetType() == INTERACTIVE )
384  return runTool( tool );
385 
386  return false; // there is no tool with the given name
387 }
TOOL_TYPE GetType() const
Function GetType() Returns the type of the tool.
Definition: tool_base.h:110
TOOL_BASE * FindTool(int aId) const
Function FindTool() Searches for a tool with given ID.
bool runTool(TOOL_ID aToolId)
Function runTool() Makes a tool active, so it can receive events and react to them.
Tool that interacts with the user
Definition: tool_base.h:49
TOOL_BASE.
Definition: tool_base.h:67

References FindTool(), TOOL_BASE::GetType(), INTERACTIVE, and runTool().

◆ runTool() [3/3]

bool TOOL_MANAGER::runTool ( TOOL_BASE aTool)
private

Function runTool() Makes a tool active, so it can receive events and react to them.

Activated tool is pushed on the active tools stack, so the last activated tool receives events first.

Parameters
aToolis the tool to be run.

Definition at line 390 of file tool_manager.cpp.

391 {
392  wxASSERT( aTool != NULL );
393 
394  if( !isRegistered( aTool ) )
395  {
396  wxASSERT_MSG( false, wxT( "You cannot run unregistered tools" ) );
397  return false;
398  }
399 
400  TOOL_ID id = aTool->GetId();
401 
402  if( aTool->GetType() == INTERACTIVE )
403  static_cast<TOOL_INTERACTIVE*>( aTool )->resetTransitions();
404 
405  // If the tool is already active, bring it to the top of the active tools stack
406  if( isActive( aTool ) && m_activeTools.size() > 1 )
407  {
408  auto it = std::find( m_activeTools.begin(), m_activeTools.end(), id );
409 
410  if( it != m_activeTools.end() )
411  {
412  if( it != m_activeTools.begin() )
413  {
414  m_activeTools.erase( it );
415  m_activeTools.push_front( id );
416  }
417 
418  return false;
419  }
420  }
421 
423  aTool->Reset( TOOL_INTERACTIVE::RUN );
424 
425  // Add the tool on the front of the processing queue (it gets events first)
426  m_activeTools.push_front( id );
427 
428  return true;
429 }
TOOL_TYPE GetType() const
Function GetType() Returns the type of the tool.
Definition: tool_base.h:110
ID_STATE_MAP m_toolIdIndex
Index of the registered tools current states, associated by tools' ID numbers.
Definition: tool_manager.h:520
TOOL_ID GetId() const
Function GetId() Returns the unique identifier of the tool.
Definition: tool_base.h:121
Tool is invoked after being inactive.
Definition: tool_base.h:81
virtual void Reset(RESET_REASON aReason)=0
Function Reset() Brings the tool to a known, initial state.
int TOOL_ID
Unique identifier for tools.
Definition: tool_base.h:56
Tool that interacts with the user
Definition: tool_base.h:49
#define NULL
void setActiveState(TOOL_STATE *aState)
Saves the previous active state and sets a new one.
bool isActive(TOOL_BASE *aTool)
Function isActive() Returns information about a tool activation status.
bool isRegistered(TOOL_BASE *aTool) const
Function isRegistered() Returns information about a tool registration status.
Definition: tool_manager.h:475
ID_LIST m_activeTools
Stack of the active tools.
Definition: tool_manager.h:526

References TOOL_BASE::GetId(), TOOL_BASE::GetType(), INTERACTIVE, isActive(), isRegistered(), m_activeTools, m_toolIdIndex, NULL, TOOL_BASE::Reset(), TOOL_BASE::RUN, and setActiveState().

◆ SaveClipboard()

bool TOOL_MANAGER::SaveClipboard ( const std::string &  aText)

Stores an information to the system clipboard.

Parameters
aTextis the information to be stored.
Returns
False if error occurred.

Definition at line 880 of file tool_manager.cpp.

881 {
882  if( wxTheClipboard->Open() )
883  {
884  wxTheClipboard->SetData( new wxTextDataObject( wxString( aText.c_str(), wxConvUTF8 ) ) );
885  wxTheClipboard->Close();
886 
887  return true;
888  }
889 
890  return false;
891 }

Referenced by LIB_EDIT_TOOL::Copy(), and SCH_EDITOR_CONTROL::doCopy().

◆ saveViewControls()

void TOOL_MANAGER::saveViewControls ( TOOL_STATE aState)
private

Function saveViewControls() Saves the VIEW_CONTROLS settings to the tool state object.

If VIEW_CONTROLS settings are affected by TOOL_MANAGER, the original settings are saved.

Definition at line 952 of file tool_manager.cpp.

953 {
954  aState->vcSettings = m_viewControls->GetSettings();
955 
956  if( m_menuActive )
957  {
958  // Context menu is active, so the cursor settings are overridden (see DispatchContextMenu())
959  auto it = m_cursorSettings.find( aState->theTool->GetId() );
960 
961  if( it != m_cursorSettings.end() )
962  {
964 
965  // Tool has overridden the cursor position, so store the new settings
967  {
968  if( !curr.m_forceCursorPosition )
969  it->second = NULLOPT;
970  else
971  it->second = curr.m_forcedPosition;
972  }
973  else
974  {
975  OPT<VECTOR2D> cursor = it->second;
976 
977  if( cursor )
978  {
979  aState->vcSettings.m_forceCursorPosition = true;
980  aState->vcSettings.m_forcedPosition = *cursor;
981  }
982  else
983  {
984  aState->vcSettings.m_forceCursorPosition = false;
985  }
986  }
987  }
988  }
989 }
bool m_menuActive
Flag indicating whether a context menu is currently displayed.
Definition: tool_manager.h:548
VECTOR2D m_menuCursor
Right click context menu position.
Definition: tool_manager.h:543
std::map< TOOL_ID, OPT< VECTOR2D > > m_cursorSettings
Original cursor position, if overridden by the context menu handler.
Definition: tool_manager.h:532
VECTOR2D m_forcedPosition
Forced cursor position (world coordinates)
Definition: view_controls.h:58
const VC_SETTINGS & GetSettings() const
Returns the current VIEW_CONTROLS settings
const auto NULLOPT
Definition: optional.h:9
bool m_forceCursorPosition
Is the forced cursor position enabled
Definition: view_controls.h:61
Structure to keep VIEW_CONTROLS settings for easy store/restore operations
Definition: view_controls.h:44
KIGFX::VIEW_CONTROLS * m_viewControls
Definition: tool_manager.h:536
boost::optional< T > OPT
Definition: optional.h:7

References TOOL_BASE::GetId(), KIGFX::VIEW_CONTROLS::GetSettings(), m_cursorSettings, KIGFX::VC_SETTINGS::m_forceCursorPosition, KIGFX::VC_SETTINGS::m_forcedPosition, m_menuActive, m_menuCursor, m_viewControls, NULLOPT, TOOL_MANAGER::TOOL_STATE::theTool, and TOOL_MANAGER::TOOL_STATE::vcSettings.

Referenced by setActiveState().

◆ ScheduleContextMenu()

void TOOL_MANAGER::ScheduleContextMenu ( TOOL_BASE aTool,
ACTION_MENU aMenu,
CONTEXT_MENU_TRIGGER  aTrigger 
)

Sets behaviour of the tool's context popup menu.

Parameters
aTool- the parent tool
aMenu- the menu structure, defined by the tool
aTrigger- when the menu is activated: CMENU_NOW: opens the menu right now CMENU_BUTTON: opens the menu when RMB is pressed CMENU_OFF: menu is disabled. May be called from a coroutine context.

Definition at line 870 of file tool_manager.cpp.

872 {
873  TOOL_STATE* st = m_toolState[aTool];
874 
875  st->contextMenu = aMenu;
876  st->contextMenuTrigger = aTrigger;
877 }
TOOL_STATE_MAP m_toolState
Index of registered tools current states, associated by tools' objects.
Definition: tool_manager.h:514

References TOOL_MANAGER::TOOL_STATE::contextMenu, TOOL_MANAGER::TOOL_STATE::contextMenuTrigger, and m_toolState.

Referenced by TOOL_INTERACTIVE::SetContextMenu().

◆ ScheduleNextState()

void TOOL_MANAGER::ScheduleNextState ( TOOL_BASE aTool,
TOOL_STATE_FUNC aHandler,
const TOOL_EVENT_LIST aConditions 
)

Defines a state transition - the events that cause a given handler method in the tool to be called.

Called by TOOL_INTERACTIVE::Go(). May be called from a coroutine context.

Definition at line 526 of file tool_manager.cpp.

528 {
529  TOOL_STATE* st = m_toolState[aTool];
530 
531  st->transitions.emplace_back( TRANSITION( aConditions, aHandler ) );
532 }
TOOL_STATE_MAP m_toolState
Index of registered tools current states, associated by tools' objects.
Definition: tool_manager.h:514
std::pair< TOOL_EVENT_LIST, TOOL_STATE_FUNC > TRANSITION
Definition: tool_manager.h:396

References m_toolState, and TOOL_MANAGER::TOOL_STATE::transitions.

Referenced by TOOL_INTERACTIVE::goInternal().

◆ ScheduleWait()

TOOL_EVENT * TOOL_MANAGER::ScheduleWait ( TOOL_BASE aTool,
const TOOL_EVENT_LIST aConditions 
)

Pauses execution of a given tool until one or more events matching aConditions arrives.

The pause/resume operation is done through COROUTINE object. Called only from coroutines.

Definition at line 549 of file tool_manager.cpp.

550 {
551  TOOL_STATE* st = m_toolState[aTool];
552 
553  wxASSERT( !st->pendingWait ); // everything collapses on two KiYield() in a row
554 
555  // indicate to the manager that we are going to sleep and we shall be
556  // woken up when an event matching aConditions arrive
557  st->pendingWait = true;
558  st->waitEvents = aConditions;
559 
560  // switch context back to event dispatcher loop
561  st->cofunc->KiYield();
562 
563  return &st->wakeupEvent;
564 }
TOOL_STATE_MAP m_toolState
Index of registered tools current states, associated by tools' objects.
Definition: tool_manager.h:514

References TOOL_MANAGER::TOOL_STATE::cofunc, COROUTINE< ReturnType, ArgType >::KiYield(), m_toolState, TOOL_MANAGER::TOOL_STATE::pendingWait, TOOL_MANAGER::TOOL_STATE::waitEvents, and TOOL_MANAGER::TOOL_STATE::wakeupEvent.

Referenced by TOOL_INTERACTIVE::Wait().

◆ setActiveState()

void TOOL_MANAGER::setActiveState ( TOOL_STATE aState)
private

Saves the previous active state and sets a new one.

Parameters
aStateis the new active state. Might be null to indicate there is no new active state.

Definition at line 1031 of file tool_manager.cpp.

1032 {
1033  if( m_activeState && m_viewControls )
1035 
1036  m_activeState = aState;
1037 
1038  if( m_activeState && m_viewControls )
1039  applyViewControls( aState );
1040 }
void applyViewControls(TOOL_STATE *aState)
Function applyViewControls() Applies VIEW_CONTROLS settings stored in a TOOL_STATE object.
KIGFX::VIEW_CONTROLS * m_viewControls
Definition: tool_manager.h:536
TOOL_STATE * m_activeState
Pointer to the state object corresponding to the currently executed tool.
Definition: tool_manager.h:554
void saveViewControls(TOOL_STATE *aState)
Function saveViewControls() Saves the VIEW_CONTROLS settings to the tool state object.

References applyViewControls(), m_activeState, m_viewControls, and saveViewControls().

Referenced by dispatchInternal(), finishTool(), InitTools(), invokeTool(), ProcessEvent(), ResetTools(), RunAction(), RunMainStack(), and runTool().

◆ SetEnvironment()

void TOOL_MANAGER::SetEnvironment ( EDA_ITEM aModel,
KIGFX::VIEW aView,
KIGFX::VIEW_CONTROLS aViewControls,
EDA_BASE_FRAME aFrame 
)

Sets the work environment (model, view, view controls and the parent window).

These are made available to the tool. Called by the parent frame when it is set up.

Definition at line 932 of file tool_manager.cpp.

934 {
935  m_model = aModel;
936  m_view = aView;
937  m_viewControls = aViewControls;
938  m_frame = aFrame;
939 }
EDA_BASE_FRAME * m_frame
Definition: tool_manager.h:537
EDA_ITEM * m_model
Definition: tool_manager.h:534
KIGFX::VIEW_CONTROLS * m_viewControls
Definition: tool_manager.h:536
KIGFX::VIEW * m_view
Definition: tool_manager.h:535

References m_frame, m_model, m_view, and m_viewControls.

Referenced by PCB_BASE_FRAME::ActivateGalCanvas(), GERBVIEW_FRAME::ActivateGalCanvas(), DISPLAY_FOOTPRINTS_FRAME::DISPLAY_FOOTPRINTS_FRAME(), EDA_3D_VIEWER::EDA_3D_VIEWER(), EVT_GRID_CMD_CELL_CHANGED(), EVT_MENU_RANGE(), FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME(), PCB_BASE_EDIT_FRAME::SetBoard(), SCH_BASE_FRAME::SetScreen(), PCB_EDIT_FRAME::setupTools(), FOOTPRINT_EDIT_FRAME::setupTools(), LIB_VIEW_FRAME::setupTools(), GERBVIEW_FRAME::setupTools(), LIB_EDIT_FRAME::setupTools(), CVPCB_MAINFRAME::setupTools(), and SCH_EDIT_FRAME::setupTools().

◆ UpdateUI()

void TOOL_MANAGER::UpdateUI ( const TOOL_EVENT aEvent)

Updates the status bar and synchronizes toolbars.

Definition at line 1050 of file tool_manager.cpp.

1051 {
1052  EDA_BASE_FRAME* frame = GetEditFrame();
1053 
1054  if( frame )
1055  {
1056  frame->UpdateStatusBar();
1057 
1058  if( !aEvent.IsMotion() && !aEvent.IsDrag() )
1059  frame->SyncToolbars();
1060  }
1061 }
EDA_BASE_FRAME * GetEditFrame() const
Definition: tool_manager.h:268
bool IsMotion() const
Definition: tool_event.h:306
virtual void SyncToolbars()
Update the toolbars (mostly settings/check buttons/checkboxes) with the current controller state.
virtual void UpdateStatusBar()
Update the status bar information.
bool IsDrag(int aButtonMask=BUT_ANY) const
Definition: tool_event.h:296
The base frame for deriving all KiCad main window classes.

References GetEditFrame(), TOOL_EVENT::IsDrag(), TOOL_EVENT::IsMotion(), EDA_BASE_FRAME::SyncToolbars(), and EDA_BASE_FRAME::UpdateStatusBar().

Referenced by ProcessEvent(), and RunAction().

◆ VetoContextMenuMouseWarp()

void TOOL_MANAGER::VetoContextMenuMouseWarp ( )
inline

Disables mouse warping after the current context menu is closed.

Must be called before invoking each context menu. It's a good idea to call this from non-modal dialogs (e.g. DRC window).

Definition at line 384 of file tool_manager.h.

385  {
387  }
bool m_warpMouseAfterContextMenu
Definition: tool_manager.h:545

References m_warpMouseAfterContextMenu.

Referenced by DIALOG_SHIM::DIALOG_SHIM(), SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), DIALOG_DRC_CONTROL::doSelectionMenu(), LIB_DRAWING_TOOLS::DrawShape(), SCH_DRAWING_TOOLS::DrawSheet(), LIB_TREE::onContextMenu(), SCH_DRAWING_TOOLS::PlaceComponent(), SCH_DRAWING_TOOLS::PlaceImage(), LIB_DRAWING_TOOLS::TwoClickPlace(), and SCH_DRAWING_TOOLS::TwoClickPlace().

Member Data Documentation

◆ m_actionMgr

ACTION_MANAGER* TOOL_MANAGER::m_actionMgr
private

Instance of ACTION_MANAGER that handles TOOL_ACTIONs.

Definition at line 529 of file tool_manager.h.

Referenced by dispatchHotKey(), GetActionManager(), GetActions(), GetHotKey(), InitTools(), RunAction(), TOOL_MANAGER(), and ~TOOL_MANAGER().

◆ m_activeState

TOOL_STATE* TOOL_MANAGER::m_activeState
private

Pointer to the state object corresponding to the currently executed tool.

Definition at line 554 of file tool_manager.h.

Referenced by finishTool(), RunAction(), and setActiveState().

◆ m_activeTools

ID_LIST TOOL_MANAGER::m_activeTools
private

Stack of the active tools.

Definition at line 526 of file tool_manager.h.

Referenced by DispatchContextMenu(), dispatchInternal(), finishTool(), GetCurrentToolId(), GetPriority(), isActive(), and runTool().

◆ m_cursorSettings

std::map<TOOL_ID, OPT<VECTOR2D> > TOOL_MANAGER::m_cursorSettings
private

Original cursor position, if overridden by the context menu handler.

Definition at line 532 of file tool_manager.h.

Referenced by DispatchContextMenu(), and saveViewControls().

◆ m_eventQueue

std::list<TOOL_EVENT> TOOL_MANAGER::m_eventQueue
private

Queue that stores events to be processed at the end of the event processing cycle.

Definition at line 540 of file tool_manager.h.

Referenced by PostEvent(), and processEvent().

◆ m_frame

EDA_BASE_FRAME* TOOL_MANAGER::m_frame
private

Definition at line 537 of file tool_manager.h.

Referenced by DispatchContextMenu(), GetEditFrame(), and SetEnvironment().

◆ m_menuActive

bool TOOL_MANAGER::m_menuActive
private

Flag indicating whether a context menu is currently displayed.

Definition at line 548 of file tool_manager.h.

Referenced by DispatchContextMenu(), IsContextMenuActive(), and saveViewControls().

◆ m_menuCursor

VECTOR2D TOOL_MANAGER::m_menuCursor
private

Right click context menu position.

Definition at line 543 of file tool_manager.h.

Referenced by DispatchContextMenu(), and saveViewControls().

◆ m_menuOwner

TOOL_ID TOOL_MANAGER::m_menuOwner
private

Tool currently displaying a popup menu. It is negative when there is no menu displayed.

Definition at line 551 of file tool_manager.h.

Referenced by DispatchContextMenu(), and dispatchInternal().

◆ m_model

EDA_ITEM* TOOL_MANAGER::m_model
private

Definition at line 534 of file tool_manager.h.

Referenced by GetModel(), and SetEnvironment().

◆ m_toolIdIndex

ID_STATE_MAP TOOL_MANAGER::m_toolIdIndex
private

Index of the registered tools current states, associated by tools' ID numbers.

Definition at line 520 of file tool_manager.h.

Referenced by DispatchContextMenu(), dispatchInternal(), FindTool(), GetCurrentToolState(), InitTools(), IsToolActive(), RegisterTool(), and runTool().

◆ m_toolNameIndex

NAME_STATE_MAP TOOL_MANAGER::m_toolNameIndex
private

Index of the registered tools current states, associated by tools' names.

Definition at line 517 of file tool_manager.h.

Referenced by dispatchActivation(), FindTool(), InitTools(), and RegisterTool().

◆ m_toolState

TOOL_STATE_MAP TOOL_MANAGER::m_toolState
private

Index of registered tools current states, associated by tools' objects.

Definition at line 514 of file tool_manager.h.

Referenced by ClearTransitions(), dispatchInternal(), InitTools(), isRegistered(), RegisterTool(), ResetTools(), RunMainStack(), ScheduleContextMenu(), ScheduleNextState(), ScheduleWait(), and ~TOOL_MANAGER().

◆ m_toolTypes

std::map<const char*, TOOL_BASE*> TOOL_MANAGER::m_toolTypes
private

Index of the registered tools to easily lookup by their type.

Definition at line 523 of file tool_manager.h.

Referenced by GetTool(), InitTools(), and RegisterTool().

◆ m_view

KIGFX::VIEW* TOOL_MANAGER::m_view
private

Definition at line 535 of file tool_manager.h.

Referenced by GetView(), ProcessEvent(), and SetEnvironment().

◆ m_viewControls

◆ m_warpMouseAfterContextMenu

bool TOOL_MANAGER::m_warpMouseAfterContextMenu
private

Definition at line 545 of file tool_manager.h.

Referenced by DispatchContextMenu(), and VetoContextMenuMouseWarp().


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