home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / docstructn.tcl < prev    next >
Text File  |  1997-10-02  |  4KB  |  158 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Westmount Technology    1994
  4. #
  5. #      File:           @(#)docstructn.tcl    1.8
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)docstructn.tcl    1.8   07 Mar 1996 Copyright 1994 Westmount Technology
  10.  
  11. # Start user added include file section
  12. # End user added include file section
  13.  
  14.  
  15. Class DocStructNode : {BrowsNode} {
  16.     method destructor
  17.     constructor
  18.     method name
  19.     method nodes
  20.     method save
  21.     method setParent
  22.     attribute count
  23.     attribute fiComponent
  24. }
  25.  
  26. method DocStructNode::destructor {this} {
  27.     # Start destructor user section
  28.  
  29.     if {[isCommand [$this tree]] && [isCommand [[$this tree] dialog]]} {
  30.         # Append name to list of remved sections
  31.         [[$this tree] dialog] _removedSectionList [concat \
  32.         [[[$this tree] dialog] _removedSectionList] \
  33.         [list [$this label]] \
  34.         ]
  35.     }
  36.  
  37.     set fiComponent [$this fiComponent]
  38.     if [isCommand $fiComponent] {
  39.         $fiComponent delete
  40.     }
  41.  
  42.     # End destructor user section
  43. }
  44.  
  45. constructor DocStructNode {class this name label} {
  46.     set this [BrowsNode::constructor $class $this $name]
  47.  
  48.     if {"[$this parent]" == ""} {
  49.     set objType SystemVersion
  50.     set uiType DocumentVersion
  51.     set activated ""
  52.     } else {
  53.     set objType LocalSection
  54.     set uiType ""
  55.     set activated [list [[$this tree] dialog] editSection]
  56.  
  57.     set fileInfo [[[$this tree] dialog] fileInfo]
  58.     set fiComponent [$fileInfo findComponent "$label"]
  59.     if {"$fiComponent" == ""} {
  60.         set fiComponent [DocComponent new $this.fiComponent $fileInfo \
  61.         -indentation 0 \
  62.         -uiName "$label"]
  63.     }
  64.     $this fiComponent $fiComponent
  65.     }
  66.     set typeSpec [getObjectSpec [$wmttoolObj objectHdlr] $objType $uiType]
  67.     if {"$typeSpec" != ""} {
  68.     set icon [$typeSpec normalIcon]
  69.     } else {
  70.     set icon ""
  71.     }
  72.     $this config \
  73.     -icon $icon \
  74.     -activeIcon $icon \
  75.     -label "$label" \
  76.     -hasChildren 0 \
  77.     -count 0 \
  78.     -activated $activated \
  79.     -conversionSet "SECTION name"
  80.  
  81.     return $this
  82. }
  83.  
  84. method DocStructNode::name {this} {
  85.     return $this
  86. }
  87.  
  88. method DocStructNode::nodes {this} {
  89.     set nodes ""
  90.     foreach child [$this childSet] {
  91.     lappend nodes $child
  92.     set nodes [concat $nodes [$child nodes]]
  93.     }
  94.     return $nodes
  95. }
  96.  
  97. method DocStructNode::save {this} {
  98.     global DocStructNode::prevNode
  99.     if {"[$this parent]" != ""} {
  100.     set fiComponent [$this fiComponent]
  101.     set parentFiComponent [[$this parent] fiComponent]
  102.  
  103.     if {"${DocStructNode::prevNode}" != ""} {
  104.         set prevFiComponent [${DocStructNode::prevNode} fiComponent]
  105.         if {"$prevFiComponent" != "[$fiComponent previous]"} {
  106.         $fiComponent moveBehind $prevFiComponent
  107.         }
  108.     }
  109.  
  110.     if {"$parentFiComponent" == ""} {
  111.         set indentation 0
  112.     } else {
  113.         set indentation [expr [$parentFiComponent indentation] + 1]
  114.     }
  115.     $fiComponent config \
  116.         -uiName [$this label] \
  117.         -indentation $indentation
  118.  
  119.     set DocStructNode::prevNode "$this"
  120.     } else {
  121.     set DocStructNode::prevNode ""
  122.     }
  123.  
  124.     foreach child [$this childSet] {
  125.     $child save
  126.     }
  127. }
  128.  
  129. method DocStructNode::setParent {this newParent} {
  130.     if {"$newParent" == "" || (! [$newParent isA DocStructNode])} {
  131.     return 0
  132.     }
  133.  
  134.     # Skip if one of newParent's parent is this section
  135.     for {set node $newParent} {"$node" != ""} {set node [$node parent]} {
  136.     if {$node == $this} {
  137.         return 0
  138.     }
  139.     }
  140.  
  141.     set parent [$this parent]
  142.     if {$newParent != $parent} {
  143.     if {! [$newParent hasChildren]} {
  144.         $newParent hasChildren 1
  145.         $newParent foldState 0
  146.     }
  147.     $this parent $newParent
  148.     if {"$parent" != "" && [lempty [$parent childSet]]} {
  149.         $parent foldState 1
  150.         $parent hasChildren 0
  151.     }
  152.     }
  153.     return 1
  154. }
  155.  
  156. # Do not delete this line -- regeneration end marker
  157.  
  158.