From 22a829cb1907c79bfe68ad91314a1dddbf1beeb3 Mon Sep 17 00:00:00 2001 From: Miller Puckette Date: Tue, 1 Sep 2009 18:22:23 +0000 Subject: merge in HC's new tcl code and start taking patches svn path=/trunk/; revision=12166 --- pd/tcl/AppMain.tcl | 7 +- pd/tcl/apple_events.tcl | 8 +- pd/tcl/dialog_array.tcl | 328 +++++++++++++++ pd/tcl/dialog_audio.tcl | 298 +++++++++++++ pd/tcl/dialog_canvas.tcl | 213 ++++++++++ pd/tcl/dialog_find.tcl | 71 ++-- pd/tcl/dialog_font.tcl | 184 ++++---- pd/tcl/dialog_gatom.tcl | 145 +++---- pd/tcl/dialog_iemgui.tcl | 492 +++++++++++----------- pd/tcl/dialog_midi.tcl | 344 +++++++++++++++ pd/tcl/opt_parser.tcl | 78 ++++ pd/tcl/pd-gui.tcl | 503 ++++++++++++++++++++++ pd/tcl/pd.tcl | 315 -------------- pd/tcl/pd_bindings.tcl | 152 +++++-- pd/tcl/pd_connect.tcl | 4 +- pd/tcl/pd_menucommands.tcl | 126 ++++-- pd/tcl/pd_menus.tcl | 326 +++++++++----- pd/tcl/pdtk_canvas.tcl | 77 ++-- pd/tcl/pdwindow.tcl | 53 +++ pd/tcl/pkgIndex.tcl | 7 +- pd/tcl/wheredoesthisgo.tcl | 1003 +------------------------------------------- 21 files changed, 2765 insertions(+), 1969 deletions(-) create mode 100644 pd/tcl/dialog_array.tcl create mode 100644 pd/tcl/dialog_audio.tcl create mode 100644 pd/tcl/dialog_canvas.tcl create mode 100644 pd/tcl/dialog_midi.tcl create mode 100644 pd/tcl/opt_parser.tcl create mode 100644 pd/tcl/pd-gui.tcl delete mode 100644 pd/tcl/pd.tcl create mode 100644 pd/tcl/pdwindow.tcl (limited to 'pd/tcl') diff --git a/pd/tcl/AppMain.tcl b/pd/tcl/AppMain.tcl index 26adc832..b170c6f5 100644 --- a/pd/tcl/AppMain.tcl +++ b/pd/tcl/AppMain.tcl @@ -7,8 +7,7 @@ puts --------------------------AppMain.tcl----------------------------------- catch {console show} -# FIXME apple_events must require a newer tcl than 8.4? -# package require apple_events +package require apple_events puts "AppMain.tcl" puts "argv0: $argv0" @@ -21,7 +20,7 @@ if {[string first "-psn" [lindex $argv 0]] == 0} { set argc [expr $argc - 1] } -# launch pd.tk here -if [catch {source [file join [file dirname [info script]] ../tcl/pd.tcl]}] { +# launch pd-gui.tcl here +if [catch {source [file join [file dirname [info script]] pd-gui.tcl]}] { puts stderr $errorInfo } diff --git a/pd/tcl/apple_events.tcl b/pd/tcl/apple_events.tcl index b52dcdba..cfc92982 100644 --- a/pd/tcl/apple_events.tcl +++ b/pd/tcl/apple_events.tcl @@ -29,14 +29,14 @@ proc ::tk::mac::OnShow {} { # kAEShowPreferences proc ::tk::mac::ShowPreferences {} { - menu_preferences_panel + menu_preferences_dialog } # kAEQuitApplication #proc ::tk::mac::Quit {} { -# # TODO sort this out... how to quit pd-gui after sending the message -# puts stderr "Custom exit proc" -# pdsend "pd verifyquit" +# # TODO sort this out... how to quit pd-gui after sending the message +# puts stderr "Custom exit proc" +# pdsend "pd verifyquit" #} # these I gleaned by reading the source (tkMacOSXHLEvents.c) diff --git a/pd/tcl/dialog_array.tcl b/pd/tcl/dialog_array.tcl new file mode 100644 index 00000000..87b2de8c --- /dev/null +++ b/pd/tcl/dialog_array.tcl @@ -0,0 +1,328 @@ +package provide dialog_array 0.1 + +namespace eval ::dialog_array:: { + namespace export pdtk_array_dialog + namespace export pdtk_array_listview_new + namespace export pdtk_array_listview_fillpage + namespace export pdtk_array_listview_setpage + namespace export pdtk_array_listview_closeWindow +} + +# global variables for the listview +array set pd_array_listview_entry {} +array set pd_array_listview_id {} +array set pd_array_listview_page {} +set pd_array_listview_pagesize 0 +# this stores the state of the "save me" check button +array set saveme_button {} +# this stores the state of the "draw as" radio buttons +array set drawas_button {} +# this stores the state of the "in new graph"/"in last graph" radio buttons +# and the "delete array" checkbutton +array set otherflag_button {} + +# TODO figure out how to escape $ args so sharptodollar() isn't needed + +############ pdtk_array_dialog -- dialog window for arrays ######### + +proc ::dialog_array::pdtk_array_listview_setpage {arrayName page} { + set ::pd_array_listview_page($arrayName) $page +} + +proc ::dialog_array::listview_changepage {arrayName np} { + pdtk_array_listview_setpage \ + $arrayName [expr $::pd_array_listview_page($arrayName) + $np] + pdtk_array_listview_fillpage $arrayName +} + +proc ::dialog_array::pdtk_array_listview_fillpage {arrayName} { + set windowName [format ".%sArrayWindow" $arrayName] + set topItem [expr [lindex [$windowName.lb yview] 0] * \ + [$windowName.lb size]] + + if {[winfo exists $windowName]} { + set cmd "$::pd_array_listview_id($arrayName) \ + arrayviewlistfillpage \ + $::pd_array_listview_page($arrayName) \ + $topItem" + + pdsend $cmd + } +} + +proc ::dialog_array::pdtk_array_listview_new {id arrayName page} { + 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 -class DialogWindow + wm group $windowName . + wm protocol $windowName WM_DELETE_WINDOW \ + "::dialog_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 {{%s} %d %s} $::font_family $font $::font_weight]\ + -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 -expand 1 -fill both + bind $windowName.lb \ + "::dialog_array::listview_edit $arrayName $page $font" + # handle copy/paste + switch -- $::windowingsystem { + "x11" {selection handle $windowName.lb \ + "::dialog_array::listview_lbselection $arrayName"} + "win32" {bind $windowName.lb \ + "::dialog_array::listview_popup $arrayName"} + } + set $windowName.prevBtn [button $windowName.prevBtn -text "<-" \ + -command "::dialog_array::listview_changepage $arrayName -1"] + set $windowName.nextBtn [button $windowName.nextBtn -text "->" \ + -command "::dialog_array::listview_changepage $arrayName 1"] + pack $windowName.prevBtn -side left -ipadx 20 -pady 10 -anchor s + pack $windowName.nextBtn -side right -ipadx 20 -pady 10 -anchor s + focus $windowName +} + +proc ::dialog_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 ::dialog_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 "::dialog_array::listview_copy $arrayName; \ + destroy $windowName.popup" + $windowName.popup add command -label [_ "Paste"] \ + -command "::dialog_array::listview_paste $arrayName; \ + destroy $windowName.popup" + tk_popup $windowName.popup [winfo pointerx $windowName] \ + [winfo pointery $windowName] 0 +} + +proc ::dialog_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 ::dialog_array::listview_paste {arrayName} { + 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] ne {}} { + pdsend "$arrayName [expr $itemNum + \ + [expr $counter + \ + [expr $::pd_array_listview_pagesize \ + * $::pd_array_listview_page($arrayName)]]] \ + [lindex $itemString $i]" + incr counter + set flag 0 + } + } +} + +proc ::dialog_array::listview_edit {arrayName page font} { + set lbName [format ".%sArrayWindow.lb" $arrayName] + if {[winfo exists $lbName.entry]} { + ::dialog_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 {{%s} %d %s} $::font_family $font $::font_weight]] + $lbName.entry insert 0 [] + place configure $lbName.entry -relx 0 -y $y -relwidth 1 + lower $lbName.entry + focus $lbName.entry + bind $lbName.entry \ + "::dialog_array::listview_update_entry $arrayName $itemNum;" +} + +proc ::dialog_array::listview_update_entry {arrayName itemNum} { + 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] ne {}} { + pdsend "$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 ::dialog_array::pdtk_array_listview_closeWindow {arrayName} { + set mytoplevel [format ".%sArrayWindow" $arrayName] + destroy $mytoplevel +} + +proc ::dialog_array::listview_close {mytoplevel arrayName} { + pdtk_array_listview_closeWindow $arrayName + pdsend "$mytoplevel arrayviewclose" +} + +proc ::dialog_array::apply {mytoplevel} { +# TODO figure out how to ditch this escaping mechanism + set mofo [$mytoplevel.name.entry get] + if {[string index $mofo 0] == "$"} { + set mofo [string replace $mofo 0 0 #] } + + pdsend "$mytoplevel arraydialog \ + $mofo \ + [$mytoplevel.size.entry get] \ + [expr $::saveme_button($mytoplevel) + (2 * $::drawas_button($mytoplevel))] \ + $::otherflag_button($mytoplevel)" +} + +proc ::dialog_array::openlistview {mytoplevel} { + pdsend "$mytoplevel arrayviewlistnew" +} + +proc ::dialog_array::cancel {mytoplevel} { + pdsend "$mytoplevel cancel" +} + +proc ::dialog_array::ok {mytoplevel} { + ::dialog_array::apply $mytoplevel + ::dialog_array::cancel $mytoplevel +} + +proc ::dialog_array::pdtk_array_dialog {mytoplevel name size flags newone} { +puts "::dialog_array::pdtk_array_dialog {$mytoplevel $name $size $flags $newone}" + if {[winfo exists $mytoplevel]} { + wm deiconify $mytoplevel + raise $mytoplevel + } else { + create_dialog $mytoplevel $newone + } + + $mytoplevel.name.entry insert 0 $name + $mytoplevel.size.entry insert 0 $size + set ::saveme_button($mytoplevel) [expr $flags & 1] + set ::drawas_button($mytoplevel) [expr ( $flags & 6 ) >> 1] + set ::otherflag_button($mytoplevel) 0 +# pd -> tcl +# 2 * (int)(template_getfloat(template_findbyname(sc->sc_template), gensym("style"), x->x_scalar->sc_vec, 1))); + +# tcl->pd +# int style = ((flags & 6) >> 1); +} + +proc ::dialog_array::create_dialog {mytoplevel newone} { + toplevel $mytoplevel -class DialogWindow + wm title $mytoplevel [_ "Array Properties"] + if {$::windowingsystem eq "aqua"} {$mytoplevel configure -menu .menubar} + ::pd_bindings::dialog_bindings $mytoplevel "array" + + frame $mytoplevel.name + pack $mytoplevel.name -side top + label $mytoplevel.name.label -text [_ "Name:"] + entry $mytoplevel.name.entry + pack $mytoplevel.name.label $mytoplevel.name.entry -anchor w + + frame $mytoplevel.size + pack $mytoplevel.size -side top + label $mytoplevel.size.label -text [_ "Size:"] + entry $mytoplevel.size.entry + pack $mytoplevel.size.label $mytoplevel.size.entry -anchor w + + checkbutton $mytoplevel.saveme -text [_ "Save contents"] \ + -variable ::saveme_button($mytoplevel) -anchor w + pack $mytoplevel.saveme -side top + + labelframe $mytoplevel.drawas -text [_ "Draw as:"] -padx 20 -borderwidth 1 + pack $mytoplevel.drawas -side top -fill x + radiobutton $mytoplevel.drawas.points -value 0 \ + -variable ::drawas_button($mytoplevel) -text [_ "Points"] + radiobutton $mytoplevel.drawas.polygon -value 1 \ + -variable ::drawas_button($mytoplevel) -text [_ "Polygon"] + radiobutton $mytoplevel.drawas.bezier -value 2 \ + -variable ::drawas_button($mytoplevel) -text [_ "Bezier curve"] + pack $mytoplevel.drawas.points -side top -anchor w + pack $mytoplevel.drawas.polygon -side top -anchor w + pack $mytoplevel.drawas.bezier -side top -anchor w + + if {$newone != 0} { + labelframe $mytoplevel.radio -text [_ "Put array into:"] -padx 20 -borderwidth 1 + pack $mytoplevel.radio -side top -fill x + radiobutton $mytoplevel.radio.radio0 -value 0 \ + -variable ::otherflag_button($mytoplevel) -text [_ "New graph"] + radiobutton $mytoplevel.radio.radio1 -value 1 \ + -variable ::otherflag_button($mytoplevel) -text [_ "Last graph"] + pack $mytoplevel.radio.radio0 -side top -anchor w + pack $mytoplevel.radio.radio1 -side top -anchor w + } else { + checkbutton $mytoplevel.deletearray -text [_ "Delete array"] \ + -variable ::otherflag_button($mytoplevel) -anchor w + pack $mytoplevel.deletearray -side top + } + # jsarlo + if {$newone == 0} { + button $mytoplevel.listview -text [_ "Open List View..."] \ + -command "::dialog_array::openlistview $mytoplevel [$mytoplevel.name.entry get]" + pack $mytoplevel.listview -side top + } + # end jsarlo + frame $mytoplevel.buttonframe + pack $mytoplevel.buttonframe -side bottom -fill x -pady 2m + button $mytoplevel.buttonframe.cancel -text [_ "Cancel"] \ + -command "::dialog_array::cancel $mytoplevel" + if {$newone == 0} {button $mytoplevel.buttonframe.apply -text [_ "Apply"] \ + -command "::dialog_array::apply $mytoplevel"} + button $mytoplevel.buttonframe.ok -text [_ "OK"]\ + -command "::dialog_array::ok $mytoplevel" + pack $mytoplevel.buttonframe.cancel -side left -expand 1 + if {$newone == 0} {pack $mytoplevel.buttonframe.apply -side left -expand 1} + pack $mytoplevel.buttonframe.ok -side left -expand 1 +} diff --git a/pd/tcl/dialog_audio.tcl b/pd/tcl/dialog_audio.tcl new file mode 100644 index 00000000..1025f66e --- /dev/null +++ b/pd/tcl/dialog_audio.tcl @@ -0,0 +1,298 @@ +package provide dialog_audio 0.1 + +namespace eval ::dialog_audio:: { + namespace export pdtk_audio_dialog +} + +# TODO this panel really needs some reworking, it works but the code is +# very unreadable + +####################### audio dialog ##################3 + +proc ::dialog_audio::apply {id} { + 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 + + pdsend "pd audio-dialog \ + $audio_indev1 \ + $audio_indev2 \ + $audio_indev3 \ + $audio_indev4 \ + [expr $audio_inchan1 * ( $audio_inenable1 ? 1 : -1 ) ]\ + [expr $audio_inchan2 * ( $audio_inenable2 ? 1 : -1 ) ]\ + [expr $audio_inchan3 * ( $audio_inenable3 ? 1 : -1 ) ]\ + [expr $audio_inchan4 * ( $audio_inenable4 ? 1 : -1 ) ]\ + $audio_outdev1 \ + $audio_outdev2 \ + $audio_outdev3 \ + $audio_outdev4 \ + [expr $audio_outchan1 * ( $audio_outenable1 ? 1 : -1 ) ]\ + [expr $audio_outchan2 * ( $audio_outenable2 ? 1 : -1 ) ]\ + [expr $audio_outchan3 * ( $audio_outenable3 ? 1 : -1 ) ]\ + [expr $audio_outchan4 * ( $audio_outenable4 ? 1 : -1 ) ]\ + $audio_sr \ + $audio_advance \ + $audio_callback" +} + +proc ::dialog_audio::cancel {id} { + pdsend "$id cancel" +} + +proc ::dialog_audio::ok {id} { + ::dialog_audio::apply $id + ::dialog_audio::cancel $id +} + +# callback from popup menu +proc audio_popup_action {buttonname varname devlist index} { + global audio_indevlist audio_outdevlist $varname + $buttonname configure -text [lindex $devlist $index] + set $varname $index +} + +# create a popup menu +proc audio_popup {name buttonname varname devlist} { + if [winfo exists $name.popup] {destroy $name.popup} + menu $name.popup -tearoff false + if {$::windowingsystem eq "win32"} { + $name.popup configure -font menuFont + } + for {set x 0} {$x<[llength $devlist]} {incr x} { + $name.popup add command -label [lindex $devlist $x] \ + -command [list audio_popup_action \ + $buttonname $varname $devlist $x] + } + tk_popup $name.popup [winfo pointerx $name] [winfo pointery $name] 0 +} + +# start a dialog window to select audio devices and settings. "multi" +# is 0 if only one device is allowed; 1 if one apiece may be specified for +# input and output; and 2 if we can select multiple devices. "longform" +# (which only makes sense if "multi" is 2) asks us to make controls for +# 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 \ + inchan1 inchan2 inchan3 inchan4 \ + outdev1 outdev2 outdev3 outdev4 \ + outchan1 outchan2 outchan3 outchan4 sr advance multi callback \ + longform} { + 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_indevlist audio_outdevlist + global pd_indev pd_outdev + global audio_longform + + set audio_indev1 $indev1 + set audio_indev2 $indev2 + set audio_indev3 $indev3 + set audio_indev4 $indev4 + + set audio_inchan1 [expr ( $inchan1 > 0 ? $inchan1 : -$inchan1 ) ] + set audio_inenable1 [expr $inchan1 > 0 ] + set audio_inchan2 [expr ( $inchan2 > 0 ? $inchan2 : -$inchan2 ) ] + set audio_inenable2 [expr $inchan2 > 0 ] + set audio_inchan3 [expr ( $inchan3 > 0 ? $inchan3 : -$inchan3 ) ] + set audio_inenable3 [expr $inchan3 > 0 ] + set audio_inchan4 [expr ( $inchan4 > 0 ? $inchan4 : -$inchan4 ) ] + set audio_inenable4 [expr $inchan4 > 0 ] + + set audio_outdev1 $outdev1 + set audio_outdev2 $outdev2 + set audio_outdev3 $outdev3 + set audio_outdev4 $outdev4 + + set audio_outchan1 [expr ( $outchan1 > 0 ? $outchan1 : -$outchan1 ) ] + set audio_outenable1 [expr $outchan1 > 0 ] + set audio_outchan2 [expr ( $outchan2 > 0 ? $outchan2 : -$outchan2 ) ] + set audio_outenable2 [expr $outchan2 > 0 ] + set audio_outchan3 [expr ( $outchan3 > 0 ? $outchan3 : -$outchan3 ) ] + set audio_outenable3 [expr $outchan3 > 0 ] + set audio_outchan4 [expr ( $outchan4 > 0 ? $outchan4 : -$outchan4 ) ] + set audio_outenable4 [expr $outchan4 > 0 ] + + 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 + + # sample rate and advance + frame $id.srf + pack $id.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 + if {$audio_callback >= 0} { + checkbutton $id.srf.x3 -variable audio_callback \ + -text [_ "Use callbacks"] -anchor e + pack $id.srf.x3 -side left + } + # input device 1 + frame $id.in1f + pack $id.in1f -side top + + checkbutton $id.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 + + # input device 2 + if {$longform && $multi > 1 && [llength $audio_indevlist] > 1} { + frame $id.in2f + pack $id.in2f -side top + + checkbutton $id.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 \ + $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 + } + + # input device 3 + if {$longform && $multi > 1 && [llength $audio_indevlist] > 2} { + frame $id.in3f + pack $id.in3f -side top + + checkbutton $id.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 \ + $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 + } + + # input device 4 + if {$longform && $multi > 1 && [llength $audio_indevlist] > 3} { + frame $id.in4f + pack $id.in4f -side top + + checkbutton $id.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 \ + $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 + } + + # output device 1 + frame $id.out1f + pack $id.out1f -side top + + checkbutton $id.out1f.x0 -variable audio_outenable1 \ + -text [_ "Output device 1:"] -anchor e + if {$multi == 0} { + label $id.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 \ + $audio_outdevlist] + } + label $id.out1f.l2 -text [_ "Channels:"] + entry $id.out1f.x2 -textvariable audio_outchan1 -width 3 + if {$multi == 0} { + pack $id.out1f.x0 $id.out1f.l1 $id.out1f.x2 -side left -fill x + } else { + pack $id.out1f.x0 $id.out1f.x1 $id.out1f.l2 $id.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 + + checkbutton $id.out2f.x0 -variable audio_outenable2 \ + -text [_ "Output device 2:"] -anchor e + button $id.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 + } + + # output device 3 + if {$longform && $multi > 1 && [llength $audio_outdevlist] > 2} { + frame $id.out3f + pack $id.out3f -side top + + checkbutton $id.out3f.x0 -variable audio_outenable3 \ + -text [_ "Output device 3:"] -anchor e + button $id.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 + } + + # output device 4 + if {$longform && $multi > 1 && [llength $audio_outdevlist] > 3} { + frame $id.out4f + pack $id.out4f -side top + + checkbutton $id.out4f.x0 -variable audio_outenable4 \ + -text [_ "Output device 4:"] -anchor e + button $id.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 + } + + # 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"] \ + -command {pdsend "pd audio-properties 1"} + pack $id.longbutton.b + } + $id.srf.x1 select from 0 + $id.srf.x1 select adjust end + focus $id.srf.x1 +} diff --git a/pd/tcl/dialog_canvas.tcl b/pd/tcl/dialog_canvas.tcl new file mode 100644 index 00000000..06444807 --- /dev/null +++ b/pd/tcl/dialog_canvas.tcl @@ -0,0 +1,213 @@ + +# TODO offset this panel so it doesn't overlap the pdtk_array panel + +package provide dialog_canvas 0.1 + +namespace eval ::dialog_canvas:: { + namespace export pdtk_canvas_dialog +} + +# global variables to store checkbox state on canvas properties window. These +# are only used in the context of getting data from the checkboxes, so they +# aren't really useful elsewhere. It would be nice to have them globally +# useful, but that would mean changing the C code. +array set graphme_button {} +array set hidetext_button {} + +############# pdtk_canvas_dialog -- dialog window for canvases ################# + +proc ::dialog_canvas::apply {mytoplevel} { + pdsend "$mytoplevel donecanvasdialog \ + [$mytoplevel.scale.x.entry get] \ + [$mytoplevel.scale.y.entry get] \ + [expr $::graphme_button($mytoplevel) + 2 * $::hidetext_button($mytoplevel)] \ + [$mytoplevel.range.x.from_entry get] \ + [$mytoplevel.range.y.from_entry get] \ + [$mytoplevel.range.x.to_entry get] \ + [$mytoplevel.range.y.to_entry get] \ + [$mytoplevel.range.x.size_entry get] \ + [$mytoplevel.range.y.size_entry get] \ + [$mytoplevel.range.x.margin_entry get] \ + [$mytoplevel.range.y.margin_entry get]" +} + +proc ::dialog_canvas::cancel {mytoplevel} { + pdsend "$mytoplevel cancel" +} + +proc ::dialog_canvas::ok {mytoplevel} { + ::dialog_canvas::apply $mytoplevel + ::dialog_canvas::cancel $mytoplevel +} + +proc ::dialog_canvas::checkcommand {mytoplevel} { + if { $::graphme_button($mytoplevel) != 0 } { + $mytoplevel.scale.x.entry configure -state disabled + $mytoplevel.scale.y.entry configure -state disabled + $mytoplevel.parent.hidetext configure -state normal + $mytoplevel.range.x.from_entry configure -state normal + $mytoplevel.range.x.to_entry configure -state normal + $mytoplevel.range.x.size_entry configure -state normal + $mytoplevel.range.x.margin_entry configure -state normal + $mytoplevel.range.y.from_entry configure -state normal + $mytoplevel.range.y.to_entry configure -state normal + $mytoplevel.range.y.size_entry configure -state normal + $mytoplevel.range.y.margin_entry configure -state normal + if { [$mytoplevel.range.x.from_entry get] == 0 \ + && [$mytoplevel.range.y.from_entry get] == 0 \ + && [$mytoplevel.range.x.to_entry get] == 0 \ + && [$mytoplevel.range.y.to_entry get] == 0 } { + $mytoplevel.range.y.to_entry insert 0 1 + $mytoplevel.range.y.to_entry insert 0 1 + } + if { [$mytoplevel.range.x.size_entry get] == 0 } { + $mytoplevel.range.x.size_entry delete 0 end + $mytoplevel.range.x.margin_entry delete 0 end + $mytoplevel.range.x.size_entry insert 0 85 + $mytoplevel.range.x.margin_entry insert 0 100 + } + if { [$mytoplevel.range.y.size_entry get] == 0 } { + $mytoplevel.range.y.size_entry delete 0 end + $mytoplevel.range.y.margin_entry delete 0 end + $mytoplevel.range.y.size_entry insert 0 60 + $mytoplevel.range.y.margin_entry insert 0 100 + } + } else { + $mytoplevel.scale.x.entry configure -state normal + $mytoplevel.scale.y.entry configure -state normal + $mytoplevel.parent.hidetext configure -state disabled + $mytoplevel.range.x.from_entry configure -state disabled + $mytoplevel.range.x.to_entry configure -state disabled + $mytoplevel.range.x.size_entry configure -state disabled + $mytoplevel.range.x.margin_entry configure -state disabled + $mytoplevel.range.y.from_entry configure -state disabled + $mytoplevel.range.y.to_entry configure -state disabled + $mytoplevel.range.y.size_entry configure -state disabled + $mytoplevel.range.y.margin_entry configure -state disabled + if { [$mytoplevel.scale.x.entry get] == 0 } { + $mytoplevel.scale.x.entry delete 0 end + $mytoplevel.scale.x.entry insert 0 1 + } + if { [$mytoplevel.scale.y.entry get] == 0 } { + $mytoplevel.scale.y.entry delete 0 end + $mytoplevel.scale.y.entry insert 0 1 + } + } +} + +proc ::dialog_canvas::pdtk_canvas_dialog {mytoplevel xscale yscale graphmeflags \ + xfrom yfrom xto yto \ + xsize ysize xmargin ymargin} { + if {[winfo exists $mytoplevel]} { + wm deiconify $mytoplevel + raise $mytoplevel + } else { + create_dialog $mytoplevel + } + puts "canvas_dialog $mytoplevel" + switch -- $graphmeflags { + 0 { + $mytoplevel.parent.graphme deselect + $mytoplevel.parent.hidetext deselect + } 1 { + $mytoplevel.parent.graphme select + $mytoplevel.parent.hidetext deselect + } 2 { + $mytoplevel.parent.graphme deselect + $mytoplevel.parent.hidetext select + } 3 { + $mytoplevel.parent.graphme select + $mytoplevel.parent.hidetext select + } default { + pdtk_post "Warning: unknown graphme flags received in pdtk_canvas_dialog" + } + } + + $mytoplevel.scale.x.entry insert 0 $xscale + $mytoplevel.scale.y.entry insert 0 $yscale + $mytoplevel.range.x.from_entry insert 0 $xfrom + $mytoplevel.range.y.from_entry insert 0 $yfrom + $mytoplevel.range.x.to_entry insert 0 $xto + $mytoplevel.range.y.to_entry insert 0 $yto + $mytoplevel.range.x.size_entry insert 0 $xsize + $mytoplevel.range.y.size_entry insert 0 $ysize + $mytoplevel.range.x.margin_entry insert 0 $xsize + $mytoplevel.range.y.margin_entry insert 0 $ysize + + ::dialog_canvas::checkcommand $mytoplevel +} + +proc ::dialog_canvas::create_dialog {mytoplevel} { + toplevel $mytoplevel -class DialogWindow + wm title $mytoplevel [_ "Canvas Properties"] + if {$::windowingsystem eq "aqua"} {$mytoplevel configure -menu .menubar} + ::pd_bindings::dialog_bindings $mytoplevel "canvas" + + labelframe $mytoplevel.scale -text [_ "Scale"] -borderwidth 1 + pack $mytoplevel.scale -side top -fill x + frame $mytoplevel.scale.x -pady 2 -borderwidth 1 + pack $mytoplevel.scale.x -side top + label $mytoplevel.scale.x.label -text [_ "X units per pixel:"] + entry $mytoplevel.scale.x.entry -width 10 + pack $mytoplevel.scale.x.label $mytoplevel.scale.x.entry -side left + frame $mytoplevel.scale.y -pady 2 + pack $mytoplevel.scale.y -side top + label $mytoplevel.scale.y.label -text [_ "Y units per pixel:"] + entry $mytoplevel.scale.y.entry -width 10 + pack $mytoplevel.scale.y.label $mytoplevel.scale.y.entry -side left + + labelframe $mytoplevel.parent -text [_ "Appearance on parent patch"] -borderwidth 1 + pack $mytoplevel.parent -side top -fill x + checkbutton $mytoplevel.parent.graphme -text [_ "Graph-On-Parent"] \ + -anchor w -variable graphme_button($mytoplevel) \ + -command [concat ::dialog_canvas::checkcommand $mytoplevel] + pack $mytoplevel.parent.graphme -side top -fill x -padx 40 + checkbutton $mytoplevel.parent.hidetext -text [_ "Hide object name and arguments"] \ + -anchor w -variable hidetext_button($mytoplevel) \ + -command [concat ::dialog_canvas::checkcommand $mytoplevel] + pack $mytoplevel.parent.hidetext -side top -fill x -padx 40 + + labelframe $mytoplevel.range -text [_ "Range and size"] -borderwidth 1 + pack $mytoplevel.range -side top -fill x + frame $mytoplevel.range.x -padx 2 -pady 2 + pack $mytoplevel.range.x -side top + label $mytoplevel.range.x.from_label -text [_ "X range, from"] + entry $mytoplevel.range.x.from_entry -width 6 + label $mytoplevel.range.x.to_label -text [_ "to"] + entry $mytoplevel.range.x.to_entry -width 6 + label $mytoplevel.range.x.size_label -text [_ "Size:"] + entry $mytoplevel.range.x.size_entry -width 4 + label $mytoplevel.range.x.margin_label -text [_ "Margin:"] + entry $mytoplevel.range.x.margin_entry -width 4 + pack $mytoplevel.range.x.from_label $mytoplevel.range.x.from_entry \ + $mytoplevel.range.x.to_label $mytoplevel.range.x.to_entry \ + $mytoplevel.range.x.size_label $mytoplevel.range.x.size_entry \ + $mytoplevel.range.x.margin_label $mytoplevel.range.x.margin_entry \ + -side left + frame $mytoplevel.range.y -padx 2 -pady 2 + pack $mytoplevel.range.y -side top + label $mytoplevel.range.y.from_label -text [_ "Y range, from"] + entry $mytoplevel.range.y.from_entry -width 6 + label $mytoplevel.range.y.to_label -text [_ "to"] + entry $mytoplevel.range.y.to_entry -width 6 + label $mytoplevel.range.y.size_label -text [_ "Size:"] + entry $mytoplevel.range.y.size_entry -width 4 + label $mytoplevel.range.y.margin_label -text [_ "Margin:"] + entry $mytoplevel.range.y.margin_entry -width 4 + pack $mytoplevel.range.y.from_label $mytoplevel.range.y.from_entry \ + $mytoplevel.range.y.to_label $mytoplevel.range.y.to_entry \ + $mytoplevel.range.y.size_label $mytoplevel.range.y.size_entry \ + $mytoplevel.range.y.margin_label $mytoplevel.range.y.margin_entry \ + -side left + + frame $mytoplevel.buttons + pack $mytoplevel.buttons -side bottom -fill x -pady 2m + button $mytoplevel.buttons.cancel -text [_ "Cancel"] \ + -command "::dialog_canvas::cancel $mytoplevel" + button $mytoplevel.buttons.apply -text [_ "Apply"] \ + -command "::dialog_canvas::apply $mytoplevel" + button $mytoplevel.buttons.ok -text [_ "OK"] \ + -command "::dialog_canvas::ok $mytoplevel" + pack $mytoplevel.buttons.cancel $mytoplevel.buttons.apply \ + $mytoplevel.buttons.ok -side left -expand 1 + } diff --git a/pd/tcl/dialog_find.tcl b/pd/tcl/dialog_find.tcl index 92d58347..c7a708ae 100644 --- a/pd/tcl/dialog_find.tcl +++ b/pd/tcl/dialog_find.tcl @@ -4,42 +4,62 @@ package provide dialog_find 0.1 package require pd_bindings namespace eval ::dialog_find:: { + # store the state of the "Match whole word only" check box + variable wholeword_button 0 + # if the search hasn't changed, then the Find button sends "findagain" + variable previous_wholeword_button 0 + variable previous_findstring "" + namespace export menu_dialog_find } -# TODO figure out findagain -# TODO make targetlabel into a popup menu -# TODO make panel go away after a find +# TODO make find panel as small as possible, being topmost means its findable +# TODO (GNOME/Windows) find panel should retain focus after a find +# TODO (Mac OS X) hide panel after success, but stay if the find was unsuccessful -proc find_ok {mytoplevel} {::dialog_find::ok $mytoplevel} ;# TODO temp kludge proc ::dialog_find::ok {mytoplevel} { + variable wholeword_button + variable previous_wholeword_button + variable previous_findstring # find will be on top, so use the previous window that was on top set search_window [lindex [wm stackorder .] end-1] - if {$search_window eq "."} { - puts "search pd window not implemented yet" + puts "search_window $search_window" + set findstring [.find.entry get] + if {$findstring eq ""} {return} + if {$search_window eq ".pdwindow"} { + set matches [.pdwindow.text search -all -nocase -- $findstring 0.0] + .pdwindow.text tag delete sel + foreach match $matches { + .pdwindow.text tag add sel $match "$match wordend" + } + .pdwindow.text see [lindex $matches 0] } else { - puts "search_window $search_window" - set find_string [.find.entry get] - if {$find_string ne ""} { - pdsend "$search_window find $find_string" + if {$findstring eq $previous_findstring \ + && $wholeword_button == $previous_wholeword_button} { + pdsend "$search_window findagain" + } else { + # TODO switch back to this for 0.43: + #pdsend "$search_window find $findstring $wholeword_button" + pdsend "$search_window find $findstring" + set previous_findstring $findstring + set previous_wholeword_button $wholeword_button } } } -proc find_cancel {mytoplevel} {::dialog_find::cancel $mytoplevel} ;# TODO temp kludge proc ::dialog_find::cancel {mytoplevel} { wm withdraw .find } proc ::dialog_find::set_canvas_to_search {mytoplevel} { + # TODO rewrite using global $::focused_window if {[winfo exists .find.frame.targetlabel]} { set focusedtoplevel [winfo toplevel [lindex [wm stackorder .] end]] if {$focusedtoplevel eq ".find"} { set focusedtoplevel [winfo toplevel [lindex [wm stackorder .] end-1]] } - # TODO this text should be based on $::menu_windowlist - if {$focusedtoplevel eq "."} { - .find.frame.targetlabel configure -text [wm title .] + if {$focusedtoplevel eq ".pdwindow"} { + .find.frame.targetlabel configure -text [wm title .pdwindow] } else { foreach window $::menu_windowlist { if {[lindex $window 1] eq $focusedtoplevel} { @@ -51,26 +71,25 @@ proc ::dialog_find::set_canvas_to_search {mytoplevel} { } # the find panel is opened from the menu and key bindings -proc ::dialog_find::menu_dialog_find {mytoplevel} { +proc ::dialog_find::menu_find_dialog {mytoplevel} { if {[winfo exists .find]} { wm deiconify .find raise .find } else { - create_panel $mytoplevel + create_dialog $mytoplevel } } -proc ::dialog_find::create_panel {mytoplevel} { - toplevel .find +proc ::dialog_find::create_dialog {mytoplevel} { + toplevel .find -class DialogWindow wm title .find [_ "Find"] wm geometry .find =475x125+150+150 - wm resizable .find 0 0 - if {[catch {wm attributes .find -topmost}]} {puts stderr ".find -topmost failed"} .find configure - ::pd_bindings::panel_bindings .find "find" + if {$::windowingsystem eq "aqua"} {$mytoplevel configure -menu .menubar} + ::pd_bindings::dialog_bindings .find "find" frame .find.frame - pack .find.frame -side top -fill x -pady 7 + pack .find.frame -side top -fill x -pady 1 label .find.frame.searchin -text [_ "Search in"] label .find.frame.targetlabel -font "TkTextFont 14" label .find.frame.for -text [_ "for:"] @@ -80,15 +99,19 @@ proc ::dialog_find::create_panel {mytoplevel} { focus .find.entry pack .find.entry -side top -padx 10 + checkbutton .find.wholeword -variable ::dialog_find::wholeword_button \ + -text [_ "Match whole word only"] -anchor w + pack .find.wholeword -side top -padx 30 -pady 3 -fill x + frame .find.buttonframe -background yellow button .find.button -text [_ "Find"] -default active -width 9 \ -command "::dialog_find::ok $mytoplevel" if {$::windowingsystem eq "x11"} { button .find.close -text [_ "Close"] -default normal -width 9 \ -command "::dialog_find::cancel $mytoplevel" - pack .find.buttonframe .find.button .find.close -side right -padx 10 -pady 15 + pack .find.buttonframe .find.button .find.close -side right -padx 10 -pady 3 } else { - pack .find.buttonframe .find.button -side right -padx 10 -pady 15 + pack .find.buttonframe .find.button -side right -padx 10 -pady 3 } ::dialog_find::set_canvas_to_search $mytoplevel } diff --git a/pd/tcl/dialog_font.tcl b/pd/tcl/dialog_font.tcl index cebfcb08..578d155e 100644 --- a/pd/tcl/dialog_font.tcl +++ b/pd/tcl/dialog_font.tcl @@ -2,106 +2,132 @@ package provide dialog_font 0.1 namespace eval ::dialog_font:: { - variable fontsize 0 - variable dofont_fontsize 0 - variable stretchval 0 - variable whichstretch 0 - + variable fontsize 10 + variable stretchval 100 + variable whichstretch 1 + variable canvaswindow + variable sizes {8 10 12 16 24 36} + variable gfxstub + namespace export pdtk_canvas_dofont } +# TODO this should use the pd_font_$size fonts created in pd-gui.tcl + +# TODO this should really be changed on the C side so that it doesn't have to +# work around gfxstub/x_gui.c. The gfxstub stuff assumes that there are +# multiple panels, for properties panels like this, its much easier to use if +# there is a single properties panel that adjusts based on which CanvasWindow +# has focus + proc ::dialog_font::apply {mytoplevel myfontsize} { - pdsend "$mytoplevel font $myfontsize $stretchval $whichstretch" + if {$mytoplevel eq ".pdwindow"} { + .pdwindow.text configure -font "-size $myfontsize" + } else { + variable stretchval + variable whichstretch + pdsend "$mytoplevel font $myfontsize $stretchval $whichstretch" + } +} + +proc ::dialog_font::cancel {mygfxstub} { + if {$mygfxstub ne ".pdwindow"} { + pdsend "$mygfxstub cancel" + } + destroy .font } -proc ::dialog_font::close {mytoplevel} { - pdsend "$mytoplevel cancel" +proc ::dialog_font::ok {mygfxstub} { + variable fontsize + ::dialog_font::apply $mygfxstub $fontsize + ::dialog_font::cancel $mygfxstub } -proc ::dialog_font::cancel {mytoplevel} { - ::dialog_font::apply $mytoplevel $fontsize ;# reinstate previous font size - pdsend "$mytoplevel cancel" +proc ::dialog_font::update_font_dialog {mytoplevel} { + set ::dialog_font::canvaswindow $mytoplevel + if {$mytoplevel eq ".pdwindow"} { + set windowname [_ "Pd window"] + } else { + set windowname [lookup_windowname $mytoplevel] + } + if {[winfo exists .font]} { + wm title .font [format [_ "%s Font"] $windowname] + } } -proc ::dialog_font::ok {mytoplevel} { - set fontsize $::dialog_font::fontsize - ::dialog_font::apply $mytoplevel $fontsize - ::dialog_font::close $mytoplevel +proc ::dialog_font::arrow_fontchange {change} { + variable sizes + set position [expr [lsearch $sizes $::dialog_font::fontsize] + $change] + if {$position < 0} {set position 0} + set max [llength $sizes] + if {$position >= $max} {set position [expr $max-1]} + set ::dialog_font::fontsize [lindex $sizes $position] + ::dialog_font::apply $::dialog_font::canvaswindow $::dialog_font::fontsize } # this should be called pdtk_font_dialog like the rest of the panels, but it # is called from the C side, so we'll leave it be -proc ::dialog_font::pdtk_canvas_dofont {mytoplevel initsize} { - create_panel $mytoplevel $initsize +proc ::dialog_font::pdtk_canvas_dofont {mygfxstub initsize} { + variable fontsize $initsize + variable whichstretch 1 + variable stretchval 100 + if {[winfo exists .font]} { + wm deiconify .font + raise .font + # the gfxstub stuff expects multiple font windows, we only have one, + # so kill the new gfxstub requests as the come in. We'll save the + # original gfxstub for when the font panel gets closed + pdsend "$mygfxstub cancel" + } else { + create_dialog $mygfxstub + } } -proc ::dialog_font::create_panel {mytoplevel initsize} { - set fontsize $initsize - set dofont_fontsize $initsize - set stretchval 100 - set whichstretch 1 +proc ::dialog_font::create_dialog {mygfxstub} { + variable gfxstub $mygfxstub + toplevel .font -class DialogWindow + if {$::windowingsystem eq "aqua"} {.font configure -menu .menubar} + ::pd_bindings::dialog_bindings .font "font" + # replace standard bindings to work around the gfxstub stuff + bind .font "::dialog_font::cancel $mygfxstub" + bind .font "::dialog_font::ok $mygfxstub" + bind .font <$::pd_bindings::modifier-Key-w> "::dialog_font::cancel $mygfxstub" + bind .font "::dialog_font::arrow_fontchange -1" + bind .font "::dialog_font::arrow_fontchange 1" - toplevel $mytoplevel - wm title $mytoplevel {Patch Font} - wm protocol $mytoplevel WM_DELETE_WINDOW "::dialog_font::cancel $mytoplevel" - - pdtk_panelkeybindings $mytoplevel font - - frame $mytoplevel.buttonframe - pack $mytoplevel.buttonframe -side bottom -fill x -pady 2m - button $mytoplevel.buttonframe.cancel -text "Cancel" \ - -command "::dialog_font::cancel $mytoplevel" - button $mytoplevel.buttonframe.ok -text "OK" \ - -command "::dialog_font::ok $mytoplevel" - pack $mytoplevel.buttonframe.cancel -side left -expand 1 - pack $mytoplevel.buttonframe.ok -side left -expand 1 + frame .font.buttonframe + pack .font.buttonframe -side bottom -fill x -pady 2m + button .font.buttonframe.ok -text [_ "OK"] \ + -command "::dialog_font::ok $mygfxstub" + pack .font.buttonframe.ok -side left -expand 1 - frame $mytoplevel.radiof - pack $mytoplevel.radiof -side left + labelframe .font.fontsize -text [_ "Font Size"] -padx 5 -pady 4 -borderwidth 1 \ + -width [::msgcat::mcmax "Font Size"] -labelanchor n + pack .font.fontsize -side left -padx 5 - label $mytoplevel.radiof.label -text {Font Size:} - pack $mytoplevel.radiof.label -side top - - radiobutton $mytoplevel.radiof.radio8 -value 8 -variable ::dialog_font::fontsize -text "8" \ - -command "::dialog_font::apply $mytoplevel 8" - radiobutton $mytoplevel.radiof.radio10 -value 10 -variable ::dialog_font::fontsize -text "10" \ - -command "::dialog_font::apply $mytoplevel 10" - radiobutton $mytoplevel.radiof.radio12 -value 12 -variable ::dialog_font::fontsize -text "12" \ - -command "::dialog_font::apply $mytoplevel 12" - radiobutton $mytoplevel.radiof.radio16 -value 16 -variable ::dialog_font::fontsize -text "16" \ - -command "::dialog_font::apply $mytoplevel 16" - radiobutton $mytoplevel.radiof.radio24 -value 24 -variable ::dialog_font::fontsize -text "24" \ - -command "::dialog_font::apply $mytoplevel 24" - radiobutton $mytoplevel.radiof.radio36 -value 36 -variable ::dialog_font::fontsize -text "36" \ - -command "::dialog_font::apply $mytoplevel 36" - pack $mytoplevel.radiof.radio8 -side top -anchor w - pack $mytoplevel.radiof.radio10 -side top -anchor w - pack $mytoplevel.radiof.radio12 -side top -anchor w - pack $mytoplevel.radiof.radio16 -side top -anchor w - pack $mytoplevel.radiof.radio24 -side top -anchor w - pack $mytoplevel.radiof.radio36 -side top -anchor w - - set current_radiobutton [format "$mytoplevel.radiof.radio%d" $initsize] - $current_radiobutton select + # this is whacky Tcl at its finest, but I couldn't resist... + foreach size $::dialog_font::sizes { + radiobutton .font.fontsize.radio$size -value $size -text $size \ + -variable ::dialog_font::fontsize \ + -command [format {::dialog_font::apply $::dialog_font::canvaswindow %s} $size] + pack .font.fontsize.radio$size -side top -anchor w + } - frame $mytoplevel.stretchf - pack $mytoplevel.stretchf -side left - - label $mytoplevel.stretchf.label -text "Stretch:" - pack $mytoplevel.stretchf.label -side top - - entry $mytoplevel.stretchf.entry -textvariable stretchval -width 5 - pack $mytoplevel.stretchf.entry -side left + labelframe .font.stretch -text [_ "Stretch"] -padx 5 -pady 5 -borderwidth 1 \ + -width [::msgcat::mcmax "Stretch"] -labelanchor n + pack .font.stretch -side left -padx 5 -fill y - radiobutton $mytoplevel.stretchf.radio1 \ - -value 1 -variable whichstretch -text "X and Y" - radiobutton $mytoplevel.stretchf.radio2 \ - -value 2 -variable whichstretch -text "X only" - radiobutton $mytoplevel.stretchf.radio3 \ - -value 3 -variable whichstretch -text "Y only" + entry .font.stretch.entry -textvariable ::dialog_font::stretchval -width 5 + pack .font.stretch.entry -side top -pady 5 - pack $mytoplevel.stretchf.radio1 -side top -anchor w - pack $mytoplevel.stretchf.radio2 -side top -anchor w - pack $mytoplevel.stretchf.radio3 -side top -anchor w + radiobutton .font.stretch.radio1 -text [_ "X and Y"] \ + -value 1 -variable ::dialog_font::whichstretch + radiobutton .font.stretch.radio2 -text [_ "X only"] \ + -value 2 -variable ::dialog_font::whichstretch + radiobutton .font.stretch.radio3 -text [_ "Y only"] \ + -value 3 -variable ::dialog_font::whichstretch + pack .font.stretch.radio1 -side top -anchor w + pack .font.stretch.radio2 -side top -anchor w + pack .font.stretch.radio3 -side top -anchor w } diff --git a/pd/tcl/dialog_gatom.tcl b/pd/tcl/dialog_gatom.tcl index e377657f..b59751bf 100644 --- a/pd/tcl/dialog_gatom.tcl +++ b/pd/tcl/dialog_gatom.tcl @@ -4,24 +4,15 @@ package provide dialog_gatom 0.1 package require wheredoesthisgo namespace eval ::dialog_gatom:: { - namespace export pdtk_gatom_dialog + namespace export pdtk_gatom_dialog } -# hashtable for communicating the position of the radiobuttons (Tk's +# array for communicating the position of the radiobuttons (Tk's # radiobutton widget requires this to be global) -global gatomlabel_position +array set gatomlabel_radio {} ############ pdtk_gatom_dialog -- run a gatom dialog ######### -# dialogs like this one can come up in many copies; but in TK the easiest -# way to get data from an "entry", etc., is to set an associated variable -# name. This is especially true for grouped "radio buttons". So we have -# to synthesize variable names for each instance of the dialog. The dialog -# gets a TK pathname $id, from which it strips the leading "." to make a -# variable suffix $vid. Then you can get the actual value out by asking for -# [eval concat $$variablename]. There should be an easier way but I don't see -# it yet. - proc ::dialog_gatom::escape {sym} { if {[string length $sym] == 0} { set ret "-" @@ -44,164 +35,128 @@ proc ::dialog_gatom::unescape {sym} { return $ret } -proc gatom_apply {mytoplevel} { - # TODO kludge!! until a common approach to ::pd_bindings::panel_bindings - # is sorted out - ::dialog_gatom::apply $mytoplevel -} - proc ::dialog_gatom::apply {mytoplevel} { - global gatomlabel_position - + global gatomlabel_radio + pdsend "$mytoplevel param \ [$mytoplevel.width.entry get] \ [$mytoplevel.limits.lower.entry get] \ [$mytoplevel.limits.upper.entry get] \ [::dialog_gatom::escape [$mytoplevel.gatomlabel.name.entry get]] \ - $gatomlabel_position($mytoplevel) \ + $gatomlabel_radio($mytoplevel) \ [::dialog_gatom::escape [$mytoplevel.s_r.send.entry get]] \ [::dialog_gatom::escape [$mytoplevel.s_r.receive.entry get]]" } - -proc gatom_cancel {mytoplevel} { - # TODO kludge!! until a common approach to ::pd_bindings::panel_bindings - # is sorted out - ::dialog_gatom::cancel $mytoplevel -} - proc ::dialog_gatom::cancel {mytoplevel} { pdsend "$mytoplevel cancel" } - -proc gatom_ok {mytoplevel} { - # TODO kludge!! until a common approach to ::pd_bindings::panel_bindings - # is sorted out - ::dialog_gatom::ok $mytoplevel -} proc ::dialog_gatom::ok {mytoplevel} { ::dialog_gatom::apply $mytoplevel ::dialog_gatom::cancel $mytoplevel } # set up the panel with the info from pd -proc ::dialog_gatom::pdtk_gatom_dialog {mytoplevel initwidth initlower \ - initupper initgatomlabel_position initgatomlabel initsend initreceive} { - global gatomlabel_position - set gatomlabel_position($mytoplevel) $initgatomlabel_position +proc ::dialog_gatom::pdtk_gatom_dialog {mytoplevel initwidth initlower initupper \ + initgatomlabel_radio \ + initgatomlabel initsend initreceive} { + global gatomlabel_radio + set gatomlabel_radio($mytoplevel) $initgatomlabel_radio if {[winfo exists $mytoplevel]} { - wm deiconify $mytoplevel - raise $mytoplevel + wm deiconify $mytoplevel + raise $mytoplevel } else { - create_panel $mytoplevel + create_dialog $mytoplevel } $mytoplevel.width.entry insert 0 $initwidth $mytoplevel.limits.lower.entry insert 0 $initlower $mytoplevel.limits.upper.entry insert 0 $initupper if {$initgatomlabel ne "-"} { - $mytoplevel.gatomlabel.name.entry insert 0 $initgatomlabel + $mytoplevel.gatomlabel.name.entry insert 0 $initgatomlabel } - set gatomlabel_position($mytoplevel) $initgatomlabel_position - if {$initsend ne "-"} { - $mytoplevel.s_r.send.entry insert 0 $initsend + set gatomlabel_radio($mytoplevel) $initgatomlabel_radio + if {$initsend ne "-"} { + $mytoplevel.s_r.send.entry insert 0 $initsend } if {$initreceive ne "-"} { - $mytoplevel.s_r.receive.entry insert 0 $initreceive + $mytoplevel.s_r.receive.entry insert 0 $initreceive } } -proc ::dialog_gatom::create_panel {mytoplevel} { - global gatomlabel_position +proc ::dialog_gatom::create_dialog {mytoplevel} { + global gatomlabel_radio - toplevel $mytoplevel - wm title $mytoplevel "atom box properties" - wm resizable $mytoplevel 0 0 - catch { # not all platforms/Tcls versions have these options - wm attributes $mytoplevel -topmost 1 - #wm attributes $mytoplevel -transparent 1 - #$mytoplevel configure -highlightthickness 1 - } - wm protocol $mytoplevel WM_DELETE_WINDOW "::dialog_gatom::cancel $mytoplevel" - - ::pd_bindings::panel_bindings $mytoplevel "gatom" + toplevel $mytoplevel -class DialogWindow + wm title $mytoplevel [_ "Atom Box Properties"] + if {$::windowingsystem eq "aqua"} {$mytoplevel configure -menu .menubar} + ::pd_bindings::dialog_bindings $mytoplevel "gatom" frame $mytoplevel.width -height 7 pack $mytoplevel.width -side top - label $mytoplevel.width.label -text "width" + label $mytoplevel.width.label -text [_ "Width:"] entry $mytoplevel.width.entry -width 4 - pack $mytoplevel.width.label $mytoplevel.width.entry -side left + pack $mytoplevel.width.label $mytoplevel.width.entry -side left - labelframe $mytoplevel.limits -text "limits" -padx 15 -pady 4 -borderwidth 1 \ - -font highlight_font + labelframe $mytoplevel.limits -text [_ "Limits"] -padx 15 -pady 4 -borderwidth 1 pack $mytoplevel.limits -side top -fill x frame $mytoplevel.limits.lower pack $mytoplevel.limits.lower -side left - label $mytoplevel.limits.lower.label -text "lower" - entry $mytoplevel.limits.lower.entry -width 8 + label $mytoplevel.limits.lower.label -text [_ "Lower:"] + entry $mytoplevel.limits.lower.entry -width 7 pack $mytoplevel.limits.lower.label $mytoplevel.limits.lower.entry -side left frame $mytoplevel.limits.upper pack $mytoplevel.limits.upper -side left - frame $mytoplevel.limits.upper.spacer -width 20 - label $mytoplevel.limits.upper.label -text "upper" - entry $mytoplevel.limits.upper.entry -width 8 - pack $mytoplevel.limits.upper.spacer $mytoplevel.limits.upper.label \ - $mytoplevel.limits.upper.entry -side left - - frame $mytoplevel.spacer1 -height 7 - pack $mytoplevel.spacer1 -side top - - labelframe $mytoplevel.gatomlabel -text "label" -padx 5 -pady 4 -borderwidth 1 \ - -font highlight_font - pack $mytoplevel.gatomlabel -side top -fill x + label $mytoplevel.limits.upper.label -text [_ "Upper:"] + entry $mytoplevel.limits.upper.entry -width 7 + pack $mytoplevel.limits.upper.label $mytoplevel.limits.upper.entry -side left + + labelframe $mytoplevel.gatomlabel -text [_ "Label"] -padx 5 -pady 5 -borderwidth 1 + pack $mytoplevel.gatomlabel -side top -fill x -pady 5 frame $mytoplevel.gatomlabel.name pack $mytoplevel.gatomlabel.name -side top entry $mytoplevel.gatomlabel.name.entry -width 33 pack $mytoplevel.gatomlabel.name.entry -side left frame $mytoplevel.gatomlabel.radio pack $mytoplevel.gatomlabel.radio -side top - radiobutton $mytoplevel.gatomlabel.radio.left -value 0 -text "left " \ - -variable gatomlabel_position($mytoplevel) -justify left -takefocus 0 - radiobutton $mytoplevel.gatomlabel.radio.right -value 1 -text "right" \ - -variable gatomlabel_position($mytoplevel) -justify left -takefocus 0 - radiobutton $mytoplevel.gatomlabel.radio.top -value 2 -text "top" \ - -variable gatomlabel_position($mytoplevel) -justify left -takefocus 0 - radiobutton $mytoplevel.gatomlabel.radio.bottom -value 3 -text "bottom" \ - -variable gatomlabel_position($mytoplevel) -justify left -takefocus 0 + radiobutton $mytoplevel.gatomlabel.radio.left -value 0 -text [_ "Left "] \ + -variable gatomlabel_radio($mytoplevel) -justify left -takefocus 0 + radiobutton $mytoplevel.gatomlabel.radio.right -value 1 -text [_ "Right"] \ + -variable gatomlabel_radio($mytoplevel) -justify left -takefocus 0 + radiobutton $mytoplevel.gatomlabel.radio.top -value 2 -text [_ "Top"] \ + -variable gatomlabel_radio($mytoplevel) -justify left -takefocus 0 + radiobutton $mytoplevel.gatomlabel.radio.bottom -value 3 -text [_ "Bottom"] \ + -variable gatomlabel_radio($mytoplevel) -justify left -takefocus 0 pack $mytoplevel.gatomlabel.radio.left -side left -anchor w pack $mytoplevel.gatomlabel.radio.right -side right -anchor w pack $mytoplevel.gatomlabel.radio.top -side top -anchor w pack $mytoplevel.gatomlabel.radio.bottom -side bottom -anchor w - frame $mytoplevel.spacer2 -height 7 - pack $mytoplevel.spacer2 -side top - - labelframe $mytoplevel.s_r -text "messages" -padx 5 -pady 4 -borderwidth 1 \ - -font highlight_font + labelframe $mytoplevel.s_r -text [_ "Messages"] -padx 5 -pady 5 -borderwidth 1 pack $mytoplevel.s_r -side top -fill x frame $mytoplevel.s_r.send pack $mytoplevel.s_r.send -side top -anchor e - label $mytoplevel.s_r.send.label -text "send symbol" + label $mytoplevel.s_r.send.label -text [_ "Send symbol:"] entry $mytoplevel.s_r.send.entry -width 21 pack $mytoplevel.s_r.send.entry $mytoplevel.s_r.send.label -side right frame $mytoplevel.s_r.receive pack $mytoplevel.s_r.receive -side top -anchor e - label $mytoplevel.s_r.receive.label -text "receive symbol" + label $mytoplevel.s_r.receive.label -text [_ "Receive symbol:"] entry $mytoplevel.s_r.receive.entry -width 21 pack $mytoplevel.s_r.receive.entry $mytoplevel.s_r.receive.label -side right frame $mytoplevel.buttonframe -pady 5 pack $mytoplevel.buttonframe -side top -fill x -pady 2m - button $mytoplevel.buttonframe.cancel -text {Cancel} \ + button $mytoplevel.buttonframe.cancel -text [_ "Cancel"] \ -command "::dialog_gatom::cancel $mytoplevel" pack $mytoplevel.buttonframe.cancel -side left -expand 1 - button $mytoplevel.buttonframe.apply -text {Apply} \ + button $mytoplevel.buttonframe.apply -text [_ "Apply"] \ -command "::dialog_gatom::apply $mytoplevel" pack $mytoplevel.buttonframe.apply -side left -expand 1 - button $mytoplevel.buttonframe.ok -text {OK} \ + button $mytoplevel.buttonframe.ok -text [_ "OK"] \ -command "::dialog_gatom::ok $mytoplevel" pack $mytoplevel.buttonframe.ok -side left -expand 1 diff --git a/pd/tcl/dialog_iemgui.tcl b/pd/tcl/dialog_iemgui.tcl index 5aabf4c2..34ed4ccb 100644 --- a/pd/tcl/dialog_iemgui.tcl +++ b/pd/tcl/dialog_iemgui.tcl @@ -8,15 +8,15 @@ namespace eval ::dialog_iemgui:: { variable define_min_flashhold 50 variable define_min_flashbreak 10 variable define_min_fontsize 4 - + namespace export pdtk_iemgui_dialog } -# TODO rename $mytoplevel to $mytoplevel +# TODO convert Init/No Init and Steady on click/Jump on click to checkbuttons proc ::dialog_iemgui::clip_dim {mytoplevel} { set vid [string trimleft $mytoplevel .] - + set var_iemgui_wdt [concat iemgui_wdt_$vid] global $var_iemgui_wdt set var_iemgui_min_wdt [concat iemgui_min_wdt_$vid] @@ -38,7 +38,7 @@ proc ::dialog_iemgui::clip_dim {mytoplevel} { proc ::dialog_iemgui::clip_num {mytoplevel} { set vid [string trimleft $mytoplevel .] - + set var_iemgui_num [concat iemgui_num_$vid] global $var_iemgui_num @@ -54,14 +54,14 @@ proc ::dialog_iemgui::clip_num {mytoplevel} { proc ::dialog_iemgui::sched_rng {mytoplevel} { set vid [string trimleft $mytoplevel .] - + set var_iemgui_min_rng [concat iemgui_min_rng_$vid] global $var_iemgui_min_rng set var_iemgui_max_rng [concat iemgui_max_rng_$vid] global $var_iemgui_max_rng set var_iemgui_rng_sch [concat iemgui_rng_sch_$vid] global $var_iemgui_rng_sch - + variable define_min_flashhold variable define_min_flashbreak @@ -91,7 +91,7 @@ proc ::dialog_iemgui::sched_rng {mytoplevel} { proc ::dialog_iemgui::verify_rng {mytoplevel} { set vid [string trimleft $mytoplevel .] - + set var_iemgui_min_rng [concat iemgui_min_rng_$vid] global $var_iemgui_min_rng set var_iemgui_max_rng [concat iemgui_max_rng_$vid] @@ -103,7 +103,7 @@ proc ::dialog_iemgui::verify_rng {mytoplevel} { if {[eval concat $$var_iemgui_max_rng] == 0.0 && [eval concat $$var_iemgui_min_rng] == 0.0} { set $var_iemgui_max_rng 1.0 $mytoplevel.rng.max_ent configure -textvariable $var_iemgui_max_rng - } + } if {[eval concat $$var_iemgui_max_rng] > 0} { if {[eval concat $$var_iemgui_min_rng] <= 0} { set $var_iemgui_min_rng [expr [eval concat $$var_iemgui_max_rng] * 0.01] @@ -120,12 +120,12 @@ proc ::dialog_iemgui::verify_rng {mytoplevel} { proc ::dialog_iemgui::clip_fontsize {mytoplevel} { set vid [string trimleft $mytoplevel .] - + set var_iemgui_gn_fs [concat iemgui_gn_fs_$vid] global $var_iemgui_gn_fs variable define_min_fontsize - + if {[eval concat $$var_iemgui_gn_fs] < $define_min_fontsize} { set $var_iemgui_gn_fs $define_min_fontsize $mytoplevel.label.fs_ent configure -textvariable $var_iemgui_gn_fs @@ -134,7 +134,7 @@ proc ::dialog_iemgui::clip_fontsize {mytoplevel} { proc ::dialog_iemgui::set_col_example {mytoplevel} { set vid [string trimleft $mytoplevel .] - + set var_iemgui_bcol [concat iemgui_bcol_$vid] global $var_iemgui_bcol set var_iemgui_fcol [concat iemgui_fcol_$vid] @@ -143,28 +143,28 @@ proc ::dialog_iemgui::set_col_example {mytoplevel} { global $var_iemgui_lcol $mytoplevel.colors.sections.lb_bk configure \ - -background [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \ - -activebackground [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \ - -foreground [format "#%6.6x" [eval concat $$var_iemgui_lcol]] \ - -activeforeground [format "#%6.6x" [eval concat $$var_iemgui_lcol]] + -background [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \ + -activebackground [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \ + -foreground [format "#%6.6x" [eval concat $$var_iemgui_lcol]] \ + -activeforeground [format "#%6.6x" [eval concat $$var_iemgui_lcol]] if { [eval concat $$var_iemgui_fcol] >= 0 } { - $mytoplevel.colors.sections.fr_bk configure \ - -background [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \ - -activebackground [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \ - -foreground [format "#%6.6x" [eval concat $$var_iemgui_fcol]] \ - -activeforeground [format "#%6.6x" [eval concat $$var_iemgui_fcol]] + $mytoplevel.colors.sections.fr_bk configure \ + -background [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \ + -activebackground [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \ + -foreground [format "#%6.6x" [eval concat $$var_iemgui_fcol]] \ + -activeforeground [format "#%6.6x" [eval concat $$var_iemgui_fcol]] } else { - $mytoplevel.colors.sections.fr_bk configure \ - -background [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \ - -activebackground [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \ - -foreground [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \ - -activeforeground [format "#%6.6x" [eval concat $$var_iemgui_bcol]]} + $mytoplevel.colors.sections.fr_bk configure \ + -background [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \ + -activebackground [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \ + -foreground [format "#%6.6x" [eval concat $$var_iemgui_bcol]] \ + -activeforeground [format "#%6.6x" [eval concat $$var_iemgui_bcol]]} } proc ::dialog_iemgui::preset_col {mytoplevel presetcol} { set vid [string trimleft $mytoplevel .] - + set var_iemgui_l2_f1_b0 [concat iemgui_l2_f1_b0_$vid] global $var_iemgui_l2_f1_b0 set var_iemgui_bcol [concat iemgui_bcol_$vid] @@ -182,7 +182,7 @@ proc ::dialog_iemgui::preset_col {mytoplevel presetcol} { proc ::dialog_iemgui::choose_col_bkfrlb {mytoplevel} { set vid [string trimleft $mytoplevel .] - + set var_iemgui_l2_f1_b0 [concat iemgui_l2_f1_b0_$vid] global $var_iemgui_l2_f1_b0 set var_iemgui_bcol [concat iemgui_bcol_$vid] @@ -195,39 +195,39 @@ proc ::dialog_iemgui::choose_col_bkfrlb {mytoplevel} { if {[eval concat $$var_iemgui_l2_f1_b0] == 0} { set $var_iemgui_bcol [expr [eval concat $$var_iemgui_bcol] & 0xFCFCFC] set helpstring [tk_chooseColor -title [_ "Background color"] -initialcolor [format "#%6.6x" [eval concat $$var_iemgui_bcol]]] - if { $helpstring != "" } { - set $var_iemgui_bcol [string replace $helpstring 0 0 "0x"] - set $var_iemgui_bcol [expr [eval concat $$var_iemgui_bcol] & 0xFCFCFC] } + if { $helpstring ne "" } { + set $var_iemgui_bcol [string replace $helpstring 0 0 "0x"] + set $var_iemgui_bcol [expr [eval concat $$var_iemgui_bcol] & 0xFCFCFC] } } if {[eval concat $$var_iemgui_l2_f1_b0] == 1} { set $var_iemgui_fcol [expr [eval concat $$var_iemgui_fcol] & 0xFCFCFC] set helpstring [tk_chooseColor -title [_ "Foreground color"] -initialcolor [format "#%6.6x" [eval concat $$var_iemgui_fcol]]] - if { $helpstring != "" } { - set $var_iemgui_fcol [string replace $helpstring 0 0 "0x"] - set $var_iemgui_fcol [expr [eval concat $$var_iemgui_fcol] & 0xFCFCFC] } + if { $helpstring ne "" } { + set $var_iemgui_fcol [string replace $helpstring 0 0 "0x"] + set $var_iemgui_fcol [expr [eval concat $$var_iemgui_fcol] & 0xFCFCFC] } } if {[eval concat $$var_iemgui_l2_f1_b0] == 2} { set $var_iemgui_lcol [expr [eval concat $$var_iemgui_lcol] & 0xFCFCFC] set helpstring [tk_chooseColor -title [_ "Label color"] -initialcolor [format "#%6.6x" [eval concat $$var_iemgui_lcol]]] - if { $helpstring != "" } { - set $var_iemgui_lcol [string replace $helpstring 0 0 "0x"] - set $var_iemgui_lcol [expr [eval concat $$var_iemgui_lcol] & 0xFCFCFC] } + if { $helpstring ne "" } { + set $var_iemgui_lcol [string replace $helpstring 0 0 "0x"] + set $var_iemgui_lcol [expr [eval concat $$var_iemgui_lcol] & 0xFCFCFC] } } ::dialog_iemgui::set_col_example $mytoplevel } proc ::dialog_iemgui::lilo {mytoplevel} { set vid [string trimleft $mytoplevel .] - + set var_iemgui_lin0_log1 [concat iemgui_lin0_log1_$vid] global $var_iemgui_lin0_log1 set var_iemgui_lilo0 [concat iemgui_lilo0_$vid] global $var_iemgui_lilo0 set var_iemgui_lilo1 [concat iemgui_lilo1_$vid] global $var_iemgui_lilo1 - + ::dialog_iemgui::sched_rng $mytoplevel - + if {[eval concat $$var_iemgui_lin0_log1] == 0} { set $var_iemgui_lin0_log1 1 $mytoplevel.para.lilo configure -text [eval concat $$var_iemgui_lilo1] @@ -241,21 +241,21 @@ proc ::dialog_iemgui::lilo {mytoplevel} { proc ::dialog_iemgui::toggle_font {mytoplevel gn_f} { set vid [string trimleft $mytoplevel .] - + set var_iemgui_gn_f [concat iemgui_gn_f_$vid] global $var_iemgui_gn_f set $var_iemgui_gn_f $gn_f - + switch -- $gn_f { - 0 { set current_font $::font_family} - 1 { set current_font "Helvetica" } - 2 { set current_font "Times" } + 0 { set current_font $::font_family} + 1 { set current_font "Helvetica" } + 2 { set current_font "Times" } } set current_font_spec "{$current_font} 12 $::font_weight" - + $mytoplevel.label.fontpopup_label configure -text $current_font \ - -font $current_font_spec + -font $current_font_spec $mytoplevel.label.name_entry configure -font $current_font_spec $mytoplevel.colors.sections.fr_bk configure -font $current_font_spec $mytoplevel.colors.sections.lb_bk configure -font $current_font_spec @@ -263,37 +263,37 @@ proc ::dialog_iemgui::toggle_font {mytoplevel gn_f} { proc ::dialog_iemgui::lb {mytoplevel} { set vid [string trimleft $mytoplevel .] - + set var_iemgui_loadbang [concat iemgui_loadbang_$vid] global $var_iemgui_loadbang - + if {[eval concat $$var_iemgui_loadbang] == 0} { set $var_iemgui_loadbang 1 - $mytoplevel.para.lb configure -text "init" + $mytoplevel.para.lb configure -text [_ "Init"] } else { set $var_iemgui_loadbang 0 - $mytoplevel.para.lb configure -text "no init" + $mytoplevel.para.lb configure -text [_ "No init"] } } proc ::dialog_iemgui::stdy_jmp {mytoplevel} { set vid [string trimleft $mytoplevel .] - + set var_iemgui_steady [concat iemgui_steady_$vid] global $var_iemgui_steady if {[eval concat $$var_iemgui_steady]} { set $var_iemgui_steady 0 - $mytoplevel.para.stdy_jmp configure -text "jump on click" + $mytoplevel.para.stdy_jmp configure -text [_ "Jump on click"] } else { set $var_iemgui_steady 1 - $mytoplevel.para.stdy_jmp configure -text "steady on click" + $mytoplevel.para.stdy_jmp configure -text [_ "Steady on click"] } } proc ::dialog_iemgui::apply {mytoplevel} { set vid [string trimleft $mytoplevel .] - + set var_iemgui_wdt [concat iemgui_wdt_$vid] global $var_iemgui_wdt set var_iemgui_min_wdt [concat iemgui_min_wdt_$vid] @@ -349,75 +349,65 @@ proc ::dialog_iemgui::apply {mytoplevel} { if {[eval concat $$var_iemgui_snd] == ""} {set hhhsnd "empty"} else {set hhhsnd [eval concat $$var_iemgui_snd]} if {[eval concat $$var_iemgui_rcv] == ""} {set hhhrcv "empty"} else {set hhhrcv [eval concat $$var_iemgui_rcv]} if {[eval concat $$var_iemgui_gui_nam] == ""} {set hhhgui_nam "empty" - } else { - set hhhgui_nam [eval concat $$var_iemgui_gui_nam]} - + } else { + set hhhgui_nam [eval concat $$var_iemgui_gui_nam]} + if {[string index $hhhsnd 0] == "$"} { - set hhhsnd [string replace $hhhsnd 0 0 #] } + set hhhsnd [string replace $hhhsnd 0 0 #] } if {[string index $hhhrcv 0] == "$"} { - set hhhrcv [string replace $hhhrcv 0 0 #] } + set hhhrcv [string replace $hhhrcv 0 0 #] } if {[string index $hhhgui_nam 0] == "$"} { - set hhhgui_nam [string replace $hhhgui_nam 0 0 #] } + set hhhgui_nam [string replace $hhhgui_nam 0 0 #] } set hhhsnd [unspace_text $hhhsnd] set hhhrcv [unspace_text $hhhrcv] set hhhgui_nam [unspace_text $hhhgui_nam] pdsend [concat $mytoplevel dialog \ - [eval concat $$var_iemgui_wdt] \ - [eval concat $$var_iemgui_hgt] \ - [eval concat $$var_iemgui_min_rng] \ - [eval concat $$var_iemgui_max_rng] \ - [eval concat $$var_iemgui_lin0_log1] \ - [eval concat $$var_iemgui_loadbang] \ - [eval concat $$var_iemgui_num] \ - $hhhsnd \ - $hhhrcv \ - $hhhgui_nam \ - [eval concat $$var_iemgui_gn_dx] \ - [eval concat $$var_iemgui_gn_dy] \ - [eval concat $$var_iemgui_gn_f] \ - [eval concat $$var_iemgui_gn_fs] \ - [eval concat $$var_iemgui_bcol] \ - [eval concat $$var_iemgui_fcol] \ - [eval concat $$var_iemgui_lcol] \ - [eval concat $$var_iemgui_steady]] + [eval concat $$var_iemgui_wdt] \ + [eval concat $$var_iemgui_hgt] \ + [eval concat $$var_iemgui_min_rng] \ + [eval concat $$var_iemgui_max_rng] \ + [eval concat $$var_iemgui_lin0_log1] \ + [eval concat $$var_iemgui_loadbang] \ + [eval concat $$var_iemgui_num] \ + $hhhsnd \ + $hhhrcv \ + $hhhgui_nam \ + [eval concat $$var_iemgui_gn_dx] \ + [eval concat $$var_iemgui_gn_dy] \ + [eval concat $$var_iemgui_gn_f] \ + [eval concat $$var_iemgui_gn_fs] \ + [eval concat $$var_iemgui_bcol] \ + [eval concat $$var_iemgui_fcol] \ + [eval concat $$var_iemgui_lcol] \ + [eval concat $$var_iemgui_steady]] } -proc iemgui_cancel {mytoplevel} { - # TODO kludge!! until a common approach to ::pd_bindings::panel_bindings - # is sorted out - ::dialog_iemgui::cancel $mytoplevel -} proc ::dialog_iemgui::cancel {mytoplevel} { pdsend "$mytoplevel cancel" } -proc iemgui_ok {mytoplevel} { - # TODO kludge!! until a common approach to ::pd_bindings::panel_bindings - # is sorted out - ::dialog_iemgui::ok $mytoplevel -} proc ::dialog_iemgui::ok {mytoplevel} { ::dialog_iemgui::apply $mytoplevel ::dialog_iemgui::cancel $mytoplevel } proc ::dialog_iemgui::pdtk_iemgui_dialog {mytoplevel mainheader dim_header \ - wdt min_wdt wdt_label \ - hgt min_hgt hgt_label \ - rng_header min_rng min_rng_label max_rng \ - max_rng_label rng_sched \ - lin0_log1 lilo0_label lilo1_label \ - loadbang steady num_label num \ - snd rcv \ - gui_name \ - gn_dx gn_dy gn_f gn_fs \ - bcol fcol lcol} { - + wdt min_wdt wdt_label \ + hgt min_hgt hgt_label \ + rng_header min_rng min_rng_label max_rng \ + max_rng_label rng_sched \ + lin0_log1 lilo0_label lilo1_label \ + loadbang steady num_label num \ + snd rcv \ + gui_name \ + gn_dx gn_dy gn_f gn_fs \ + bcol fcol lcol} { + set vid [string trimleft $mytoplevel .] - + set var_iemgui_wdt [concat iemgui_wdt_$vid] global $var_iemgui_wdt set var_iemgui_min_wdt [concat iemgui_min_wdt_$vid] @@ -466,7 +456,7 @@ proc ::dialog_iemgui::pdtk_iemgui_dialog {mytoplevel mainheader dim_header \ global $var_iemgui_fcol set var_iemgui_lcol [concat iemgui_lcol_$vid] global $var_iemgui_lcol - + set $var_iemgui_wdt $wdt set $var_iemgui_min_wdt $min_wdt set $var_iemgui_hgt $hgt @@ -481,18 +471,18 @@ proc ::dialog_iemgui::pdtk_iemgui_dialog {mytoplevel mainheader dim_header \ set $var_iemgui_num $num set $var_iemgui_steady $steady if {$snd == "empty"} {set $var_iemgui_snd [format ""] - } else {set $var_iemgui_snd [format "%s" $snd]} + } else {set $var_iemgui_snd [format "%s" $snd]} if {$rcv == "empty"} {set $var_iemgui_rcv [format ""] - } else {set $var_iemgui_rcv [format "%s" $rcv]} + } else {set $var_iemgui_rcv [format "%s" $rcv]} if {$gui_name == "empty"} {set $var_iemgui_gui_nam [format ""] - } else {set $var_iemgui_gui_nam [format "%s" $gui_name]} + } else {set $var_iemgui_gui_nam [format "%s" $gui_name]} if {[string index [eval concat $$var_iemgui_snd] 0] == "#"} { - set $var_iemgui_snd [string replace [eval concat $$var_iemgui_snd] 0 0 $] } + set $var_iemgui_snd [string replace [eval concat $$var_iemgui_snd] 0 0 $] } if {[string index [eval concat $$var_iemgui_rcv] 0] == "#"} { - set $var_iemgui_rcv [string replace [eval concat $$var_iemgui_rcv] 0 0 $] } + set $var_iemgui_rcv [string replace [eval concat $$var_iemgui_rcv] 0 0 $] } if {[string index [eval concat $$var_iemgui_gui_nam] 0] == "#"} { - set $var_iemgui_gui_nam [string replace [eval concat $$var_iemgui_gui_nam] 0 0 $] } + set $var_iemgui_gui_nam [string replace [eval concat $$var_iemgui_gui_nam] 0 0 $] } set $var_iemgui_gn_dx $gn_dx set $var_iemgui_gn_dy $gn_dy set $var_iemgui_gn_f $gn_f @@ -503,13 +493,11 @@ proc ::dialog_iemgui::pdtk_iemgui_dialog {mytoplevel mainheader dim_header \ set $var_iemgui_lcol $lcol set $var_iemgui_l2_f1_b0 0 - - toplevel $mytoplevel + + toplevel $mytoplevel -class DialogWindow wm title $mytoplevel [format [_ "%s Properties"] $mainheader] - wm resizable $mytoplevel 0 0 - wm protocol $mytoplevel WM_DELETE_WINDOW [concat ::dialog_iemgui::cancel $mytoplevel] - - ::pd_bindings::panel_bindings $mytoplevel "iemgui" + if {$::windowingsystem eq "aqua"} {$mytoplevel configure -menu .menubar} + ::pd_bindings::dialog_bindings $mytoplevel "iemgui" frame $mytoplevel.dim pack $mytoplevel.dim -side top @@ -521,9 +509,9 @@ proc ::dialog_iemgui::pdtk_iemgui_dialog {mytoplevel mainheader dim_header \ entry $mytoplevel.dim.h_ent -textvariable $var_iemgui_hgt -width 5 pack $mytoplevel.dim.head -side top pack $mytoplevel.dim.w_lab $mytoplevel.dim.w_ent $mytoplevel.dim.dummy1 -side left - if { $hgt_label != "empty" } { + if { $hgt_label ne "empty" } { pack $mytoplevel.dim.h_lab $mytoplevel.dim.h_ent -side left} - + frame $mytoplevel.rng pack $mytoplevel.rng -side top label $mytoplevel.rng.head -text $rng_header @@ -532,45 +520,45 @@ proc ::dialog_iemgui::pdtk_iemgui_dialog {mytoplevel mainheader dim_header \ label $mytoplevel.rng.dummy1 -text " " -width 1 label $mytoplevel.rng.max_lab -text [_ $max_rng_label] -width 8 entry $mytoplevel.rng.max_ent -textvariable $var_iemgui_max_rng -width 9 - if { $rng_header != "empty" } { + if { $rng_header ne "empty" } { pack $mytoplevel.rng.head -side top - if { $min_rng_label != "empty" } { + if { $min_rng_label ne "empty" } { pack $mytoplevel.rng.min_lab $mytoplevel.rng.min_ent -side left} - if { $max_rng_label != "empty" } { + if { $max_rng_label ne "empty" } { pack $mytoplevel.rng.dummy1 \ - $mytoplevel.rng.max_lab $mytoplevel.rng.max_ent -side left} } + $mytoplevel.rng.max_lab $mytoplevel.rng.max_ent -side left} } if { [eval concat $$var_iemgui_lin0_log1] >= 0 || [eval concat $$var_iemgui_loadbang] >= 0 || [eval concat $$var_iemgui_num] > 0 || [eval concat $$var_iemgui_steady] >= 0 } { label $mytoplevel.space1 -text "" pack $mytoplevel.space1 -side top } - + frame $mytoplevel.para pack $mytoplevel.para -side top label $mytoplevel.para.dummy2 -text "" -width 1 label $mytoplevel.para.dummy3 -text "" -width 1 if {[eval concat $$var_iemgui_lin0_log1] == 0} { button $mytoplevel.para.lilo -text [_ [eval concat $$var_iemgui_lilo0]] -width 5 \ - -command "::dialog_iemgui::lilo $mytoplevel" } + -command "::dialog_iemgui::lilo $mytoplevel" } if {[eval concat $$var_iemgui_lin0_log1] == 1} { button $mytoplevel.para.lilo -text [_ [eval concat $$var_iemgui_lilo1]] -width 5 \ - -command "::dialog_iemgui::lilo $mytoplevel" } + -command "::dialog_iemgui::lilo $mytoplevel" } if {[eval concat $$var_iemgui_loadbang] == 0} { - button $mytoplevel.para.lb -text [_ "no init"] \ - -width [::msgcat::mcmax "no init"] \ - -command "::dialog_iemgui::lb $mytoplevel" } + button $mytoplevel.para.lb -text [_ "No init"] \ + -width [::msgcat::mcmax "No init"] \ + -command "::dialog_iemgui::lb $mytoplevel" } if {[eval concat $$var_iemgui_loadbang] == 1} { button $mytoplevel.para.lb -text [_ "Save"] \ - -width [::msgcat::mcmax "Save"] \ - -command "::dialog_iemgui::lb $mytoplevel" } + -width [::msgcat::mcmax "Save"] \ + -command "::dialog_iemgui::lb $mytoplevel" } label $mytoplevel.para.num_lab -text [_ $num_label] -width 9 entry $mytoplevel.para.num_ent -textvariable $var_iemgui_num -width 4 if {[eval concat $$var_iemgui_steady] == 0} { button $mytoplevel.para.stdy_jmp -command "::dialog_iemgui::stdy_jmp $mytoplevel" \ - -text [_ "jump on click"] -width 12 } + -text [_ "Jump on click"] -width [::msgcat::mcmax "Jump on click"] } if {[eval concat $$var_iemgui_steady] == 1} { button $mytoplevel.para.stdy_jmp -command "::dialog_iemgui::stdy_jmp $mytoplevel" \ - -text [_ "steady on click"] -width 12 } + -text [_ "Steady on click"] -width [::msgcat::mcmax "Steady on click"] } if {[eval concat $$var_iemgui_lin0_log1] >= 0} { pack $mytoplevel.para.lilo -side left -expand 1} if {[eval concat $$var_iemgui_loadbang] >= 0} { @@ -579,192 +567,196 @@ proc ::dialog_iemgui::pdtk_iemgui_dialog {mytoplevel mainheader dim_header \ pack $mytoplevel.para.dummy3 $mytoplevel.para.num_lab $mytoplevel.para.num_ent -side left -expand 1} if {[eval concat $$var_iemgui_steady] >= 0} { pack $mytoplevel.para.dummy3 $mytoplevel.para.stdy_jmp -side left -expand 1} - - frame $mytoplevel.spacer0 -height 4 - pack $mytoplevel.spacer0 -side top - labelframe $mytoplevel.s_r -borderwidth 1 -pady 4 -text [_ "Messages"] \ - -font highlight_font - pack $mytoplevel.s_r -side top -fill x -ipadx 5 + frame $mytoplevel.spacer0 -height 4 + pack $mytoplevel.spacer0 -side top + + labelframe $mytoplevel.s_r -borderwidth 1 -pady 4 -text [_ "Messages"] + pack $mytoplevel.s_r -side top -fill x -ipadx 5 frame $mytoplevel.s_r.send pack $mytoplevel.s_r.send -side top - label $mytoplevel.s_r.send.lab -text [_ "Send symbol"] -width 12 -justify right + label $mytoplevel.s_r.send.lab -text [_ "Send symbol:"] -width 12 -justify right entry $mytoplevel.s_r.send.ent -textvariable $var_iemgui_snd -width 22 - if { $snd != "nosndno" } { + if { $snd ne "nosndno" } { pack $mytoplevel.s_r.send.lab $mytoplevel.s_r.send.ent -side left} frame $mytoplevel.s_r.receive pack $mytoplevel.s_r.receive -side top - label $mytoplevel.s_r.receive.lab -text [_ "Receive symbol"] -width 12 -justify right + label $mytoplevel.s_r.receive.lab -text [_ "Receive symbol:"] -width 12 -justify right entry $mytoplevel.s_r.receive.ent -textvariable $var_iemgui_rcv -width 22 - if { $rcv != "norcvno" } { + if { $rcv ne "norcvno" } { pack $mytoplevel.s_r.receive.lab $mytoplevel.s_r.receive.ent -side left} - # get the current font name from the int given from C-space (gn_f) - set current_font $::font_family + # get the current font name from the int given from C-space (gn_f) + set current_font $::font_family if {[eval concat $$var_iemgui_gn_f] == 1} \ - { set current_font "Helvetica" } + { set current_font "Helvetica" } if {[eval concat $$var_iemgui_gn_f] == 2} \ - { set current_font "Times" } - - frame $mytoplevel.spacer1 -height 7 - pack $mytoplevel.spacer1 -side top - - labelframe $mytoplevel.label -borderwidth 1 -text [_ "Label"] -pady 4 \ - -font highlight_font - pack $mytoplevel.label -side top -fill x + { set current_font "Times" } + + frame $mytoplevel.spacer1 -height 7 + pack $mytoplevel.spacer1 -side top + + labelframe $mytoplevel.label -borderwidth 1 -text [_ "Label"] -pady 4 + pack $mytoplevel.label -side top -fill x entry $mytoplevel.label.name_entry -textvariable $var_iemgui_gui_nam -width 30 \ - -font [list $current_font 12 $::font_weight] + -font [list $current_font 12 $::font_weight] pack $mytoplevel.label.name_entry -side top -expand yes -fill both -padx 5 frame $mytoplevel.label.xy -padx 27 -pady 1 pack $mytoplevel.label.xy -side top - label $mytoplevel.label.xy.x_lab -text [_ "X offset"] -width 6 + label $mytoplevel.label.xy.x_lab -text [_ "X offset"] \ + -width [::msgcat::mcmax "X offset"] entry $mytoplevel.label.xy.x_entry -textvariable $var_iemgui_gn_dx -width 5 label $mytoplevel.label.xy.dummy1 -text " " -width 2 - label $mytoplevel.label.xy.y_lab -text [_ "Y offset"] -width 6 + label $mytoplevel.label.xy.y_lab -text [_ "Y offset"] \ + -width [::msgcat::mcmax "Y offset"] entry $mytoplevel.label.xy.y_entry -textvariable $var_iemgui_gn_dy -width 5 pack $mytoplevel.label.xy.x_lab $mytoplevel.label.xy.x_entry $mytoplevel.label.xy.dummy1 \ - $mytoplevel.label.xy.y_lab $mytoplevel.label.xy.y_entry -side left -anchor e + $mytoplevel.label.xy.y_lab $mytoplevel.label.xy.y_entry -side left -anchor e - label $mytoplevel.label.fontpopup_label -text $current_font \ - -relief groove -font [list $current_font 12 $::font_weight] -padx 5 + label $mytoplevel.label.fontpopup_label -text $current_font \ + -relief groove -font [list $current_font 12 $::font_weight] -padx 5 pack $mytoplevel.label.fontpopup_label -side left -anchor w -expand yes -fill x - label $mytoplevel.label.fontsize_label -text [_ "size:"] -width 4 + label $mytoplevel.label.fontsize_label -text [_ "Size:"] \ + -width [::msgcat::mcmax "Size:"] entry $mytoplevel.label.fontsize_entry -textvariable $var_iemgui_gn_fs -width 5 - pack $mytoplevel.label.fontsize_entry $mytoplevel.label.fontsize_label \ - -side right -anchor e -padx 5 -pady 5 - menu $mytoplevel.popup - $mytoplevel.popup add command \ - -label $::font_family \ - -font [format {{%s} 12 %s} $::font_family $::font_weight] \ - -command "::dialog_iemgui::toggle_font $mytoplevel 0" - $mytoplevel.popup add command \ - -label "Helvetica" \ - -font [format {Helvetica 12 %s} $::font_weight] \ - -command "::dialog_iemgui::toggle_font $mytoplevel 1" - $mytoplevel.popup add command \ - -label "Times" \ - -font [format {Times 12 %s} $::font_weight] \ - -command "::dialog_iemgui::toggle_font $mytoplevel 2" - bind $mytoplevel.label.fontpopup_label