home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / csnode.tcl < prev    next >
Text File  |  1997-11-06  |  5KB  |  207 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1996
  4. #
  5. #      File:           @(#)csnode.tcl    /main/titanic/8
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)csnode.tcl    /main/titanic/8   5 Nov 1997 Copyright 1996 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. require "repinfosec.tcl"
  13. # End user added include file section
  14.  
  15.  
  16. Class CSNode : {BrowsNode} {
  17.     constructor
  18.     method destructor
  19.     method name
  20.     method uniqueName
  21.     method confirmShutdown
  22.     method removeChildren
  23.     method childName
  24.     method childObjects
  25.     method createChild
  26.     method beginUpdate
  27.     method doUpdate
  28.     method endUpdate
  29.     method update
  30.     method display
  31.     attribute canDelete
  32.     attribute canReload
  33.     attribute canChangeEntry
  34.     attribute canChangeParams
  35.     attribute canShowLog
  36.     attribute canLogRegistrations
  37.     attribute canLogMessage
  38.     attribute canShutdown
  39.     attribute prevSelection
  40.     attribute view
  41.     attribute info
  42.     attribute shutdownDialog
  43. }
  44.  
  45. constructor CSNode {class this name} {
  46.     set this [BrowsNode::constructor $class $this $name]
  47.     # Start constructor user section
  48.  
  49.         $this view [[$this tree] view]
  50.         $this info [RepInfoSection new [$this view]]
  51.  
  52.         # Defaults, can be overridden by children.
  53.         #
  54.         $this selected { %this display }
  55.         $this hasChildren 1
  56.         $this foldState 0
  57.  
  58.         $this canDelete 0
  59.         $this canReload 0
  60.         $this canChangeEntry 0
  61.         $this canChangeParams 0
  62.     $this canShowLog 0
  63.     $this canLogRegistrations 0
  64.     $this canLogMessage 0
  65.         $this canShutdown 0
  66.  
  67.     # End constructor user section
  68.     return $this
  69. }
  70.  
  71. method CSNode::destructor {this} {
  72.     # Start destructor user section
  73.     # End destructor user section
  74. }
  75.  
  76. method CSNode::name {this} {
  77.     return [$this label]
  78. }
  79.  
  80. method CSNode::uniqueName {this} {
  81.     return [$this name]
  82. }
  83.  
  84. method CSNode::confirmShutdown {this title msg {help ""}} {
  85.     if {[$this shutdownDialog] == ""} {
  86.         global classCount
  87.     set dlg [$this view].shutdowndlg-[$this uniqueName]$classCount
  88.         incr classCount
  89.         $this shutdownDialog $dlg
  90.  
  91.         YesNoWarningDialog new $dlg \
  92.             -title "Confirm Shutdown Of $title" \
  93.             -message $msg \
  94.             -yesPressed "$this shutdown 0"
  95.  
  96.         $dlg delCancelButton
  97.         if {$help != ""} {
  98.             $dlg helpPressed "[$this view] helpOnName $help"
  99.         } else {
  100.             $dlg delHelpButton
  101.         }
  102.     }
  103.     [$this shutdownDialog] popUp
  104. }
  105.  
  106. method CSNode::removeChildren {this} {
  107.     foreach child [$this childSet] {
  108.     $child delete
  109.     }
  110. }
  111.  
  112. method CSNode::childName {this object} {
  113.     return $object
  114. }
  115.  
  116. method CSNode::childObjects {this} {
  117.     return {}
  118. }
  119.  
  120. method CSNode::createChild {this object} {
  121.     return ""
  122. }
  123.  
  124. method CSNode::beginUpdate {this {rebuild 1}} {
  125.     [$this info] clear
  126.     $this prevSelection [[$this tree] selected]
  127.  
  128.     if $rebuild {
  129.     $this removeChildren
  130.     }
  131.  
  132.     $this hasChildren 1
  133. }
  134.  
  135. method CSNode::doUpdate {this {rebuild 1}} {
  136.     if $rebuild {
  137.         foreach object [$this childObjects] {
  138.             set node [$this createChild $object]
  139.             if {$node != ""} {
  140.                 $node update 1
  141.             }
  142.         }
  143.     } else {
  144.     set oldChildSet [$this childSet]
  145.     set newChildSet {}
  146.  
  147.     foreach object [$this childObjects] {
  148.         set nodeName [$this childName $object]
  149.         set i [lsearch -exact $oldChildSet $this.$nodeName]
  150.         if {$i != -1} {
  151.         set node [lindex $oldChildSet $i]
  152.         $node update 0
  153.         lappend newChildSet $node
  154.         } else {
  155.         set node [$this createChild $object]
  156.         if {$node != ""} {
  157.             $node update 1
  158.             lappend newChildSet $node
  159.         }
  160.         }
  161.     }
  162.  
  163.     foreach node $oldChildSet {
  164.         if {[lsearch -exact $newChildSet $node] == -1} {
  165.         $node delete
  166.         }
  167.     }
  168.     }
  169. }
  170.  
  171. method CSNode::endUpdate {this {rebuild 1}} {
  172.     [$this info] format
  173.  
  174.     if [lempty [$this childSet]] {
  175.     $this hasChildren 0
  176.     } else {
  177.     $this hasChildren 1
  178.     }
  179.  
  180.     if {[info commands [$this prevSelection]] == ""} {
  181.         [$this view] selectionChanged
  182.     }
  183. }
  184.  
  185. method CSNode::update {this {rebuild 1}} {
  186.     $this beginUpdate $rebuild
  187.  
  188.     if [catch {$this doUpdate $rebuild} error] {
  189.         [$this info] clear
  190.         [$this info] addHeader "Could not access:"
  191.         foreach line [split $error \n] {
  192.         [$this info] addLine $line
  193.         }
  194.     }
  195.  
  196.     $this endUpdate $rebuild
  197. }
  198.  
  199. method CSNode::display {this} {
  200.     # Default: contents of the RepInfoSection of this node.
  201.     #
  202.     [[$this view] info] text [[$this info] contents]
  203. }
  204.  
  205. # Do not delete this line -- regeneration end marker
  206.  
  207.