aboutsummaryrefslogtreecommitdiff
path: root/extensions/gui/ix/kbd.wid
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/gui/ix/kbd.wid')
-rwxr-xr-xextensions/gui/ix/kbd.wid15
1 files changed, 12 insertions, 3 deletions
diff --git a/extensions/gui/ix/kbd.wid b/extensions/gui/ix/kbd.wid
index bf624964..177f503b 100755
--- a/extensions/gui/ix/kbd.wid
+++ b/extensions/gui/ix/kbd.wid
@@ -1,4 +1,12 @@
namespace eval ::ix {
+ proc kbd_list {p t args} {
+ variable _
+ set w $p.f[expr [lindex $args 0] / 12].[lindex $args 0]
+ if {[llength $args] == 1} {set v 1;if {$_($t:lp) != -1 && $_($t:lp) ne $w} {kbd_action $_($t:lp) $t 0}} {set v [lindex $args 1]}
+ kbd_action $w $t $v
+ set _($t:lp) $w
+ }
+
proc kbd_play {t m b x y} {
variable _
foreach a {{rs {0 sunken 1 raised}} {v {0 0 1 {($y - [winfo rooty $w]) / ([winfo height $w] + 0.0)}}}} {array set [lindex $a 0] [lindex $a 1]}
@@ -15,8 +23,8 @@ namespace eval ::ix {
proc kbd_off {p t octaves} {
for {set o 0} {$o < $octaves} {incr o} {
for {set on 0} {$on < 12} {incr on} {
- set no [expr $o * 12 + $on]
- if {[$p.f$o.$no cget -relief] eq "sunken"} {kbd_action $p.f$o.$no $t 0}}}}
+ set w $p.f$o.[expr $o * 12 + $on]
+ if {[$w cget -relief] eq "sunken"} {kbd_action $w $t 0}}}}
proc kbd {path t octaves b f} {
if {![winfo exists $path.f0]} {
@@ -36,5 +44,6 @@ namespace eval ::ix {
#> kbd frame
#. -height 100 -width 60
#. #octaves 6 #bg black #fg white
-
+#. @list ::ix::kbd_list .- .| .#args
+#. @float ::ix::kbd_list .- .| .#args
::ix::kbd .- .| .#octaves .#bg .#fg