37     EVT_MOUSE_EVENTS( a2dMasterTagGroups2 ::OnMouseEvent )
 
   38     EVT_CHAR( a2dMasterTagGroups2 ::OnChar )
 
   39     EVT_KEY_DOWN( a2dMasterTagGroups2 ::OnKeyDown )
 
   40     EVT_KEY_UP( a2dMasterTagGroups2 ::OnKeyUp )
 
   49 a2dMasterTagGroups2 ::~a2dMasterTagGroups2 ()
 
   77             case mode_cntrlselect:
 
   89 void a2dMasterTagGroups2::OnChar( wxKeyEvent& event )
 
  106             case mode_cntrlselect:
 
  119 void a2dMasterTagGroups2 ::OnKeyDown( wxKeyEvent& event )
 
  129 void a2dMasterTagGroups2 ::OnKeyUp( wxKeyEvent& event )
 
  139 void a2dMasterTagGroups2 ::OnMouseEvent( wxMouseEvent& event )
 
  155     ic.SetLayer( wxLAYER_ALL );
 
  161     hitinfo.m_xyRelToChildren = 
false;
 
  163     if ( event.LeftDClick() && !m_toolBusy )
 
  176                 PushEditTool( m_modehit );
 
  186             if ( event.ControlDown() && !
event.ShiftDown() )
 
  189                 m_mode = mode_cntrlselect;
 
  192             else if ( !event.ControlDown() && 
event.ShiftDown() )
 
  195                 m_mode = mode_select;
 
  207                         if ( event.ControlDown() && 
event.ShiftDown() )
 
  209                             m_mode = mode_copymulti;
 
  214                             m_mode = mode_dragmulti;
 
  227                     m_mode = mode_select;
 
  235                 case mode_cntrlselect:
 
  244                     PushDragMultiTool( m_modehit );
 
  250                     PushCopyMultiTool( m_modehit );
 
  256                     PushDragTool( m_modehit );
 
  262                     PushCopyTool( m_modehit );
 
  275     else if ( event.Moving() && !m_toolBusy )
 
  283         if ( !event.ControlDown() && 
event.ShiftDown() )
 
  288             m_mode = mode_select;
 
  301                 if ( wire && wire->
GetSelected() || m_vertexSegmentEdit )
 
  304                     float minDist = FLT_MAX;
 
  305                     for( i = 0; i < hitinfo.m_extended.size(); i++ )
 
  308                         if( wire2 && hitinfo.m_extended[i].GetHitType().m_distance < minDist && hitinfo.m_extended[i].GetHitType().IsStrokeHit() )
 
  312                             how2 = hitinfo.m_extended[i].GetHitType();
 
  322                         m_modehitinfo = how2;
 
  323                         switch( how2.m_stroke2 )
 
  325                             case a2dHit::stroke2_vertex:
 
  327                                 m_mode = mode_editwire_vertex;
 
  329                             case a2dHit::stroke2_edgehor:
 
  331                                 m_mode = mode_editwire_segmenthorizontal;
 
  333                             case a2dHit::stroke2_edgevert:
 
  335                                 m_mode = mode_editwire_segmentvertical;
 
  337                             case a2dHit::stroke2_edgeother:
 
  339                                 m_mode = mode_editwire_segmentinsert;
 
  359                         m_mode = mode_move_pin;
 
  366                         m_mode = mode_drawwire;
 
  373                     if ( !event.ShiftDown() && !
event.ControlDown() )
 
  386                             if ( wire && wire->
GetSelected() || m_vertexSegmentEdit )
 
  396                         m_mode = mode_drawwire;
 
  406                                 if ( event.ControlDown() && 
event.ShiftDown() )
 
  408                                     m_mode = mode_copymulti;
 
  413                                     m_mode = mode_dragmulti;
 
  420                                 m_mode = mode_select;
 
  427                             m_mode = mode_select;
 
  436                 m_mode = mode_select;
 
  442     else if( event.LeftDown() && !m_toolBusy )
 
  453             m_mode = mode_select;
 
  461             case mode_cntrlselect:
 
  469                 PushMovePinTool( m_modehit );
 
  473                 PushDrawWireTool( m_modehit );
 
  476             case mode_editwire_vertex:
 
  477                 PushEditWireVertexTool( m_modehit, m_modehitinfo.
m_index );
 
  480             case mode_editwire_segmenthorizontal:
 
  481                 PushEditWireSegmentHorizontalTool( m_modehit, m_modehitinfo.
m_index );
 
  484             case mode_editwire_segmentvertical:
 
  485                 PushEditWireSegmentVerticalTool( m_modehit, m_modehitinfo.
m_index );
 
  488             case mode_editwire_segmentinsert:
 
  489                 PushEditWireSegmentInsertTool( m_modehit, m_modehitinfo.
m_index );
 
  492             case mode_editwire_segment:
 
  493                 PushEditSegmentTool( m_modehit, m_modehitinfo.
m_index );
 
  509     else if( event.LeftUp() && m_toolBusy )
 
  515         m_modehitLastSelectState = 
