summaryrefslogtreecommitdiff
path: root/blt/demos/scripts/ps.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'blt/demos/scripts/ps.tcl')
-rw-r--r--blt/demos/scripts/ps.tcl767
1 files changed, 767 insertions, 0 deletions
diff --git a/blt/demos/scripts/ps.tcl b/blt/demos/scripts/ps.tcl
new file mode 100644
index 00000000000..2c1263a2d27
--- /dev/null
+++ b/blt/demos/scripts/ps.tcl
@@ -0,0 +1,767 @@
+#bltdebug 100
+
+array set cursors {
+ w left_side
+ e right_side
+ n top_side
+ s bottom_side
+ sw bottom_left_corner
+ ne top_right_corner
+ se bottom_right_corner
+ nw top_left_corner
+}
+
+
+array set pageInfo {
+ gripSize 8
+ scale 0.25
+ radioFont -*-helvetica-medium-r-*-*-11-120-*-*-*-*-*-*
+ labelFont -*-helvetica-bold-r-*-*-12-120-*-*-*-*-*-*
+ printCmd "nlp -d2a211"
+ printFile "out.ps"
+}
+
+
+proc SetUnits { units } {
+ global pageInfo
+ switch -glob $units {
+ "i*" { set pageInfo(uscale) [winfo fpixels . 1i] }
+ "c*" { set pageInfo(uscale) [winfo fpixels . 1c] }
+ default { error "unknown unit \"$units\"" }
+ }
+ set pageInfo(units) [string index $units 0]
+}
+
+
+proc ConvertUnits { value } {
+ global pageInfo
+ set value [expr double($value) / $pageInfo(uscale)]
+ return [format "%.1f%s" $value $pageInfo(units)]
+}
+
+
+proc SetPaperSize { unit } {
+ global pageInfo
+ SetUnits $unit
+ set pageInfo(-paperwidth) [lindex $pageInfo(paperSize) 0]
+ set pageInfo(-paperheight) [lindex $pageInfo(paperSize) 1]
+ ApplyPs
+}
+
+proc SetCanvasSize { canvas width height } {
+ global pageInfo
+
+ set width [winfo pixels . $width]
+ set height [winfo pixels . $height]
+ $canvas configure -width $width -height $height
+}
+
+proc SetCanvasOrientation { canvas } {
+ global pageInfo
+ set width $pageInfo(paperWidth)
+ set height $pageInfo(paperHeight)
+ SetCanvasSize $canvas $width $height
+}
+
+
+proc GetPsOptions { graph } {
+ global pageInfo
+
+ foreach opt [$graph postscript configure] {
+ set pageInfo([lindex $opt 0]) [lindex $opt 4]
+ }
+}
+
+proc SetOutline { canvas } {
+ global pageInfo
+ foreach var { gripSize xMin yMin xMax yMax } {
+ set $var $pageInfo($var)
+ }
+ set xMid [expr ($xMax + $xMin - $gripSize) * 0.5]
+ set yMid [expr ($yMax + $yMin - $gripSize) * 0.5]
+ $canvas coords image $xMin $yMin
+ $canvas itemconfigure image \
+ -width [expr $xMax - $xMin] -height [expr $yMax - $yMin]
+ $canvas coords nw \
+ $xMin $yMin [expr $xMin + $gripSize] [expr $yMin + $gripSize]
+ $canvas coords se \
+ [expr $xMax - $gripSize] [expr $yMax - $gripSize] $xMax $yMax
+ $canvas coords ne \
+ [expr $xMax - $gripSize] [expr $yMin + $gripSize] $xMax $yMin
+ $canvas coords sw \
+ $xMin $yMax [expr $xMin + $gripSize] [expr $yMax - $gripSize]
+ SetCanvasOrientation $canvas
+ $canvas coords n \
+ $xMid $yMin [expr $xMid + $gripSize] [expr $yMin + $gripSize]
+ $canvas coords s \
+ $xMid [expr $yMax - $gripSize] [expr $xMid + $gripSize] $yMax
+ $canvas coords e \
+ [expr $xMax - $gripSize] $yMid $xMax [expr $yMid + $gripSize]
+ $canvas coords w \
+ $xMin $yMid [expr $xMin + $gripSize] [expr $yMid + $gripSize]
+}
+
+proc CreateOutline { canvas } {
+ global pageInfo
+ foreach var { gripSize xMin yMin xMax yMax } {
+ set $var $pageInfo($var)
+ }
+ if { ![bitmap exists pattern8] } {
+ bitmap define pattern8 { {8 8} {ff 00 ff 00 ff 00 ff 00 } }
+ }
+ $canvas create eps $xMin $yMin \
+ -tags "outline image" \
+ -width [expr $xMax - $xMin] \
+ -height [expr $yMax - $yMin]
+
+ $canvas bind image <ButtonPress-1> "StartMove $canvas %x %y"
+ $canvas bind image <B1-Motion> "MoveOutline $canvas %x %y"
+ $canvas bind image <ButtonRelease-1> "EndMove $canvas"
+
+ $canvas bind image <Shift-B1-Motion> "ConstrainMoveOutline $canvas %x %y"
+ $canvas bind image <Enter> "EnterImage $canvas"
+ $canvas bind image <Leave> "LeaveImage $canvas"
+ focus $canvas
+ $canvas create rectangle \
+ $xMin $yMin [expr $xMin + $gripSize] [expr $yMin + $gripSize] \
+ -tags "outline grip nw"
+ $canvas create rectangle \
+ [expr $xMax - $gripSize] [expr $yMax - $gripSize] $xMax $yMax \
+ -tags "outline grip se"
+ $canvas create rectangle \
+ [expr $xMax - $gripSize] [expr $yMin + $gripSize] $xMax $yMin \
+ -tags "outline grip ne"
+ $canvas create rectangle \
+ $xMin $yMax [expr $xMin + $gripSize] [expr $yMax - $gripSize] \
+ -tags "outline grip sw"
+
+ set xMid [expr ($xMax + $xMin - $gripSize) * 0.5]
+ set yMid [expr ($yMax + $yMin - $gripSize) * 0.5]
+ $canvas create rectangle \
+ $xMid $yMin [expr $xMid + $gripSize] [expr $yMin + $gripSize] \
+ -tags "outline grip n"
+ $canvas create rectangle \
+ $xMid [expr $yMax - $gripSize] [expr $xMid + $gripSize] $yMax \
+ -tags "outline grip s"
+ $canvas create rectangle \
+ [expr $xMax - $gripSize] $yMid $xMax [expr $yMid + $gripSize] \
+ -tags "outline grip e"
+ $canvas create rectangle \
+ $xMin $yMid [expr $xMin + $gripSize] [expr $yMid + $gripSize] \
+ -tags "outline grip w"
+ foreach grip { e w s n sw ne se nw } {
+ $canvas bind $grip <ButtonPress-1> "StartResize %W $grip %x %y"
+ $canvas bind $grip <B1-Motion> "ResizeOutline %W %x %y"
+ $canvas bind $grip <ButtonRelease-1> "EndResize %W $grip %x %y"
+ $canvas bind $grip <Enter> "EnterGrip %W $grip %x %y"
+ $canvas bind $grip <Leave> "LeaveGrip %W $grip"
+ }
+ $canvas raise grip
+ $canvas itemconfigure grip -fill red -outline black
+
+ set pageInfo(image) [image create photo]
+ $pageInfo(graph) snap $pageInfo(image)
+ $canvas itemconfigure image -image $pageInfo(image)
+}
+
+
+proc EnterImage { canvas } {
+ global cursors
+ global pageInfo
+ bind $canvas <KeyPress-Left> {
+ MoveOutline %W [expr $pageInfo(lastX) - 1] $pageInfo(lastY)
+ }
+ bind $canvas <KeyPress-Right> {
+ MoveOutline %W [expr $pageInfo(lastX) + 1] $pageInfo(lastY)
+ }
+ bind $canvas <KeyPress-Up> {
+ MoveOutline %W $pageInfo(lastX) [expr $pageInfo(lastY) - 1]
+ }
+ bind $canvas <KeyPress-Down> {
+ MoveOutline %W $pageInfo(lastX) [expr $pageInfo(lastY) + 1]
+ }
+ focus $canvas
+ $canvas configure -cursor fleur
+ set pageInfo(lastX) 0
+ set pageInfo(lastY) 0
+}
+
+
+proc LeaveImage { canvas } {
+ bind $canvas <KeyPress-Left> ""
+ bind $canvas <KeyPress-Right> ""
+ bind $canvas <KeyPress-Up> ""
+ bind $canvas <KeyPress-Down> ""
+ $canvas configure -cursor ""
+}
+
+proc EnterGrip { canvas grip x y } {
+ global pageInfo
+ $canvas itemconfigure $grip -fill blue -outline black
+ set pageInfo(grip) $grip
+ global cursors
+ bind $canvas <KeyPress-Left> {
+ ResizeOutline %W [expr $pageInfo(lastX) - 1] $pageInfo(lastY)
+ }
+ bind $canvas <KeyPress-Right> {
+ ResizeOutline %W [expr $pageInfo(lastX) + 1] $pageInfo(lastY)
+ }
+ bind $canvas <KeyPress-Up> {
+ ResizeOutline %W $pageInfo(lastX) [expr $pageInfo(lastY) - 1]
+ }
+ bind $canvas <KeyPress-Down> {
+ ResizeOutline %W $pageInfo(lastX) [expr $pageInfo(lastY) + 1]
+ }
+ focus $canvas
+ $canvas configure -cursor $cursors($grip)
+ set pageInfo(lastX) $x
+ set pageInfo(lastY) $y
+}
+
+proc LeaveGrip { canvas grip } {
+ $canvas itemconfigure $grip -fill red -outline black
+ bind $canvas <KeyPress-Left> ""
+ bind $canvas <KeyPress-Right> ""
+ bind $canvas <KeyPress-Up> ""
+ bind $canvas <KeyPress-Down> ""
+ $canvas configure -cursor ""
+}
+
+proc StartMove { canvas x y } {
+ global pageInfo
+ set pageInfo(lastX) $x
+ set pageInfo(lastY) $y
+ set pageInfo(direction) "undecided"
+ $canvas configure -cursor fleur
+}
+
+proc MoveOutline { canvas x y } {
+ global pageInfo
+ $canvas move outline [expr $x - $pageInfo(lastX)] [expr $y - $pageInfo(lastY)]
+ set pageInfo(lastX) $x
+ set pageInfo(lastY) $y
+}
+
+proc ConstrainMoveOutline { canvas x y } {
+ global pageInfo
+
+ set dx [expr $x - $pageInfo(lastX)]
+ set dy [expr $y - $pageInfo(lastY)]
+
+ if { $pageInfo(direction) == "undecided" } {
+ if { abs($dx) > abs($dy) } {
+ set pageInfo(direction) x
+ $canvas configure -cursor sb_h_double_arrow
+ } else {
+ set pageInfo(direction) y
+ $canvas configure -cursor sb_v_double_arrow
+ }
+ }
+ switch $pageInfo(direction) {
+ x { set dy 0 ; set pageInfo(lastX) $x }
+ y { set dx 0 ; set pageInfo(lastY) $y }
+ }
+ $canvas move outline $dx $dy
+}
+
+proc EndMove { canvas } {
+ $canvas configure -cursor ""
+
+ set coords [$canvas coords image]
+ set x [lindex $coords 0]
+ set y [lindex $coords 1]
+ set w [$canvas itemcget image -width]
+ set h [$canvas itemcget image -height]
+
+ global pageInfo
+ set pageInfo(xMin) $x
+ set pageInfo(xMin) $y
+ set pageInfo(xMax) [expr $x + $w]
+ set pageInfo(yMax) [expr $y + $h]
+
+ global pageInfo
+ set pageInfo(-padx) [list $pageInfo(xMin) [expr $pageInfo(paperWidth) - $pageInfo(xMax)]]
+ set pageInfo(-pady) [list $pageInfo(yMin) [expr $pageInfo(paperHeight) - $pageInfo(yMax)]]
+}
+
+proc StartResize { canvas grip x y } {
+ global pageInfo
+ $canvas itemconfigure image -quick yes
+ set pageInfo(grip) $grip
+ $canvas itemconfigure $grip -fill red -outline black
+ $canvas raise grip
+ global cursors
+ $canvas configure -cursor $cursors($grip)
+ set pageInfo(lastX) $x
+ set pageInfo(lastY) $y
+}
+
+proc EndResize { canvas grip x y } {
+ $canvas itemconfigure image -quick no
+ ResizeOutline $canvas $x $y
+ $canvas itemconfigure $grip -fill "" -outline ""
+ $canvas configure -cursor ""
+}
+
+proc ResizeOutline { canvas x y } {
+ global pageInfo
+
+ foreach var { gripSize xMin yMin xMax yMax } {
+ set $var $pageInfo($var)
+ }
+ switch $pageInfo(grip) {
+ n {
+ set yMin $y
+ }
+ s {
+ set yMax $y
+ }
+ e {
+ set xMax $x
+ }
+ w {
+ set xMin $x
+ }
+ sw {
+ set xMin $x ; set yMax $y
+ }
+ ne {
+ set xMax $x ; set yMin $y
+ }
+ se {
+ set xMax $x ; set yMax $y
+ }
+ nw {
+ set xMin $x ; set yMin $y
+ }
+ }
+ set width [expr $xMax - $xMin]
+ set height [expr $yMax - $yMin]
+ if { ($width < 1) || ($height < 1) } {
+ return
+ }
+ SetOutline $canvas
+ foreach var { xMin yMin xMax yMax } {
+ set pageInfo($var) [set $var]
+ }
+}
+
+proc ComputePlotGeometry { graph } {
+ global pageInfo
+
+ GetPsOptions $graph
+ set width [winfo width $graph]
+ set height [winfo height $graph]
+ if { $pageInfo(-width) > 0 } {
+ set width $pageInfo(-width)
+ }
+ if { $pageInfo(-height) > 0 } {
+ set height $pageInfo(-height)
+ }
+
+ set left [lindex $pageInfo(-padx) 0]
+ set right [lindex $pageInfo(-padx) 1]
+ set top [lindex $pageInfo(-pady) 0]
+ set bottom [lindex $pageInfo(-pady) 1]
+ set padx [expr $left + $right]
+ set pady [expr $top + $bottom]
+
+ if { $pageInfo(-paperwidth) > 0 } {
+ set paperWidth $pageInfo(-paperwidth)
+ } else {
+ set paperWidth [expr $width + $padx]
+ }
+ if { $pageInfo(-paperheight) > 0 } {
+ set paperHeight $pageInfo(-paperheight)
+ } else {
+ set paperHeight [expr $height + $pady]
+ }
+ if { $pageInfo(-landscape) } {
+ set temp $paperWidth
+ set paperWidth $paperHeight
+ set paperHeight $temp
+ }
+
+ set scale 1.0
+ if { $pageInfo(-maxpect) } {
+ set xScale [expr ($paperWidth - $padx) / double($width)]
+ set yScale [expr ($paperHeight - $pady) / double($height)]
+ set scale [expr min($xScale,$yScale)]
+ set bboxWidth [expr round($width * $scale)]
+ set bboxHeight [expr round($height * $scale)]
+ } else {
+ if { ($width + $padx) > $paperWidth } {
+ set width [expr $paperWidth - $padx]
+ }
+ if { ($height + $pady) > $paperHeight } {
+ set height [expr $paperHeight - $pady]
+ }
+ set bboxWidth $width
+ set bboxHeight $height
+ }
+ set x $left
+ set y $top
+ if { $pageInfo(-center) } {
+ if { $paperWidth > $bboxWidth } {
+ set x [expr ($paperWidth - $bboxWidth) / 2]
+ }
+ if { $paperHeight > $bboxHeight } {
+ set y [expr ($paperHeight - $bboxHeight) / 2]
+ }
+ }
+ set pageInfo(xMin) [expr $x * $pageInfo(scale)]
+ set pageInfo(yMin) [expr $y * $pageInfo(scale)]
+ set pageInfo(xMax) [expr ($x + $bboxWidth) * $pageInfo(scale)]
+ set pageInfo(yMax) [expr ($y + $bboxHeight) * $pageInfo(scale)]
+ set pageInfo(paperHeight) [expr $paperHeight * $pageInfo(scale)]
+ set pageInfo(paperWidth) [expr $paperWidth * $pageInfo(scale)]
+}
+
+proc PsDialog { graph } {
+ global pageInfo
+
+ set pageInfo(graph) $graph
+ set top $graph.top
+ toplevel $top
+ option add *graph.top*Radiobutton.font $pageInfo(radioFont)
+ GetPsOptions $graph
+ ComputePlotGeometry $graph
+ set canvas $top.layout
+ canvas $canvas -confine yes \
+ -width $pageInfo(paperWidth) -height $pageInfo(paperHeight) -bg gray \
+ -bd 2 -relief sunken
+ CreateOutline $canvas
+ SetCanvasOrientation $canvas
+ label $top.titleLabel -text "PostScript Options"
+ table $top \
+ 0,0 $top.titleLabel -cspan 7 \
+ 1,0 $canvas -cspan 7
+
+ set row 2
+ set col 0
+ label $top.paperLabel -text "Paper"
+ radiobutton $top.letter -text "Letter 8 1/2 x 11 in." -value "8.5i 11i" \
+ -variable pageInfo(paperSize) \
+ -command "SetPaperSize i"
+ radiobutton $top.a3 -text "A3 29.7 x 42 cm." -value "28.7c 41c" \
+ -variable pageInfo(paperSize) \
+ -command "SetPaperSize c"
+ radiobutton $top.a4 -text "A4 21 x 29.7 cm." -value "21c 29.7c" \
+ -variable pageInfo(paperSize) \
+ -command "SetPaperSize c"
+ radiobutton $top.a5 -text "A5 14.85 x 21 cm." -value "14.85c 21c" \
+ -variable pageInfo(paperSize) \
+ -command "SetPaperSize c"
+ radiobutton $top.legal -text "Legal 8 1/2 x 14 in." -value "8.5i 14i" \
+ -variable pageInfo(paperSize) \
+ -command "SetPaperSize i"
+ radiobutton $top.large -text "Large 11 x 17 in." -value "11i 17i" \
+ -variable pageInfo(paperSize) \
+ -command "SetPaperSize i"
+ table configure $top r$row -pady { 4 0 }
+ table $top \
+ $row,$col $top.paperLabel -anchor e \
+ $row+0,$col+1 $top.letter -anchor w \
+ $row+1,$col+1 $top.legal -anchor w \
+ $row+2,$col+1 $top.large -anchor w \
+ $row+0,$col+2 $top.a3 -anchor w \
+ $row+1,$col+2 $top.a4 -anchor w \
+ $row+2,$col+2 $top.a5 -anchor w
+
+ incr row 3
+
+ label $top.orientLabel -text "Orientation"
+ radiobutton $top.portrait -text "Portrait" -value "0" \
+ -variable pageInfo(-landscape) -command "ApplyPs"
+ radiobutton $top.landscape -text "Landscape" -value "1" \
+ -variable pageInfo(-landscape) -command "ApplyPs"
+ table configure $top r$row -pady { 4 0 }
+ table $top \
+ $row,$col+0 $top.orientLabel -anchor e \
+ $row,$col+1 $top.portrait -anchor w \
+ $row,$col+2 $top.landscape -anchor w
+
+ incr row 6
+
+ set col 0
+ label $top.plotLabel -text "Plot Options"
+ table $top \
+ $row,$col $top.plotLabel -cspan 3
+ incr row
+ label $top.sizeLabel -text "Size"
+ radiobutton $top.default -text "Default" -value "default" \
+ -variable pageInfo(plotSize) \
+ -command "SetPlotSize"
+ radiobutton $top.maxpect -text "Max Aspect" -value "maxpect" \
+ -variable pageInfo(plotSize) \
+ -command "SetPlotSize"
+ radiobutton $top.resize -text "Resize" -value "resize" \
+ -variable pageInfo(plotSize) \
+ -command "SizeDialog $graph {Adjust Plot Size}"
+ table configure $top r$row -pady { 4 0 }
+ table $top \
+ $row,$col $top.sizeLabel -anchor e \
+ $row,$col+1 $top.default -anchor w \
+ $row+1,$col+1 $top.maxpect -anchor w \
+ $row+2,$col+1 $top.resize -anchor w
+
+ #incr row 4
+
+ set pageInfo(oldPadX) $pageInfo(-padx)
+ set pageInfo(oldPadY) $pageInfo(-pady)
+
+ label $top.posLabel -text "Position"
+ set pageInfo(position) $pageInfo(-center)
+ radiobutton $top.center -text "Center" -value "1" \
+ -variable pageInfo(position) -command {
+ set pageInfo(-center) 1
+ CenterPlot
+ }
+ radiobutton $top.origin -text "Origin" -value "0" \
+ -variable pageInfo(position) -command {
+ set pageInfo(-center) 0
+ ApplyPs
+ }
+ radiobutton $top.move -text "Move" -value "move" \
+ -variable pageInfo(position) -command {
+ set pageInfo(-center) 0
+ MoveDialog
+ }
+ table configure $top r$row -pady { 4 0 }
+ table $top \
+ $row,$col+2 $top.posLabel -anchor e \
+ $row,$col+3 $top.center -anchor w \
+ $row+1,$col+3 $top.origin -anchor w \
+ $row+2,$col+3 $top.move -anchor w
+
+ incr row 4
+ label $top.printLabel -text "Print To"
+ radiobutton $top.toFile -text "File" -value "printFile" \
+ -variable pageInfo(printTo) -command "
+ $top.fileEntry configure -textvariable pageInfo(printFile)
+ "
+ radiobutton $top.toCmd -text "Command" -value "printCmd" \
+ -variable pageInfo(printTo) -command "
+ $top.fileEntry configure -textvariable pageInfo(printCmd)
+ "
+ entry $top.fileEntry
+ table configure $top r$row -pady { 4 0 }
+ table configure $top r[expr $row+1] -pady { 4 0 }
+ table configure $top r[expr $row+2] -pady { 4 0 }
+ table $top \
+ $row,0 $top.printLabel -anchor e \
+ $row,1 $top.toFile -anchor w \
+ $row+1,1 $top.toCmd -anchor w \
+ $row+2,1 $top.fileEntry -anchor w -fill x -cspan 3
+ $top.toFile invoke
+ incr row 3
+ #table configure $top c4 -width .125i
+ button $top.cancel -text "Cancel" -command "destroy $top"
+ button $top.print -text "Done" -command "PrintPs $graph"
+ button $top.advanced -text "Options" -command "MarginDialog $graph"
+ table $top \
+ $row,1 $top.print -width 1i -pady 2 \
+ $row,2 $top.advanced -width 1i -pady 2 \
+ $row,3 $top.cancel -width 1i -pady 2 -anchor w
+
+ SetUnits "inches"
+ foreach label [info commands $top.*Label] {
+ $label configure -font $pageInfo(labelFont) -padx 4
+ }
+}
+
+proc PrintPs { graph } {
+ $graph postscript output "out.ps"
+ puts stdout "wrote file \"out.ps\"."
+ flush stdout
+}
+
+proc ApplyPs { } {
+ global pageInfo
+
+ set graph $pageInfo(graph)
+ foreach option [$graph postscript configure] {
+ set var [lindex $option 0]
+ set old [lindex $option 4]
+ if { [catch {$graph postscript configure $var $pageInfo($var)}] != 0 } {
+ $graph postscript configure $var $old
+ set pageInfo($var) $old
+ }
+ }
+ ComputePlotGeometry $graph
+ foreach var { -paperheight -paperwidth -width -height } {
+ set pageInfo($var) [ConvertUnits $pageInfo($var)]
+ }
+ SetOutline $graph.top.layout
+}
+
+proc StartChange { w delta } {
+ ChangeSize $w $delta
+ global pageInfo
+ set pageInfo(afterId) [after 300 RepeatChange $w $delta]
+}
+
+proc RepeatChange { w delta } {
+ ChangeSize $w $delta
+ global pageInfo
+ set pageInfo(afterId) [after 100 RepeatChange $w $delta]
+}
+
+proc EndChange { w } {
+ global pageInfo
+ after cancel $pageInfo(afterId)
+}
+
+proc ChangeSize { w delta } {
+ set f [winfo parent $w]
+ set value [$f.entry get]
+ set value [expr $value + $delta]
+ if { $value < 0 } {
+ set value 1
+ }
+ $f.entry delete 0 end
+ $f.entry insert 0 $value
+}
+
+proc MakeSizeAdjustor { w label var } {
+ frame $w
+ label $w.label -text $label
+ button $w.plus -text "+" -padx 1 -pady 0 -font \*symbol\*
+ entry $w.entry -width 6 -textvariable "pageInfo($var)"
+ button $w.minus -text "-" -padx 1 -pady 0 -font \*symbol\*
+ label $w.units -text "in"
+ bind $w.plus <ButtonPress-1> { StartChange %W 0.1}
+ bind $w.plus <ButtonRelease-1> { EndChange %W }
+ bind $w.minus <ButtonPress-1> { StartChange %W -0.1}
+ bind $w.minus <ButtonRelease-1> { EndChange %W }
+ table $w \
+ 0,1 $w.label \
+ 1,1 $w.entry -rspan 2 -fill y \
+ 1,0 $w.minus -padx 2 -pady 2 \
+ 2,0 $w.plus -padx 2 -pady { 0 2 } \
+ 1,2 $w.units -rspan 2 -fill y
+
+}
+
+
+proc SizeDialog { graph title } {
+ global pageInfo
+ set top .plotSize
+ if { [winfo exists $top] } {
+ return
+ }
+ toplevel $top
+ label $top.title -text $title
+ button $top.cancel -text "Cancel" -command "destroy $top"
+ button $top.ok -text "Ok" -command "ApplyPs; destroy $top"
+ MakeSizeAdjustor $top.plotWidth "Width" -width
+ MakeSizeAdjustor $top.plotHeight "Height" -height
+ table $top \
+ 0,0 $top.title -cspan 2 \
+ 1,0 $top.plotWidth \
+ 1,1 $top.plotHeight \
+ 2,0 $top.cancel -pady 4 -padx 4 -width 1i \
+ 2,1 $top.ok -pady 4 -padx 4 -width 1i
+ set width [winfo fpixels . $pageInfo(-width)]
+ set height [winfo fpixels . $pageInfo(-height)]
+ if { $width == 0 } {
+ set width [expr ($pageInfo(xMax) - $pageInfo(xMin)) / $pageInfo(scale)]
+ set pageInfo(-width) [ConvertUnits $width]
+ }
+ if { $height == 0 } {
+ set height [expr ($pageInfo(yMax) - $pageInfo(yMin)) / $pageInfo(scale)]
+ set pageInfo(-height) [ConvertUnits $height]
+ }
+ set pageInfo(-maxpect) 0
+}
+
+proc SetPlotSize { } {
+ global pageInfo
+ set graph $pageInfo(graph)
+ switch $pageInfo(plotSize) {
+ default {
+ set pageInfo(-width) 0
+ set pageInfo(-height) 0
+ set pageInfo(-maxpect) 0
+ set pageInfo(-padx) $pageInfo(oldPadX)
+ set pageInfo(-pady) $pageInfo(oldPadY)
+ } maxpect {
+ set pageInfo(-width) 0
+ set pageInfo(-height) 0
+ set pageInfo(-maxpect) 1
+ set pageInfo(-padx) $pageInfo(oldPadX)
+ set pageInfo(-pady) $pageInfo(oldPadY)
+ } resize {
+ set pageInfo(-maxpect) 0
+ }
+ }
+ ApplyPs
+}
+
+
+proc PaperSizeDialog { title } {
+ set top .paperSize
+ if { [winfo exists $top] } {
+ return
+ }
+ toplevel $top
+ label $top.title -text $title
+ MakeSizeAdjustor $top.width "Width" -paperwidth
+ MakeSizeAdjustor $top.height "Height" -paperheight
+ button $top.cancel -text "Cancel" -command "destroy $top"
+ button $top.ok -text "Ok" -command "ApplyPs; destroy $top"
+ table $top \
+ 0,0 $top.title -cspan 2 \
+ 1,0 $top.width \
+ 1,1 $top.height \
+ 2,0 $top.cancel -pady 4 -padx 4 -width 1i \
+ 2,1 $top.ok -pady 4 -padx 4 -width 1i
+}
+
+proc MarginDialog { graph } {
+ set top $graph.top.options
+ if { [winfo exists $top] } {
+ return
+ }
+ toplevel $top
+ set row 0
+ set col 0
+ label $top.modeLabel -text "Printer"
+ radiobutton $top.color -text "Color" -value "color" \
+ -variable pageInfo(-colormode) -command "ApplyPs"
+ radiobutton $top.greyscale -text "Greyscale" -value "greyscale" \
+ -variable pageInfo(-colormode) -command "ApplyPs"
+ table $top \
+ $row,$col $top.modeLabel -anchor e \
+ $row,$col+1 $top.color -anchor w \
+ $row+1,$col+1 $top.greyscale -anchor w
+
+ table configure $top r$row -pady { 4 0 }
+
+ label $top.previewLabel -text "Preview"
+ radiobutton $top.previewYes -text "Yes" -value "1" \
+ -variable pageInfo(-preview) -command "ApplyPs"
+ radiobutton $top.previewNo -text "No" -value "0" \
+ -variable pageInfo(-preview) -command "ApplyPs"
+ set col 2
+ table $top \
+ $row,$col $top.previewLabel -anchor e \
+ $row,$col+1 $top.previewYes -anchor w \
+ $row+1,$col+1 $top.previewNo -anchor w
+ incr row 2
+
+ button $top.cancel -text "Cancel" -command "destroy $top"
+ button $top.ok -text "Done" -command "PrintPs $graph"
+ table $top \
+ $row,0 $top.cancel -pady 4 -padx 4 -width 1i \
+ $row,1 $top.ok -pady 4 -padx 4 -width 1i
+
+}
+
+proc CenterPlot { } {
+ global pageInfo
+
+ set pageInfo(-padx) $pageInfo(oldPadX)
+ set pageInfo(-pady) $pageInfo(oldPadY)
+ ApplyPs
+}