/usr/lib/puredata/tcl/scrollboxwindow.tcl is in puredata-gui 0.46.7-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | ####### scrollboxwindow -- scrollbox window with default bindings #########
## This is the base dialog behind the Path and Startup dialogs
## This namespace specifies everything the two dialogs have in common,
## with arguments specifying the differences
##
## By default, this creates a dialog centered on the viewing area of the screen
## with cancel, apply, and OK buttons
## which contains a scrollbox widget populated with the given data
package provide scrollboxwindow 0.1
package require scrollbox
namespace eval scrollboxwindow {
}
proc ::scrollboxwindow::get_listdata {mytoplevel} {
return [$mytoplevel.listbox.box get 0 end]
}
proc ::scrollboxwindow::do_apply {mytoplevel commit_method listdata} {
$commit_method [pdtk_encode $listdata]
pdsend "pd save-preferences"
}
# Cancel button action
proc ::scrollboxwindow::cancel {mytoplevel} {
pdsend "$mytoplevel cancel"
}
# Apply button action
proc ::scrollboxwindow::apply {mytoplevel commit_method } {
do_apply $mytoplevel $commit_method [get_listdata $mytoplevel]
}
# OK button action
# The "commit" action can take a second or more,
# long enough to be noticeable, so we only write
# the changes after closing the dialog
proc ::scrollboxwindow::ok {mytoplevel commit_method } {
set listdata [get_listdata $mytoplevel]
cancel $mytoplevel
do_apply $mytoplevel $commit_method $listdata
}
# "Constructor" function for building the window
# id -- the window id to use
# listdata -- the data used to populate the scrollbox
# add_method -- a reference to a proc to be called when the user adds a new item
# edit_method -- same as above, for editing and existing item
# commit_method -- same as above, to commit during the "apply" action
# title -- top-level title for the dialog
# width, height -- initial width and height dimensions for the window, also minimum size
proc ::scrollboxwindow::make {mytoplevel listdata add_method edit_method commit_method title width height } {
wm deiconify .pdwindow
raise .pdwindow
toplevel $mytoplevel -class DialogWindow
wm title $mytoplevel $title
wm group $mytoplevel .
wm transient $mytoplevel .pdwindow
wm protocol $mytoplevel WM_DELETE_WINDOW "::scrollboxwindow::cancel $mytoplevel"
# Enforce a minimum size for the window
wm minsize $mytoplevel $width $height
# Set the current dimensions of the window
wm geometry $mytoplevel "${width}x${height}"
# Add the scrollbox widget
::scrollbox::make $mytoplevel $listdata $add_method $edit_method
# Use two frames for the buttons, since we want them both
# bottom and right
frame $mytoplevel.nb
pack $mytoplevel.nb -side bottom -fill x -pady 2m
frame $mytoplevel.nb.buttonframe
pack $mytoplevel.nb.buttonframe -side right -padx 2m
button $mytoplevel.nb.buttonframe.cancel -text [_ "Cancel"]\
-command "::scrollboxwindow::cancel $mytoplevel"
button $mytoplevel.nb.buttonframe.apply -text [_ "Apply"]\
-command "::scrollboxwindow::apply $mytoplevel $commit_method"
button $mytoplevel.nb.buttonframe.ok -text [_ "OK"]\
-command "::scrollboxwindow::ok $mytoplevel $commit_method"
pack $mytoplevel.nb.buttonframe.cancel -side left -expand 1 -padx 2m
pack $mytoplevel.nb.buttonframe.apply -side left -expand 1 -padx 2m
pack $mytoplevel.nb.buttonframe.ok -side left -expand 1 -padx 2m
}
|