ANNOTATEINTERACTION__DEFINE Name
ANNOTATEINTERACTION__DEFINE
Purpose
The purpose of this routine is to provide an interaction for creating
and manipulating SELECTABLEOBJECT objects. An interaction takes over
draw widget event handling for the duration of the interaction and then
restores it to its normal funcitoning. We spent a LOT of time implementing
this, and while it works, it is extremely complicated (bordering on iTools
complicated!). I am not happy with the complexity, and I am not sure this
is what is needed anyway. I think interaction functionality is too user-specific
to be handled like this. In practice, I seldom use interactions, but code
the functionality I want for a particular application in the event handlers.
That said, this particular interaction is amazingly useful for annotating
graphics windows.
Authors
FANNING SOFTWARE CONSULTING BURRIDGE COMPUTING
1645 Sheely Drive 18 The Green South
Fort Collins Warborough, Oxon
CO 80526 USA OX10 7DN, ENGLAND
Phone: 970-221-0438 Phone: +44 (0)1865 858279
E-mail: davidf@dfanning.com E-mail: davidb@burridgecomputing.co.uk
Category
Objects. Syntax
theObject = Obj_New("ANNOTATEINTERACTION")
Superclasses
INTERACTION
CATCONTAINER IDLITCOMPONENT
IDL_CONTAINER Class Structure
class = { ANNOTATEINTERACTION, $
align_gui_tlb: Obj_New(), $ ; The align GUI top-level base object.
align_tb: 0L, $ ; The current align top/bottom value.
align_lr: 0L, $ ; The current align left/right value.
distribute_gui_tlb: Obj_New(), $ ; The distrubute GUI top-level base object.
distribute_h: 0L, $ ; The current distribute horizontal value.
distribute_v: 0L, $ ; The current distribute vertical value.
distribute_gap_h: Obj_New(), $ ; The distribute horizonal gap field object.
distribute_gap_v: Obj_New(), $ ; The distribute vertical gap field object.
selectedObjects: Ptr_New(), $ ; The currently selected objects.
sx: 0L, $ ; The static X location.
sy: 0L, $ ; The static Y location.
defaultObject: Obj_New(), $ ; The default (or current) selectable object.
defTextObject: Obj_New(), $ ; The default TEXTLINE object.
defAngleObject: Obj_New(), $ ; The default ANGLETOOL object.
defArrowObject: Obj_New(), $ ; The default ARROW object.
defBoxObject: Obj_New(), $ ; The default BOX object.
defEllipseObject: Obj_New(), $ ; The default ELLIPSE object.
defPolygonObject: Obj_New(), $ ; The default POLYGON object.
defMeasureObject: Obj_New(), $ ; The default MEASUREMENT object.
layerObject: Obj_New(), $ ; A layer object for holding selectable annotation objects.
angleID: Obj_New(), $ ; The ANGLE MEASURMENT button on the ControlPanel.
annotateOn: Obj_New(), $ ; The ANNOTATE_LAYER_ON button on the ControlPanel.
annotateOff: Obj_New(), $ ; The ANNOTATE_LAYER_OFF button on the ControlPanel.
arrowID: Obj_New(), $ ; The ARROW button on ControlPanel.
boxID: Obj_New(), $ ; The BOX button on ControlPanel.
ellipseID: Obj_New(), $ ; The ELLIPSE button on the ControlPanel.
globalID: Obj_New(), $ ; The GLOBAL_PROPERTY button on ControlPanel.
measureID: Obj_New(), $ ; The MEASUREMENT button on the ControlPanel.
polygonID: Obj_New(), $ ; The POLYGON button on the ControlPanel.
saveID: Obj_New(), $ ; The SAVE_WINDOW button on ControlPanel.
selectID: Obj_New(), $ ; The SELECT button on ControlPanel.
textID: Obj_New(), $ ; The TEXT button on ControlPanel.
INHERITS INTERACTION $
} Messages
None.
Notes
The way the interaction works is by copying the contents of the draw widget into a pixmap,
so they can be redrawn appropriately. This is only successful if the contents of the draw
widget can be drawn in the pixmap. Images, for example, might have their WID keyword set and
be attached to a draw widget already. (This is especially the case if they are responding to
color table events of some kind.) These kinds of images are not appropriate for annotation
interactions, because they can't be drawn in the pixmap.
Modification History
Written by: David W. Fanning, 9 August 2004.