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

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)fastviewha.tcl    /main/titanic/1
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)fastviewha.tcl    /main/titanic/1   3 Jun 1997 Copyright 1997 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. require fastviewob.tcl
  13. # End user added include file section
  14.  
  15.  
  16. Class FastViewHandler : {Object} {
  17.     constructor
  18.     method destructor
  19.     method registerObject
  20.     method checkView
  21.     method saveObjects
  22.     method getViewSpec
  23.     method getViewObject
  24.     method setViewObject
  25.     method removeViewObject
  26.     attribute viewSetChanged
  27.     attribute viewObject
  28. }
  29.  
  30. constructor FastViewHandler {class this name} {
  31.     set this [Object::constructor $class $this $name]
  32.     $this viewSetChanged 0
  33.     $this viewObject [Dictionary new]
  34.     # Start constructor user section
  35.     eval "proc registerObject {spec} {$this registerObject \$spec}"
  36.     set path [path_name concat ~ icase]
  37.     set path [path_name concat $path desk.vie]
  38.     if [file exists $path] {
  39.         source $path
  40.     }
  41.     # End constructor user section
  42.     return $this
  43. }
  44.  
  45. method FastViewHandler::destructor {this} {
  46.     # Start destructor user section
  47.     # End destructor user section
  48. }
  49.  
  50. method FastViewHandler::registerObject {this spec} {
  51.  
  52.     set view [FastViewObject new $this.FastViewObject$classCount $spec]
  53.     set key "[$view repositoryType]:[$view browserType]:[$view viewName]"    
  54.     $this setViewObject $key $view
  55. }
  56.  
  57. method FastViewHandler::checkView {this infoView} {
  58.     set curSpec [$infoView currentSpec]
  59.     if {$curSpec == ""} {
  60.         return
  61.     }
  62.     # check if this spec is changed when displayed
  63.     set props [$curSpec properties]
  64.     set changed 0
  65.     set index 0
  66.     set headerSet [[$infoView area] headerSet]
  67.     foreach prop $props {
  68.         set header [lindex $headerSet $index]
  69.         if {$header == ""} {
  70.             break;
  71.         }
  72.         incr index
  73.         if {[lindex $prop 1] != [$header width]} {
  74.             set changed 1
  75.         }
  76.         set newProp ""
  77.         lappend newProp "[$header label]"
  78.         lappend newProp "[$header width]"
  79.         lappend newProp "[$header type]"
  80.         set sortProp [$header sortPolicy]
  81.         lappend sortProp "[$header sortIndex]"
  82.         lappend newProp "$sortProp"
  83.         lappend newProps "$newProp"
  84.     }
  85.     if {$changed == 1} {
  86.         $curSpec properties $newProps
  87.         global classCount
  88.         incr classCount
  89.         set newSpec [FastViewObject new $this.FVO.$classCount ""]
  90.         foreach method [CustViewSpec info methods] {
  91.             $newSpec $method [$curSpec $method]
  92.         }
  93.         # set in dictionary when changed
  94.         set key "[$newSpec repositoryType]:[$newSpec browserType]:[$newSpec viewName]"    
  95.         $this setViewObject $key $newSpec
  96.         $this viewSetChanged 1
  97.     }
  98. }
  99.  
  100. method FastViewHandler::saveObjects {this} {
  101.  
  102.     if [$this viewSetChanged] {
  103.         set path [path_name concat ~ icase]
  104.         set fid [open [path_name concat $path desk.vie] w]
  105.         foreach view [[$this viewObject] values] {
  106.             $view writeObject $fid
  107.         }
  108.         close $fid
  109.         $this viewSetChanged 0
  110.     }
  111. }
  112.  
  113. method FastViewHandler::getViewSpec {this repositoryType browserType viewName} {
  114.     set key "$repositoryType:$browserType:$viewName"
  115.     set spec [$this getViewObject $key]
  116.     if {$spec != ""} {
  117.         return $spec
  118.     }
  119.     set key "$repositoryType::$viewName"
  120.     return [$this getViewObject $key]
  121. }
  122.  
  123. # Do not delete this line -- regeneration end marker
  124.  
  125. method FastViewHandler::getViewObject {this key} {
  126.     return [[$this viewObject] set $key]
  127. }
  128.  
  129. method FastViewHandler::setViewObject {this key newViewObject} {
  130.     [$this viewObject] set $key $newViewObject
  131. }
  132.  
  133. method FastViewHandler::removeViewObject {this key} {
  134.     [$this viewObject] unset $key
  135. }
  136.  
  137.