home *** CD-ROM | disk | FTP | other *** search
/ PC World 1997 November / PCWorld_1997-11_cd.bin / software / programy / komix / DATA.Z / menutree.tcl < prev    next >
Text File  |  1996-10-22  |  4KB  |  161 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Westmount Technology    1994
  4. #
  5. #      File:           @(#)menutree.tcl    /main/hindenburg/1
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)menutree.tcl    /main/hindenburg/1   22 Oct 1996 Copyright 1994 Westmount Technology
  10.  
  11. # Start user added include file section
  12. # End user added include file section
  13.  
  14.  
  15. Class MenuTree : {BrowsTree} {
  16.     constructor
  17.     method destructor
  18.     method dropEvent
  19.     method isDropPossible
  20.     method selectedSet
  21.     method getMenuPartNode
  22.     method setMenuPartNode
  23.     method removeMenuPartNode
  24.     attribute levelsToWrite
  25.     attribute MenuPartNode
  26. }
  27.  
  28. constructor MenuTree {class this name} {
  29.     set this [BrowsTree::constructor $class $this $name]
  30.     $this MenuPartNode [Dictionary new]
  31.     # Start constructor user section
  32.  
  33.     # create popup menu for tree
  34.     TreePopUpMenu new $this.pop -poppedUp {
  35.         %this entrySet [[.main menuHdlr] getValidPopUpEntrySet]
  36.     }
  37.     # End constructor user section
  38.     return $this
  39. }
  40.  
  41. method MenuTree::destructor {this} {
  42.     # Start destructor user section
  43.     # End destructor user section
  44. }
  45.  
  46. method MenuTree::dropEvent {this droppedObject srcIsDst droppedAfterObject droppedForObject} {
  47.  
  48.     if {$srcIsDst == 0} {
  49.         wmtkerror "Drag & drop between tools is not supported (yet)."
  50.         return
  51.     }
  52.  
  53.     if { $droppedAfterObject == "" && 
  54.         ![$droppedObject isA MenuBarNode] } {
  55.         wmtkerror  "Object not moved, reason: no parent available."
  56.         return
  57.     }
  58.  
  59.     if {![$droppedObject editable]} {
  60.         wmtkerror "Object not moved, reason: object not editable."
  61.         return
  62.     }
  63.  
  64.     set obj $droppedAfterObject
  65.     if [$droppedObject isA MenuBarNode] {
  66.         set newIndex 0
  67.         while {$obj != ""} {
  68.             set newIndex [expr [$obj index] + 1]
  69.             set obj [$obj parent]
  70.         }
  71.     } else {
  72.         if [$obj isA ParentNode] {
  73.             set newIndex 0
  74.         } else {
  75.             set newIndex [expr [$obj index] + 1]
  76.             # find the parent
  77.             while {$obj != "" && (![$obj isA ParentNode] || \
  78.                         [$obj foldState] == 1)} {
  79.                 set obj [$obj parent]
  80.             }
  81.         }
  82.         # is a parent found
  83.         if {$obj == "" } {
  84.             return
  85.         }
  86.     }
  87.  
  88.     if {[$this isDropPossible $droppedObject $obj] == 1} {
  89.         $droppedObject parent $obj
  90.         $droppedObject index $newIndex
  91.         if {$obj != "" } {
  92.                    set dotName [$obj name].menu
  93.         } else {
  94.                    set dotName ""
  95.         }
  96.  
  97.         # adjust the dotnames from the object and it's children
  98.         $droppedObject changeDotName $dotName
  99.  
  100.         [.main editorArea] isChanged 1
  101.     }
  102. }
  103.  
  104. method MenuTree::isDropPossible {this droppedObject parentObject} {
  105.     
  106.     if {[ $droppedObject parent] != $parentObject} {
  107.         set parent $parentObject
  108.     } else {
  109.         set parent [$droppedObject parent]
  110.     }
  111.  
  112.     # check if this one is valid
  113.     set err [$droppedObject check [$droppedObject scope] \
  114.         [$droppedObject visible] [$droppedObject specLevel] $parent]
  115.     if {$err != ""} {
  116.         wmtkerror "[$droppedObject displayName]: $err: object not moved."
  117.         return 0
  118.     }
  119.  
  120.     set levelList [$droppedObject specLevel]
  121.  
  122.     # check if all the children can be saved
  123.     set err ""
  124.     foreach i [$this getChildObjects $droppedObject] {
  125.         if {![$i editable]} {
  126.             lappend err "[$i displayName] "
  127.         }
  128.     }
  129.  
  130.     if { $err != "" } {
  131.         wmtkerror "[$droppedObject displayName] $err not changeable."
  132.         return 0
  133.     }
  134.  
  135.     return 1
  136. }
  137.  
  138. method MenuTree::selectedSet {this args} {
  139.  
  140.     if {$args == ""} {
  141.         return [$this selected]
  142.     } else {
  143.         $this selected [lindex $args 0]
  144.     }
  145. }
  146.  
  147. # Do not delete this line -- regeneration end marker
  148.  
  149. method MenuTree::getMenuPartNode {this dotName} {
  150.     return [[$this MenuPartNode] set $dotName]
  151. }
  152.  
  153. method MenuTree::setMenuPartNode {this dotName newMenuPartNode} {
  154.     [$this MenuPartNode] set $dotName $newMenuPartNode
  155. }
  156.  
  157. method MenuTree::removeMenuPartNode {this dotName} {
  158.     [$this MenuPartNode] unset $dotName
  159. }
  160.  
  161.