aboutsummaryrefslogtreecommitdiff
path: root/pd/tcl/dialog_canvas.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'pd/tcl/dialog_canvas.tcl')
-rw-r--r--pd/tcl/dialog_canvas.tcl213
1 files changed, 213 insertions, 0 deletions
diff --git a/pd/tcl/dialog_canvas.tcl b/pd/tcl/dialog_canvas.tcl
new file mode 100644
index 00000000..06444807
--- /dev/null
+++ b/pd/tcl/dialog_canvas.tcl
@@ -0,0 +1,213 @@
+
+# TODO offset this panel so it doesn't overlap the pdtk_array panel
+
+package provide dialog_canvas 0.1
+
+namespace eval ::dialog_canvas:: {
+ namespace export pdtk_canvas_dialog
+}
+
+# global variables to store checkbox state on canvas properties window. These
+# are only used in the context of getting data from the checkboxes, so they
+# aren't really useful elsewhere. It would be nice to have them globally
+# useful, but that would mean changing the C code.
+array set graphme_button {}
+array set hidetext_button {}
+
+############# pdtk_canvas_dialog -- dialog window for canvases #################
+
+proc ::dialog_canvas::apply {mytoplevel} {
+ pdsend "$mytoplevel donecanvasdialog \
+ [$mytoplevel.scale.x.entry get] \
+ [$mytoplevel.scale.y.entry get] \
+ [expr $::graphme_button($mytoplevel) + 2 * $::hidetext_button($mytoplevel)] \
+ [$mytoplevel.range.x.from_entry get] \
+ [$mytoplevel.range.y.from_entry get] \
+ [$mytoplevel.range.x.to_entry get] \
+ [$mytoplevel.range.y.to_entry get] \
+ [$mytoplevel.range.x.size_entry get] \
+ [$mytoplevel.range.y.size_entry get] \
+ [$mytoplevel.range.x.margin_entry get] \
+ [$mytoplevel.range.y.margin_entry get]"
+}
+
+proc ::dialog_canvas::cancel {mytoplevel} {
+ pdsend "$mytoplevel cancel"
+}
+
+proc ::dialog_canvas::ok {mytoplevel} {
+ ::dialog_canvas::apply $mytoplevel
+ ::dialog_canvas::cancel $mytoplevel
+}
+
+proc ::dialog_canvas::checkcommand {mytoplevel} {
+ if { $::graphme_button($mytoplevel) != 0 } {
+ $mytoplevel.scale.x.entry configure -state disabled
+ $mytoplevel.scale.y.entry configure -state disabled
+ $mytoplevel.parent.hidetext configure -state normal
+ $mytoplevel.range.x.from_entry configure -state normal
+ $mytoplevel.range.x.to_entry configure -state normal
+ $mytoplevel.range.x.size_entry configure -state normal
+ $mytoplevel.range.x.margin_entry configure -state normal
+ $mytoplevel.range.y.from_entry configure -state normal
+ $mytoplevel.range.y.to_entry configure -state normal
+ $mytoplevel.range.y.size_entry configure -state normal
+ $mytoplevel.range.y.margin_entry configure -state normal
+ if { [$mytoplevel.range.x.from_entry get] == 0 \
+ && [$mytoplevel.range.y.from_entry get] == 0 \
+ && [$mytoplevel.range.x.to_entry get] == 0 \
+ && [$mytoplevel.range.y.to_entry get] == 0 } {
+ $mytoplevel.range.y.to_entry insert 0 1
+ $mytoplevel.range.y.to_entry insert 0 1
+ }
+ if { [$mytoplevel.range.x.size_entry get] == 0 } {
+ $mytoplevel.range.x.size_entry delete 0 end
+ $mytoplevel.range.x.margin_entry delete 0 end
+ $mytoplevel.range.x.size_entry insert 0 85
+ $mytoplevel.range.x.margin_entry insert 0 100
+ }
+ if { [$mytoplevel.range.y.size_entry get] == 0 } {
+ $mytoplevel.range.y.size_entry delete 0 end
+ $mytoplevel.range.y.margin_entry delete 0 end
+ $mytoplevel.range.y.size_entry insert 0 60
+ $mytoplevel.range.y.margin_entry insert 0 100
+ }
+ } else {
+ $mytoplevel.scale.x.entry configure -state normal
+ $mytoplevel.scale.y.entry configure -state normal
+ $mytoplevel.parent.hidetext configure -state disabled
+ $mytoplevel.range.x.from_entry configure -state disabled
+ $mytoplevel.range.x.to_entry configure -state disabled
+ $mytoplevel.range.x.size_entry configure -state disabled
+ $mytoplevel.range.x.margin_entry configure -state disabled
+ $mytoplevel.range.y.from_entry configure -state disabled
+ $mytoplevel.range.y.to_entry configure -state disabled
+ $mytoplevel.range.y.size_entry configure -state disabled
+ $mytoplevel.range.y.margin_entry configure -state disabled
+ if { [$mytoplevel.scale.x.entry get] == 0 } {
+ $mytoplevel.scale.x.entry delete 0 end
+ $mytoplevel.scale.x.entry insert 0 1
+ }
+ if { [$mytoplevel.scale.y.entry get] == 0 } {
+ $mytoplevel.scale.y.entry delete 0 end
+ $mytoplevel.scale.y.entry insert 0 1
+ }
+ }
+}
+
+proc ::dialog_canvas::pdtk_canvas_dialog {mytoplevel xscale yscale graphmeflags \
+ xfrom yfrom xto yto \
+ xsize ysize xmargin ymargin} {
+ if {[winfo exists $mytoplevel]} {
+ wm deiconify $mytoplevel
+ raise $mytoplevel
+ } else {
+ create_dialog $mytoplevel
+ }
+ puts "canvas_dialog $mytoplevel"
+ switch -- $graphmeflags {
+ 0 {
+ $mytoplevel.parent.graphme deselect
+ $mytoplevel.parent.hidetext deselect
+ } 1 {
+ $mytoplevel.parent.graphme select
+ $mytoplevel.parent.hidetext deselect
+ } 2 {
+ $mytoplevel.parent.graphme deselect
+ $mytoplevel.parent.hidetext select
+ } 3 {
+ $mytoplevel.parent.graphme select
+ $mytoplevel.parent.hidetext select
+ } default {
+ pdtk_post "Warning: unknown graphme flags received in pdtk_canvas_dialog"
+ }
+ }
+
+ $mytoplevel.scale.x.entry insert 0 $xscale
+ $mytoplevel.scale.y.entry insert 0 $yscale
+ $mytoplevel.range.x.from_entry insert 0 $xfrom
+ $mytoplevel.range.y.from_entry insert 0 $yfrom
+ $mytoplevel.range.x.to_entry insert 0 $xto
+ $mytoplevel.range.y.to_entry insert 0 $yto
+ $mytoplevel.range.x.size_entry insert 0 $xsize
+ $mytoplevel.range.y.size_entry insert 0 $ysize
+ $mytoplevel.range.x.margin_entry insert 0 $xsize
+ $mytoplevel.range.y.margin_entry insert 0 $ysize
+
+ ::dialog_canvas::checkcommand $mytoplevel
+}
+
+proc ::dialog_canvas::create_dialog {mytoplevel} {
+ toplevel $mytoplevel -class DialogWindow
+ wm title $mytoplevel [_ "Canvas Properties"]
+ if {$::windowingsystem eq "aqua"} {$mytoplevel configure -menu .menubar}
+ ::pd_bindings::dialog_bindings $mytoplevel "canvas"
+
+ labelframe $mytoplevel.scale -text [_ "Scale"] -borderwidth 1
+ pack $mytoplevel.scale -side top -fill x
+ frame $mytoplevel.scale.x -pady 2 -borderwidth 1
+ pack $mytoplevel.scale.x -side top
+ label $mytoplevel.scale.x.label -text [_ "X units per pixel:"]
+ entry $mytoplevel.scale.x.entry -width 10
+ pack $mytoplevel.scale.x.label $mytoplevel.scale.x.entry -side left
+ frame $mytoplevel.scale.y -pady 2
+ pack $mytoplevel.scale.y -side top
+ label $mytoplevel.scale.y.label -text [_ "Y units per pixel:"]
+ entry $mytoplevel.scale.y.entry -width 10
+ pack $mytoplevel.scale.y.label $mytoplevel.scale.y.entry -side left
+
+ labelframe $mytoplevel.parent -text [_ "Appearance on parent patch"] -borderwidth 1
+ pack $mytoplevel.parent -side top -fill x
+ checkbutton $mytoplevel.parent.graphme -text [_ "Graph-On-Parent"] \
+ -anchor w -variable graphme_button($mytoplevel) \
+ -command [concat ::dialog_canvas::checkcommand $mytoplevel]
+ pack $mytoplevel.parent.graphme -side top -fill x -padx 40
+ checkbutton $mytoplevel.parent.hidetext -text [_ "Hide object name and arguments"] \
+ -anchor w -variable hidetext_button($mytoplevel) \
+ -command [concat ::dialog_canvas::checkcommand $mytoplevel]
+ pack $mytoplevel.parent.hidetext -side top -fill x -padx 40
+
+ labelframe $mytoplevel.range -text [_ "Range and size"] -borderwidth 1
+ pack $mytoplevel.range -side top -fill x
+ frame $mytoplevel.range.x -padx 2 -pady 2
+ pack $mytoplevel.range.x -side top
+ label $mytoplevel.range.x.from_label -text [_ "X range, from"]
+ entry $mytoplevel.range.x.from_entry -width 6
+ label $mytoplevel.range.x.to_label -text [_ "to"]
+ entry $mytoplevel.range.x.to_entry -width 6
+ label $mytoplevel.range.x.size_label -text [_ "Size:"]
+ entry $mytoplevel.range.x.size_entry -width 4
+ label $mytoplevel.range.x.margin_label -text [_ "Margin:"]
+ entry $mytoplevel.range.x.margin_entry -width 4
+ pack $mytoplevel.range.x.from_label $mytoplevel.range.x.from_entry \
+ $mytoplevel.range.x.to_label $mytoplevel.range.x.to_entry \
+ $mytoplevel.range.x.size_label $mytoplevel.range.x.size_entry \
+ $mytoplevel.range.x.margin_label $mytoplevel.range.x.margin_entry \
+ -side left
+ frame $mytoplevel.range.y -padx 2 -pady 2
+ pack $mytoplevel.range.y -side top
+ label $mytoplevel.range.y.from_label -text [_ "Y range, from"]
+ entry $mytoplevel.range.y.from_entry -width 6
+ label $mytoplevel.range.y.to_label -text [_ "to"]
+ entry $mytoplevel.range.y.to_entry -width 6
+ label $mytoplevel.range.y.size_label -text [_ "Size:"]
+ entry $mytoplevel.range.y.size_entry -width 4
+ label $mytoplevel.range.y.margin_label -text [_ "Margin:"]
+ entry $mytoplevel.range.y.margin_entry -width 4
+ pack $mytoplevel.range.y.from_label $mytoplevel.range.y.from_entry \
+ $mytoplevel.range.y.to_label $mytoplevel.range.y.to_entry \
+ $mytoplevel.range.y.size_label $mytoplevel.range.y.size_entry \
+ $mytoplevel.range.y.margin_label $mytoplevel.range.y.margin_entry \
+ -side left
+
+ frame $mytoplevel.buttons
+ pack $mytoplevel.buttons -side bottom -fill x -pady 2m
+ button $mytoplevel.buttons.cancel -text [_ "Cancel"] \
+ -command "::dialog_canvas::cancel $mytoplevel"
+ button $mytoplevel.buttons.apply -text [_ "Apply"] \
+ -command "::dialog_canvas::apply $mytoplevel"
+ button $mytoplevel.buttons.ok -text [_ "OK"] \
+ -command "::dialog_canvas::ok $mytoplevel"
+ pack $mytoplevel.buttons.cancel $mytoplevel.buttons.apply \
+ $mytoplevel.buttons.ok -side left -expand 1
+ }