home *** CD-ROM | disk | FTP | other *** search
/ PC World 1997 November / PCWorld_1997-11_cd.bin / software / programy / komix / DATA.Z / ccfileuiob.tcl < prev    next >
Text File  |  1997-05-30  |  5KB  |  180 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)ccfileuiob.tcl    /main/hindenburg/6
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)ccfileuiob.tcl    /main/hindenburg/6   30 May 1997 Copyright 1997 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. # End user added include file section
  13.  
  14. require_module_file "ccfile.tcl" clearcase
  15. require_module_file "vsfileobj.tcl" vcm
  16.  
  17. # This class represents a ClearCase file in the browser.
  18.  
  19. Class CCFileUiObj : {CCFile VSFileObj} {
  20.     constructor
  21.     method destructor
  22.     method initializeInfo
  23.     method showDiff
  24.     method getInfo
  25.     method path
  26.     method previousVersion
  27.     method promoter
  28.     method otherVersions
  29. }
  30.  
  31. constructor CCFileUiObj {class this name type system i_name} {
  32.     set this [CCFile::constructor $class $this $name $type $system]
  33.     set this [VSFileObj::constructor $class $this $i_name]
  34.     # Start constructor user section
  35.     # End constructor user section
  36.     return $this
  37. }
  38.  
  39. method CCFileUiObj::destructor {this} {
  40.     # Start destructor user section
  41.     # End destructor user section
  42.     $this CCFile::destructor
  43.     $this VSFileObj::destructor
  44. }
  45.  
  46.  
  47. # Reuse associations of VSFile.
  48. #
  49. proc CCFileUiObj::associations {} {
  50.     return "[VSFileObj::associations]"
  51. }
  52.  
  53.  
  54. # Reuse child types of VSFileObj
  55. #
  56. proc CCFileUiObj::childTypes {assoc} {
  57.     return "[VSFileObj::childTypes $assoc]"
  58. }
  59.  
  60.  
  61. # Reuse controlledLists of VSFileObj.
  62. #
  63. proc CCFileUiObj::controlledLists {} {
  64.     return "[VSFileObj::controlledLists]"
  65. }
  66.  
  67.  
  68. # Return the ClearCase properties:
  69. # Status, Version, Rule, Comments, Path, Labels, Attributes, Hyperlinks.
  70. #
  71. proc CCFileUiObj::infoProperties {} {
  72.     return [concat \
  73.         [VSFileObj::infoProperties] \
  74.         {Version Status Rule "Created By" Created Comments \
  75.         "ClearCase Type" Path Labels Attributes Hyperlinks} \
  76.         ]
  77. }
  78.  
  79.  
  80. # Initialize the properties: get from the FileInfoDict of this
  81. # system and postpone other properties.
  82. # Postponed: Comments, Labels, Attributes, Hyperlinks.
  83. #
  84. method CCFileUiObj::initializeInfo {this dummy} {
  85.     $this VSFileObj::initializeInfo $dummy
  86.     $this setInfo Text "ClearCase File [path_name file [$this path]]"
  87.     $this setInfo Path [$this vsPath]
  88.     set infoList [[[$this systemVersion] ccFileInfoDict] set [$this path]]
  89.     if { ![lempty $infoList] } {
  90.     $this setInfo Version [lindex $infoList 0]
  91.     $this setInfo Status [lindex $infoList 1]
  92.     $this setInfo Rule [lindex $infoList 2]
  93.     } else {
  94.     # not found: indicate in status and clear others
  95.     $this setInfo Version ""
  96.     $this setInfo Status "<not found>"
  97.     $this setInfo Rule ""
  98.     }
  99. }
  100.  
  101.  
  102. # Show diffs with version, options indicate whether it must
  103. # be graphical or not.
  104. #
  105. method CCFileUiObj::showDiff {this version {options ""}} {
  106.     set graphical 0
  107.     if { "$options" == "graphical" } {
  108.     set graphical 1
  109.     }
  110.  
  111.     set diffCommand [CCCommand::diff [$this path] $version $graphical]
  112.     if $graphical {
  113.     set tool external
  114.     } else {
  115.     set tool mtool
  116.     }
  117.     vsCommandHandler executeExternal $diffCommand $tool
  118. }
  119.  
  120.  
  121. # If header is indicates a 'slow' info object, initialize all remaining info
  122. # if initializedAllInfo was not yet set.
  123. # Returns the requested info.
  124. #
  125. method CCFileUiObj::getInfo {this header} {
  126.     if { [$this initializedAllInfo] != "1" } {
  127.     if { [lsearch {Comments Attributes Labels Hyperlinks "Created By" \
  128.         "ClearCase Type" "Generated From Class" Created } \
  129.         $header] != -1 } {
  130.         # get the description items and add them to info
  131.         busy {
  132.         set descrDict [Dictionary new]
  133.         CCCommand::describe [$this path] $descrDict
  134.         $descrDict foreach key value {
  135.             $this setInfo $key $value
  136.         }
  137.         $this initializedAllInfo 1
  138.         }
  139.     }
  140.     }
  141.  
  142.     set info [[$this info] set $header]
  143.     if { $info != ""} {
  144.     return $info
  145.     }
  146.  
  147.     return "[$this BrowsUiObj::getInfo $header]"
  148. }
  149.  
  150.  
  151. # Returns result of path of CCFile.
  152. #
  153. method CCFileUiObj::path {this} {
  154.     return [$this CCFile::path]
  155. }
  156.  
  157. method CCFileUiObj::previousVersion {this} {
  158.     return [CCCommand::getPredecessor [$this path]]
  159. }
  160.  
  161. method CCFileUiObj::promoter {this} {
  162.     $this VSFileObj::promoter
  163. }
  164.  
  165. method CCFileUiObj::otherVersions {this} {
  166.     set versions [CCCommand::getVersions [$this path]]
  167.  
  168.     # remove current version
  169.     set currentVersion [$this getInfo Version]
  170.     set currentVersionIndex [lsearch -exact $versions $currentVersion]
  171.     if { $currentVersionIndex == -1 } {
  172.     return $versions
  173.     }
  174.     return [concat [lrange $versions 0 [expr $currentVersionIndex-1]] \
  175.         [lrange $versions [expr $currentVersionIndex+1] end]]
  176. }
  177.  
  178. # Do not delete this line -- regeneration end marker
  179.  
  180.