aboutsummaryrefslogtreecommitdiff
path: root/pd/tcl/scrollboxwindow.tcl
diff options
context:
space:
mode:
authorHans-Christoph Steiner <eighthave@users.sourceforge.net>2011-10-09 16:36:37 +0000
committerHans-Christoph Steiner <eighthave@users.sourceforge.net>2011-10-09 16:36:37 +0000
commit21c068f1916330e90f814bed461fe0821d1665ec (patch)
tree949b73696fff09a44b8d3eb01b70bae7174cbd14 /pd/tcl/scrollboxwindow.tcl
parentbf8ced1efe1a032342e864edc635fa4e2676670d (diff)
checked in pd-0.43-0.src.tar.gz
svn path=/trunk/; revision=15557
Diffstat (limited to 'pd/tcl/scrollboxwindow.tcl')
-rw-r--r--pd/tcl/scrollboxwindow.tcl94
1 files changed, 94 insertions, 0 deletions
diff --git a/pd/tcl/scrollboxwindow.tcl b/pd/tcl/scrollboxwindow.tcl
new file mode 100644
index 00000000..d78622c6
--- /dev/null
+++ b/pd/tcl/scrollboxwindow.tcl
@@ -0,0 +1,94 @@
+
+####### 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
+}
+
+