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

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)mtversiona.tcl    /main/titanic/8
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)mtversiona.tcl    /main/titanic/8   12 Sep 1997 Copyright 1997 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. require mtproperty.tcl
  13. require mtversion.tcl
  14. require mergeinfoo.tcl
  15. # End user added include file section
  16.  
  17.  
  18. Class MTVersionable : {BrowsNode} {
  19.     constructor
  20.     method destructor
  21.     method initialize
  22.     method open
  23.     method removeChildren
  24.     method appendChildren
  25.     method showMergeInfo
  26.     attribute sortable
  27.     attribute repObj
  28. }
  29.  
  30. constructor MTVersionable {class this name repObj} {
  31.     set this [BrowsNode::constructor $class $this $name]
  32.     $this repObj $repObj
  33.     # Start constructor user section
  34.     $this sortable 0
  35.     # End constructor user section
  36.     return $this
  37. }
  38.  
  39. method MTVersionable::destructor {this} {
  40.     # Start destructor user section
  41.     if {[.main currentObj]  == $this} {
  42.         .main currentObj ""
  43.     }
  44.     # End destructor user section
  45. }
  46.  
  47. method MTVersionable::initialize {this} {
  48.  
  49.     [$this repObj] initializeInfo
  50.  
  51.     set fromVersion [[$this repObj] fromRepObj]
  52.  
  53.     set name [$fromVersion getInfo Name]
  54.     if [$fromVersion isA ConfigVersion] {
  55.         set toVersion [[$this repObj] toRepObj]
  56.         set name "$name -> [$toVersion getInfo Name]"
  57.     }
  58.     if [$fromVersion isA PhaseVersion] {
  59.         if [.main import] {
  60.             set toVersion [[$this repObj] toRepObj]
  61.             set name "$name -> [$toVersion getInfo Name]"
  62.         }
  63.     }
  64.     if [$fromVersion typeInLabel] {
  65.         append name ".[$fromVersion getInfo Type]"
  66.     }
  67.     $this config -label $name -hasChildren [$fromVersion hasChildren]
  68.  
  69.     # Set icons and default foldState
  70.     set uiType "[$fromVersion getInfo Type]"
  71.     set objType "[$fromVersion uiClass]"
  72.     set typeSpec [getObjectSpec [.main objectHdlr] "$objType" "$uiType" 0]
  73.     if {"$typeSpec" != ""} {
  74.         set icon [$typeSpec normalIcon]
  75.         set activeIcon [$typeSpec activeIcon]
  76.     } else {
  77.         set icon ""
  78.         set activeIcon ""
  79.     }
  80.     $this config \
  81.         -icon $icon \
  82.         -activeIcon $activeIcon \
  83.         -foldState   0 \
  84.         -activeState 0 \
  85.         -selectState 0 \
  86.         -hasChildren 1 \
  87.         -activated {%this open} \
  88.         -selected {%this open}
  89.  
  90.     # Append children if current one is unfolded,
  91.     if {! [$this foldState]} {
  92.         busy {
  93.             $this appendChildren
  94.         }
  95.     }
  96. }
  97.  
  98. method MTVersionable::open {this} {
  99.  
  100.     if {[.main currentObj] == $this} {
  101.         return
  102.     }
  103.  
  104.     busy {
  105.         .main currentObj $this
  106.         set view [.main infoView]
  107.         # show all the version information of this object
  108.         # in the information view
  109.         $this config -activeState 1 -selectState 1
  110.         foreach obj [[.main infoView] objectSet] {
  111.             $obj delete
  112.         }
  113.  
  114.         .main setCurrentContextVars
  115.  
  116.         $this showMergeInfo
  117.  
  118.         .main selectionChanged
  119.     }
  120. }
  121.  
  122. method MTVersionable::removeChildren {this} {
  123.  
  124.     busy {
  125.         # remove current childSet
  126.         foreach child [$this childSet] {
  127.             $child delete
  128.         }
  129.     }
  130. }
  131.  
  132. method MTVersionable::appendChildren {this} {
  133.  
  134.     # remove previous set
  135.     $this removeChildren
  136.  
  137.     set rep [$this repObj]
  138.  
  139.     # create a tree element for those element that has
  140.     # mergeable components of it's own
  141.  
  142.     # do not show leaf objects (non conflicting objects)
  143.     if {![.main showAll] || [.main import]} {
  144.         if {![$rep hasConflict] && ![.main import]} {
  145.             # do not delete if it's the root object
  146.             if {[$this parent] != ""} {
  147.                 $this delete
  148.                 return
  149.             }
  150.         } 
  151.     }
  152.  
  153.     # do not show leaf objects
  154.     if [[$rep childSet] empty] {
  155.         $this delete
  156.         return
  157.     }
  158.  
  159.     [$rep childSet] foreach child {
  160.  
  161.         if ![[$child fromRepObj] isA Version] {
  162.             continue
  163.         }
  164.         global classCount 
  165.         set node $this.MTVersionable$classCount
  166.         incr classCount
  167.  
  168.         # now create the merge tree element
  169.         MTVersionable new $node $child
  170.  
  171.         # make this stuff compatible 
  172.         # with browser TreeNode
  173.         [$child fromRepObj] parent [$rep fromRepObj]
  174.  
  175.         $node initialize
  176.     }
  177. }
  178.  
  179. method MTVersionable::showMergeInfo {this} {
  180.  
  181.     global classCount
  182.  
  183.     set path [.main infoView]
  184.  
  185.     # create a info object element for every mergeobject
  186.     [[$this repObj] childSet] foreach child {
  187.         MergeInfoObject new $path.MergeInfoObject$classCount $child
  188.         incr classCount
  189.     }
  190.  
  191.     $path sort -column [.main infoView].conflict -column \
  192.         [.main infoView].type -column [.main infoView].name
  193.  
  194. }
  195.  
  196. # Do not delete this line -- regeneration end marker
  197.  
  198.