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