diff options
author | Hans-Christoph Steiner <eighthave@users.sourceforge.net> | 2011-10-09 16:36:37 +0000 |
---|---|---|
committer | Hans-Christoph Steiner <eighthave@users.sourceforge.net> | 2011-10-09 16:36:37 +0000 |
commit | 21c068f1916330e90f814bed461fe0821d1665ec (patch) | |
tree | 949b73696fff09a44b8d3eb01b70bae7174cbd14 /pd/tcl/dialog_audio.tcl | |
parent | bf8ced1efe1a032342e864edc635fa4e2676670d (diff) |
checked in pd-0.43-0.src.tar.gz
svn path=/trunk/; revision=15557
Diffstat (limited to 'pd/tcl/dialog_audio.tcl')
-rw-r--r-- | pd/tcl/dialog_audio.tcl | 251 |
1 files changed, 138 insertions, 113 deletions
diff --git a/pd/tcl/dialog_audio.tcl b/pd/tcl/dialog_audio.tcl index 1025f66e..56f18f45 100644 --- a/pd/tcl/dialog_audio.tcl +++ b/pd/tcl/dialog_audio.tcl @@ -4,19 +4,20 @@ namespace eval ::dialog_audio:: { namespace export pdtk_audio_dialog } -# TODO this panel really needs some reworking, it works but the code is -# very unreadable +# TODO this panel really needs some reworking, it works but the code is very +# unreadable. The panel could look a lot better too, like using menubuttons +# instead of regular buttons with tk_popup for pulldown menus. ####################### audio dialog ##################3 -proc ::dialog_audio::apply {id} { +proc ::dialog_audio::apply {mytoplevel} { global audio_indev1 audio_indev2 audio_indev3 audio_indev4 global audio_inchan1 audio_inchan2 audio_inchan3 audio_inchan4 global audio_inenable1 audio_inenable2 audio_inenable3 audio_inenable4 global audio_outdev1 audio_outdev2 audio_outdev3 audio_outdev4 global audio_outchan1 audio_outchan2 audio_outchan3 audio_outchan4 global audio_outenable1 audio_outenable2 audio_outenable3 audio_outenable4 - global audio_sr audio_advance audio_callback + global audio_sr audio_advance audio_callback audio_blocksize pdsend "pd audio-dialog \ $audio_indev1 \ @@ -37,16 +38,17 @@ proc ::dialog_audio::apply {id} { [expr $audio_outchan4 * ( $audio_outenable4 ? 1 : -1 ) ]\ $audio_sr \ $audio_advance \ - $audio_callback" + $audio_callback \ + $audio_blocksize" } -proc ::dialog_audio::cancel {id} { - pdsend "$id cancel" +proc ::dialog_audio::cancel {mytoplevel} { + pdsend "$mytoplevel cancel" } -proc ::dialog_audio::ok {id} { - ::dialog_audio::apply $id - ::dialog_audio::cancel $id +proc ::dialog_audio::ok {mytoplevel} { + ::dialog_audio::apply $mytoplevel + ::dialog_audio::cancel $mytoplevel } # callback from popup menu @@ -78,18 +80,19 @@ proc audio_popup {name buttonname varname devlist} { # opening several devices; if not, we get an extra button to turn longform # on and restart the dialog. -proc ::dialog_audio::pdtk_audio_dialog {id indev1 indev2 indev3 indev4 \ +proc ::dialog_audio::pdtk_audio_dialog {mytoplevel \ + indev1 indev2 indev3 indev4 \ inchan1 inchan2 inchan3 inchan4 \ outdev1 outdev2 outdev3 outdev4 \ outchan1 outchan2 outchan3 outchan4 sr advance multi callback \ - longform} { + longform blocksize} { global audio_indev1 audio_indev2 audio_indev3 audio_indev4 global audio_inchan1 audio_inchan2 audio_inchan3 audio_inchan4 global audio_inenable1 audio_inenable2 audio_inenable3 audio_inenable4 global audio_outdev1 audio_outdev2 audio_outdev3 audio_outdev4 global audio_outchan1 audio_outchan2 audio_outchan3 audio_outchan4 global audio_outenable1 audio_outenable2 audio_outenable3 audio_outenable4 - global audio_sr audio_advance audio_callback + global audio_sr audio_advance audio_callback audio_blocksize global audio_indevlist audio_outdevlist global pd_indev pd_outdev global audio_longform @@ -125,174 +128,196 @@ proc ::dialog_audio::pdtk_audio_dialog {id indev1 indev2 indev3 indev4 \ set audio_sr $sr set audio_advance $advance set audio_callback $callback - - toplevel $id - wm title $id [_ "Audio Settings"] - if {$::windowingsystem eq "aqua"} {$id configure -menu .menubar} - ::pd_bindings::dialog_bindings $id "audio" - - frame $id.buttonframe - pack $id.buttonframe -side bottom -fill x -pady 2m - button $id.buttonframe.cancel -text [_ "Cancel"]\ - -command "::dialog_audio::cancel $id" - button $id.buttonframe.apply -text [_ "Apply"]\ - -command "::dialog_audio::apply $id" - button $id.buttonframe.ok -text [_ "OK"]\ - -command "::dialog_audio::ok $id" - button $id.buttonframe.save -text [_ "Save all settings"]\ - -command "::dialog_audio::apply $id \; pdsend \"pd save-preferences\"" - pack $id.buttonframe.cancel $id.buttonframe.apply $id.buttonframe.ok \ - $id.buttonframe.save -side left -expand 1 + set audio_blocksize $blocksize + + toplevel $mytoplevel -class DialogWindow + wm title $mytoplevel [_ "Audio Settings"] + wm group $mytoplevel . + wm resizable $mytoplevel 0 0 + wm transient $mytoplevel + $mytoplevel configure -menu $::dialog_menubar + $mytoplevel configure -padx 10 -pady 5 + ::pd_bindings::dialog_bindings $mytoplevel "audio" + # not all Tcl/Tk versions or platforms support -topmost, so catch the error + catch {wm attributes $mytoplevel -topmost 1} + + frame $mytoplevel.buttonframe + pack $mytoplevel.buttonframe -side bottom -fill x -pady 2m + button $mytoplevel.buttonframe.cancel -text [_ "Cancel"]\ + -command "::dialog_audio::cancel $mytoplevel" + pack $mytoplevel.buttonframe.cancel -side left -expand 1 -fill x -padx 15 + button $mytoplevel.buttonframe.apply -text [_ "Apply"]\ + -command "::dialog_audio::apply $mytoplevel" + pack $mytoplevel.buttonframe.apply -side left -expand 1 -fill x -padx 15 + button $mytoplevel.buttonframe.ok -text [_ "OK"] \ + -command "::dialog_audio::ok $mytoplevel" + pack $mytoplevel.buttonframe.ok -side left -expand 1 -fill x -padx 15 + + button $mytoplevel.saveall -text [_ "Save All Settings"]\ + -command "::dialog_audio::apply $mytoplevel; pdsend {pd save-preferences}" + pack $mytoplevel.saveall -side bottom -expand 1 -pady 5 # sample rate and advance - frame $id.srf - pack $id.srf -side top + frame $mytoplevel.srf + pack $mytoplevel.srf -side top - label $id.srf.l1 -text [_ "Sample rate:"] - entry $id.srf.x1 -textvariable audio_sr -width 7 - label $id.srf.l2 -text [_ "Delay (msec):"] - entry $id.srf.x2 -textvariable audio_advance -width 4 - pack $id.srf.l1 $id.srf.x1 $id.srf.l2 $id.srf.x2 -side left + label $mytoplevel.srf.l1 -text [_ "Sample rate:"] + entry $mytoplevel.srf.x1 -textvariable audio_sr -width 7 + label $mytoplevel.srf.l2 -text [_ "Delay (msec):"] + entry $mytoplevel.srf.x2 -textvariable audio_advance -width 4 + + label $mytoplevel.srf.l3 -text [_ "Block size:"] + tk_optionMenu $mytoplevel.srf.x3 audio_blocksize 64 128 256 512 1024 2048 + + pack $mytoplevel.srf.l1 $mytoplevel.srf.x1 $mytoplevel.srf.l2 \ + $mytoplevel.srf.x2 $mytoplevel.srf.l3 $mytoplevel.srf.x3 -side left if {$audio_callback >= 0} { - checkbutton $id.srf.x3 -variable audio_callback \ + checkbutton $mytoplevel.srf.x4 -variable audio_callback \ -text [_ "Use callbacks"] -anchor e - pack $id.srf.x3 -side left + pack $mytoplevel.srf.x4 -side left } # input device 1 - frame $id.in1f - pack $id.in1f -side top + frame $mytoplevel.in1f + pack $mytoplevel.in1f -side top - checkbutton $id.in1f.x0 -variable audio_inenable1 \ + checkbutton $mytoplevel.in1f.x0 -variable audio_inenable1 \ -text [_ "Input device 1:"] -anchor e - button $id.in1f.x1 -text [lindex $audio_indevlist $audio_indev1] \ - -command [list audio_popup $id $id.in1f.x1 audio_indev1 $audio_indevlist] - label $id.in1f.l2 -text [_ "Channels:"] - entry $id.in1f.x2 -textvariable audio_inchan1 -width 3 - pack $id.in1f.x0 $id.in1f.x1 $id.in1f.l2 $id.in1f.x2 -side left -fill x + button $mytoplevel.in1f.x1 -text [lindex $audio_indevlist $audio_indev1] \ + -command [list audio_popup $mytoplevel $mytoplevel.in1f.x1 audio_indev1 $audio_indevlist] + label $mytoplevel.in1f.l2 -text [_ "Channels:"] + entry $mytoplevel.in1f.x2 -textvariable audio_inchan1 -width 3 + pack $mytoplevel.in1f.x0 $mytoplevel.in1f.x1 $mytoplevel.in1f.l2 \ + $mytoplevel.in1f.x2 -side left -fill x # input device 2 if {$longform && $multi > 1 && [llength $audio_indevlist] > 1} { - frame $id.in2f - pack $id.in2f -side top + frame $mytoplevel.in2f + pack $mytoplevel.in2f -side top - checkbutton $id.in2f.x0 -variable audio_inenable2 \ + checkbutton $mytoplevel.in2f.x0 -variable audio_inenable2 \ -text [_ "Input device 2:"] -anchor e - button $id.in2f.x1 -text [lindex $audio_indevlist $audio_indev2] \ - -command [list audio_popup $id $id.in2f.x1 audio_indev2 \ + button $mytoplevel.in2f.x1 -text [lindex $audio_indevlist $audio_indev2] \ + -command [list audio_popup $mytoplevel $mytoplevel.in2f.x1 audio_indev2 \ $audio_indevlist] - label $id.in2f.l2 -text [_ "Channels:"] - entry $id.in2f.x2 -textvariable audio_inchan2 -width 3 - pack $id.in2f.x0 $id.in2f.x1 $id.in2f.l2 $id.in2f.x2 -side left -fill x + label $mytoplevel.in2f.l2 -text [_ "Channels:"] + entry $mytoplevel.in2f.x2 -textvariable audio_inchan2 -width 3 + pack $mytoplevel.in2f.x0 $mytoplevel.in2f.x1 $mytoplevel.in2f.l2 \ + $mytoplevel.in2f.x2 -side left -fill x } # input device 3 if {$longform && $multi > 1 && [llength $audio_indevlist] > 2} { - frame $id.in3f - pack $id.in3f -side top + frame $mytoplevel.in3f + pack $mytoplevel.in3f -side top - checkbutton $id.in3f.x0 -variable audio_inenable3 \ + checkbutton $mytoplevel.in3f.x0 -variable audio_inenable3 \ -text [_ "Input device 3:"] -anchor e - button $id.in3f.x1 -text [lindex $audio_indevlist $audio_indev3] \ - -command [list audio_popup $id $id.in3f.x1 audio_indev3 \ + button $mytoplevel.in3f.x1 -text [lindex $audio_indevlist $audio_indev3] \ + -command [list audio_popup $mytoplevel $mytoplevel.in3f.x1 audio_indev3 \ $audio_indevlist] - label $id.in3f.l2 -text [_ "Channels:"] - entry $id.in3f.x2 -textvariable audio_inchan3 -width 3 - pack $id.in3f.x0 $id.in3f.x1 $id.in3f.l2 $id.in3f.x2 -side left + label $mytoplevel.in3f.l2 -text [_ "Channels:"] + entry $mytoplevel.in3f.x2 -textvariable audio_inchan3 -width 3 + pack $mytoplevel.in3f.x0 $mytoplevel.in3f.x1 $mytoplevel.in3f.l2 $mytoplevel.in3f.x2 -side left } # input device 4 if {$longform && $multi > 1 && [llength $audio_indevlist] > 3} { - frame $id.in4f - pack $id.in4f -side top + frame $mytoplevel.in4f + pack $mytoplevel.in4f -side top - checkbutton $id.in4f.x0 -variable audio_inenable4 \ + checkbutton $mytoplevel.in4f.x0 -variable audio_inenable4 \ -text [_ "Input device 4:"] -anchor e - button $id.in4f.x1 -text [lindex $audio_indevlist $audio_indev4] \ - -command [list audio_popup $id $id.in4f.x1 audio_indev4 \ + button $mytoplevel.in4f.x1 -text [lindex $audio_indevlist $audio_indev4] \ + -command [list audio_popup $mytoplevel $mytoplevel.in4f.x1 audio_indev4 \ $audio_indevlist] - label $id.in4f.l2 -text [_ "Channels:"] - entry $id.in4f.x2 -textvariable audio_inchan4 -width 3 - pack $id.in4f.x0 $id.in4f.x1 $id.in4f.l2 $id.in4f.x2 -side left + label $mytoplevel.in4f.l2 -text [_ "Channels:"] + entry $mytoplevel.in4f.x2 -textvariable audio_inchan4 -width 3 + pack $mytoplevel.in4f.x0 $mytoplevel.in4f.x1 $mytoplevel.in4f.l2 \ + $mytoplevel.in4f.x2 -side left } # output device 1 - frame $id.out1f - pack $id.out1f -side top + frame $mytoplevel.out1f + pack $mytoplevel.out1f -side top - checkbutton $id.out1f.x0 -variable audio_outenable1 \ + checkbutton $mytoplevel.out1f.x0 -variable audio_outenable1 \ -text [_ "Output device 1:"] -anchor e if {$multi == 0} { - label $id.out1f.l1 \ + label $mytoplevel.out1f.l1 \ -text [_ "(same as input device) .............. "] } else { - button $id.out1f.x1 -text [lindex $audio_outdevlist $audio_outdev1] \ - -command [list audio_popup $id $id.out1f.x1 audio_outdev1 \ + button $mytoplevel.out1f.x1 -text [lindex $audio_outdevlist $audio_outdev1] \ + -command [list audio_popup $mytoplevel $mytoplevel.out1f.x1 audio_outdev1 \ $audio_outdevlist] } - label $id.out1f.l2 -text [_ "Channels:"] - entry $id.out1f.x2 -textvariable audio_outchan1 -width 3 + label $mytoplevel.out1f.l2 -text [_ "Channels:"] + entry $mytoplevel.out1f.x2 -textvariable audio_outchan1 -width 3 if {$multi == 0} { - pack $id.out1f.x0 $id.out1f.l1 $id.out1f.x2 -side left -fill x + pack $mytoplevel.out1f.x0 $mytoplevel.out1f.l1 $mytoplevel.out1f.x2 -side left -fill x } else { - pack $id.out1f.x0 $id.out1f.x1 $id.out1f.l2 $id.out1f.x2 -side left -fill x + pack $mytoplevel.out1f.x0 $mytoplevel.out1f.x1 $mytoplevel.out1f.l2\ + $mytoplevel.out1f.x2 -side left -fill x } # output device 2 if {$longform && $multi > 1 && [llength $audio_outdevlist] > 1} { - frame $id.out2f - pack $id.out2f -side top + frame $mytoplevel.out2f + pack $mytoplevel.out2f -side top - checkbutton $id.out2f.x0 -variable audio_outenable2 \ + checkbutton $mytoplevel.out2f.x0 -variable audio_outenable2 \ -text [_ "Output device 2:"] -anchor e - button $id.out2f.x1 -text [lindex $audio_outdevlist $audio_outdev2] \ + button $mytoplevel.out2f.x1 -text [lindex $audio_outdevlist $audio_outdev2] \ -command \ - [list audio_popup $id $id.out2f.x1 audio_outdev2 $audio_outdevlist] - label $id.out2f.l2 -text [_ "Channels:"] - entry $id.out2f.x2 -textvariable audio_outchan2 -width 3 - pack $id.out2f.x0 $id.out2f.x1 $id.out2f.l2 $id.out2f.x2 -side left + [list audio_popup $mytoplevel $mytoplevel.out2f.x1 audio_outdev2 $audio_outdevlist] + label $mytoplevel.out2f.l2 -text [_ "Channels:"] + entry $mytoplevel.out2f.x2 -textvariable audio_outchan2 -width 3 + pack $mytoplevel.out2f.x0 $mytoplevel.out2f.x1 $mytoplevel.out2f.l2\ + $mytoplevel.out2f.x2 -side left } # output device 3 if {$longform && $multi > 1 && [llength $audio_outdevlist] > 2} { - frame $id.out3f - pack $id.out3f -side top + frame $mytoplevel.out3f + pack $mytoplevel.out3f -side top - checkbutton $id.out3f.x0 -variable audio_outenable3 \ + checkbutton $mytoplevel.out3f.x0 -variable audio_outenable3 \ -text [_ "Output device 3:"] -anchor e - button $id.out3f.x1 -text [lindex $audio_outdevlist $audio_outdev3] \ + button $mytoplevel.out3f.x1 -text [lindex $audio_outdevlist $audio_outdev3] \ -command \ - [list audio_popup $id $id.out3f.x1 audio_outdev3 $audio_outdevlist] - label $id.out3f.l2 -text [_ "Channels:"] - entry $id.out3f.x2 -textvariable audio_outchan3 -width 3 - pack $id.out3f.x0 $id.out3f.x1 $id.out3f.l2 $id.out3f.x2 -side left + [list audio_popup $mytoplevel $mytoplevel.out3f.x1 audio_outdev3 $audio_outdevlist] + label $mytoplevel.out3f.l2 -text [_ "Channels:"] + entry $mytoplevel.out3f.x2 -textvariable audio_outchan3 -width 3 + pack $mytoplevel.out3f.x0 $mytoplevel.out3f.x1 $mytoplevel.out3f.l2 \ + $mytoplevel.out3f.x2 -side left } # output device 4 if {$longform && $multi > 1 && [llength $audio_outdevlist] > 3} { - frame $id.out4f - pack $id.out4f -side top + frame $mytoplevel.out4f + pack $mytoplevel.out4f -side top - checkbutton $id.out4f.x0 -variable audio_outenable4 \ + checkbutton $mytoplevel.out4f.x0 -variable audio_outenable4 \ -text [_ "Output device 4:"] -anchor e - button $id.out4f.x1 -text [lindex $audio_outdevlist $audio_outdev4] \ + button $mytoplevel.out4f.x1 -text [lindex $audio_outdevlist $audio_outdev4] \ -command \ - [list audio_popup $id $id.out4f.x1 audio_outdev4 $audio_outdevlist] - label $id.out4f.l2 -text [_ "Channels:"] - entry $id.out4f.x2 -textvariable audio_outchan4 -width 3 - pack $id.out4f.x0 $id.out4f.x1 $id.out4f.l2 $id.out4f.x2 -side left + [list audio_popup $mytoplevel $mytoplevel.out4f.x1 audio_outdev4 $audio_outdevlist] + label $mytoplevel.out4f.l2 -text [_ "Channels:"] + entry $mytoplevel.out4f.x2 -textvariable audio_outchan4 -width 3 + pack $mytoplevel.out4f.x0 $mytoplevel.out4f.x1 $mytoplevel.out4f.l2 \ + $mytoplevel.out4f.x2 -side left } # if not the "long form" but if "multi" is 2, make a button to # restart with longform set. if {$longform == 0 && $multi > 1} { - frame $id.longbutton - pack $id.longbutton -side top - button $id.longbutton.b -text [_ "Use multiple devices"] \ + frame $mytoplevel.longbutton + pack $mytoplevel.longbutton -side top + button $mytoplevel.longbutton.b -text [_ "Use multiple devices"] \ -command {pdsend "pd audio-properties 1"} - pack $id.longbutton.b + pack $mytoplevel.longbutton.b } - $id.srf.x1 select from 0 - $id.srf.x1 select adjust end - focus $id.srf.x1 + $mytoplevel.srf.x1 select from 0 + $mytoplevel.srf.x1 select adjust end + focus $mytoplevel.srf.x1 } |