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

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cadre Technologies Inc.    1996
  4. #
  5. #      File:           @(#)browstable.tcl    /main/titanic/4
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)browstable.tcl    /main/titanic/4   21 Nov 1997 Copyright 1996 Cadre Technologies Inc.
  10.  
  11. # Start user added include file section
  12. # End user added include file section
  13.  
  14.  
  15. # BrowsView derived class that can calculate the width
  16. # of columns to fit the data in its objects exactly.
  17.  
  18. Class BrowsTable : {BrowsView} {
  19.     method destructor
  20.     constructor
  21.     method setHeaderLabels
  22.     method format
  23.     method removeAllHeaders
  24.     method removeAllObjects
  25. }
  26.  
  27. method BrowsTable::destructor {this} {
  28.     # Start destructor user section
  29.     # End destructor user section
  30. }
  31.  
  32. constructor BrowsTable {class this name} {
  33.     set this [BrowsView::constructor $class $this $name]
  34.     return $this
  35. }
  36.  
  37.  
  38. # Removes all header objects and creates new ones,
  39. # one for each string specified in the list.
  40. #
  41. method BrowsTable::setHeaderLabels {this list {widthList {}}} {
  42.     $this removeAllHeaders
  43.     set count 0
  44.     set empty [lempty $widthList]
  45.     foreach header $list {
  46.     set width 24
  47.         if !$empty {
  48.             set width [lindex $widthList $count]
  49.         }
  50.         incr count
  51.         BrowsHeader new $this.header$count -label $header -width $width
  52.     }
  53. }
  54.  
  55.  
  56. # Examines all objects in this view's objectSet and calculates the
  57. # maximum width foreach column, and stores that width in the
  58. # corresponding header object.
  59. #
  60. method BrowsTable::format {this} {
  61.     set headers [$this headerSet]
  62.     set objects [$this objectSet]
  63.  
  64.     if {[llength $headers] == 0} {
  65.         return 0
  66.     }
  67.  
  68.     set ncols [llength $headers]
  69.     for {set i 0} {$i < $ncols} {incr i} {
  70.         set hdr [lindex $headers $i]
  71.         set max($i) [string length [$hdr label]]
  72.     }
  73.  
  74.     foreach obj $objects {
  75.         set d [concat [list [$obj label]] [$obj details]]
  76.     for {set i 0} {$i < $ncols} {incr i} {
  77.             set l [string length [lindex $d $i]]
  78.  
  79.             # If object has a small icon, add 2 to the first column width.
  80.             #
  81.             if {$i == 0 && [$obj smallIcon] != ""} {
  82.                 incr l 2
  83.             }
  84.  
  85.             if {$l > $max($i)} {
  86.                 set max($i) $l
  87.             }
  88.         }
  89.     }
  90.  
  91.     set n 0
  92.     set i 0
  93.     foreach hdr $headers {
  94.         set m $max($i)
  95.         # add some column separator space
  96.         incr m 2
  97.         $hdr width $m
  98.         incr n $m
  99.         incr i
  100.     }
  101.  
  102.     return $n
  103. }
  104.  
  105.  
  106. # Removes all header objects.
  107. #
  108. method BrowsTable::removeAllHeaders {this} {
  109.     foreach e [$this headerSet] { $e delete }
  110. }
  111.  
  112.  
  113. # Removes all data objects.
  114. #
  115. method BrowsTable::removeAllObjects {this} {
  116.     foreach e [$this objectSet] { $e delete }
  117. }
  118.  
  119. # Do not delete this line -- regeneration end marker
  120.  
  121.