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

  1.  
  2. class guiMultipleChoice {
  3.     inherit guiObject
  4.     variable listBox
  5.     variable nameMap
  6.     constructor {frame xuiObject} {
  7.     set subject $xuiObject
  8.     set label [$subject getLabel]
  9.     set contframe [ frame $frame.f]
  10.     set scwin [ScrolledWindow $contframe.scwin]
  11.     set listBox [ ListBox [$scwin getframe].listbox  -multicolumn 0 \
  12.     -background white -height 8 -selectbackground DarkBlue \
  13.     -selectforeground white]
  14.     $listBox bindText <Button-1> [code $this toggleItem ]
  15.     $listBox bindImage <Button-1> [code $this toggleItem ]
  16.     $scwin setwidget $listBox
  17.     pack [label $contframe.label -text $label ] -fill x 
  18.     pack $scwin -fill both    -expand true
  19.     pack $contframe -fill both -expand true
  20.        foreach {name text} [$subject getChoices] {
  21.         #puts "Adding $name $text"
  22.         addItem $name $text
  23.     }
  24.     foreach name [$subject getSelected] {
  25.         toggleItem $nameMap($name)
  26.     }
  27.     }
  28.     method sync {}
  29.     method addItem { name text }
  30.     method toggleItem { item }
  31. }
  32.  
  33.  
  34. body guiMultipleChoice::addItem { name text} {
  35.     set id [unique::newId] 
  36.     set nameMap($name) $id
  37.     $listBox insert end  $id \
  38.         -text $text \
  39.         -data $name -image unchecked
  40. }                
  41.  
  42. body guiMultipleChoice::toggleItem { item } {
  43.     switch [$listBox itemcget $item -image] {
  44.        checked {
  45.       $listBox itemconfigure $item -image unchecked
  46.        } default {
  47.             $listBox itemconfigure $item -image checked
  48.        }
  49.     }
  50.     sync
  51. }                
  52.  
  53. body guiMultipleChoice::sync {} {
  54.     set result ""
  55.     foreach one [$listBox items] {
  56.        switch [$listBox itemcget $one -image] {
  57.        checked {
  58.       append result " [$listBox itemcget $one -data]"
  59.       } unchecked {
  60.      
  61.          #do nothing
  62.      
  63.       }
  64.     }
  65.  }
  66.     $subject selectItem $result
  67.  }
  68.