Update of /cvsroot/pure-data/pd/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12078
Modified Files: Tag: devel_0_39 u_main.tk Log Message: upgrading to 0.39-test2
Index: u_main.tk =================================================================== RCS file: /cvsroot/pure-data/pd/src/u_main.tk,v retrieving revision 1.4.4.10 retrieving revision 1.4.4.10.2.1 diff -C2 -d -r1.4.4.10 -r1.4.4.10.2.1 *** u_main.tk 11 May 2005 20:03:16 -0000 1.4.4.10 --- u_main.tk 22 May 2005 13:04:15 -0000 1.4.4.10.2.1 *************** *** 32,35 **** --- 32,42 ---- set pd_tearoff 1
+ # jsarlo + set pd_array_listview_pagesize 1000 + set pd_array_listview_id(0) 0 + set pd_array_listview_entry(0) 0 + set pd_array_listview_page(0) 0 + # end jsarlo + if {$pd_nt == 1} { global pd_guidir *************** *** 290,309 **** proc menu_open {} { global pd_opendir - set filename [tk_getOpenFile -defaultextension .pd \ -filetypes { {{pd files} {.pd}} {{max files} {.pat}}} \ -initialdir $pd_opendir]
! if {$filename != ""} { ! set directory [string range $filename 0 \ ! [expr [string last / $filename ] - 1]] ! set pd_opendir $directory ! set basename [string range $filename \ ! [expr [string last / $filename ] + 1] end] ! ! # pd_debug [concat file $filename base $basename dir $directory]
! pd [concat pd open [pdtk_enquote $basename] \ ! [pdtk_enquote $directory];] } } --- 297,320 ---- proc menu_open {} { global pd_opendir set filename [tk_getOpenFile -defaultextension .pd \ -filetypes { {{pd files} {.pd}} {{max files} {.pat}}} \ -initialdir $pd_opendir] + if {$filename != ""} {open_file $filename} + }
! proc open_file {filename} { ! global pd_opendir ! set directory [string range $filename 0 [expr [string last / $filename] - 1]] ! set pd_opendir $directory ! set basename [string range $filename [expr [string last / $filename] + 1] end] ! if {[string last .pd $filename] >= 0} { ! pd "pd open [pdtk_enquote $basename] [pdtk_enquote $directory] ;" ! } ! }
! catch { ! package require tkdnd ! dnd bindtarget . text/uri-list <Drop> { ! foreach file %D {open_file $file} } } *************** *** 365,381 **** # open HTML docs from the menu using the OS-default HTML viewer proc menu_openhtml {filename} { ! global pd_nt ! ! if {$pd_nt == 0} { ! exec sh -c \ ! [format "mozilla file:%s || netscape file:%s &\n" \ ! $filename $filename] ! } elseif {$pd_nt == 2} { ! puts stderr [format "open %s" $filename] ! exec sh -c [format "open %s" $filename] ! } else { ! exec rundll32 url.dll,FileProtocolHandler \ ! [format "file:%s" $filename] & ! } }
--- 376,392 ---- # open HTML docs from the menu using the OS-default HTML viewer proc menu_openhtml {filename} { ! global pd_nt ! ! if {$pd_nt == 0} { ! exec sh -c \ ! [format "firefox file:%s || mozilla file:%s &\n" \ ! $filename $filename] ! } elseif {$pd_nt == 2} { ! puts stderr [format "open %s" $filename] ! exec sh -c [format "open %s" $filename] ! } else { ! exec rundll32 url.dll,FileProtocolHandler \ ! [format "file:%s" $filename] & ! } }
*************** *** 431,436 ****
proc doc_submenu {helpmenu subdir} { ! global help_top_directory pd_tearoff ! # see if $subdir exists at all... if { [ catch { --- 442,447 ----
proc doc_submenu {helpmenu subdir} { ! global help_top_directory pd_tearoff ! # see if $subdir exists at all... if { [ catch { *************** *** 438,450 **** } ] } { return }
! set menudir $help_top_directory/$subdir ! regsub -all "\." $subdir "" submenu - - menu $helpmenu.$submenu -tearoff $pd_tearoff - regsub -all "\." $subdir " " submenuname - $helpmenu add cascade -label $submenuname \ - -menu $helpmenu.$submenu
# use this glob pattern to exclude the supporting files # foreach file [ lsort [ glob -dir $menudir {*[0-9][0-9]*} ] ] --- 449,461 ---- } ] } { return }
! set menudir $help_top_directory/$subdir ! regsub -all "\." $subdir "" submenu
+ menu $helpmenu.$submenu -tearoff $pd_tearoff + regsub -all "\." $subdir " " submenuname + $helpmenu add cascade -label $submenuname \ + -menu $helpmenu.$submenu + catch { # use this glob pattern to exclude the supporting files # foreach file [ lsort [ glob -dir $menudir {*[0-9][0-9]*} ] ] *************** *** 455,458 **** --- 466,470 ---- -command "menu_doc_open doc/$subdir $filename" } + } }
*************** *** 581,584 **** --- 593,597 ----
proc menu_close {name} { + pdtk_canvas_checkgeometry $name pd [concat $name menuclose ;] } *************** *** 836,841 ****
toplevel $name -menu $name.m ! # puts stderr [concat geometry: $geometry] ! wm geometry $name $geometry canvas $name.c -width $width -height $height -background white \ -yscrollcommand "$name.scrollvert set" \ --- 849,868 ----
toplevel $name -menu $name.m ! ! # slide offscreen windows into view ! set geometry [split $geometry +] ! set i 1 ! foreach geo {width height} { ! set screen($geo) [winfo screen$geo .] ! if {[expr [lindex $geometry $i] + [set $geo]] > $screen($geo)} { ! set pos($geo) [expr $screen($geo) - [set $geo]] ! if {$pos($geo) < 0} {set pos($geo) 0} ! lset geometry $i $pos($geo) ! } ! incr i ! } ! set geometry [join $geometry +] ! ! wm geometry $name $geometry canvas $name.c -width $width -height $height -background white \ -yscrollcommand "$name.scrollvert set" \ *************** *** 968,974 **** --- 995,1003 ---- if { $editable == 0 } { $name.m.edit entryconfigure "Edit mode" -indicatoron false } + ############iemlib##################
+ # the put menu menu $name.m.put -tearoff $pd_tearoff *************** *** 1134,1140 **** {pdtk_canvas_click %W %x %y %b 7} } else { ! bind $name.c <Alt-Button> {pdtk_canvas_click %W %x %y %b 4} ! bind $name.c <Alt-Shift-Button> {pdtk_canvas_click %W %x %y %b 5} ! bind $name.c <Alt-Control-Button> {pdtk_canvas_click %W %x %y %b 6} bind $name.c <Alt-Control-Shift-Button> \ {pdtk_canvas_click %W %x %y %b 7} --- 1163,1169 ---- {pdtk_canvas_click %W %x %y %b 7} } else { ! bind $name.c <Alt-Button> {pdtk_canvas_click %W %x %y %b 4} ! bind $name.c <Alt-Shift-Button> {pdtk_canvas_click %W %x %y %b 5} ! bind $name.c <Alt-Control-Button> {pdtk_canvas_click %W %x %y %b 6} bind $name.c <Alt-Control-Shift-Button> \ {pdtk_canvas_click %W %x %y %b 7} *************** *** 1169,1184 **** bind $name.c <KeyRelease> {pdtk_canvas_keyup %W %K %A} bind $name.c <Motion> {pdtk_canvas_motion %W %x %y 0} if {$pd_nt == 2} { bind $name.c <Option-Motion> {pdtk_canvas_motion %W %x %y 4} } else { ! bind $name.c <Alt-Motion> {pdtk_canvas_motion %W %x %y 4} } bind $name.c <Map> {pdtk_canvas_map %W} bind $name.c <Unmap> {pdtk_canvas_unmap %W} focus $name.c # puts stderr "all done" # after 1 [concat raise $name] }
#################### event binding procedures ################
--- 1198,1438 ---- bind $name.c <KeyRelease> {pdtk_canvas_keyup %W %K %A} bind $name.c <Motion> {pdtk_canvas_motion %W %x %y 0} + bind $name.c <Control-Motion> {pdtk_canvas_motion %W %x %y 2} if {$pd_nt == 2} { bind $name.c <Option-Motion> {pdtk_canvas_motion %W %x %y 4} } else { ! bind $name.c <Alt-Motion> {pdtk_canvas_motion %W %x %y 4} } bind $name.c <Map> {pdtk_canvas_map %W} bind $name.c <Unmap> {pdtk_canvas_unmap %W} focus $name.c + + switch $pd_nt { 0 { + bind $name.c <Button-4> "pdtk_canvas_scroll $name.c y -1" + bind $name.c <Button-5> "pdtk_canvas_scroll $name.c y +1" + bind $name.c <Shift-Button-4> "pdtk_canvas_scroll $name.c x -1" + bind $name.c <Shift-Button-5> "pdtk_canvas_scroll $name.c x +1" + } default { + bind $name.c <MouseWheel> \ + "pdtk_canvas_scroll $name.c y [expr -abs(%D)/%D]" + bind $name.c <Shift-MouseWheel> \ + "pdtk_canvas_scroll $name.c x [expr -abs(%D)/%D]" + }} + + catch { + dnd bindtarget $name.c text/uri-list <Drop> \ + "pdtk_canvas_makeobjs $name %D %x %y" + } + # puts stderr "all done" # after 1 [concat raise $name] + global pdtk_canvas_mouseup_name + set pdtk_canvas_mouseup_name "" + } + + #### jsarlo ##### + proc pdtk_array_listview_setpage {arrayName page} { + global pd_array_listview_page + set pd_array_listview_page($arrayName) $page + } + + proc pdtk_array_listview_changepage {arrayName np} { + global pd_array_listview_page + pdtk_array_listview_setpage \ + $arrayName [expr $pd_array_listview_page($arrayName) + $np] + pdtk_array_listview_fillpage $arrayName + } + + proc pdtk_array_listview_fillpage {arrayName} { + global pd_array_listview_page + global pd_array_listview_id + set windowName [format ".%sArrayWindow" $arrayName] + if {[winfo exists $windowName]} { + set cmd "$pd_array_listview_id($arrayName) \ + arrayviewlistfillpage \ + $pd_array_listview_page($arrayName)" + pd [concat $cmd ;] + } + } + + proc pdtk_array_listview_new {id arrayName page} { + global pd_nt + global pd_array_listview_page + global pd_array_listview_id + set pd_array_listview_page($arrayName) $page + set pd_array_listview_id($arrayName) $id + set windowName [format ".%sArrayWindow" $arrayName] + if [winfo exists $windowName] then [destroy $windowName] + toplevel $windowName + wm protocol $windowName WM_DELETE_WINDOW \ + "pdtk_array_listview_close $id $arrayName" + wm title $windowName [concat $arrayName "(list view)"] + # FIXME + set font 12 + set $windowName.lb [listbox $windowName.lb -height 20 -width 25\ + -selectmode extended \ + -relief solid -background white -borderwidth 1 \ + -font [format -*-courier-bold--normal--%d-* \ + $font] \ + -yscrollcommand "$windowName.lb.sb set"] + set $windowName.lb.sb [scrollbar $windowName.lb.sb \ + -command "$windowName.lb yview" -orient vertical] + place configure $windowName.lb.sb -relheight 1 -relx 0.9 -relwidth 0.1 + pack $windowName.lb + bind $windowName.lb <Double-ButtonPress-1> \ + "pdtk_array_listview_edit $arrayName $page $font" + # handle copy/paste + if {$pd_nt == 0} { + selection handle $windowName.lb \ + "pdtk_array_listview_lbselection $arrayName" + } else { + if {$pd_nt == 1} { + bind $windowName.lb <ButtonPress-3> \ + "pdtk_array_listview_popup $arrayName" + } + } + set $windowName.prevBtn [button $windowName.prevBtn -text "<-" \ + -command "pdtk_array_listview_changepage $arrayName -1"] + set $windowName.nextBtn [button $windowName.nextBtn -text "->" \ + -command "pdtk_array_listview_changepage $arrayName 1"] + pack $windowName.prevBtn -side left -ipadx 20 -pady 10 + pack $windowName.nextBtn -side right -ipadx 20 -pady 10 + focus $windowName + } + + proc pdtk_array_listview_lbselection {arrayName off size} { + set windowName [format ".%sArrayWindow" $arrayName] + set itemNums [$windowName.lb curselection] + set cbString "" + for {set i 0} {$i < [expr [llength $itemNums] - 1]} {incr i} { + set listItem [$windowName.lb get [lindex $itemNums $i]] + append cbString [string range $listItem \ + [expr [string first ") " $listItem] + 2] \ + end] + append cbString "\n" + } + set listItem [$windowName.lb get [lindex $itemNums $i]] + append cbString [string range $listItem \ + [expr [string first ") " $listItem] + 2] \ + end] + set last $cbString + } + + # Win32 uses a popup menu for copy/paste + proc pdtk_array_listview_popup {arrayName} { + set windowName [format ".%sArrayWindow" $arrayName] + if [winfo exists $windowName.popup] then [destroy $windowName.popup] + menu $windowName.popup -tearoff false + $windowName.popup add command -label {Copy} \ + -command "pdtk_array_listview_copy $arrayName; \ + destroy $windowName.popup" + $windowName.popup add command -label {Paste} \ + -command "pdtk_array_listview_paste $arrayName; \ + destroy $windowName.popup" + tk_popup $windowName.popup [winfo pointerx $windowName] \ + [winfo pointery $windowName] 0 + } + + proc pdtk_array_listview_copy {arrayName} { + set windowName [format ".%sArrayWindow" $arrayName] + set itemNums [$windowName.lb curselection] + set cbString "" + for {set i 0} {$i < [expr [llength $itemNums] - 1]} {incr i} { + set listItem [$windowName.lb get [lindex $itemNums $i]] + append cbString [string range $listItem \ + [expr [string first ") " $listItem] + 2] \ + end] + append cbString "\n" + } + set listItem [$windowName.lb get [lindex $itemNums $i]] + append cbString [string range $listItem \ + [expr [string first ") " $listItem] + 2] \ + end] + clipboard clear + clipboard append $cbString + } + + proc pdtk_array_listview_paste {arrayName} { + global pd_array_listview_page + global pd_array_listview_pagesize + set cbString [selection get -selection CLIPBOARD] + set lbName [format ".%sArrayWindow.lb" $arrayName] + set itemNum [lindex [$lbName curselection] 0] + set splitChars ", \n" + set itemString [split $cbString $splitChars] + set flag 1 + for {set i 0; set counter 0} {$i < [llength $itemString]} {incr i} { + if {[lindex $itemString $i] != {}} { + pd [concat $arrayName [expr $itemNum + \ + [expr $counter + \ + [expr $pd_array_listview_pagesize \ + * $pd_array_listview_page($arrayName)]]] \ + [lindex $itemString $i] ;] + incr counter + set flag 0 + } + } }
+ proc pdtk_array_listview_edit {arrayName page font} { + global pd_array_listview_entry + global pd_nt + if {$pd_nt == 0} { + set font [expr $font - 2] + } + set lbName [format ".%sArrayWindow.lb" $arrayName] + if {[winfo exists $lbName.entry]} { + pdtk_array_listview_update_entry \ + $arrayName $pd_array_listview_entry($arrayName) + unset pd_array_listview_entry($arrayName) + } + set itemNum [$lbName index active] + set pd_array_listview_entry($arrayName) $itemNum + set bbox [$lbName bbox $itemNum] + set y [expr [lindex $bbox 1] - 4] + set $lbName.entry [entry $lbName.entry \ + -font [format -*-courier-bold--normal--%d-* $font]] + $lbName.entry insert 0 [] + place configure $lbName.entry -relx 0 -y $y -relwidth 1 + lower $lbName.entry + focus $lbName.entry + bind $lbName.entry <Return> \ + "pdtk_array_listview_update_entry $arrayName $itemNum;" + } + + proc pdtk_array_listview_update_entry {arrayName itemNum} { + global pd_array_listview_page + global pd_array_listview_pagesize + set lbName [format ".%sArrayWindow.lb" $arrayName] + set splitChars ", \n" + set itemString [split [$lbName.entry get] $splitChars] + set flag 1 + for {set i 0; set counter 0} {$i < [llength $itemString]} {incr i} { + if {[lindex $itemString $i] != {}} { + pd [concat $arrayName [expr $itemNum + \ + [expr $counter + \ + [expr $pd_array_listview_pagesize \ + * $pd_array_listview_page($arrayName)]]] \ + [lindex $itemString $i] ;] + incr counter + set flag 0 + } + } + pdtk_array_listview_fillpage $arrayName + destroy $lbName.entry + } + + proc pdtk_array_listview_closeWindow {arrayName} { + set windowName [format ".%sArrayWindow" $arrayName] + destroy $windowName + } + + proc pdtk_array_listview_close {id arrayName} { + pdtk_array_listview_closeWindow $arrayName + set cmd [concat $id "arrayviewclose" ;] + pd $cmd + } + ##### end jsarlo ##### + #################### event binding procedures ################
*************** *** 1335,1347 **** if {$key == "s" || $key == "S"} {menu_saveas $topname} if {$key == "z" || $key == "Z"} {menu_redo $topname} ! if {$key == "b" || $key == "B"} {menu_bng $topname 1} ! if {$key == "t" || $key == "T"} {menu_toggle $topname 1} ! if {$key == "n" || $key == "N"} {menu_numbox $topname 1} ! if {$key == "v" || $key == "V"} {menu_vslider $topname 1} ! if {$key == "h" || $key == "H"} {menu_hslider $topname 1} ! if {$key == "i" || $key == "I"} {menu_hradio $topname 1} ! if {$key == "d" || $key == "D"} {menu_vradio $topname 1} ! if {$key == "u" || $key == "U"} {menu_vumeter $topname 1} ! if {$key == "c" || $key == "C"} {menu_mycnv $topname 1} } else { if {$key == "e" || $key == "E"} {menu_editmode $topname} --- 1589,1601 ---- if {$key == "s" || $key == "S"} {menu_saveas $topname} if {$key == "z" || $key == "Z"} {menu_redo $topname} ! if {$key == "b" || $key == "B"} {menu_bng $topname 1} ! if {$key == "t" || $key == "T"} {menu_toggle $topname 1} ! if {$key == "n" || $key == "N"} {menu_numbox $topname 1} ! if {$key == "v" || $key == "V"} {menu_vslider $topname 1} ! if {$key == "h" || $key == "H"} {menu_hslider $topname 1} ! if {$key == "i" || $key == "I"} {menu_hradio $topname 1} ! if {$key == "d" || $key == "D"} {menu_vradio $topname 1} ! if {$key == "u" || $key == "U"} {menu_vumeter $topname 1} ! if {$key == "c" || $key == "C"} {menu_mycnv $topname 1} } else { if {$key == "e" || $key == "E"} {menu_editmode $topname} *************** *** 1349,1368 **** if {$key == "s" || $key == "S"} {menu_save $topname} if {$key == "z" || $key == "Z"} {menu_undo $topname} ! if {$key == "n" || $key == "N"} {menu_new} ! if {$key == "o" || $key == "O"} {menu_open} ! if {$key == "m" || $key == "M"} {menu_send} ! if {$key == "w" || $key == "W"} {menu_close $topname} ! if {$key == "p" || $key == "P"} {menu_print $topname} ! if {$key == "x" || $key == "X"} {menu_cut $topname} ! if {$key == "c" || $key == "C"} {menu_copy $topname} ! if {$key == "v" || $key == "V"} {menu_paste $topname} ! if {$key == "d" || $key == "D"} {menu_duplicate $topname} ! if {$key == "a" || $key == "A"} {menu_selectall $topname} ! if {$key == "t" || $key == "T"} {menu_texteditor $topname} ! if {$key == "f" || $key == "F"} {menu_findobject $topname} ! if {$key == "g" || $key == "G"} {menu_findagain $topname} } }
proc pdtk_canvas_motion {name x y mods} { # puts stderr [concat [canvastosym $name] $name $x $y] --- 1603,1626 ---- if {$key == "s" || $key == "S"} {menu_save $topname} if {$key == "z" || $key == "Z"} {menu_undo $topname} ! if {$key == "n" || $key == "N"} {menu_new} ! if {$key == "o" || $key == "O"} {menu_open} ! if {$key == "m" || $key == "M"} {menu_send} ! if {$key == "w" || $key == "W"} {menu_close $topname} ! if {$key == "p" || $key == "P"} {menu_print $topname} ! if {$key == "x" || $key == "X"} {menu_cut $topname} ! if {$key == "c" || $key == "C"} {menu_copy $topname} ! if {$key == "v" || $key == "V"} {menu_paste $topname} ! if {$key == "d" || $key == "D"} {menu_duplicate $topname} ! if {$key == "a" || $key == "A"} {menu_selectall $topname} ! if {$key == "t" || $key == "T"} {menu_texteditor $topname} ! if {$key == "f" || $key == "F"} {menu_findobject $topname} ! if {$key == "g" || $key == "G"} {menu_findagain $topname} } }
+ proc pdtk_canvas_scroll {canvas xy distance} { + $canvas [list $xy]view scroll $distance units + } + proc pdtk_canvas_motion {name x y mods} { # puts stderr [concat [canvastosym $name] $name $x $y] *************** *** 1383,1386 **** --- 1641,1654 ---- }
+ proc pdtk_canvas_makeobjs {name files x y} { + set c 0 + for {set n 0} {$n < [llength $files]} {incr n} { + if {[regexp {.*/(.+).pd$} [lindex $files $n] file obj] == 1} { + pd $name obj $x [expr $y + ($c * 30)] [pdtk_enquote $obj] ; + incr c + } + } + } + set saveas_dir nowhere
*************** *** 1527,1531 **** } } ! pdtk_unspace $ret } --- 1795,1799 ---- } } ! concat $ret } *************** *** 2608,2611 **** --- 2876,2885 ---- }
+ # jsarlo + proc array_viewlist {id name page} { + pd [concat $id arrayviewlistnew;] + } + # end jsarlo + proc array_cancel {id} { set cmd [concat $id cancel ;] *************** *** 2662,2671 **** radiobutton $id.drawasrects.drawasrects0 -value 0 \ -variable $var_array_drawasrects \ ! -text "draw as polygon" radiobutton $id.drawasrects.drawasrects1 -value 1 \ -variable $var_array_drawasrects \ ! -text "draw as points" pack $id.drawasrects.drawasrects0 -side top -anchor w pack $id.drawasrects.drawasrects1 -side top -anchor w
if {$newone != 0} { --- 2936,2949 ---- radiobutton $id.drawasrects.drawasrects0 -value 0 \ -variable $var_array_drawasrects \ ! -text "draw as points" radiobutton $id.drawasrects.drawasrects1 -value 1 \ -variable $var_array_drawasrects \ ! -text "polygon" ! radiobutton $id.drawasrects.drawasrects2 -value 2 \ ! -variable $var_array_drawasrects \ ! -text "bezier curve" pack $id.drawasrects.drawasrects0 -side top -anchor w pack $id.drawasrects.drawasrects1 -side top -anchor w + pack $id.drawasrects.drawasrects2 -side top -anchor w
if {$newone != 0} { *************** *** 2685,2688 **** --- 2963,2973 ---- pack $id.deleteme -side top } + # jsarlo + if {$newone == 0} { + button $id.listview -text {View list}\ + -command "array_viewlist $id $name 0" + pack $id.listview -side left + } + # end jsarlo frame $id.buttonframe pack $id.buttonframe -side bottom -fill x -pady 2m *************** *** 2913,2917 **** # tb: user defined typefaces proc pdtk_pd_startup {version apilist fontname} { ! puts stderr [concat $version $apilist $fontname] global pd_myversion pd_apilist set pd_myversion $version --- 3198,3202 ---- # tb: user defined typefaces proc pdtk_pd_startup {version apilist fontname} { ! # puts stderr [concat $version $apilist $fontname] global pd_myversion pd_apilist set pd_myversion $version *************** *** 3495,3499 **** set midi_alsain [llength $indevlist] set midi_alsaout [llength $outdevlist] ! toplevel $id wm title $id {midi} --- 3780,3784 ---- set midi_alsain [llength $indevlist] set midi_alsaout [llength $outdevlist] ! toplevel $id wm title $id {midi} *************** *** 3511,3515 **** pack $id.buttonframe.apply -side left -expand 1 pack $id.buttonframe.ok -side left -expand 1 ! frame $id.in1f pack $id.in1f -side top --- 3796,3801 ---- pack $id.buttonframe.apply -side left -expand 1 pack $id.buttonframe.ok -side left -expand 1 ! ! # input device 1 frame $id.in1f pack $id.in1f -side top *************** *** 3607,3611 **** pack $id.longbutton.b } ! } if {$alsa} { label $id.in1f.l1 -text "In Channels:" --- 3893,3897 ---- pack $id.longbutton.b } ! } if {$alsa} { label $id.in1f.l1 -text "In Channels:"