KiCad PCB EDA Suite
TOOL_DISPATCHER Class Reference

TOOL_DISPATCHER. More...

#include <tool_dispatcher.h>

Inheritance diagram for TOOL_DISPATCHER:

Classes

struct  BUTTON_STATE
 

Stores information about a mouse button state

More...
 

Public Member Functions

 TOOL_DISPATCHER (TOOL_MANAGER *aToolMgr, ACTIONS *aActions)
 Constructor. More...
 
virtual ~TOOL_DISPATCHER ()
 
virtual void ResetState ()
 Function ResetState() Brings the dispatcher to its initial state. More...
 
virtual void DispatchWxEvent (wxEvent &aEvent)
 Function DispatchWxEvent() Processes wxEvents (mostly UI events), translates them to TOOL_EVENTs, and makes tools handle those. More...
 
virtual void DispatchWxCommand (wxCommandEvent &aEvent)
 Function DispatchWxCommand() Processes wxCommands (mostly menu related events) and runs appropriate actions (eg. More...
 

Private Member Functions

bool handleMouseButton (wxEvent &aEvent, int aIndex, bool aMotion)
 

Handles mouse related events (click, motion, dragging).

More...
 
KIGFX::VIEWgetView ()
 

Returns the instance of VIEW, used by the application.

More...
 

Static Private Member Functions

static int decodeModifiers (const wxKeyboardState *aState)
 

Saves the state of key modifiers (Alt, Ctrl and so on).

More...
 

Private Attributes

VECTOR2D m_lastMousePos
 

The last mouse cursor position (in world coordinates).

More...
 
std::vector< BUTTON_STATE * > m_buttons
 

State of mouse buttons.

More...
 
TOOL_MANAGERm_toolMgr
 

Instance of tool manager that cooperates with the dispatcher.

More...
 
ACTIONSm_actions
 

Instance of an actions list that handles legacy action translation

More...
 

Static Private Attributes

static const int MouseButtonCount = 3
 

Number of mouse buttons that is handled in events.

More...
 
static const int DragTimeThreshold = 300
 

The time threshold for a mouse button press that distinguishes between a single mouse click and a beginning of drag event (expressed in milliseconds).

More...
 
static const int DragDistanceThreshold = 8
 

The distance threshold for mouse cursor that disinguishes between a single mouse click and a beginning of drag event (expressed in screen pixels).

More...
 

Detailed Description

TOOL_DISPATCHER.

  • takes wx events,
  • fixes all wx quirks (mouse warping, panning, ordering problems, etc)
  • translates coordinates to world space
  • low-level input conditioning (drag/click threshold), updating mouse position during view auto-scroll/pan.
  • issues TOOL_EVENTS to the tool manager

Definition at line 51 of file tool_dispatcher.h.

Constructor & Destructor Documentation

◆ TOOL_DISPATCHER()

TOOL_DISPATCHER::TOOL_DISPATCHER ( TOOL_MANAGER aToolMgr,
ACTIONS aActions 
)

Constructor.

Parameters
aToolMgrtool manager instance the events will be sent to
aActionsACTIONS subclass instance for ACTIONS::TranslateLegacyId()

Definition at line 119 of file tool_dispatcher.cpp.

119  :
120  m_toolMgr( aToolMgr ),
121  m_actions( aActions )
122 {
123  m_buttons.push_back( new BUTTON_STATE( BUT_LEFT, wxEVT_LEFT_DOWN,
124  wxEVT_LEFT_UP, wxEVT_LEFT_DCLICK ) );
125  m_buttons.push_back( new BUTTON_STATE( BUT_RIGHT, wxEVT_RIGHT_DOWN,
126  wxEVT_RIGHT_UP, wxEVT_RIGHT_DCLICK ) );
127  m_buttons.push_back( new BUTTON_STATE( BUT_MIDDLE, wxEVT_MIDDLE_DOWN,
128  wxEVT_MIDDLE_UP, wxEVT_MIDDLE_DCLICK ) );
129 
130  ResetState();
131 }
ACTIONS * m_actions
Instance of an actions list that handles legacy action translation
virtual void ResetState()
Function ResetState() Brings the dispatcher to its initial state.
std::vector< BUTTON_STATE * > m_buttons
State of mouse buttons.
TOOL_MANAGER * m_toolMgr
Instance of tool manager that cooperates with the dispatcher.

References BUT_LEFT, BUT_MIDDLE, BUT_RIGHT, m_buttons, and ResetState().

◆ ~TOOL_DISPATCHER()

TOOL_DISPATCHER::~TOOL_DISPATCHER ( )
virtual

Definition at line 134 of file tool_dispatcher.cpp.

135 {
136  for( BUTTON_STATE* st : m_buttons )
137  delete st;
138 }
std::vector< BUTTON_STATE * > m_buttons
State of mouse buttons.

References m_buttons.

Member Function Documentation

◆ decodeModifiers()

static int TOOL_DISPATCHER::decodeModifiers ( const wxKeyboardState *  aState)
inlinestaticprivate

Saves the state of key modifiers (Alt, Ctrl and so on).

Definition at line 102 of file tool_dispatcher.h.

103  {
104  int mods = 0;
105 
106  if( aState->ControlDown() )
107  mods |= MD_CTRL;
108 
109  if( aState->AltDown() )
110  mods |= MD_ALT;
111 
112  if( aState->ShiftDown() )
113  mods |= MD_SHIFT;
114 
115  return mods;
116  }

References MD_ALT, MD_CTRL, and MD_SHIFT.

Referenced by DispatchWxEvent(), and handleMouseButton().

◆ DispatchWxCommand()

void TOOL_DISPATCHER::DispatchWxCommand ( wxCommandEvent &  aEvent)
virtual

Function DispatchWxCommand() Processes wxCommands (mostly menu related events) and runs appropriate actions (eg.

run the specified tool).

Parameters
aEventis the wxCommandEvent to be processed.

Definition at line 498 of file tool_dispatcher.cpp.

499 {
500  OPT<TOOL_EVENT> evt = m_actions->TranslateLegacyId( aEvent.GetId() );
501 
502  if( evt )
503  {
504  wxLogTrace( kicadTraceToolStack, "TOOL_DISPATCHER::DispatchWxCommand %s", evt->Format() );
505 
506  m_toolMgr->ProcessEvent( *evt );
507  }
508  else
509  aEvent.Skip();
510 }
ACTIONS * m_actions
Instance of an actions list that handles legacy action translation
virtual OPT< TOOL_EVENT > TranslateLegacyId(int aId)=0
Function TranslateLegacyId() Translates legacy tool ids to the corresponding TOOL_ACTION name.
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
const wxChar *const kicadTraceToolStack
Flag to enable tracing of the tool handling stack.
boost::optional< T > OPT
Definition: optional.h:7
TOOL_MANAGER * m_toolMgr
Instance of tool manager that cooperates with the dispatcher.

References kicadTraceToolStack, m_actions, m_toolMgr, TOOL_MANAGER::ProcessEvent(), and ACTIONS::TranslateLegacyId().

Referenced by EDA_DRAW_PANEL_GAL::SetEventDispatcher(), and CVPCB_MAINFRAME::setupEventHandlers().

◆ DispatchWxEvent()

void TOOL_DISPATCHER::DispatchWxEvent ( wxEvent &  aEvent)
virtual

Function DispatchWxEvent() Processes wxEvents (mostly UI events), translates them to TOOL_EVENTs, and makes tools handle those.

Parameters
aEventis the wxWidgets event to be processed.

Definition at line 327 of file tool_dispatcher.cpp.

328 {
329  bool motion = false, buttonEvents = false;
330  OPT<TOOL_EVENT> evt;
331  int key = 0; // key = 0 if the event is not a key event
332  bool keyIsSpecial = false; // True if the key is a special key code
333 
334  int type = aEvent.GetEventType();
335 
336  // Sometimes there is no window that has the focus (it happens when another PCB_BASE_FRAME
337  // is opened and is iconized on Windows).
338  // In this case, give the focus to the parent frame (GAL canvas itself does not accept the
339  // focus when iconized for some obscure reason)
340  if( wxWindow::FindFocus() == nullptr )
341  m_toolMgr->GetEditFrame()->SetFocus();
342 
343  // Mouse handling
344  // Note: wxEVT_LEFT_DOWN event must always be skipped.
345  if( type == wxEVT_MOTION || type == wxEVT_MOUSEWHEEL ||
346 #if wxCHECK_VERSION( 3, 1, 0 ) || defined( USE_OSX_MAGNIFY_EVENT )
347  type == wxEVT_MAGNIFY ||
348 #endif
349  type == wxEVT_LEFT_DOWN || type == wxEVT_LEFT_UP ||
350  type == wxEVT_MIDDLE_DOWN || type == wxEVT_MIDDLE_UP ||
351  type == wxEVT_RIGHT_DOWN || type == wxEVT_RIGHT_UP ||
352  type == wxEVT_LEFT_DCLICK || type == wxEVT_MIDDLE_DCLICK || type == wxEVT_RIGHT_DCLICK ||
353  // Event issued when mouse retains position in screen coordinates,
354  // but changes in world coordinates (e.g. autopanning)
356  {
357  wxMouseEvent* me = static_cast<wxMouseEvent*>( &aEvent );
358  int mods = decodeModifiers( me );
359 
361 
362  if( pos != m_lastMousePos )
363  {
364  motion = true;
365  m_lastMousePos = pos;
366  }
367 
368  for( unsigned int i = 0; i < m_buttons.size(); i++ )
369  buttonEvents |= handleMouseButton( aEvent, i, motion );
370 
371  if( !buttonEvents && motion )
372  {
373  evt = TOOL_EVENT( TC_MOUSE, TA_MOUSE_MOTION, mods );
374  evt->SetMousePosition( pos );
375  }
376 
377 #ifdef __APPLE__
378  // TODO That's a big ugly workaround, somehow DRAWPANEL_GAL loses focus
379  // after second LMB click and currently I have no means to do better debugging
380  if( type == wxEVT_LEFT_UP )
381  static_cast<EDA_DRAW_FRAME*>( m_toolMgr->GetEditFrame() )->GetCanvas()->SetFocus();
382 #endif /* __APPLE__ */
383  }
384  else if( type == wxEVT_CHAR_HOOK || type == wxEVT_CHAR )
385  {
386  wxKeyEvent* ke = static_cast<wxKeyEvent*>( &aEvent );
387  key = ke->GetKeyCode();
388  int unicode_key = ke->GetUnicodeKey();
389 
390  // This wxEVT_CHAR_HOOK event can be ignored: not useful in Kicad
391  if( isKeyModifierOnly( key ) )
392  {
393  aEvent.Skip();
394  return;
395  }
396 
397  wxLogTrace( kicadTraceKeyEvent, "TOOL_DISPATCHER::DispatchWxEvent %s", dump( *ke ) );
398 
399  // if the key event must be skipped, skip it here if the event is a wxEVT_CHAR_HOOK
400  // and do nothing.
401  keyIsSpecial = isKeySpecialCode( key );
402 
403  if( type == wxEVT_CHAR_HOOK )
404  key = translateSpecialCode( key );
405 
406  int mods = decodeModifiers( ke );
407 
408  if( mods & MD_CTRL )
409  {
410  // wxWidgets maps key codes related to Ctrl+letter handled by CHAR_EVT
411  // (http://docs.wxwidgets.org/trunk/classwx_key_event.html):
412  // char events for ASCII letters in this case carry codes corresponding to the ASCII
413  // value of Ctrl-Latter, i.e. 1 for Ctrl-A, 2 for Ctrl-B and so on until 26 for Ctrl-Z.
414  // They are remapped here to be more easy to handle in code
415  // Note also on OSX wxWidgets has a differnt behavior and the mapping is made
416  // only for ctrl+'A' to ctlr+'Z' (unicode code return 'A' to 'Z').
417  // Others OS return WXK_CONTROL_A to WXK_CONTROL_Z, and Ctrl+'M' returns the same code as
418  // the return key, so the remapping does not use the unicode key value.
419 #ifdef __APPLE__
420  if( unicode_key >= 'A' && unicode_key <= 'Z' && key >= WXK_CONTROL_A && key <= WXK_CONTROL_Z )
421 #else
422  (void) unicode_key; //not used: avoid compil warning
423 
424  if( key >= WXK_CONTROL_A && key <= WXK_CONTROL_Z )
425 #endif
426  key += 'A' - 1;
427  }
428 
429 #ifdef __APPLE__
430  if( mods & MD_ALT )
431  {
432  // OSX maps a bunch of commonly used extended-ASCII characters onto the keyboard
433  // using the ALT key. Since we use ALT for some of our hotkeys, we need to map back
434  // to the underlying keys. The kVK_ANSI_* values come from Apple and are said to be
435  // hardware independant.
436  switch( ke->GetRawKeyCode() )
437  {
438  case /* kVK_ANSI_1 */ 0x12: key = '1'; break;
439  case /* kVK_ANSI_2 */ 0x13: key = '2'; break;
440  case /* kVK_ANSI_3 */ 0x14: key = '3'; break;
441  case /* kVK_ANSI_4 */ 0x15: key = '4'; break;
442  case /* kVK_ANSI_6 */ 0x16: key = '6'; break;
443  case /* kVK_ANSI_5 */ 0x17: key = '5'; break;
444  case /* kVK_ANSI_Equal */ 0x18: key = '='; break;
445  case /* kVK_ANSI_9 */ 0x19: key = '9'; break;
446  case /* kVK_ANSI_7 */ 0x1A: key = '7'; break;
447  case /* kVK_ANSI_Minus */ 0x1B: key = '-'; break;
448  case /* kVK_ANSI_8 */ 0x1C: key = '8'; break;
449  case /* kVK_ANSI_0 */ 0x1D: key = '0'; break;
450  default: ;
451  }
452  }
453 #endif
454 
455  if( key == WXK_ESCAPE ) // ESC is the special key for canceling tools
457  else
458  evt = TOOL_EVENT( TC_KEYBOARD, TA_KEY_PRESSED, key | mods );
459  }
460 
461  bool handled = false;
462 
463  if( evt )
464  {
465  wxLogTrace( kicadTraceToolStack, "TOOL_DISPATCHER::DispatchWxEvent %s", evt->Format() );
466 
467  handled = m_toolMgr->ProcessEvent( *evt );
468 
469  // ESC is the special key for canceling tools, and is therefore seen as handled
470  if( key == WXK_ESCAPE )
471  handled = true;
472  }
473 
474  // pass the event to the GUI, it might still be interested in it
475  // Note wxEVT_CHAR_HOOK event is already skipped for special keys not used by KiCad
476  // and wxEVT_LEFT_DOWN must be always Skipped.
477  //
478  // On OS X, key events are always meant to be caught. An uncaught key event is assumed
479  // to be a user input error by OS X (as they are pressing keys in a context where nothing
480  // is there to catch the event). This annoyingly makes OS X beep and/or flash the screen
481  // in Pcbnew and the footprint editor any time a hotkey is used. The correct procedure is
482  // to NOT pass wxEVT_CHAR events to the GUI under OS X.
483  //
484  // On Windows, avoid to call wxEvent::Skip for special keys because some keys
485  // (PAGE_UP, PAGE_DOWN) have predefined actions (like move thumbtrack cursor), and we do
486  // not want these actions executed (most are handled by KiCad)
487 
488  if( !evt || type == wxEVT_LEFT_DOWN )
489  aEvent.Skip();
490 
491  // Not handled wxEVT_CHAR must be Skipped (sent to GUI).
492  // Otherwise accelerators and shortcuts in main menu or toolbars are not seen.
493  if( (type == wxEVT_CHAR || type == wxEVT_CHAR_HOOK) && !keyIsSpecial && !handled )
494  aEvent.Skip();
495 }
static int decodeModifiers(const wxKeyboardState *aState)
Saves the state of key modifiers (Alt, Ctrl and so on).
EDA_BASE_FRAME * GetEditFrame() const
Definition: tool_manager.h:268
virtual VECTOR2D GetMousePosition(bool aWorldCoordinates=true) const =0
Function GetMousePosition() Returns the current mouse pointer position.
static const wxEventType EVT_REFRESH_MOUSE
Event that forces mouse move event in the dispatcher (eg.
int translateSpecialCode(int aKeyCode)
static bool isKeyModifierOnly(int aKeyCode)
wxString dump(const wxArrayString &aArray)
Debug helper for printing wxArrayString contents.
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
bool isKeySpecialCode(int aKeyCode)
TOOL_EVENT.
Definition: tool_event.h:171
VECTOR2D m_lastMousePos
The last mouse cursor position (in world coordinates).
std::vector< BUTTON_STATE * > m_buttons
State of mouse buttons.
KIGFX::VIEW_CONTROLS * GetViewControls() const
Definition: tool_manager.h:255
const wxChar *const kicadTraceKeyEvent
Flag to enable wxKeyEvent debug tracing.
const wxChar *const kicadTraceToolStack
Flag to enable tracing of the tool handling stack.
boost::optional< T > OPT
Definition: optional.h:7
bool handleMouseButton(wxEvent &aEvent, int aIndex, bool aMotion)
Handles mouse related events (click, motion, dragging).
TOOL_MANAGER * m_toolMgr
Instance of tool manager that cooperates with the dispatcher.

References decodeModifiers(), dump(), KIGFX::WX_VIEW_CONTROLS::EVT_REFRESH_MOUSE, TOOL_MANAGER::GetEditFrame(), KIGFX::VIEW_CONTROLS::GetMousePosition(), TOOL_MANAGER::GetViewControls(), handleMouseButton(), isKeyModifierOnly(), isKeySpecialCode(), kicadTraceKeyEvent, kicadTraceToolStack, m_buttons, m_lastMousePos, m_toolMgr, MD_ALT, MD_CTRL, TOOL_MANAGER::ProcessEvent(), TA_CANCEL_TOOL, TA_KEY_PRESSED, TA_MOUSE_MOTION, TC_COMMAND, TC_KEYBOARD, TC_MOUSE, and translateSpecialCode().

Referenced by EDA_DRAW_PANEL_GAL::OnEvent(), and CVPCB_MAINFRAME::setupEventHandlers().

◆ getView()

KIGFX::VIEW * TOOL_DISPATCHER::getView ( )
private

Returns the instance of VIEW, used by the application.

Definition at line 148 of file tool_dispatcher.cpp.

149 {
150  return m_toolMgr->GetView();
151 }
KIGFX::VIEW * GetView() const
Definition: tool_manager.h:250
TOOL_MANAGER * m_toolMgr
Instance of tool manager that cooperates with the dispatcher.

References TOOL_MANAGER::GetView(), and m_toolMgr.

Referenced by handleMouseButton().

◆ handleMouseButton()

bool TOOL_DISPATCHER::handleMouseButton ( wxEvent &  aEvent,
int  aIndex,
bool  aMotion 
)
private

Handles mouse related events (click, motion, dragging).

Definition at line 154 of file tool_dispatcher.cpp.

155 {
156  BUTTON_STATE* st = m_buttons[aIndex];
157  wxEventType type = aEvent.GetEventType();
158  OPT<TOOL_EVENT> evt;
159  bool isClick = false;
160 
161 // bool up = type == st->upEvent;
162 // bool down = type == st->downEvent;
163  bool up = false, down = false;
164  bool dblClick = type == st->dblClickEvent;
165  bool state = st->GetState();
166 
167  if( !dblClick )
168  {
169  // Sometimes the dispatcher does not receive mouse button up event, so it stays
170  // in the dragging mode even if the mouse button is not held anymore
171  if( st->pressed && !state )
172  up = true;
173  // Don't apply same logic to down events as it kills touchpad tapping
174  else if( !st->pressed && type == st->downEvent )
175  down = true;
176  }
177 
178  int mods = decodeModifiers( static_cast<wxMouseEvent*>( &aEvent ) );
179  int args = st->button | mods;
180 
181  if( down ) // Handle mouse button press
182  {
183  st->downTimestamp = wxGetLocalTimeMillis();
184 
185  if( !st->pressed ) // save the drag origin on the first click only
186  st->dragOrigin = m_lastMousePos;
187 
188  st->downPosition = m_lastMousePos;
189  st->dragMaxDelta = 0;
190  st->pressed = true;
191  evt = TOOL_EVENT( TC_MOUSE, TA_MOUSE_DOWN, args );
192  }
193  else if( up ) // Handle mouse button release
194  {
195  st->pressed = false;
196 
197  if( st->dragging )
198  {
199  wxLongLong t = wxGetLocalTimeMillis();
200 
201  // Determine if it was just a single click or beginning of dragging
202  if( t - st->downTimestamp < DragTimeThreshold &&
203  st->dragMaxDelta < DragDistanceThreshold )
204  isClick = true;
205  else
206  evt = TOOL_EVENT( TC_MOUSE, TA_MOUSE_UP, args );
207  }
208  else
209  isClick = true;
210 
211  if( isClick )
212  evt = TOOL_EVENT( TC_MOUSE, TA_MOUSE_CLICK, args );
213 
214  st->dragging = false;
215  }
216  else if( dblClick )
217  {
218  evt = TOOL_EVENT( TC_MOUSE, TA_MOUSE_DBLCLICK, args );
219  }
220 
221  if( st->pressed && aMotion )
222  {
223  st->dragging = true;
224  double dragPixelDistance =
225  getView()->ToScreen( m_lastMousePos - st->dragOrigin, false ).EuclideanNorm();
226  st->dragMaxDelta = std::max( st->dragMaxDelta, dragPixelDistance );
227 
228  wxLongLong t = wxGetLocalTimeMillis();
229 
230  if( t - st->downTimestamp > DragTimeThreshold || st->dragMaxDelta > DragDistanceThreshold )
231  {
232  evt = TOOL_EVENT( TC_MOUSE, TA_MOUSE_DRAG, args );
233  evt->setMouseDragOrigin( st->dragOrigin );
234  evt->setMouseDelta( m_lastMousePos - st->dragOrigin );
235  }
236  }
237 
238  if( evt )
239  {
240  evt->SetMousePosition( isClick ? st->downPosition : m_lastMousePos );
241  m_toolMgr->ProcessEvent( *evt );
242 
243  return true;
244  }
245 
246  return false;
247 }
static int decodeModifiers(const wxKeyboardState *aState)
Saves the state of key modifiers (Alt, Ctrl and so on).
static const int DragDistanceThreshold
The distance threshold for mouse cursor that disinguishes between a single mouse click and a beginnin...
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
TOOL_EVENT.
Definition: tool_event.h:171
VECTOR2D m_lastMousePos
The last mouse cursor position (in world coordinates).
VECTOR2D ToScreen(const VECTOR2D &aCoord, bool aAbsolute=true) const
Function ToScreen() Converts a world space point/vector to a point/vector in screen space coordinates...
Definition: view.cpp:494
std::vector< BUTTON_STATE * > m_buttons
State of mouse buttons.
boost::optional< T > OPT
Definition: optional.h:7
T EuclideanNorm() const
Destructor.
Definition: vector2d.h:299
static const int DragTimeThreshold
The time threshold for a mouse button press that distinguishes between a single mouse click and a beg...
KIGFX::VIEW * getView()
Returns the instance of VIEW, used by the application.
TOOL_MANAGER * m_toolMgr
Instance of tool manager that cooperates with the dispatcher.

References TOOL_DISPATCHER::BUTTON_STATE::button, TOOL_DISPATCHER::BUTTON_STATE::dblClickEvent, decodeModifiers(), TOOL_DISPATCHER::BUTTON_STATE::downEvent, TOOL_DISPATCHER::BUTTON_STATE::downPosition, TOOL_DISPATCHER::BUTTON_STATE::downTimestamp, DragDistanceThreshold, TOOL_DISPATCHER::BUTTON_STATE::dragging, TOOL_DISPATCHER::BUTTON_STATE::dragMaxDelta, TOOL_DISPATCHER::BUTTON_STATE::dragOrigin, DragTimeThreshold, VECTOR2< T >::EuclideanNorm(), TOOL_DISPATCHER::BUTTON_STATE::GetState(), getView(), m_buttons, m_lastMousePos, m_toolMgr, TOOL_DISPATCHER::BUTTON_STATE::pressed, TOOL_MANAGER::ProcessEvent(), TA_MOUSE_CLICK, TA_MOUSE_DBLCLICK, TA_MOUSE_DOWN, TA_MOUSE_DRAG, TA_MOUSE_UP, TC_MOUSE, and KIGFX::VIEW::ToScreen().

Referenced by DispatchWxEvent().

◆ ResetState()

void TOOL_DISPATCHER::ResetState ( )
virtual

Function ResetState() Brings the dispatcher to its initial state.

Definition at line 141 of file tool_dispatcher.cpp.

142 {
143  for( BUTTON_STATE* st : m_buttons )
144  st->Reset();
145 }
std::vector< BUTTON_STATE * > m_buttons
State of mouse buttons.

References m_buttons.

Referenced by TOOL_DISPATCHER().

Member Data Documentation

◆ DragDistanceThreshold

const int TOOL_DISPATCHER::DragDistanceThreshold = 8
staticprivate

The distance threshold for mouse cursor that disinguishes between a single mouse click and a beginning of drag event (expressed in screen pixels).

Definition at line 96 of file tool_dispatcher.h.

Referenced by handleMouseButton().

◆ DragTimeThreshold

const int TOOL_DISPATCHER::DragTimeThreshold = 300
staticprivate

The time threshold for a mouse button press that distinguishes between a single mouse click and a beginning of drag event (expressed in milliseconds).

Definition at line 92 of file tool_dispatcher.h.

Referenced by handleMouseButton().

◆ m_actions

ACTIONS* TOOL_DISPATCHER::m_actions
private

Instance of an actions list that handles legacy action translation

Definition at line 134 of file tool_dispatcher.h.

Referenced by DispatchWxCommand().

◆ m_buttons

std::vector<BUTTON_STATE*> TOOL_DISPATCHER::m_buttons
private

State of mouse buttons.

Definition at line 125 of file tool_dispatcher.h.

Referenced by DispatchWxEvent(), handleMouseButton(), ResetState(), TOOL_DISPATCHER(), and ~TOOL_DISPATCHER().

◆ m_lastMousePos

VECTOR2D TOOL_DISPATCHER::m_lastMousePos
private

The last mouse cursor position (in world coordinates).

Definition at line 119 of file tool_dispatcher.h.

Referenced by DispatchWxEvent(), and handleMouseButton().

◆ m_toolMgr

TOOL_MANAGER* TOOL_DISPATCHER::m_toolMgr
private

Instance of tool manager that cooperates with the dispatcher.

Definition at line 131 of file tool_dispatcher.h.

Referenced by DispatchWxCommand(), DispatchWxEvent(), getView(), and handleMouseButton().

◆ MouseButtonCount

const int TOOL_DISPATCHER::MouseButtonCount = 3
staticprivate

Number of mouse buttons that is handled in events.

Definition at line 88 of file tool_dispatcher.h.


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