- Reestructuración de ficheros y directorios general
- merge v0.01 --> Añadido fileselector - Añadidas fuentes de Gem y Pure Data - pix2jpg incluído en Gem. Archivos de construcción de Gem modificados. - Añadido fichero ompiling.txt con instrucciones de compilación
This commit is contained in:
parent
c9adfd020b
commit
e85d191b46
3100 changed files with 775434 additions and 3073 deletions
278
pd-0.44-2/tcl/pd_menucommands.tcl
Normal file
278
pd-0.44-2/tcl/pd_menucommands.tcl
Normal file
|
@ -0,0 +1,278 @@
|
|||
|
||||
package provide pd_menucommands 0.1
|
||||
|
||||
namespace eval ::pd_menucommands:: {
|
||||
variable untitled_number "1"
|
||||
|
||||
namespace export menu_*
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# functions called from File menu
|
||||
|
||||
proc ::pd_menucommands::menu_new {} {
|
||||
variable untitled_number
|
||||
if { ! [file isdirectory $::filenewdir]} {set ::filenewdir $::env(HOME)}
|
||||
# to localize "Untitled" there will need to be changes in g_canvas.c and
|
||||
# g_readwrite.c, where it tests for the string "Untitled"
|
||||
set untitled_name "Untitled"
|
||||
pdsend "pd menunew $untitled_name-$untitled_number [enquote_path $::filenewdir]"
|
||||
incr untitled_number
|
||||
}
|
||||
|
||||
proc ::pd_menucommands::menu_open {} {
|
||||
if { ! [file isdirectory $::fileopendir]} {set ::fileopendir $::env(HOME)}
|
||||
set files [tk_getOpenFile -defaultextension .pd \
|
||||
-multiple true \
|
||||
-filetypes $::filetypes \
|
||||
-initialdir $::fileopendir]
|
||||
if {$files ne ""} {
|
||||
foreach filename $files {
|
||||
open_file $filename
|
||||
}
|
||||
set ::fileopendir [file dirname $filename]
|
||||
}
|
||||
}
|
||||
|
||||
proc ::pd_menucommands::menu_print {mytoplevel} {
|
||||
set filename [tk_getSaveFile -initialfile pd.ps \
|
||||
-defaultextension .ps \
|
||||
-filetypes { {{postscript} {.ps}} }]
|
||||
if {$filename ne ""} {
|
||||
set tkcanvas [tkcanvas_name $mytoplevel]
|
||||
$tkcanvas postscript -file $filename
|
||||
}
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# functions called from Edit menu
|
||||
|
||||
proc ::pd_menucommands::menu_undo {} {
|
||||
if {$::focused_window eq $::undo_toplevel && $::undo_action ne "no"} {
|
||||
pdsend "$::focused_window undo"
|
||||
}
|
||||
}
|
||||
|
||||
proc ::pd_menucommands::menu_redo {} {
|
||||
if {$::focused_window eq $::undo_toplevel && $::redo_action ne "no"} {
|
||||
pdsend "$::focused_window redo"
|
||||
}
|
||||
}
|
||||
|
||||
proc ::pd_menucommands::menu_editmode {state} {
|
||||
if {[winfo class $::focused_window] ne "PatchWindow"} {return}
|
||||
set ::editmode_button $state
|
||||
# this shouldn't be necessary because 'pd' will reply with pdtk_canvas_editmode
|
||||
# set ::editmode($::focused_window) $state
|
||||
pdsend "$::focused_window editmode $state"
|
||||
}
|
||||
|
||||
proc ::pd_menucommands::menu_toggle_editmode {} {
|
||||
menu_editmode [expr {! $::editmode_button}]
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# generic procs for sending menu events
|
||||
|
||||
# send a message to a pd canvas receiver
|
||||
proc ::pd_menucommands::menu_send {window message} {
|
||||
set mytoplevel [winfo toplevel $window]
|
||||
if {[winfo class $mytoplevel] eq "PatchWindow"} {
|
||||
pdsend "$mytoplevel $message"
|
||||
} elseif {$mytoplevel eq ".pdwindow"} {
|
||||
if {$message eq "copy"} {
|
||||
tk_textCopy .pdwindow.text
|
||||
} elseif {$message eq "selectall"} {
|
||||
.pdwindow.text tag add sel 1.0 end
|
||||
} elseif {$message eq "menusaveas"} {
|
||||
::pdwindow::save_logbuffer_to_file
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# send a message to a pd canvas receiver with a float arg
|
||||
proc ::pd_menucommands::menu_send_float {window message float} {
|
||||
set mytoplevel [winfo toplevel $window]
|
||||
if {[winfo class $mytoplevel] eq "PatchWindow"} {
|
||||
pdsend "$mytoplevel $message $float"
|
||||
}
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# open the dialog panels
|
||||
|
||||
proc ::pd_menucommands::menu_message_dialog {} {
|
||||
::dialog_message::open_message_dialog $::focused_window
|
||||
}
|
||||
|
||||
proc ::pd_menucommands::menu_find_dialog {} {
|
||||
::dialog_find::open_find_dialog $::focused_window
|
||||
}
|
||||
|
||||
proc ::pd_menucommands::menu_font_dialog {} {
|
||||
if {[winfo exists .font]} {
|
||||
raise .font
|
||||
} elseif {$::focused_window eq ".pdwindow"} {
|
||||
pdtk_canvas_dofont .pdwindow [lindex [.pdwindow.text cget -font] 1]
|
||||
} else {
|
||||
pdsend "$::focused_window menufont"
|
||||
}
|
||||
}
|
||||
|
||||
proc ::pd_menucommands::menu_path_dialog {} {
|
||||
if {[winfo exists .path]} {
|
||||
raise .path
|
||||
} else {
|
||||
pdsend "pd start-path-dialog"
|
||||
}
|
||||
}
|
||||
|
||||
proc ::pd_menucommands::menu_startup_dialog {} {
|
||||
if {[winfo exists .startup]} {
|
||||
raise .startup
|
||||
} else {
|
||||
pdsend "pd start-startup-dialog"
|
||||
}
|
||||
}
|
||||
|
||||
proc ::pd_menucommands::menu_helpbrowser {} {
|
||||
::helpbrowser::open_helpbrowser
|
||||
}
|
||||
|
||||
proc ::pd_menucommands::menu_texteditor {} {
|
||||
::pdwindow::error "the text editor is not implemented"
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# window management functions
|
||||
|
||||
proc ::pd_menucommands::menu_minimize {window} {
|
||||
wm iconify [winfo toplevel $window]
|
||||
}
|
||||
|
||||
proc ::pd_menucommands::menu_maximize {window} {
|
||||
wm state [winfo toplevel $window] zoomed
|
||||
}
|
||||
|
||||
proc ::pd_menucommands::menu_raise_pdwindow {} {
|
||||
if {$::focused_window eq ".pdwindow" && [winfo viewable .pdwindow]} {
|
||||
lower .pdwindow
|
||||
} else {
|
||||
wm deiconify .pdwindow
|
||||
raise .pdwindow
|
||||
}
|
||||
}
|
||||
|
||||
# used for cycling thru windows of an app
|
||||
proc ::pd_menucommands::menu_raisepreviouswindow {} {
|
||||
lower [lindex [wm stackorder .] end] [lindex [wm stackorder .] 0]
|
||||
focus [lindex [wm stackorder .] end]
|
||||
}
|
||||
|
||||
# used for cycling thru windows of an app the other direction
|
||||
proc ::pd_menucommands::menu_raisenextwindow {} {
|
||||
set mytoplevel [lindex [wm stackorder .] 0]
|
||||
raise $mytoplevel
|
||||
focus $mytoplevel
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Pd window functions
|
||||
proc menu_clear_console {} {
|
||||
::pdwindow::clear_console
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# 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_filenewdir {mytoplevel} {
|
||||
# TODO add Aqua specifics once g_canvas.c has [wm attributes -titlepath]
|
||||
if {$mytoplevel eq ".pdwindow"} {
|
||||
set ::filenewdir $::fileopendir
|
||||
} else {
|
||||
regexp -- ".+ - (.+)" [wm title $mytoplevel] ignored ::filenewdir
|
||||
}
|
||||
}
|
||||
|
||||
# parse the textfile for the About Pd page
|
||||
proc ::pd_menucommands::menu_aboutpd {} {
|
||||
set versionstring "Pd $::PD_MAJOR_VERSION.$::PD_MINOR_VERSION.$::PD_BUGFIX_VERSION$::PD_TEST_VERSION"
|
||||
set filename "$::sys_libdir/doc/1.manual/1.introduction.txt"
|
||||
if {[winfo exists .aboutpd]} {
|
||||
wm deiconify .aboutpd
|
||||
raise .aboutpd
|
||||
} else {
|
||||
toplevel .aboutpd -class TextWindow
|
||||
wm title .aboutpd [_ "About Pd"]
|
||||
wm group .aboutpd .
|
||||
.aboutpd configure -menu $::dialog_menubar
|
||||
text .aboutpd.text -relief flat -borderwidth 0 \
|
||||
-yscrollcommand ".aboutpd.scroll set" -background white
|
||||
scrollbar .aboutpd.scroll -command ".aboutpd.text yview"
|
||||
pack .aboutpd.scroll -side right -fill y
|
||||
pack .aboutpd.text -side left -fill both -expand 1
|
||||
bind .aboutpd <$::modifier-Key-w> "wm withdraw .aboutpd"
|
||||
|
||||
set textfile [open $filename]
|
||||
while {![eof $textfile]} {
|
||||
set bigstring [read $textfile 1000]
|
||||
regsub -all PD_BASEDIR $bigstring $::sys_guidir bigstring2
|
||||
regsub -all PD_VERSION $bigstring2 $versionstring bigstring3
|
||||
.aboutpd.text insert end $bigstring3
|
||||
}
|
||||
close $textfile
|
||||
}
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# opening docs as menu items (like the Test Audio and MIDI patch and the manual)
|
||||
proc ::pd_menucommands::menu_doc_open {dir basename} {
|
||||
if {[file pathtype $dir] eq "relative"} {
|
||||
set dirname "$::sys_libdir/$dir"
|
||||
} else {
|
||||
set dirname $dir
|
||||
}
|
||||
set textextension "[string tolower [file extension $basename]]"
|
||||
if {[lsearch -exact [lindex $::filetypes 0 1] $textextension] > -1} {
|
||||
set fullpath [file normalize [file join $dirname $basename]]
|
||||
set dirname [file dirname $fullpath]
|
||||
set basename [file tail $fullpath]
|
||||
pdsend "pd open [enquote_path $basename] [enquote_path $dirname]"
|
||||
} else {
|
||||
::pd_menucommands::menu_openfile "$dirname/$basename"
|
||||
}
|
||||
}
|
||||
|
||||
# open HTML docs from the menu using the OS-default HTML viewer
|
||||
proc ::pd_menucommands::menu_openfile {filename} {
|
||||
if {$::tcl_platform(os) eq "Darwin"} {
|
||||
exec sh -c [format "open '%s'" $filename]
|
||||
} elseif {$::tcl_platform(platform) eq "windows"} {
|
||||
exec rundll32 url.dll,FileProtocolHandler [format "%s" $filename] &
|
||||
} else {
|
||||
foreach candidate { gnome-open xdg-open sensible-browser iceweasel firefox \
|
||||
mozilla galeon konqueror netscape lynx } {
|
||||
set browser [lindex [auto_execok $candidate] 0]
|
||||
if {[string length $browser] != 0} {
|
||||
exec -- sh -c [format "%s '%s'" $browser $filename] &
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# 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 .
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue