Added assert and Scheduler, and started adding proper test frameworks
[tcl-tlc.git] / scripts / signal_monitor.itk
blob1731ea26cf496183d5fe725c4effe012b60fb88d
1 # vim: ft=tcl ts=4 shiftwidth=4 foldmarker=<<<,>>>
3 class tlc::Signal_monitor {
4         inherit tlc::Module
6         constructor {args} {}
7         destructor {}
9         public {
10                 variable signal_source
11         }
13         private {
14                 variable sigstatus
15                 variable oldsignals             {}
17                 method rerender {}
18                 method update_sig {signal newstatus}
19                 method force_update {}
20         }
24 configbody tlc::Signal_monitor::signal_source { #<<<1
25         rerender
29 body tlc::Signal_monitor::constructor {args} { #<<<1
30         array set sigstatus     {}
32         eval itk_initialize $args
36 body tlc::Signal_monitor::destructor {} { #<<<1
37         foreach signal $oldsignals {
38                 catch {$signal detach_output [code $this update_sig $signal]}
39         }
40         set oldsignals  {}
44 body tlc::Signal_monitor::rerender {} { #<<<1
45         catch {eval destroy [winfo children $w]}                ;# Kodomokiri
47         foreach signal $oldsignals {
48                 catch {$signal detach_output [code $this update_sig $signal]}
49         }
50         set oldsignals  {}
52         array unset sigstatus
54         if {$signal_source == ""} return
56         #label $w.sourcename -text "Source: $signal_source" -font $::cfg(boldfont)
57         label $w.sourcename -text "Source: $signal_source"
59         blt::table $w -padx 5 -pady 5 \
60                         $w.sourcename   1,1 -anchor w
62         set r   2
63         foreach {signame signal} [$signal_source signals_available] {
64                 checkbutton $w.signal_$r -text $signame \
65                                 -variable [scope sigstatus($signal)] -state disabled
67                 $signal attach_output [code $this update_sig $signal]
68                 lappend oldsignals      $signal
70                 blt::table $w \
71                                 $w.signal_$r    $r,1 -anchor w
73                 incr r
74         }
76         button $w.force_update -text "Update" -command [code $this force_update]
78         blt::table $w \
79                         $w.force_update $r,1 -anchor c
83 body tlc::Signal_monitor::update_sig {signal newstatus} { #<<<1
84         set sigstatus($signal)  $newstatus
88 body tlc::Signal_monitor::force_update {} { #<<<1
89         rerender
90         foreach signal [array names sigstatus] {
91                 set sigstatus($signal)  [$signal state]
92         }