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.