diff options
Diffstat (limited to 'pd/tcl/dialog_startup.tcl')
-rw-r--r-- | pd/tcl/dialog_startup.tcl | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/pd/tcl/dialog_startup.tcl b/pd/tcl/dialog_startup.tcl new file mode 100644 index 00000000..52c5f647 --- /dev/null +++ b/pd/tcl/dialog_startup.tcl @@ -0,0 +1,96 @@ + +package provide dialog_startup 0.1 + +package require scrollboxwindow + +namespace eval dialog_startup { + variable defeatrt_flag 0 + + namespace export pdtk_startup_dialog +} + +########## pdtk_startup_dialog -- dialog window for startup options ######### +# Create a simple modal window with an entry widget +# for editing/adding a startup command +# (the next-best-thing to in-place editing) +proc ::dialog_startup::chooseCommand { prompt initialValue } { + global cmd + set cmd $initialValue + + toplevel .inputbox + wm title .inputbox $prompt + wm group .inputbox . + wm minsize .inputbox 450 30 + wm resizable .inputbox 0 0 + wm geom .inputbox "450x30" + # not all Tcl/Tk versions or platforms support -topmost, so catch the error + catch {wm attributes $mytoplevel -topmost 1} + + button .inputbox.button -text [_ "OK"] -command { destroy .inputbox } \ + -width [::msgcat::mcmax [_ "OK"]] + + entry .inputbox.entry -width 50 -textvariable cmd + pack .inputbox.button -side right + bind .inputbox.entry <KeyPress-Return> { destroy .inputbox } + bind .inputbox.entry <KeyPress-Escape> { destroy .inputbox } + pack .inputbox.entry -side right -expand 1 -fill x -padx 2m + + focus .inputbox.entry + + raise .inputbox + wm transient .inputbox + grab .inputbox + tkwait window .inputbox + + return $cmd +} + +proc ::dialog_startup::add {} { + return [chooseCommand [_ "Add new library"] ""] +} + +proc ::dialog_startup::edit { current_library } { + return [chooseCommand [_ "Edit library"] $current_library] +} + +proc ::dialog_startup::commit { new_startup } { + variable defeatrt_button + set ::startup_libraries $new_startup + + pdsend "pd startup-dialog $defeatrt_button [pdtk_encodedialog $::startup_flags] $::startup_libraries" +} + +# set up the panel with the info from pd +proc ::dialog_startup::pdtk_startup_dialog {mytoplevel defeatrt flags} { + variable defeatrt_button $defeatrt + if {$flags ne ""} {variable ::startup_flags $flags} + + if {[winfo exists $mytoplevel]} { + wm deiconify $mytoplevel + raise $mytoplevel + } else { + create_dialog $mytoplevel + } +} + +proc ::dialog_startup::create_dialog {mytoplevel} { + ::scrollboxwindow::make $mytoplevel $::startup_libraries \ + dialog_startup::add dialog_startup::edit dialog_startup::commit \ + [_ "Pd libraries to load on startup"] \ + 400 300 + + label $mytoplevel.entryname -text [_ "Startup flags:"] + entry $mytoplevel.entry -textvariable ::startup_flags -width 60 + pack $mytoplevel.entryname $mytoplevel.entry -side left + pack $mytoplevel.entry -side right -padx 2m -fill x -expand 1 + + frame $mytoplevel.defeatrtframe + pack $mytoplevel.defeatrtframe -side bottom -fill x -pady 2m + if {$::windowingsystem ne "win32"} { + checkbutton $mytoplevel.defeatrtframe.defeatrt -anchor w \ + -text [_ "Defeat real-time scheduling"] \ + -variable ::dialog_startup::defeatrt_button + pack $mytoplevel.defeatrtframe.defeatrt -side left + } +} + |