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

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)vbtreearea.tcl    /main/titanic/20
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)vbtreearea.tcl    /main/titanic/20   27 Nov 1997 Copyright 1997 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12.  
  13. # use the browser object to edit and show the version
  14. # everything works ok if the selfpromoters are avialable
  15. require browserobj.tcl
  16. require vbtrareano.tcl
  17.  
  18. # End user added include file section
  19.  
  20.  
  21. Class VBTreeArea : {TreeArea} {
  22.     method destructor
  23.     constructor
  24.     method setVersionInfo
  25.     method buildTree
  26.     method buildLink
  27.     method getParentVersionObj
  28.     method dropEvent
  29.     method getNode
  30.     method setNode
  31.     method removeNode
  32.     attribute versionable
  33.     attribute node
  34. }
  35.  
  36. method VBTreeArea::destructor {this} {
  37.     # Start destructor user section
  38.     # End destructor user section
  39. }
  40.  
  41. constructor VBTreeArea {class this name} {
  42.     set this [TreeArea::constructor $class $this $name]
  43.     $this node [Dictionary new]
  44.  
  45.     $this nodeSizeX 150
  46.     $this nodeSizeY 75
  47.     $this setSize 600 400
  48.     $this destinationSet "BROWSUIOBJ dropEvent"
  49.  
  50.     return $this
  51. }
  52.  
  53. method VBTreeArea::setVersionInfo {this version} {
  54.  
  55.     # first get the base version
  56.  
  57.     set roots ""
  58.     if [isCommand [$this versionable]] {
  59.         foreach vers [[$this versionable] versions] {
  60.             if {[$vers baseVersion] == [ORB::nil]} {
  61.                 lappend roots $vers
  62.             }
  63.         }
  64.         set version [lindex $roots 0]
  65.     } else {
  66.         foreach vers [[$version object] versions] {
  67.             if {[$vers baseVersion] == [ORB::nil]} {
  68.                 lappend roots $vers
  69.             }
  70.         }
  71.     }
  72.  
  73.     if {$roots == ""} {
  74.         wmtkerror "Unable to show version information. \
  75.             (No versions found)"
  76.         return
  77.     }
  78.  
  79.     set versionable $this.versionable
  80.     VBTrAreaNode new $versionable $this
  81.     set first [lindex $roots 0]
  82.     $versionable labelA [$first getInfo Name].[$first getInfo Type]
  83.     .main title "ObjectTeam VersionBrowser - [$first getInfo Name]"
  84.     set versions [llength [[$first object] versions]]
  85.     $versionable labelB "Versions: $versions"
  86.     $this versionable [$first object]
  87.     set parent [$this getParentVersionObj]
  88.  
  89.     foreach root $roots {
  90.         global classCount
  91.         VBTrAreaNode new $versionable.$classCount $versionable
  92.         $versionable.$classCount setVersion $root
  93.         $root parent $parent
  94.         $this setNode $root $versionable.$classCount
  95.  
  96.         incr classCount
  97.         if ![$root isLeaf] {
  98.             $this buildTree $root
  99.         }
  100.     }
  101.  
  102.     set versions [query "mergeLinks != [ORB::nil]" $first.object.versions]
  103.  
  104.     foreach version $versions {
  105.         foreach link [$version mergeLinks] {
  106.             $this buildLink $link
  107.         }
  108.     }
  109.  
  110.     # adjust menu compare-merge
  111.     if {[$first isA ConfigVersion] || [$first isA PhaseVersion] || \
  112.         [$first isA SystemVersion]} {
  113.         if [isCommand .main.MB.version.menu.compare] {
  114.             .main.MB.version.menu.compare label "Merge..."
  115.             .main.MB.version.menu.compare hintText \
  116.                 "Starts mergetool for the selected objects"
  117.             .main.MB.version.menu.compare mnemonic M
  118.         }
  119.     } else {
  120.         if [isCommand .main.MB.version.menu.compare] {
  121.             .main.MB.version.menu.compare label "Compare..."
  122.             .main.MB.version.menu.compare hintText \
  123.                 "Compares the selected objects"
  124.             .main.MB.version.menu.compare mnemonic C
  125.         }
  126.     }
  127.  
  128.     .main selectionChanged 1
  129. }
  130.  
  131. method VBTreeArea::buildTree {this startVersion} {
  132.  
  133.     set startNode [$this getNode $startVersion]
  134.     set parent [$this getParentVersionObj]
  135.  
  136.     foreach version [$startVersion derivedVersions] {
  137.         VBTrAreaNode new $startNode.$classCount $startNode
  138.         $startNode.$classCount setVersion $version
  139.         $version parent $parent
  140.         $this setNode $version $startNode.$classCount
  141.         incr classCount
  142.         if ![$version isLeaf] {
  143.             $this buildTree $version
  144.         }
  145.     }
  146. }
  147.  
  148. method VBTreeArea::buildLink {this link} {
  149.  
  150.     set from [$this getNode [$link from]]
  151.     set to [$this getNode [$link to]]
  152.     if {"$from" == "" || "$to" == ""} {
  153.         return
  154.     }
  155.     set curSet [[.main infoView] mergeArrowSet]
  156.     append curSet " $from $to "
  157.     [.main infoView] mergeArrowSet $curSet
  158. }
  159.  
  160. method VBTreeArea::getParentVersionObj {this} {
  161.  
  162.     return [[ClientContext::global] currentLevelId]
  163. }
  164.  
  165. method VBTreeArea::dropEvent {this value srcIsDst object} {
  166.  
  167.     set value [lindex $value 0]
  168.  
  169.     set l1 [llength $value]
  170.     incr l1 -3
  171.  
  172.     set l2 $l1
  173.     incr l2 1
  174.  
  175.     set cv [lrange $value $l1 $l2]
  176.     set cc [lrange $value 0 $l1]
  177.  
  178.     set version [VBProcs::id2Obj $cv]
  179.  
  180.     set slashedCc ""
  181.     foreach elm $cc {
  182.         set obj [VBProcs::id2Obj $elm]
  183.         if {$obj == $version} {
  184.             break;
  185.         }
  186.         append slashedCc /$elm
  187.     }
  188.  
  189.     set cc [ClientContext::global]
  190.     set corp [[$cc currentCorporate] identity]
  191.     set slashedCc /$corp$slashedCc
  192.  
  193.     $cc setLevelIds $slashedCc
  194.  
  195.     .main currentVersion $version
  196.     $this versionable [$version object]
  197.     set config [$cc currentConfig]
  198.     set phase [$cc currentPhase]
  199.     if ![$phase  isNil] {
  200.         $phase parent $config
  201.         set system [$cc currentSystem]
  202.         if ![$system isNil] {
  203.             $system parent $phase
  204.         }
  205.     }
  206.  
  207.     VBViewMenuProcs::updateView
  208. }
  209.  
  210. # Do not delete this line -- regeneration end marker
  211.  
  212. method VBTreeArea::getNode {this version} {
  213.     return [[$this node] set $version]
  214. }
  215.  
  216. method VBTreeArea::setNode {this version newNode} {
  217.     [$this node] set $version $newNode
  218. }
  219.  
  220. method VBTreeArea::removeNode {this version} {
  221.     [$this node] unset $version
  222. }
  223.  
  224.