home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 December / PCWorld_2000-12_cd.bin / Komunikace / Comanche / gui / guiChoice.tcl < prev    next >
Text File  |  2000-11-02  |  2KB  |  83 lines

  1.  
  2.  
  3. class guiChoice {
  4.     inherit guiObject guiLabeled
  5.     variable comboBox 
  6.     variable nameMap 
  7.     variable selectedIndex {}
  8.  
  9.     constructor {frame xuiObject} {
  10.     array set nameMap {}
  11.     set subject $xuiObject
  12.     set comboBox [ComboBox $frame.[unique::newId] ]
  13.     $comboBox configure -label [$subject getLabel] -editable 0
  14.     set i 0
  15.     set tmp {}
  16.     set selection [$subject getSelected]
  17.     if ![llength $selection] {
  18.         set selection [$subject getDefault]
  19.     }
  20.     if ![llength $selection] { set selection __ }
  21.     set maxEntryLength 0
  22.     foreach {name text} [$subject getChoices] {
  23.         set nameMap($i) $name
  24.         if ![string compare $name $selection] {
  25.         set selectedIndex $i
  26.         }
  27.         if [expr [string length $text ] > $maxEntryLength ] {
  28.             set maxEntryLength [string length $text]
  29.         }
  30.         lappend tmp $text
  31.         incr i
  32.     }
  33.     $comboBox configure -values $tmp -modifycmd [code $this valueChanged] \
  34.         -height  $i -width $maxEntryLength
  35.     pack $comboBox -side left
  36.     if [string compare $selectedIndex {} ] {
  37.         $comboBox setvalue @$selectedIndex
  38.         valueChanged
  39.     } else {
  40.         $comboBox setvalue @0
  41.         valueChanged
  42.     }
  43.     sync
  44.     }
  45.     destructor {
  46.     destroy $comboBox
  47.     }
  48.     method sync {}
  49.     method valueChanged {}
  50.     method enable {}
  51.     method disable {}
  52.     method queryState {}
  53.     method getLabelLength {} { return [string length [$subject getLabel]] }
  54.     method setLabelLength { length } \
  55.         { $comboBox configure -labelwidth $length }
  56. }
  57.  
  58. body guiChoice::sync {} {
  59.     $subject selectItem $nameMap($selectedIndex)
  60. }
  61.  
  62. body guiChoice::valueChanged {} {
  63.     set selectedIndex [ $comboBox getvalue ]
  64.     $this sync
  65. }
  66.  
  67. body guiChoice::enable {} {
  68.     set state 1
  69.     $comboBox configure -state normal
  70. }
  71.  
  72. body guiChoice::disable {} {
  73.     set state 0
  74.     $comboBox configure -state disabled
  75. }
  76.  
  77. body guiChoice::queryState {} {
  78.     return $state
  79. }
  80.  
  81.  
  82.  
  83.