Revision: 10533 http://pure-data.svn.sourceforge.net/pure-data/?rev=10533&view=rev Author: eighthave Date: 2009-01-13 17:57:25 +0000 (Tue, 13 Jan 2009)
Log Message: ----------- - named variables after the Tk widgets they represent $mytoplevel = 'toplevel' $mymenubar = the 'menu' attached to the 'toplevel' $mymenu = 'menu' attached to the menubar 'menu' $menuitem = 'menu' item $mycanvas = 'canvas' $canvasitem = 'canvas' item
- replaced canvastosym/to_top with [winfo toplevel ...]
- reordered procs in pd_menus.tcl to go in order of creation
Modified Paths: -------------- branches/pd-devel/0.41.4/src/apple_events.tcl branches/pd-devel/0.41.4/src/pd.tk branches/pd-devel/0.41.4/src/pd_bindings.tcl branches/pd-devel/0.41.4/src/pd_menucommands.tcl branches/pd-devel/0.41.4/src/pd_menus.tcl branches/pd-devel/0.41.4/src/pdtk_canvas.tcl branches/pd-devel/0.41.4/src/pdtk_text.tcl
Modified: branches/pd-devel/0.41.4/src/apple_events.tcl =================================================================== --- branches/pd-devel/0.41.4/src/apple_events.tcl 2009-01-13 17:13:31 UTC (rev 10532) +++ branches/pd-devel/0.41.4/src/apple_events.tcl 2009-01-13 17:57:25 UTC (rev 10533) @@ -23,6 +23,9 @@
#kAEShowPreferences proc ::tk::mac::ShowPreferences {} { + puts "apple prefs menu item callback" + puts "::tk::mac::ShowPreferences " +# menu_preferences }
#kAEQuitApplication
Modified: branches/pd-devel/0.41.4/src/pd.tk =================================================================== --- branches/pd-devel/0.41.4/src/pd.tk 2009-01-13 17:13:31 UTC (rev 10532) +++ branches/pd-devel/0.41.4/src/pd.tk 2009-01-13 17:57:25 UTC (rev 10533) @@ -41,25 +41,31 @@ #
# -# * when possible use "" doublequotes to delimit messages +# - when possible use "" doublequotes to delimit messages +# - instead of 'global myvar' use '$::myvar' # # # -# ## Names for Common Variables #---------------------------- -# $name == window name -# $canvasname == $name.c == canvas name +# +# variables named after the Tk widgets they represent +# $mytoplevel = 'toplevel' +# $mymenubar = the 'menu' attached to the 'toplevel' +# $mymenu = 'menu' attached to the menubar 'menu' +# $menuitem = 'menu' item +# $mycanvas = 'canvas' +# $canvasitem = 'canvas' item
- #------------------------------------------------------------------------------# # global variables
+ +# file types for Open/Save panels set filetypes ""
- # for the sake of clarity, I think there should not be any inline code, # everything should be in a procedure that is ultimately triggered from main() # -hans@eds.org @@ -95,7 +101,6 @@ # init functions
proc init {} { - global filetypes switch -- [tk windowingsystem] { "x11" { # add control to show/hide hidden files in the open panel (load @@ -104,14 +109,14 @@ set ::tk::dialog::file::showHiddenBtn 1 set ::tk::dialog::file::showHiddenVar 0 # set file types that open/save recognize - set filetypes { + set ::filetypes { {{pd files} {.pd} } {{max text files} {.pat} } } } "aqua" { # set file types that open/save recognize - set filetypes { + set ::filetypes { {{Pd Files} {.pd} } {{Max Text Files (.pat)} {.pat} } } @@ -119,7 +124,7 @@ "win32" { font create menufont -family Tahoma -size -11 # set file types that open/save recognize - set filetypes { + set ::filetypes { {{Pd Files} {.pd} } {{Max Text Files} {.pat} } } @@ -159,32 +164,34 @@ puts stderr "Running pdtk_fixwindowmenu" }
-# TODO rename "name" to "topname" to be clear -proc pdtk_canvas_new {name width height geometry editable} { +proc pdtk_canvas_new {mytoplevel width height geometry editable} { # TODO check size of window - toplevel $name -width $width -height $height - ::pd_menus::create_menubar $name.menubar - $name configure -menu $name.menubar + toplevel $mytoplevel -width $width -height $height + ::pd_menus::create_menubar $mytoplevel.menubar + $mytoplevel configure -menu $mytoplevel.menubar
# TODO slide off screen windows into view - wm geometry $name $geometry + wm geometry $mytoplevel $geometry if {[tk windowingsystem] eq "aqua"} { - wm minsize $name 50 20 + wm minsize $mytoplevel 50 20 } else { # leave room for the menubar - wm minsize $name 310 30 + wm minsize $mytoplevel 310 30 } - canvas $name.c -width $width -height $height -background white \ + canvas $mytoplevel.c -width $width -height $height -background white \ -highlightthickness 0 # TODO add scrollbars here - pack $name.c -side left -expand 1 -fill both + pack $mytoplevel.c -side left -expand 1 -fill both
- ::pd_bindings::canvas_bindings $name + ::pd_bindings::canvas_bindings $mytoplevel
# the popup menu for the canvas - menu $name.popup -tearoff false - $name.popup add command -label "Properties" -command "popup_action $name 0" - $name.popup add command -label "Open" -command "popup_action $name 1" - $name.popup add command -label "Help" -command "popup_action $name 2" + menu $mytoplevel.popup -tearoff false + $mytoplevel.popup add command -label "Properties" \ + -command "popup_action $mytoplevel 0" + $mytoplevel.popup add command -label "Open" \ + -command "popup_action $mytoplevel 1" + $mytoplevel.popup add command -label "Help" \ + -command "popup_action $mytoplevel 2" }
proc check_font {$fontname} {
Modified: branches/pd-devel/0.41.4/src/pd_bindings.tcl =================================================================== --- branches/pd-devel/0.41.4/src/pd_bindings.tcl 2009-01-13 17:13:31 UTC (rev 10532) +++ branches/pd-devel/0.41.4/src/pd_bindings.tcl 2009-01-13 17:57:25 UTC (rev 10533) @@ -18,133 +18,140 @@ } }
-proc ::pd_bindings::window_bindings {name} { +proc ::pd_bindings::window_bindings {mytoplevel} { variable modifier
# File menu - bind $name <$modifier-Key-b> "menu_helpbrowser" - bind $name <$modifier-Key-n> "menu_new" - bind $name <$modifier-Key-o> "menu_open" - bind $name <$modifier-Key-p> "menu_print $name" - bind $name <$modifier-Key-q> "pdsend "pd verifyquit ;"" - bind $name <$modifier-Key-r> "menu_raiseconsole" - bind $name <$modifier-Key-w> "pdsend "$name menuclose 0 ;"" - bind $name <$modifier-Shift-Key-L> "menu_clear_console" - bind $name <$modifier-Shift-Key-Q> "pdsend "pd quit ;"" - bind $name <$modifier-Shift-Key-R> "menu_toggle_console" - bind $name <$modifier-Shift-Key-W> "pdsend "$name menuclose 1 ;"" + bind $mytoplevel <$modifier-Key-b> "menu_helpbrowser" + bind $mytoplevel <$modifier-Key-n> "menu_new" + bind $mytoplevel <$modifier-Key-o> "menu_open" + bind $mytoplevel <$modifier-Key-p> "menu_print $mytoplevel" + bind $mytoplevel <$modifier-Key-q> "pdsend "pd verifyquit ;"" + bind $mytoplevel <$modifier-Key-r> "menu_raiseconsole" + bind $mytoplevel <$modifier-Key-w> "pdsend "$mytoplevel menuclose 0 ;"" + bind $mytoplevel <$modifier-Shift-Key-L> "menu_clear_console" + bind $mytoplevel <$modifier-Shift-Key-Q> "pdsend "pd quit ;"" + bind $mytoplevel <$modifier-Shift-Key-R> "menu_toggle_console" + bind $mytoplevel <$modifier-Shift-Key-W> "pdsend "$mytoplevel menuclose 1 ;""
# DSP control - bind $name <$modifier-Key-slash> "pdsend "pd dsp 1 ;"" - bind $name <$modifier-Key-period> "pdsend "pd dsp 0 ;"" + bind $mytoplevel <$modifier-Key-slash> "pdsend "pd dsp 1 ;"" + bind $mytoplevel <$modifier-Key-period> "pdsend "pd dsp 0 ;"" }
-proc ::pd_bindings::pdwindow_bindings {name} { +proc ::pd_bindings::pdwindow_bindings {mytoplevel} { variable modifier
- window_bindings $name + window_bindings $mytoplevel
# TODO update this to work with the console, if it is used - bind . <$modifier-Key-a> ".printout.text tag add sel 1.0 end" - bind . <$modifier-Key-x> "tk_textCut .printout.text" - bind . <$modifier-Key-c> "tk_textCopy .printout.text" - bind . <$modifier-Key-v> "tk_textPaste .printout.text" - bind . <$modifier-Key-w> {::pd_post::pdtk_post "Can't close Pd window, ignored.\n"} + bind $mytoplevel <$modifier-Key-a> ".printout.text tag add sel 1.0 end" + bind $mytoplevel <$modifier-Key-x> "tk_textCut .printout.text" + bind $mytoplevel <$modifier-Key-c> "tk_textCopy .printout.text" + bind $mytoplevel <$modifier-Key-v> "tk_textPaste .printout.text" + bind $mytoplevel <$modifier-Key-w> { + ::pd_post::pdtk_post "Can't close Pd window, ignored.\n" + }
# Tcl event bindings - wm protocol . WM_DELETE_WINDOW "pdsend "pd verifyquit ;"" + wm protocol $mytoplevel WM_DELETE_WINDOW "pdsend "pd verifyquit ;""
# do window maintenance when entering the Pd window (Window menu, scrollbars, etc) - #bind $name <FocusIn> {pdtk_pdwindowmaintenance} + #bind $mytoplevel <FocusIn> {pdtk_pdwindowmaintenance} }
-proc ::pd_bindings::panel_bindings {name} { +proc ::pd_bindings::panel_bindings {mytoplevel} { variable modifier
- window_bindings $name + window_bindings $mytoplevel
-# bind $name <KeyPress-Escape> [format "%s_cancel %s" $panelname $name] -# bind $name <KeyPress-Return> [format "%s_ok %s" $panelname $name] -# bind $name <$modifier_key-Key-w> [format "%s_cancel %s" $panelname $name] +# bind $mytoplevel <KeyPress-Escape> [format "%s_cancel %s" $panelname $mytoplevel] +# bind $mytoplevel <KeyPress-Return> [format "%s_ok %s" $panelname $mytoplevel] +# bind $mytoplevel <$modifier_key-Key-w> [format "%s_cancel %s" $panelname $mytoplevel]
-# wm protocol $name WM_DELETE_WINDOW "$panelname_cancel" +# wm protocol $mytoplevel WM_DELETE_WINDOW "$panelname_cancel" }
-proc ::pd_bindings::canvas_bindings {name} { +proc ::pd_bindings::canvas_bindings {mytoplevel} { variable modifier
- window_bindings $name - + window_bindings $mytoplevel + set mycanvas $mytoplevel.c + # key bindings ------------------------------------------------------------- - bind $name <$modifier-Key-1> "pdsend "$name obj ;"" - bind $name <$modifier-Key-2> "pdsend "$name msg ;"" - bind $name <$modifier-Key-3> "pdsend "$name floatatom ;"" - bind $name <$modifier-Key-4> "pdsend "$name symbolatom ;"" - bind $name <$modifier-Key-5> "pdsend "$name text ;"" - bind $name <$modifier-Key-a> "pdsend "$name selectall ;"" - bind $name <$modifier-Key-c> "pdsend "$name copy ;"" - bind $name <$modifier-Key-d> "pdsend "$name duplicate ;"" - bind $name <$modifier-Key-e> "pdsend "$name editmode 0 ;"" - bind $name <$modifier-Key-f> "menu_findobject $name" - bind $name <$modifier-Key-g> "pdsend "$name findagain ;"" - bind $name <$modifier-Key-s> "pdsend "$name menusave ;"" - bind $name <$modifier-Key-v> "pdsend "$name paste ;"" - bind $name <$modifier-Key-x> "pdsend "$name cut ;"" - bind $name <$modifier-Key-z> "menu_undo $name" - bind $name <$modifier-Key-slash> "pdsend "pd dsp 1 ;"" - bind $name <$modifier-Key-period> "pdsend "pd dsp 0 ;"" + bind $mytoplevel <$modifier-Key-1> "pdsend "$mytoplevel obj ;"" + bind $mytoplevel <$modifier-Key-2> "pdsend "$mytoplevel msg ;"" + bind $mytoplevel <$modifier-Key-3> "pdsend "$mytoplevel floatatom ;"" + bind $mytoplevel <$modifier-Key-4> "pdsend "$mytoplevel symbolatom ;"" + bind $mytoplevel <$modifier-Key-5> "pdsend "$mytoplevel text ;"" + bind $mytoplevel <$modifier-Key-a> "pdsend "$mytoplevel selectall ;"" + bind $mytoplevel <$modifier-Key-c> "pdsend "$mytoplevel copy ;"" + bind $mytoplevel <$modifier-Key-d> "pdsend "$mytoplevel duplicate ;"" + bind $mytoplevel <$modifier-Key-e> "pdsend "$mytoplevel editmode 0 ;"" + bind $mytoplevel <$modifier-Key-f> "menu_findobject $mytoplevel" + bind $mytoplevel <$modifier-Key-g> "pdsend "$mytoplevel findagain ;"" + bind $mytoplevel <$modifier-Key-s> "pdsend "$mytoplevel menusave ;"" + bind $mytoplevel <$modifier-Key-v> "pdsend "$mytoplevel paste ;"" + bind $mytoplevel <$modifier-Key-x> "pdsend "$mytoplevel cut ;"" + bind $mytoplevel <$modifier-Key-z> "menu_undo $mytoplevel" + bind $mytoplevel <$modifier-Key-slash> "pdsend "pd dsp 1 ;"" + bind $mytoplevel <$modifier-Key-period> "pdsend "pd dsp 0 ;""
# annoying, but Tk's bind needs uppercase letter to get the Shift - bind $name <$modifier-Shift-Key-B> "pdsend "$name bng 1 ;"" - bind $name <$modifier-Shift-Key-C> "pdsend "$name mycnv 1 ;"" - bind $name <$modifier-Shift-Key-D> "pdsend "$name vradio 1 ;"" - bind $name <$modifier-Shift-Key-H> "pdsend "$name hslider 1 ;"" - bind $name <$modifier-Shift-Key-I> "pdsend "$name hradio 1 ;"" - bind $name <$modifier-Shift-Key-N> "pdsend "$name numbox 1 ;"" - bind $name <$modifier-Shift-Key-S> "pdsend "$name menusaveas ;"" - bind $name <$modifier-Shift-Key-T> "pdsend "$name toggle 1 ;"" - bind $name <$modifier-Shift-Key-U> "pdsend "$name vumeter 1 ;"" - bind $name <$modifier-Shift-Key-V> "pdsend "$name vslider 1 ;"" - bind $name <$modifier-Shift-Key-Z> "menu_redo $name" + bind $mytoplevel <$modifier-Shift-Key-B> "pdsend "$mytoplevel bng 1 ;"" + bind $mytoplevel <$modifier-Shift-Key-C> "pdsend "$mytoplevel mycnv 1 ;"" + bind $mytoplevel <$modifier-Shift-Key-D> "pdsend "$mytoplevel vradio 1 ;"" + bind $mytoplevel <$modifier-Shift-Key-H> "pdsend "$mytoplevel hslider 1 ;"" + bind $mytoplevel <$modifier-Shift-Key-I> "pdsend "$mytoplevel hradio 1 ;"" + bind $mytoplevel <$modifier-Shift-Key-N> "pdsend "$mytoplevel numbox 1 ;"" + bind $mytoplevel <$modifier-Shift-Key-S> "pdsend "$mytoplevel menusaveas ;"" + bind $mytoplevel <$modifier-Shift-Key-T> "pdsend "$mytoplevel toggle 1 ;"" + bind $mytoplevel <$modifier-Shift-Key-U> "pdsend "$mytoplevel vumeter 1 ;"" + bind $mytoplevel <$modifier-Shift-Key-V> "pdsend "$mytoplevel vslider 1 ;"" + bind $mytoplevel <$modifier-Shift-Key-Z> "menu_redo $mytoplevel" if {[tk windowingsystem] eq "aqua"} { - bind $name <$modifier-Key-m> "menu_minimize $name" - bind $name <$modifier-Key-t> "menu_font $name" - bind $name <$modifier-quoteleft> "menu_raisenextwindow" + bind $mytoplevel <$modifier-Key-m> "menu_minimize $mytoplevel" + bind $mytoplevel <$modifier-Key-t> "menu_font $mytoplevel" + bind $mytoplevel <$modifier-quoteleft> "menu_raisenextwindow" } else { - bind $name <$modifier-Key-m> "menu_send" - bind $name <$modifier-Key-t> "menu_texteditor" + bind $mytoplevel <$modifier-Key-m> "menu_send" + bind $mytoplevel <$modifier-Key-t> "menu_texteditor" }
# mouse bindings ----------------------------------------------------------- - # these need to be bound to $name.c because %W will return $name for - # events over the window frame and $name.c for events over the canvas - bind $name.c <Motion> "pdtk_canvas_motion %W %x %y 0" - bind $name.c <Button> "pdtk_canvas_mouse %W %x %y %b 0" - bind $name.c <ButtonRelease> "pdtk_canvas_mouseup %W %x %y %b" - bind $name.c <$modifier-Button> "pdtk_canvas_mouse %W %x %y %b 0" + # these need to be bound to $mytoplevel.c because %W will return $mytoplevel for + # events over the window frame and $mytoplevel.c for events over the canvas + bind $mycanvas <Motion> "pdtk_canvas_motion %W %x %y 0" + bind $mycanvas <Button> "pdtk_canvas_mouse %W %x %y %b 0" + bind $mycanvas <ButtonRelease> "pdtk_canvas_mouseup %W %x %y %b" + bind $mycanvas <$modifier-Button> "pdtk_canvas_mouse %W %x %y %b 0" # TODO look into "virtual events' for a means for getting Shift-Button, etc. switch {[tk windowingsystem]} { "aqua" { # on Mac OS X, emulate a rightclick with Ctrl-click - bind.c $name <Ctrl-Button> "pdtk_canvas_rightclick %W %x %y %b" + bind $mycanvas <Ctrl-Button> "pdtk_canvas_rightclick %W %x %y %b" + # TODO try replacing the above with this (and making it global by binding to "." + #bind all <Control-ButtonPress-1> {event generate %W <ButtonPress-2> \ + # -x %x -y %y -rootx %X -rooty %Y \ + # -button 2 -time %t} } "x11" { # on X11, button 2 "pastes" from the X windows clipboard - bind.c $name <Button-2> "pdtk_canvas_clickpaste %W %x %y %b" + bind $mycanvas <Button-2> "pdtk_canvas_clickpaste %W %x %y %b" } } - #TODO bind $name <MouseWheel> + #TODO bind $mytoplevel <MouseWheel>
# event bindings ----------------------------------------------------------- - bind $name <Map> "pdtk_canvas_map %W" - bind $name <Unmap> "pdtk_canvas_unmap %W" - #TODO bind $name <Configure> "pdtk_canvas_getscroll %W" + bind $mytoplevel <Map> "pdtk_canvas_map %W" + bind $mytoplevel <Unmap> "pdtk_canvas_unmap %W" + #TODO bind $mytoplevel <Configure> "pdtk_canvas_getscroll %W"
# do window maintenance when entering a window (Window menu, scrollbars...) # maybe use WM_TAKE_FOCUS for this? - #bind $name <FocusIn> {pdtk_canvaswindowmaintenance} + #bind $mytoplevel <FocusIn> {pdtk_canvaswindowmaintenance}
# window protocol bindings - wm protocol $name WM_DELETE_WINDOW "pdsend "$name menuclose 0 ;"" + wm protocol $mytoplevel WM_DELETE_WINDOW "pdsend "$mytoplevel menuclose 0 ;"" }
Modified: branches/pd-devel/0.41.4/src/pd_menucommands.tcl =================================================================== --- branches/pd-devel/0.41.4/src/pd_menucommands.tcl 2009-01-13 17:13:31 UTC (rev 10532) +++ branches/pd-devel/0.41.4/src/pd_menucommands.tcl 2009-01-13 17:57:25 UTC (rev 10533) @@ -55,12 +55,12 @@ # TODO insert real send panel here }
-proc ::pd_menucommands::menu_print {name} { +proc ::pd_menucommands::menu_print {mytoplevel} { set filename [tk_getSaveFile -initialfile pd.ps \ -defaultextension .ps \ -filetypes { {{postscript} {.ps}} }] if {$filename != ""} { - $name.c postscript -file $filename + $mytoplevel.c postscript -file $filename } }
@@ -85,7 +85,7 @@ } }
-proc ::pd_menucommands::menu_maximize {window} { - wm state $window zoomed +proc ::pd_menucommands::menu_maximize {mytoplevel} { + wm state $mytoplevel zoomed }
Modified: branches/pd-devel/0.41.4/src/pd_menus.tcl =================================================================== --- branches/pd-devel/0.41.4/src/pd_menus.tcl 2009-01-13 17:13:31 UTC (rev 10532) +++ branches/pd-devel/0.41.4/src/pd_menus.tcl 2009-01-13 17:57:25 UTC (rev 10533) @@ -38,32 +38,89 @@ option add *tearOff 0 }
+proc ::pd_menus::create_menubar {mymenubar} { + menu $mymenubar + set menulist "file edit put find media window help" + if { [tk windowingsystem] eq "aqua" } {make_apple_menu $mymenubar} + if { [tk windowingsystem] eq "win32" } {make_system_menu $mymenubar} + foreach mymenu $menulist { + menu $mymenubar.$mymenu + $mymenubar add cascade -label [string totitle $mymenu] \ + -menu $mymenubar.$mymenu + [format create_%s_menu $mymenu] $mymenubar.$mymenu PLACEHOLDER + if {[tk windowingsystem] eq "win32"} { + # fix menu font size on Windows with tk scaling = 1 + $mymenubar.$mymenu configure -font menufont + } + } +} + +proc ::pd_menus::configure_pdwindow {mymenubar} { + # these are meaningless for the Pd window, so disable them + set file_items_to_disable {"Save" "Save As..." "Print..." "Close"} + foreach menuitem $file_items_to_disable { + $mymenubar.file entryconfigure $menuitem -state disabled + } + set edit_items_to_disable {"Undo" "Redo" "Duplicate" "Tidy Up" "Edit Mode"} + foreach menuitem $edit_items_to_disable { + $mymenubar.edit entryconfigure $menuitem -state disabled + } + # disable everything on the Put menu + for {set i 0} {$i <= [$mymenubar.put index end]} {incr i} { + # catch errors by trying to disable separators + catch {$mymenubar.put entryconfigure $i -state disabled } + } +} + +# for Mac OS X only +proc ::pd_menus::make_apple_menu {mymenu} { + puts stderr CREATE_APPLE_MENU + # TODO this should open a Pd patch called about.pd + menu $mymenu.apple + $mymenu.apple add command -label [say "About Pd"] \ + -command "menu_doc_open doc/1.manual 1.introduction.txt" + $mymenu add cascade -label "Apple" -menu $mymenu.apple + # starting in 8.4.14, this is created automatically + if {[regsub -- {[0-9].[0-9].([0-9][0-9]*)} [info patchlevel] {\1}] < 14} { + $mymenu.apple add separator + $mymenu.apple add command -label [say "Preferences..."] \ + -command "menu_preferences" -accelerator "Cmd+," + } +} + +# for Windows only +proc ::pd_menus::make_system_menu {mymenu} { + $mymenu add cascade -menu [menu $mymenu.system] + # TODO add Close, Minimize, etc and whatever else is on the little menu + # that is on the top left corner of the window frame +} + # ------------------------------------------------------------------------------ # menu building functions for Mac OS X/aqua
-proc ::pd_menus::create_file_menu_aqua {rootmenu} { +proc ::pd_menus::create_file_menu_aqua {mymenu} { variable accelerator - $rootmenu add command -label [say "new_file"] -accelerator "$accelerator+N" - $rootmenu add command -label [say "Open"] -accelerator "$accelerator+O" - $rootmenu add cascade -label [say "Open Recent"] - $rootmenu add separator - $rootmenu add command -label [say "Close"] -accelerator "$accelerator+W" - $rootmenu add command -label [say "Save"] -accelerator "$accelerator+S" - $rootmenu add command -label [say "Save As..."] -accelerator "$accelerator+Shift+S" - #$rootmenu add command -label [say "Save All"] - $rootmenu add command -label [say "Revert to Saved"] - $rootmenu add separator - $rootmenu add command -label [say "Message"] - $rootmenu add separator - $rootmenu add command -label [say "Print..."] -accelerator "$accelerator+P" + $mymenu add command -label [say "new_file"] -accelerator "$accelerator+N" + $mymenu add command -label [say "Open"] -accelerator "$accelerator+O" + $mymenu add cascade -label [say "Open Recent"] + $mymenu add separator + $mymenu add command -label [say "Close"] -accelerator "$accelerator+W" + $mymenu add command -label [say "Save"] -accelerator "$accelerator+S" + $mymenu add command -label [say "Save As..."] -accelerator "$accelerator+Shift+S" + #$mymenu add command -label [say "Save All"] + $mymenu add command -label [say "Revert to Saved"] + $mymenu add separator + $mymenu add command -label [say "Message"] + $mymenu add separator + $mymenu add command -label [say "Print..."] -accelerator "$accelerator+P" }
# the "Edit", "Put", and "Find" menus do not have cross-platform differences
-proc ::pd_menus::create_media_menu_aqua {rootmenu} { +proc ::pd_menus::create_media_menu_aqua {mymenu} { }
-proc ::pd_menus::create_window_menu_aqua {rootmenu} { +proc ::pd_menus::create_window_menu_aqua {mymenu} { }
# the "Help" does not have cross-platform differences @@ -71,29 +128,29 @@ # ------------------------------------------------------------------------------ # menu building functions for UNIX/X11
-proc ::pd_menus::create_file_menu_x11 {rootmenu} { +proc ::pd_menus::create_file_menu_x11 {mymenu} { variable accelerator - $rootmenu add command -label [say "new_file"] -accelerator "$accelerator+N" - $rootmenu add command -label [say "Open"] -accelerator "$accelerator+O" - $rootmenu add separator - $rootmenu add command -label [say "Save"] -accelerator "$accelerator+S" - $rootmenu add command -label [say "Save As..."] -accelerator "Shift+$accelerator+S" - # $rootmenu add command -label "Revert" - $rootmenu add separator - $rootmenu add command -label [say "Message"] -accelerator "$accelerator+M" - $rootmenu add command -label [say "Print..."] -accelerator "$accelerator+P" - $rootmenu add separator - $rootmenu add command -label [say "Close"] -accelerator "$accelerator+W" - $rootmenu add command -label [say "Quit"] -accelerator "$accelerator+Q" \ + $mymenu add command -label [say "new_file"] -accelerator "$accelerator+N" + $mymenu add command -label [say "Open"] -accelerator "$accelerator+O" + $mymenu add separator + $mymenu add command -label [say "Save"] -accelerator "$accelerator+S" + $mymenu add command -label [say "Save As..."] -accelerator "Shift+$accelerator+S" + # $mymenu add command -label "Revert" + $mymenu add separator + $mymenu add command -label [say "Message"] -accelerator "$accelerator+M" + $mymenu add command -label [say "Print..."] -accelerator "$accelerator+P" + $mymenu add separator + $mymenu add command -label [say "Close"] -accelerator "$accelerator+W" + $mymenu add command -label [say "Quit"] -accelerator "$accelerator+Q" \ -command "pdsend "pd verifyquit ;"" }
# the "Edit", "Put", and "Find" menus do not have cross-platform differences
-proc ::pd_menus::create_media_menu_x11 {rootmenu} { +proc ::pd_menus::create_media_menu_x11 {mymenu} { }
-proc ::pd_menus::create_window_menu_x11 {rootmenu} { +proc ::pd_menus::create_window_menu_x11 {mymenu} { }
# the "Help" does not have cross-platform differences @@ -101,29 +158,29 @@ # ------------------------------------------------------------------------------ # menu building functions for Windows/Win32
-proc ::pd_menus::create_file_menu_win32 {rootmenu} { +proc ::pd_menus::create_file_menu_win32 {mymenu} { variable accelerator - $rootmenu add command -label [say "new_file"] -accelerator "$accelerator+N" - $rootmenu add command -label [say "Open"] -accelerator "$accelerator+O" - $rootmenu add separator - $rootmenu add command -label [say "Save"] -accelerator "$accelerator+S" - $rootmenu add command -label [say "Save As..."] -accelerator "Shift+$accelerator+S" - # $rootmenu add command -label "Revert" - $rootmenu add separator - $rootmenu add command -label [say "Message"] -accelerator "$accelerator+M" - $rootmenu add command -label [say "Print..."] -accelerator "$accelerator+P" - $rootmenu add separator - $rootmenu add command -label [say "Close"] -accelerator "$accelerator+W" - $rootmenu add command -label [say "Quit"] -accelerator "$accelerator+Q"\ + $mymenu add command -label [say "new_file"] -accelerator "$accelerator+N" + $mymenu add command -label [say "Open"] -accelerator "$accelerator+O" + $mymenu add separator + $mymenu add command -label [say "Save"] -accelerator "$accelerator+S" + $mymenu add command -label [say "Save As..."] -accelerator "Shift+$accelerator+S" + # $mymenu add command -label "Revert" + $mymenu add separator + $mymenu add command -label [say "Message"] -accelerator "$accelerator+M" + $mymenu add command -label [say "Print..."] -accelerator "$accelerator+P" + $mymenu add separator + $mymenu add command -label [say "Close"] -accelerator "$accelerator+W" + $mymenu add command -label [say "Quit"] -accelerator "$accelerator+Q"\ -command "pdsend "pd verifyquit ;"" }
# the "Edit", "Put", and "Find" menus do not have cross-platform differences
-proc ::pd_menus::create_media_menu_win32 {rootmenu} { +proc ::pd_menus::create_media_menu_win32 {mymenu} { }
-proc ::pd_menus::create_window_menu_win32 {rootmenu} { +proc ::pd_menus::create_window_menu_win32 {mymenu} { }
# the "Help" does not have cross-platform differences @@ -131,214 +188,148 @@
# ------------------------------------------------------------------------------ # menu building functions -proc ::pd_menus::create_file_menu {rootmenu name} { - [format create_file_menu_%s [tk windowingsystem]] $rootmenu - $rootmenu entryconfigure [say "new_file"] -command "menu_new" - $rootmenu entryconfigure [say "Open"] -command "menu_open" - $rootmenu entryconfigure [say "Save"] -command "pdsend "$name menusave ;"" - $rootmenu entryconfigure [say "Save As..."] -command "pdsend "$name menusaveas ;"" - # $rootmenu entryconfigure "Revert*" -command "menu_revert $name" - $rootmenu entryconfigure [say "Close"] -command "pdsend "$name menuclose 0 ;"" - $rootmenu entryconfigure [say "Message"] -command "menu_send" - $rootmenu entryconfigure [say "Print..."] -command "menu_print $name" +proc ::pd_menus::create_file_menu {mymenu mytoplevel} { + [format create_file_menu_%s [tk windowingsystem]] $mymenu + $mymenu entryconfigure [say "new_file"] -command "menu_new" + $mymenu entryconfigure [say "Open"] -command "menu_open" + $mymenu entryconfigure [say "Save"] -command "pdsend "$mytoplevel menusave ;"" + $mymenu entryconfigure [say "Save As..."] -command "pdsend "$mytoplevel menusaveas ;"" + # $mymenu entryconfigure "Revert*" -command "menu_revert $mytoplevel" + $mymenu entryconfigure [say "Close"] -command "pdsend "$mytoplevel menuclose 0 ;"" + $mymenu entryconfigure [say "Message"] -command "menu_send" + $mymenu entryconfigure [say "Print..."] -command "menu_print $mytoplevel" }
-proc ::pd_menus::create_edit_menu {rootmenu name} { +proc ::pd_menus::create_edit_menu {mymenu mytoplevel} { variable accelerator - $rootmenu add command -label [say "Undo"] -accelerator "$accelerator+Z" \ - -command "menu_undo $name" - $rootmenu add command -label [say "Redo"] -accelerator "Shift+$accelerator+Z" \ - -command "menu_redo $name" - $rootmenu add separator - $rootmenu add command -label [say "Cut"] -accelerator "$accelerator+X" \ - -command "pdsend "$name cut ;"" - $rootmenu add command -label [say "Copy"] -accelerator "$accelerator+C" \ - -command "pdsend "$name copy ;"" - $rootmenu add command -label [say "Paste"] -accelerator "$accelerator+V" \ - -command "pdsend "$name paste ;"" - $rootmenu add command -label [say "Duplicate"] -accelerator "$accelerator+D" \ - -command "pdsend "$name duplicate ;"" - $rootmenu add command -label [say "Select All"] -accelerator "$accelerator+A" \ - -command "pdsend "$name selectall ;"" - $rootmenu add separator + $mymenu add command -label [say "Undo"] -accelerator "$accelerator+Z" \ + -command "menu_undo $mytoplevel" + $mymenu add command -label [say "Redo"] -accelerator "Shift+$accelerator+Z" \ + -command "menu_redo $mytoplevel" + $mymenu add separator + $mymenu add command -label [say "Cut"] -accelerator "$accelerator+X" \ + -command "pdsend "$mytoplevel cut ;"" + $mymenu add command -label [say "Copy"] -accelerator "$accelerator+C" \ + -command "pdsend "$mytoplevel copy ;"" + $mymenu add command -label [say "Paste"] -accelerator "$accelerator+V" \ + -command "pdsend "$mytoplevel paste ;"" + $mymenu add command -label [say "Duplicate"] -accelerator "$accelerator+D" \ + -command "pdsend "$mytoplevel duplicate ;"" + $mymenu add command -label [say "Select All"] -accelerator "$accelerator+A" \ + -command "pdsend "$mytoplevel selectall ;"" + $mymenu add separator if {[tk windowingsystem] eq "aqua"} { - $rootmenu add command -label [say "Text Editor"] \ - -command "menu_texteditor $name" - $rootmenu add command -label [say "Font"] -accelerator "$accelerator+T" \ - -command "menu_font $name" + $mymenu add command -label [say "Text Editor"] \ + -command "menu_texteditor $mytoplevel" + $mymenu add command -label [say "Font"] -accelerator "$accelerator+T" \ + -command "menu_font $mytoplevel" } else { - $rootmenu add command -label [say "Text Editor"] -accelerator "$accelerator+T"\ - -command "menu_texteditor $name" - $rootmenu add command -label [say "Font"] \ - -command "menu_font $name" + $mymenu add command -label [say "Text Editor"] -accelerator "$accelerator+T"\ + -command "menu_texteditor $mytoplevel" + $mymenu add command -label [say "Font"] \ + -command "menu_font $mytoplevel" } - $rootmenu add command -label [say "Tidy Up"] \ - -command "pdsend "$name tidy ;"" - $rootmenu add command -label [say "Toggle Console"] -accelerator "Shift+$accelerator+R" \ + $mymenu add command -label [say "Tidy Up"] \ + -command "pdsend "$mytoplevel tidy ;"" + $mymenu add command -label [say "Toggle Console"] -accelerator "Shift+$accelerator+R" \ -command {.controls.switches.console invoke} - $rootmenu add command -label [say "Clear Console"] -accelerator "Shift+$accelerator+L" \ + $mymenu add command -label [say "Clear Console"] -accelerator "Shift+$accelerator+L" \ -command "menu_clear_console" - $rootmenu add separator - $rootmenu add radiobutton -label [say "Edit Mode"] -accelerator "$accelerator+E" \ + $mymenu add separator + $mymenu add radiobutton -label [say "Edit Mode"] -accelerator "$accelerator+E" \ -indicatoron true -selectcolor grey85 \ - -command "pdsend "$name editmode ;"" \ - + -command "pdsend "$mytoplevel editmode 0 ;"" # if { $editable == 0 } { - # $name.m.edit entryconfigure "Edit mode" -indicatoron false + # $mymenu entryconfigure "Edit Mode" -indicatoron false # } + if {[tk windowingsystem] ne "aqua"} { - $rootmenu add separator - $rootmenu add command -label [say "Preferences"] \ + $mymenu add separator + $mymenu add command -label [say "Preferences"] \ -command "menu_preferences" } }
-proc ::pd_menus::create_put_menu {rootmenu name} { +proc ::pd_menus::create_put_menu {mymenu mytoplevel} { variable accelerator - $rootmenu add command -label [say "Object"] -accelerator "$accelerator+1" \ - -command "pdsend "$name obj 0;"" - $rootmenu add command -label [say "Message"] -accelerator "$accelerator+2" \ - -command "pdsend "$name msg 0;"" - $rootmenu add command -label [say "Number"] -accelerator "$accelerator+3" \ - -command "pdsend "$name floatatom 0;"" - $rootmenu add command -label [say "Symbol"] -accelerator "$accelerator+4" \ - -command "pdsend "$name symbolatom 0;"" - $rootmenu add command -label [say "Comment"] -accelerator "$accelerator+5" \ - -command "pdsend "$name text 0;"" - $rootmenu add separator - $rootmenu add command -label [say "Bang"] -accelerator "Shift+$accelerator+B" \ - -command "pdsend "$name bng 0;"" - $rootmenu add command -label [say "Toggle"] -accelerator "Shift+$accelerator+T" \ - -command "pdsend "$name toggle 0;"" - $rootmenu add command -label [say "Number2"] -accelerator "Shift+$accelerator+N" \ - -command "pdsend "$name numbox 0;"" - $rootmenu add command -label [say "Vslider"] -accelerator "Shift+$accelerator+V" \ - -command "pdsend "$name vslider 0;"" - $rootmenu add command -label [say "Hslider"] -accelerator "Shift+$accelerator+H" \ - -command "pdsend "$name hslider 0;"" - $rootmenu add command -label [say "Vradio"] -accelerator "Shift+$accelerator+D" \ - -command "pdsend "$name vradio 0;"" - $rootmenu add command -label [say "Hradio"] -accelerator "Shift+$accelerator+I" \ - -command "pdsend "$name hradio 0;"" - $rootmenu add command -label [say "VU Meter"] -accelerator "Shift+$accelerator+U"\ - -command "pdsend "$name vumeter 0;"" - $rootmenu add command -label [say "Canvas"] -accelerator "Shift+$accelerator+C" \ - -command "pdsend "$name mycnv 0;"" - $rootmenu add separator - $rootmenu add command -label Graph -command "pdsend "$name graph ;"" - $rootmenu add command -label Array -command "pdsend "$name menuarray ;"" + $mymenu add command -label [say "Object"] -accelerator "$accelerator+1" \ + -command "pdsend "$mytoplevel obj 0;"" + $mymenu add command -label [say "Message"] -accelerator "$accelerator+2" \ + -command "pdsend "$mytoplevel msg 0;"" + $mymenu add command -label [say "Number"] -accelerator "$accelerator+3" \ + -command "pdsend "$mytoplevel floatatom 0;"" + $mymenu add command -label [say "Symbol"] -accelerator "$accelerator+4" \ + -command "pdsend "$mytoplevel symbolatom 0;"" + $mymenu add command -label [say "Comment"] -accelerator "$accelerator+5" \ + -command "pdsend "$mytoplevel text 0;"" + $mymenu add separator + $mymenu add command -label [say "Bang"] -accelerator "Shift+$accelerator+B" \ + -command "pdsend "$mytoplevel bng 0;"" + $mymenu add command -label [say "Toggle"] -accelerator "Shift+$accelerator+T" \ + -command "pdsend "$mytoplevel toggle 0;"" + $mymenu add command -label [say "Number2"] -accelerator "Shift+$accelerator+N" \ + -command "pdsend "$mytoplevel numbox 0;"" + $mymenu add command -label [say "Vslider"] -accelerator "Shift+$accelerator+V" \ + -command "pdsend "$mytoplevel vslider 0;"" + $mymenu add command -label [say "Hslider"] -accelerator "Shift+$accelerator+H" \ + -command "pdsend "$mytoplevel hslider 0;"" + $mymenu add command -label [say "Vradio"] -accelerator "Shift+$accelerator+D" \ + -command "pdsend "$mytoplevel vradio 0;"" + $mymenu add command -label [say "Hradio"] -accelerator "Shift+$accelerator+I" \ + -command "pdsend "$mytoplevel hradio 0;"" + $mymenu add command -label [say "VU Meter"] -accelerator "Shift+$accelerator+U"\ + -command "pdsend "$mytoplevel vumeter 0;"" + $mymenu add command -label [say "Canvas"] -accelerator "Shift+$accelerator+C" \ + -command "pdsend "$mytoplevel mycnv 0;"" + $mymenu add separator + $mymenu add command -label Graph -command "pdsend "$mytoplevel graph ;"" + $mymenu add command -label Array -command "pdsend "$mytoplevel menuarray ;"" }
-proc ::pd_menus::create_find_menu {rootmenu name} { +proc ::pd_menus::create_find_menu {mymenu mytoplevel} { variable accelerator - $rootmenu add command -label [say "Find..."] -accelerator "$accelerator+F" \ - -command "menu_findobject $name" - $rootmenu add command -label [say "Find Again"] -accelerator "$accelerator+G" \ - -command "pdsend "$name findagain ;"" - $rootmenu add command -label [say "Find last error"] \ - -command "pdsend "$name finderror ;"" + $mymenu add command -label [say "Find..."] -accelerator "$accelerator+F" \ + -command "menu_findobject $mytoplevel" + $mymenu add command -label [say "Find Again"] -accelerator "$accelerator+G" \ + -command "pdsend "$mytoplevel findagain ;"" + $mymenu add command -label [say "Find last error"] \ + -command "pdsend "$mytoplevel finderror ;"" }
-proc ::pd_menus::create_media_menu {rootmenu name} { +proc ::pd_menus::create_media_menu {mymenu mytoplevel} { variable accelerator - $rootmenu add radiobutton -label [say "Compute Audio On"] -accelerator "$accelerator+/" \ + $mymenu add radiobutton -label [say "Compute Audio On"] -accelerator "$accelerator+/" \ -command "pdsend "pd dsp 1 ;"" - $rootmenu add radiobutton -label [say "Compute Audio Off"] -accelerator "$accelerator+." \ + $mymenu add radiobutton -label [say "Compute Audio Off"] -accelerator "$accelerator+." \ -command "pdsend "pd dsp 0 ;"" -indicatoron true - $rootmenu add separator - $rootmenu add command -label [say "Test Audio and MIDI"] \ + $mymenu add separator + $mymenu add command -label [say "Test Audio and MIDI"] \ -command "menu_doc_open doc/7.stuff/tools testtone.pd" - $rootmenu add command -label [say "Load Meter"] \ + $mymenu add command -label [say "Load Meter"] \ -command "menu_doc_open doc/7.stuff/tools load-meter.pd" }
-proc ::pd_menus::create_window_menu {rootmenu name} { +proc ::pd_menus::create_window_menu {mymenu mytoplevel} { variable accelerator if {[tk windowingsystem] eq "aqua"} { - $rootmenu add command -label [say "Minimize"] -command "menu_minimize ." \ + $mymenu add command -label [say "Minimize"] -command "menu_minimize ." \ -accelerator "$accelerator+M" - $rootmenu add command -label [say "Zoom"] -command "menu_zoom ." - $rootmenu add separator + $mymenu add command -label [say "Zoom"] -command "menu_zoom ." + $mymenu add separator } - $rootmenu add command -label [say "Parent Window"] -state disabled - $rootmenu add command -label [say "Pd window"] -command "menu_raise_console" \ + $mymenu add command -label [say "Parent Window"] -state disabled + $mymenu add command -label [say "Pd window"] -command "menu_raise_console" \ -accelerator "$accelerator+R" -state disabled - $rootmenu add separator + $mymenu add separator }
-proc ::pd_menus::create_help_menu {rootmenu name} { +proc ::pd_menus::create_help_menu {mymenu mytoplevel} { if {[tk windowingsystem] ne "aqua"} { - $rootmenu add command -label {About Pd} \ + $mymenu add command -label {About Pd} \ -command "placeholder menu_doc_open doc/1.manual 1.introduction.txt" } - $rootmenu add command -label {HTML ...} \ + $mymenu add command -label {HTML ...} \ -command "placeholder menu_doc_open doc/1.manual index.htm" - $rootmenu add command -label {Browser ...} \ + $mymenu add command -label {Browser ...} \ -command "placeholder menu_helpbrowser $help_top_directory" } - - -# for the Apple application menu on Mac OS X -# proc ::tk::mac::ShowPreferences {} { -# puts stderr "apple prefs menu item callback" -# puts stderr "::tk::mac::ShowPreferences " -# menu_preferences -# } - -# for Mac OS X only -proc ::pd_menus::make_apple_menu {rootmenu} { - puts stderr CREATE_APPLE_MENU - # TODO this should open a Pd patch called about.pd - menu $rootmenu.apple - $rootmenu.apple add command -label [say "About Pd"] \ - -command "menu_doc_open doc/1.manual 1.introduction.txt" - $rootmenu add cascade -label "Apple" -menu $rootmenu.apple - # starting in 8.4.14, this is created automatically - if {[regsub -- {[0-9].[0-9].([0-9][0-9]*)} [info patchlevel] {\1}] < 14} { - $rootmenu.apple add separator - $rootmenu.apple add command -label [say "Preferences..."] \ - -command "menu_preferences" -accelerator "Cmd+," - } -} - -# for Windows only -proc ::pd_menus::make_system_menu {rootmenu} { - $rootmenu add cascade -menu [menu $rootmenu.system] - # TODO add Close, Minimize, etc and whatever else is on the little menu - # that is on the top left corner of the window frame -} - -proc ::pd_menus::create_menubar {rootmenu} { - menu $rootmenu - set menulist "file edit put find media window help" - if { [tk windowingsystem] eq "aqua" } {make_apple_menu $rootmenu} - if { [tk windowingsystem] eq "win32" } {make_system_menu $rootmenu} - foreach menuitem $menulist { - menu $rootmenu.$menuitem - $rootmenu add cascade -label [string totitle $menuitem] \ - -menu $rootmenu.$menuitem - [format create_%s_menu $menuitem] $rootmenu.$menuitem PLACEHOLDER - if {[tk windowingsystem] eq "win32"} { - # fix menu font size on Windows with tk scaling = 1 - $rootmenu.$menuitem configure -font menufont - } - } -} - -proc ::pd_menus::configure_pdwindow {menubar} { - # these are meaningless for the Pd window, so disable them - set file_items_to_disable {"Save" "Save As..." "Print..." "Close"} - foreach item $file_items_to_disable { - $menubar.file entryconfigure $item -state disabled - } - set edit_items_to_disable {"Undo" "Redo" "Duplicate" "Tidy Up" "Edit Mode"} - foreach item $edit_items_to_disable { - $menubar.edit entryconfigure $item -state disabled - } - # disable everything on the Put menu - for {set i 0} {$i <= [$menubar.put index end]} {incr i} { - # catch errors by trying to disable separators - catch {$menubar.put entryconfigure $i -state disabled } - } -} -
Modified: branches/pd-devel/0.41.4/src/pdtk_canvas.tcl =================================================================== --- branches/pd-devel/0.41.4/src/pdtk_canvas.tcl 2009-01-13 17:13:31 UTC (rev 10532) +++ branches/pd-devel/0.41.4/src/pdtk_canvas.tcl 2009-01-13 17:57:25 UTC (rev 10533) @@ -6,14 +6,7 @@ namespace eval ::pdtk_canvas:: { }
- -# get the name of the toplevel window for a canvas; this is also the name of -# the canvas object in Pd. It would probably make more sense if bind's %W returned the window name ($name) rather than the canvas name -proc to_top {canvasname} { - string range $canvasname 0 [expr [string length $canvasname] - 3] -} - -proc pdtk_canvas_checkgeometry {topname} { +proc pdtk_canvas_checkgeometry {mytoplevel} { # TODO check and relocate window accordingly }
@@ -21,28 +14,32 @@ #------------------------------------------------------------------------------# # mouse usage
-proc pdtk_canvas_motion {canvasname x y mods} { - pdsend "[to_top $canvasname] motion [$canvasname canvasx $x] [$canvasname canvasy $y] $mods;" +proc pdtk_canvas_motion {mycanvas x y mods} { + set mytoplevel [winfo toplevel $mycanvas] + pdsend "$mytoplevel motion [$mycanvas canvasx $x] [$mycanvas canvasy $y] $mods;" }
-proc pdtk_canvas_mouse {canvasname x y b f} { +proc pdtk_canvas_mouse {mycanvas x y b f} { # TODO perhaps the Tcl/C function names should match "mouse" message # rather than "mousedown" function - pdsend "[to_top $canvasname] mouse [$canvasname canvasx $x] [$canvasname canvasy $y] $b $f;" + set mytoplevel [winfo toplevel $mycanvas] + pdsend "$mytoplevel mouse [$mycanvas canvasx $x] [$mycanvas canvasy $y] $b $f;" }
-proc pdtk_canvas_mouseup {canvasname x y b} { - pdsend "[to_top $canvasname] mouseup [$canvasname canvasx $x] [$canvasname canvasy $y] $b;" +proc pdtk_canvas_mouseup {mycanvas x y b} { + set mytoplevel [winfo toplevel $mycanvas] + pdsend "$mytoplevel mouseup [$mycanvas canvasx $x] [$mycanvas canvasy $y] $b;" }
-proc pdtk_canvas_rightclick {canvasname x y b} { - pdsend "[to_top $canvasname] mouse [$canvasname canvasx $x] [$canvasname canvasy $y] $b 8;" +proc pdtk_canvas_rightclick {mycanvas x y b} { + set mytoplevel [winfo toplevel $mycanvas] + pdsend "$mytoplevel mouse [$mycanvas canvasx $x] [$mycanvas canvasy $y] $b 8;" }
-# on X11, button 2 "pastes" from the X windows clipboard -proc pdtk_canvas_clickpaste {canvasname x y b} { - pdtk_canvas_click $canvasname $x $y $b 0 - pdtk_canvas_mouseup $canvasname $x $y $b +# on X11, button 2 pastes from X11 clipboard, so simulate normal paste actions +proc pdtk_canvas_clickpaste {mycanvas x y b} { + pdtk_canvas_mouse $mycanvas $x $y $b 0 + pdtk_canvas_mouseup $mycanvas $x $y $b pdtk_pastetext }
@@ -52,19 +49,19 @@ # "map" event tells us when the canvas becomes visible (arg is "0") or # invisible (arg is ""). Invisibility means the Window Manager has minimized # us. We don't get a final "unmap" event when we destroy the window. -proc pdtk_canvas_map {name} { - pdsend "$name map 1 ;" +proc pdtk_canvas_map {mytoplevel} { + pdsend "$mytoplevel map 1 ;" }
-proc pdtk_canvas_unmap {name} { - pdsend "$name map 0 ;" +proc pdtk_canvas_unmap {mytoplevel} { + pdsend "$mytoplevel map 0 ;" }
# check or uncheck the "edit" menu item -proc pdtk_canvas_editval {name value} { - $name.m.edit entryconfigure "Edit mode" -indicatoron $value +proc pdtk_canvas_editval {mytoplevel value} { + # TODO make this work }
-proc pdtk_canvas_getscroll {name} { +proc pdtk_canvas_getscroll {mytoplevel} { # TODO make this work }
Modified: branches/pd-devel/0.41.4/src/pdtk_text.tcl =================================================================== --- branches/pd-devel/0.41.4/src/pdtk_text.tcl 2009-01-13 17:13:31 UTC (rev 10532) +++ branches/pd-devel/0.41.4/src/pdtk_text.tcl 2009-01-13 17:57:25 UTC (rev 10533) @@ -8,20 +8,19 @@ # TODO use a Tk 'font' as the main font
############ pdtk_text_new -- create a new text object #2########### -proc pdtk_text_new {canvasname itemname x y text font_size color} { - global font_family font_weight - $canvasname create text $x $y -font "$font_family $font_size $font_weight" \ - -tags $itemname -text $text -fill $color -anchor nw - $canvasname bind $itemname <Home> "$canvasname icursor $itemname 0" - $canvasname bind $itemname <End> "$canvasname icursor $itemname end" +proc pdtk_text_new {mycanvas canvasitem x y text font_size color} { + $mycanvas create text $x $y -tags $canvasitem -text $text -fill $color \ + -anchor nw -font "$::font_family $font_size $::font_weight" + $mycanvas bind $canvasitem <Home> "$mycanvas icursor $canvasitem 0" + $mycanvas bind $canvasitem <End> "$mycanvas icursor $canvasitem end" if {[tk windowingsystem] eq "aqua"} { # emacs bindings for Mac OS X - $canvasname bind $itemname <Control-a> "$canvasname icursor $itemname 0" - $canvasname bind $itemname <Control-e> "$canvasname icursor $itemname end" + $mycanvas bind $canvasitem <Control-a> "$mycanvas icursor $canvasitem 0" + $mycanvas bind $canvasitem <Control-e> "$mycanvas icursor $canvasitem end" } }
################ pdtk_text_set -- change the text ################## -proc pdtk_text_set {canvasname itemname text} { - $canvasname itemconfig $itemname -text $text +proc pdtk_text_set {mycanvas canvasitem text} { + $mycanvas itemconfig $canvasitem -text $text }
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.