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

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cadre Technologies Inc.    1996
  4. #
  5. #      File:           @(#)menupartno.tcl    1.12
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)menupartno.tcl    1.12   04 Apr 1996 Copyright 1996 Cadre Technologies Inc.
  10.  
  11. # Start user added include file section
  12. # End user added include file section
  13.  
  14. require "custbrowso.tcl"
  15.  
  16. Class MenuPartNode : {CustBrowsObject BrowsNode} {
  17.     method destructor
  18.     constructor
  19.     method displayName
  20.     method infoList
  21.     method updateView
  22.     method open
  23.     method check
  24.     method changeDotName
  25.     attribute parentType
  26.     attribute id
  27.     attribute redefined
  28. }
  29.  
  30. method MenuPartNode::destructor {this} {
  31.     # Start destructor user section
  32.     if [isCommand .main] {
  33.         set area [.main editorArea] 
  34.  
  35.         if [isCommand $area] {
  36.             set names [$area getMenuPartNode [$this name]]
  37.             set newNames ""
  38.             foreach j $names {
  39.                 if {$j != $this} {
  40.                     set newNames "$newNames $j"
  41.                 }
  42.             }
  43.             if {![lempty $newNames]} {
  44.                 $area setMenuPartNode [$this name] $newNames
  45.             } else {
  46.                 $area removeMenuPartNode [$this name]
  47.             }
  48.         }
  49.     }
  50.     # End destructor user section
  51.     $this CustBrowsObject::destructor
  52. }
  53.  
  54. constructor MenuPartNode {class this name specification} {
  55.     set this [BrowsNode::constructor $class $this $name]
  56.     set this [CustBrowsObject::constructor $class $this $name]
  57.  
  58.     $this config -activated {%this open} -id $this \
  59.         -conversionSet "WMT_MENUNODE id" 
  60.  
  61.     while {![lempty $specification]} {
  62.         set key [lvarpop specification]
  63.         $this $key [lvarpop specification]
  64.     }
  65.  
  66.     set specification [$this objSpec]
  67.  
  68.     set index [lsearch -exact $specification "label"]
  69.     if {$index != -1} {
  70.         incr index
  71.         $this displayName [lindex $specification $index]
  72.     } 
  73.  
  74.     return $this
  75. }
  76.  
  77. method MenuPartNode::displayName {this args} {
  78.  
  79.     if {$args == ""} {
  80.         return [$this _displayName]
  81.     } else {
  82.         $this _displayName [join $args]
  83.         if { [$this type] != "CustMenuBarButton"} {
  84.             if { [$this parent] != "" } {
  85.                 $this changeDotName [[$this parent] name].menu
  86.             }
  87.         } else {
  88.             $this changeDotName ""
  89.         }
  90.     }
  91. }
  92.  
  93. method MenuPartNode::infoList {this} {
  94.     
  95.     set list [$this CustBrowsObject::infoList]
  96.     set list [concat $list Visible]
  97.     if [$this alwaysVisible] {
  98.         set list [concat $list always]
  99.     } else {
  100.         set visible ""
  101.         if [lindex [$this visible] 0] {
  102.             lappend visible corporate
  103.         }
  104.         if [lindex [$this visible] 1] {
  105.             lappend visible project
  106.         }
  107.         if [lindex [$this visible] 2] {
  108.             lappend visible config.
  109.         }
  110.         if [lindex [$this visible] 3] {
  111.             lappend visible phase
  112.         }
  113.         if [lindex [$this visible] 4] {
  114.             lappend visible system
  115.         }
  116.         set list [concat $list \{$visible\}]
  117.     }
  118.     set list [concat $list "MenuPath"]
  119.     set list [concat $list [$this name]]
  120.     set list [concat $list "index"]
  121.     set list [concat $list [$this index]]
  122.  
  123.     return $list
  124. }
  125.  
  126. method MenuPartNode::updateView {this} {
  127.  
  128.     set editStatus  ""
  129.     if [$this editable] {
  130.         set editStatus "*"
  131.     }
  132.  
  133.     $this label "[$this _displayName] $editStatus"
  134. }
  135.  
  136. method MenuPartNode::open {this} {
  137. }
  138.  
  139. method MenuPartNode::check {this newScope newVisible newSpecLevel newParent} {
  140.  
  141.     #check if parent is always available for this object
  142.     set parent $newParent
  143.  
  144.     if {[$parent specLevel] == "user" && $newSpecLevel != "user"} {
  145.         return "An user-defined parent, can not have not-user-defined \
  146.             children"
  147.     }
  148.     
  149.     set parentVisible [$parent visible]
  150.     set objectVisible $newVisible
  151.  
  152.     set index 0
  153.     foreach i $objectVisible {
  154.         if {$i == 1} {
  155.             if {[lindex $parentVisible $index] == 0} {
  156.                 return  "Parent not always available"
  157.             }
  158.         }
  159.         incr index
  160.     }
  161.     
  162.     set parentScope [$parent scope]
  163.     set objectScope $newScope
  164.  
  165.     if {[llength $objectScope] < [llength $parentScope]} {
  166.         return "Parent is not available when child should be present"
  167.     }
  168.  
  169.     # check from current scope not from begin because begin 
  170.     # is (should be) * 
  171.     set area [.main editorArea]
  172.     set curScope [$area _scope]
  173.     set index [llength $curScope]
  174.     foreach i [lrange $objectScope $index end] {
  175.         set x [lindex $parentScope $index]
  176.         if {$x == ""} {
  177.             break
  178.         }
  179.         if {$x != "*" } {
  180.             # if not always on this level, check if parent
  181.             # is on this level when child is.
  182.             if {$i == "*"} {
  183.                 return "Parent not always available"
  184.             }
  185.             foreach y $i {
  186.                 if {[lsearch $x $y] == -1 } {
  187.                     return "Parent not always available"
  188.                 }
  189.             }
  190.         }
  191.         incr index
  192.     }
  193.  
  194.     return ""
  195. }
  196.  
  197. method MenuPartNode::changeDotName {this newDotName} {
  198.  
  199.     set tclName [MenuEdArea::makeTclName [$this displayName]]
  200.     set newObjs ""
  201.  
  202.     foreach i [[$this tree] getMenuPartNode [$this name]] {
  203.         if {$i != $this} {
  204.             set newObjs "$newObjs $i"
  205.         }
  206.     }
  207.     if {![lempty $newObjs]} {
  208.         [$this tree] setMenuPartNode [$this name] $newObjs
  209.     } else {
  210.         [$this tree] removeMenuPartNode [$this name]
  211.     }
  212.     $this name $newDotName.$tclName
  213.     set objs [[$this tree] getMenuPartNode [$this name]]
  214.     set objs "$objs $this"
  215.     [$this tree] setMenuPartNode [$this name] $objs
  216.  
  217.     foreach i [$this childSet] {
  218.         $i changeDotName [$this name].menu
  219.     }
  220. }
  221.  
  222. # Do not delete this line -- regeneration end marker
  223.  
  224.