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

  1.  
  2.  
  3. class guiAlternate {
  4.     inherit guiObject
  5.     variable selectedRadioButton 0
  6.     variable buttonMapGui
  7.     variable buttonMapXui
  8.     variable radiobuttons
  9.     variable containerFrames
  10.     constructor { frame xuiObject guiBuilder} {
  11.     set subject $xuiObject
  12.     set i 0
  13.     set surrFrame $frame    
  14.     if ![string compare [$subject getStyle] normal] {
  15.         set bframe [TitleFrame $frame.tf -relief groove \
  16.             -text [$subject getLabel]]
  17.         set surrFrame [$bframe getframe]
  18.         pack $bframe -fill both -expand true
  19.     }
  20.         set labeled {}
  21.     set maxLabelSize 0
  22.     foreach alternateItem [$subject getComponents] {
  23.         set newFrame [frame $surrFrame.$i]
  24.         lappend containerFrames $newFrame
  25.         set rb [radiobutton $newFrame.rb \
  26.             -variable [scope selectedRadioButton ] \
  27.             -value $i] 
  28.         pack $rb -side left
  29.         lappend radiobuttons $rb
  30.         set guiFrame [frame $newFrame.gui]
  31.         set gui [$guiBuilder render $guiFrame $alternateItem]
  32.         set buttonMapGui($i) $gui
  33.         set buttonMapXui($i) $alternateItem
  34.         if [ $gui isa guiLabeled ] {
  35.         lappend labeled $gui
  36.         if [expr [$gui getLabelLength] > $maxLabelSize] {
  37.             set maxLabelSize [$gui getLabelLength] 
  38.         }
  39.         }
  40.         incr i
  41.         pack $guiFrame -side left
  42.         pack $newFrame -anchor w
  43.     }
  44.     if [expr $maxLabelSize > 40] {
  45.         set maxLabelSize 40
  46.         }  
  47.     foreach element $labeled {
  48.         $element setLabelLength $maxLabelSize
  49.     }
  50.     if [llength [set tmp [$subject getSelectedComponent]]] {
  51.         set pos [lsearch -exact [array get buttonMapXui] $tmp]
  52.         set selectedRadioButton [lindex [array get buttonMapXui]\
  53.             [expr ($pos - 1 )]]
  54.     } 
  55.     selectGui
  56.     trace variable [scope selectedRadioButton] w [code $this valueChanged]
  57.     sync
  58.     }
  59.     destructor {
  60.     foreach {name ui} [array get buttonMapGui]  {
  61.         delete object $ui
  62.     }
  63.     eval destroy $containerFrames
  64.     }
  65.     method selectGui { }
  66.     method sync {}
  67.     method valueChanged { args }
  68.     method disableAll {}
  69.     method enable {}
  70.     method disable {}
  71.     method queryState {}
  72. }
  73.  
  74. body guiAlternate::selectGui { } {
  75.     disableAll
  76.     $buttonMapGui($selectedRadioButton) enable
  77. }
  78.  
  79. body guiAlternate::disableAll {} {
  80.     foreach element [array names buttonMapGui] {
  81.     $buttonMapGui($element) disable
  82.     }
  83. }
  84.  
  85. body guiAlternate::sync {} {
  86.     $subject selectComponent $buttonMapXui($selectedRadioButton)
  87. }
  88.  
  89. body guiAlternate::valueChanged {args} {
  90.     selectGui
  91.     sync
  92. }
  93.  
  94. body guiAlternate::enable {} {
  95.     set state 1
  96.     foreach rb $radiobuttons {
  97.     $rb configure -state normal
  98.     }
  99.     selectGui
  100. }
  101.  
  102. body guiAlternate::disable {} {
  103.     set state 0
  104.     disableAll
  105.     foreach rb $radiobuttons {
  106.     $rb configure -state disabled
  107.     }
  108. }
  109.  
  110. body guiAlternate::queryState {} {
  111.     return $state
  112. }
  113.