aboutsummaryrefslogtreecommitdiff
path: root/pd/tcl/pd_menucommands.tcl
diff options
context:
space:
mode:
authorMiller Puckette <millerpuckette@users.sourceforge.net>2009-08-17 23:31:36 +0000
committerMiller Puckette <millerpuckette@users.sourceforge.net>2009-08-17 23:31:36 +0000
commit282671282b20fa17ab9dbbaba9d1cf2246b5029d (patch)
treef7af53ee269efd2564ca872a4da187e1ae687f3b /pd/tcl/pd_menucommands.tcl
parent76d1c8472e025126a4b3e1571f817198b2fec9f9 (diff)
merge in new tcl implementation by Steiner & Chun
svn path=/trunk/; revision=11934
Diffstat (limited to 'pd/tcl/pd_menucommands.tcl')
-rw-r--r--pd/tcl/pd_menucommands.tcl167
1 files changed, 167 insertions, 0 deletions
diff --git a/pd/tcl/pd_menucommands.tcl b/pd/tcl/pd_menucommands.tcl
new file mode 100644
index 00000000..6530c52a
--- /dev/null
+++ b/pd/tcl/pd_menucommands.tcl
@@ -0,0 +1,167 @@
+
+package provide pd_menucommands 0.1
+
+namespace eval ::pd_menucommands:: {
+ variable untitled_number "1"
+ variable menu_new_dir [pwd]
+ variable menu_open_dir [pwd]
+
+ namespace export menu_*
+}
+
+# ------------------------------------------------------------------------------
+# functions called from File menu
+
+proc ::pd_menucommands::menu_new {} {
+ variable untitled_number
+ variable menu_new_dir
+ if { ! [file isdirectory $menu_new_dir]} {set menu_new_dir $::env(HOME)}
+ pdsend "pd filename Untitled-$untitled_number [enquote_path $menu_new_dir]"
+ pdsend "#N canvas"
+ pdsend "#X pop 1"
+ incr untitled_number
+}
+
+proc ::pd_menucommands::menu_open {} {
+ variable menu_open_dir
+ if { ! [file isdirectory $menu_open_dir]} {set menu_open_dir $::env(HOME)}
+ set files [tk_getOpenFile -defaultextension .pd \
+ -multiple true \
+ -filetypes $::filetypes \
+ -initialdir $menu_open_dir]
+ if {$files ne ""} {
+ foreach filename $files {
+ puts "open_file $filename"
+ open_file $filename
+ }
+ set menu_open_dir [file dirname $filename]
+ }
+}
+
+proc ::pd_menucommands::menu_print {mytoplevel} {
+ set filename [tk_getSaveFile -initialfile pd.ps \
+ -defaultextension .ps \
+ -filetypes { {{postscript} {.ps}} }]
+ if {$filename != ""} {
+ $mytoplevel.c postscript -file $filename
+ }
+}
+
+# panel types:
+# global (only one): find, sendmessage, prefs, helpbrowser
+# per-canvas: font, canvas properties (created with a message from pd)
+# per object: gatom, iemgui, array, data structures (created with a message from pd)
+
+
+# ------------------------------------------------------------------------------
+# functions called from Edit menu
+
+proc menu_undo {mytoplevel} {
+ puts stderr "menu_undo $mytoplevel not implemented yet"
+}
+
+proc menu_redo {mytoplevel} {
+ puts stderr "menu_redo $mytoplevel not implemented yet"
+}
+
+# ------------------------------------------------------------------------------
+# open the panels
+
+proc ::pd_menucommands::menu_message_panel {} {
+ if {[winfo exists .send_message]} {
+ wm deiconify .send_message
+ raise .message
+ } else {
+ # TODO insert real message panel here
+ toplevel .send_message
+ wm title .send_message [_ "Send Message..."]
+ wm resizable .send_message 0 0
+ ::pd_bindings::panel_bindings .send_message "send_message"
+ frame .send_message.frame
+ label .send_message.label -text "message" -width 30 -height 15
+ pack .send_message.label .send_message.frame -side top -expand yes -fill both
+ }
+}
+
+
+proc ::pd_menucommands::menu_dialog_font {mytoplevel} {
+ if {[winfo exists .font]} {
+ wm deiconify .font
+ raise .font
+ } else {
+ # TODO insert real preference panel here
+ toplevel .font
+ wm title .font [_ "Font"]
+ ::pd_bindings::panel_bindings .font "font"
+ frame .font.frame
+ label .font.label -text "font" -width 30 -height 15
+ pack .font.label .font.frame -side top -expand yes -fill both
+ }
+}
+
+proc ::pd_menucommands::menu_path_panel {} {
+ if {[winfo exists .path]} {
+ raise .path
+ } else {
+ pdsend "pd start-path-dialog"
+ }
+}
+
+proc ::pd_menucommands::menu_startup_panel {} {
+ if {[winfo exists .startup]} {
+ raise .startup
+ } else {
+ pdsend "pd start-startup-dialog"
+ }
+}
+
+# ------------------------------------------------------------------------------
+# window management functions
+
+proc ::pd_menucommands::menu_minimize {mytoplevel} {
+ wm iconify $mytoplevel
+}
+
+proc ::pd_menucommands::menu_maximize {mytoplevel} {
+ wm state $mytoplevel zoomed
+}
+
+proc menu_raise_pdwindow {} {
+ set pd_window .
+ set top_window [lindex [wm stackorder $pd_window] end]
+ if {$pd_window eq $top_window} {
+ lower $pd_window
+ } else {
+ wm deiconify $pd_window
+ raise $pd_window
+ }
+}
+
+# ------------------------------------------------------------------------------
+# manage the saving of the directories for the new commands
+
+# this gets the dir from the path of a window's title
+proc ::pd_menucommands::set_menu_new_dir {mytoplevel} {
+ variable menu_new_dir
+ # TODO add Aqua specifics once g_canvas.c has [wm attributes -titlepath]
+ if {$mytoplevel eq "."} {
+ set menu_new_dir [pwd]
+ } else {
+ regexp -- ".+ - (.+)" [wm title $mytoplevel] ignored menu_new_dir
+ }
+}
+
+# ------------------------------------------------------------------------------
+# Mac OS X specific functions
+
+proc ::pd_menucommands::menu_bringalltofront {} {
+ # use [winfo children .] here to include 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
+ }
+ }
+ wm deiconify .
+}