false;
 
  517             m_modehitLastSelectState = m_modehit->
GetSelected();
 
  519         if ( !event.ControlDown() && !
event.ShiftDown() )
 
  525         else if ( event.ShiftDown() )
 
  569     else if( event.RightDown() && !
GetBusy() )
 
#define wxDynamicCast(obj, className)
Define wxDynamicCast so that it will give a compiler error for unrelated types. 
void Render()
implement rendering 
unsigned int m_index
For edge/vertex hits the index of the edge / vertex. 
virtual void DoStopTool(bool abort)
to do tool specific stuff to stop a tool. Called from StopTool(). 
a2dPin is used in a2dCanvasObject to add pins to it. 
generate pins, given Connect/wire pinclass 
float m_distance
For margin hits, the distance from the stroke center in fractions of the margin. 
a2dCanvasObject is the base class for Canvas Objects. 
a2dCanvasObjectList * GetChildObjectList()
get the list where the child objects are stored in. 
bool GetSelected() const 
is the object selected flag set 
void SetSelected(bool selected)
Set the object selected flag if allowed. 
a2dWirePolylineL is a polyline that adjusts itself when the objects it connects move ...
static const a2dCanvasObjectFlagsMask SELECTABLE
a2dCanvasObject * GetShowObject() const 
return pointer of then currently shown object on the drawer. 
if set, respect layer order, hit testing is done per layer from the top. 
static const a2dCanvasObjectFlagsMask SELECTED
bool IsSelected() const 
Is the object selected flag set. 
Master tool for objects graphics selecting and dragging. 
a2dCanvasObject * ChildIsHitWorld(a2dIterC &ic, a2dHitEvent &hitEvent, bool filterSelectableLayers=false)
Do hittest on children. 
bool IsTemporaryPin() const 
return true if this pin is a temporary pin 
common stuff for several master tools 
while iterating a a2dCanvasDocument, this holds the context. 
struct for how a single object on one layer was hit 
a2dConnectionGenerator * GetConnectionGenerator() const 
Get class for generating new connection objects between object and pins. 
static const a2dCanvasObjectFlagsMask VISIBLE
a2dCanvasObject * Find(a2dCanvasObject *obj) const 
return the object if it is part of the list 
bool GetSelectable() const 
is the object selectable flag set 
void AbortBusyMode()
Called when the user aborts editing a distinct object */. 
virtual void SetPinsToBeginState(a2dCanvasObject *root, a2dCanvasObjectFlagsMask mask=a2dCanvasOFlags::VISIBLE)
set begin state of pins, before a tools starts asking feedback or after tool is finsihed ...
static a2dPinClass * Any
used to ask for a new default pin on an object. 
a2dCanvasGlobal * a2dCanvasGlobals
global a2dCanvasGlobal to have easy access to global settings 
all headers of the canvas module 
filter on this layer and mask. 
a2dCanvasObject * GetParent() const 
get parent object of the pin 
bool GetDraggable() const 
get if the object can be dragged 
structure to give as parameter to member functions of a2dCanvasObject 
void DoStopTool(bool abort)
to do tool specific stuff to stop a tool. Called from StopTool().