Revision: 10460 http://pure-data.svn.sourceforge.net/pure-data/?rev=10460&view=rev Author: eighthave Date: 2008-12-25 00:06:06 +0000 (Thu, 25 Dec 2008)
Log Message: ----------- - tried making one single menubar that is modified whenever the focus changes, but I wonder if this makes sense since it might create more work to be done on every focus shift
- finished File and Put menus
Modified Paths: -------------- branches/pd-devel/0.41.4/src/pd.tk
Modified: branches/pd-devel/0.41.4/src/pd.tk =================================================================== --- branches/pd-devel/0.41.4/src/pd.tk 2008-12-24 14:50:28 UTC (rev 10459) +++ branches/pd-devel/0.41.4/src/pd.tk 2008-12-25 00:06:06 UTC (rev 10460) @@ -6,89 +6,271 @@ ## replace Tk widgets with Ttk widgets on 8.5 #namespace import -force ttk::*
+ +# TODO switch back to creating a menubar for each window +# TODO figure out Edit Mode Checkbox menu item on Aqua +# TODO figure out Undo/Redo/Cut/Copy/Paste state changes for menus +# TODO figure out parent window/window list for Window menu + # ------------------------------------------------------------------------------ -# init functions +# global variables
-proc init_x11 {} { +# for displaying on menus +set accelerator "Ctrl" +# for key bindings +set modifier "Control" + +# ------------------------------------------------------------------------------ +# PLACEHOLDERS + +proc pd {} { }
-proc init_aqua {} { +proc menu_doc_open {docdir doc} { +# PLACEHOLDER }
-proc init_win32 {} { - font create menufont -family Tahoma -size -11 +proc menu_helpbrowser {dir} { +# PLACEHOLDER }
+proc menu_new {} { +# PLACEHOLDER + pdtk_canvas_new [format .flarg%d [expr round(rand()*1000)]] 30 10 +} + +proc menu_quit {} { +# PLACEHOLDER + exit +} + + +# ------------------------------------------------------------------------------ +# init functions + proc init {} { - if { [tk windowingsystem] eq "x11" } { - } elseif { [tk windowingsystem] eq "aqua" } { - } elseif { [tk windowingsystem] eq "win32" } { + switch -- [tk windowingsystem] { + "x11" { + } + "aqua" { + global accelerator modifier + set accelerator "Meta" + set modifier "Mod1" + } + "win32" { + font create menufont -family Tahoma -size -11 + } } }
# ------------------------------------------------------------------------------ # Mac OS X specific functions
+proc menu_bringalltofront {} { + #use [winfo children .] here to get windows that are minimized + foreach item [winfo children .] { + #get all toplevel windows, exclude menubar windows + if { [string equal [winfo toplevel $item] $item] && [catch {$item cget -tearoff}]} { + wm deiconify $item + } + } + #be sure to deiconify ., since the above command only gets the child toplevels + wm deiconify . +} + + # ------------------------------------------------------------------------------ # functions called from menu items
-proc accel_munge {thingy} { + +proc menu_minimize {} { + set windowlist [wm stackorder .] + if {$windowlist != {}} { + set topwindow [lindex $windowlist end] + wm iconify $topwindow + } }
-proc menu_doc_open {docdir doc} { +proc menu_maximize {window} { + wm state $window zoomed }
-proc menu_doc_browser {dir} { +# ------------------------------------------------------------------------------ +# menu building functions for Mac OS X/aqua + +proc menu_create_file_aqua {rootmenu} { + global accelerator + $rootmenu add command -label "New" -accelerator "$accelerator+N" + $rootmenu add command -label "Open" -accelerator "$accelerator+O" + $rootmenu add cascade -label "Open Recent" + $rootmenu add separator + $rootmenu add command -label "Close" -accelerator "$accelerator+W" + $rootmenu add command -label "Save" -accelerator "$accelerator+S" + $rootmenu add command -label "Save As..." -accelerator "$accelerator+Shift+S" +# $rootmenu add command -label "Save All" + $rootmenu add command -label "Revert to Saved" + $rootmenu add separator + $rootmenu add command -label "Message" + $rootmenu add separator + $rootmenu add command -label "Print..." -accelerator "$accelerator+P" }
+proc menu_create_edit_aqua {rootmenu} { +} + +# the "Put" and "Find" menus do not have cross-platform differences + +proc menu_create_media_aqua {rootmenu} { +} + +proc menu_create_window_aqua {rootmenu} { +} + +proc menu_create_help_aqua {rootmenu} { +} + # ------------------------------------------------------------------------------ -# menu building functions -proc menu_create_file {rootmenu} { -# $rootmenu add command -label New -command {menu_new} - $rootmenu add command -label New -command {pdtk_canvas_new .flarg 30 10} \ - -accelerator [accel_munge "Ctrl+n"] - $rootmenu add command -label Open -command {menu_open} \ - -accelerator [accel_munge "Ctrl+o"] +# menu building functions for UNIX/X11 + +proc menu_create_file_x11 {rootmenu} { + global accelerator + $rootmenu add command -label "New" -accelerator "$accelerator+N" + $rootmenu add command -label "Open" -accelerator "$accelerator+O" $rootmenu add separator - $rootmenu add command -label Message -command {menu_send} \ - -accelerator [accel_munge "Ctrl+m"] - # On MacOS X, these are in the standard HIG locations - # i.e. the Preferences menu under "Pd" - if {[tk windowingsystem] ne "aqua"} { - $rootmenu add command -label Path... \ - -command {pd pd start-path-dialog ;} - $rootmenu add command -label Startup... \ - -command {pd pd start-startup-dialog ;} - } + $rootmenu add command -label "Save" -accelerator "$accelerator+S" + $rootmenu add command -label "Save As..." -accelerator "Shift+$accelerator+S" + $rootmenu add command -label "Revert" $rootmenu add separator - $rootmenu add command -label Quit -command {menu_quit} \ - -accelerator [accel_munge "Ctrl+q"] + $rootmenu add command -label "Message" -accelerator "$accelerator+M" + $rootmenu add command -label "Print..." -accelerator "$accelerator+P" + $rootmenu add separator + $rootmenu add command -label "Close" -accelerator "$accelerator+W" + $rootmenu add command -label "Quit" -command {menu_quit} \ + -accelerator "$accelerator+Q" }
-proc menu_create_edit {rootmenu} { +proc menu_create_edit_x11 {rootmenu} { }
-proc menu_create_put {rootmenu} { +# the "Put" and "Find" menus do not have cross-platform differences + +proc menu_create_media_x11 {rootmenu} { }
-proc menu_create_media {rootmenu} { +proc menu_create_window_x11 {rootmenu} { }
-proc menu_create_window {rootmenu} { +proc menu_create_help_x11 {rootmenu} { }
-proc menu_create_help {rootmenu} { +# ------------------------------------------------------------------------------ +# menu building functions for Windows/Win32 + +proc menu_create_file_win32 {rootmenu} { + global accelerator + $rootmenu add command -label "New" -accelerator "$accelerator+N" + $rootmenu add command -label "Open" -accelerator "$accelerator+O" + $rootmenu add separator + $rootmenu add command -label "Save" -accelerator "$accelerator+S" + $rootmenu add command -label "Save As..." -accelerator "Shift+$accelerator+S" + $rootmenu add command -label "Revert" + $rootmenu add separator + $rootmenu add command -label "Message" -accelerator "$accelerator+M" + $rootmenu add command -label "Print..." -accelerator "$accelerator+P" + $rootmenu add separator + $rootmenu add command -label "Close" -accelerator "$accelerator+W" + $rootmenu add command -label "Quit" -command {menu_quit} \ + -accelerator "$accelerator+Q" +} + +proc menu_create_edit_win32 {rootmenu} { +} + +# the "Put" and "Find" menus do not have cross-platform differences + +proc menu_create_media_win32 {rootmenu} { +} + +proc menu_create_window_win32 {rootmenu} { +} + +proc menu_create_help_win32 {rootmenu} { +} + + +# ------------------------------------------------------------------------------ +# menu building functions +proc menu_create_file {rootmenu name} { + [format menu_create_file_%s [tk windowingsystem]] $rootmenu + $rootmenu entryconfigure "New" -command {menu_new} + $rootmenu entryconfigure "Open" -command {menu_open} + $rootmenu entryconfigure "Save" -command {menu_save $name} + $rootmenu entryconfigure "Save As..." -command {menu_saveas $name} + $rootmenu entryconfigure "Revert*" -command {menu_revert $name} + $rootmenu entryconfigure "Close" -command {menu_close $name} + $rootmenu entryconfigure "Message" -command {menu_send} + $rootmenu entryconfigure "Print..." -command {menu_print $name} +} + +proc menu_create_edit {rootmenu name} { +# [format menu_create_edit_%s [tk windowingsystem]] $rootmenu +# $rootmenu entryconfigure "New" -command {menu_new} +} + +proc menu_create_put {rootmenu name} { + global accelerator + $rootmenu add command -label "Object" -accelerator "$accelerator+1" \ + -command {menu_object $name 0} + $rootmenu add command -label "Message" -accelerator "$accelerator+2" \ + -command {menu_message $name 0} + $rootmenu add command -label "Number" -accelerator "$accelerator+3" \ + -command {menu_floatatom $name 0} + $rootmenu add command -label "Symbol" -accelerator "$accelerator+4" \ + -command {menu_symbolatom $name 0} + $rootmenu add command -label "Comment" -accelerator "$accelerator+5" \ + -command {menu_comment $name 0} + $rootmenu add separator + $rootmenu add command -label "Bang" -accelerator "Shift+$accelerator+B" \ + -command {menu_bng $name 0} + $rootmenu add command -label "Toggle" -accelerator "Shift+$accelerator+T" \ + -command {menu_toggle $name 0} + $rootmenu add command -label "Number2" -accelerator "Shift+$accelerator+N" \ + -command {menu_numbox $name 0} + $rootmenu add command -label "Vslider" -accelerator "Shift+$accelerator+V" \ + -command {menu_vslider $name 0} + $rootmenu add command -label "Hslider" -accelerator "Shift+$accelerator+H" \ + -command {menu_hslider $name 0} + $rootmenu add command -label "Vradio" -accelerator "Shift+$accelerator+D" \ + -command {menu_vradio $name 0} + $rootmenu add command -label "Hradio" -accelerator "Shift+$accelerator+I" \ + -command {menu_hradio $name 0} + $rootmenu add command -label "VU" -accelerator "Shift+$accelerator+U" \ + -command {menu_vumeter $name 0} + $rootmenu add command -label "Canvas" -accelerator "Shift+$accelerator+C"\ + -command {menu_mycnv $name 0} + $rootmenu add separator + $rootmenu add command -label Graph -command {menu_graph $name} + $rootmenu add command -label Array -command {menu_array $name} +} + +proc menu_create_media {rootmenu name} { +} + +proc menu_create_window {rootmenu name} { +} + +proc menu_create_help {rootmenu name} { if {[tk windowingsystem] ne "aqua"} { $rootmenu add command -label {About Pd} \ -command {menu_doc_open doc/1.manual 1.introduction.txt} } - $rootmenu add command -label {Html ...} \ + $rootmenu add command -label {HTML ...} \ -command {menu_doc_open doc/1.manual index.htm} $rootmenu add command -label {Browser ...} \ - -command {menu_doc_browser $help_top_directory} + -command {menu_helpbrowser $help_top_directory} }
-proc menu_create_apple {rootmenu} { +proc menu_create_apple {rootmenu name} { $rootmenu add command -label "About Pd..." -command \ {menu_doc_open doc/1.manual 1.introduction.txt} menu $rootmenu.preferences -tearoff 0 @@ -112,35 +294,66 @@ menu $rootmenu.$menuitem -tearoff 0 $rootmenu add cascade -label [string totitle $menuitem] \ -menu $rootmenu.$menuitem - [concat menu_create_$menuitem] $rootmenu.$menuitem + [format menu_create_%s $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 menu_entryconfigure {menuname itemname} { + set itemindex [$menuname ] + $menuname entryconfigure +}
+proc menu_configure {menubar window} { + puts "menu_configure $window" + set file_items_to_disable {"Save" "Save As..." "Revert" "Print..." "Close"} + if {$window eq "."} { + # these are meaningless for the Pd window, so disable them + foreach item $file_items_to_disable { + $menubar.file entryconfigure $item -state disabled + } + 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 } + } + } else { + foreach item $file_items_to_disable { + $menubar.file entryconfigure $item -state normal + } + for {set i 0} {$i <= [$menubar.put index end]} {incr i} { + # catch errors by trying to disable separators + catch {$menubar.put entryconfigure $i -state normal } + } + # TODO re-enable menu items + # TODO configure "parent on Window menu + } +} + # ------------------------------------------------------------------------------ # canvas support functions proc pdtk_canvas_new {canvas_name width height} { - if {$width < 200} {set width 200} - if {$height < 50} {set height 50} - toplevel $canvas_name -menu $canvas_name.menubar -width $width -height $height - menu $canvas_name.menubar -tearoff 0 - menu_create $canvas_name.menubar + if {$width < 300} {set width 300} + if {$height < 150} {set height 150} + toplevel $canvas_name -menu .menubar -width $width -height $height + bind $canvas_name <FocusIn> {menu_configure .menubar %W} }
# ------------------------------------------------------------------------------ # main proc main {} { + init
-menu .menubar -menu_create .menubar - -wm title . "Pd-devel" -#wm protocol . WM_DELETE_WINDOW menu_quit -. configure -menu .menubar -width 400 -height 250 - + menu .menubar + menu_create .menubar + + wm title . "Pd-devel" + #wm protocol . WM_DELETE_WINDOW menu_quit + . configure -menu .menubar -width 400 -height 250 + menu_configure .menubar . + bind . <FocusIn> {menu_configure .menubar %W} }
main
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.