#
# CanvasPrintDialog v1.5
# ----------------------------------------------------------------------
# Implements a print dialog for printing the contents of a canvas widget
# to a printer or a file. It is possible to specify page orientation, the
# number of pages to print the image on and if the output should be
# stretched to fit the page. The CanvasPrintDialog is derived from the
# Dialog class and is composed of a CanvasPrintBox with attributes set to
# manipulate the dialog buttons.
# 
# ----------------------------------------------------------------------
#  AUTHOR: Tako Schotanus              EMAIL: Tako.Schotanus@bouw.tno.nl
# ----------------------------------------------------------------------
#				   Copyright (c) 1995  Tako Schotanus
# ======================================================================
# Permission is hereby granted, without written agreement and without
# license or royalty fees, to use, copy, modify, and distribute this
# software and its documentation for any purpose, provided that the
# above copyright notice and the following two paragraphs appear in
# all copies of this software.
# 
# IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 
# ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN 
# IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 
# DAMAGE.
#
# THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, 
# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
# FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
# ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
# PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
# ======================================================================

#
# Option database default resources:
#
option add *Canvasprintdialog.filename "canvas.ps" widgetDefault
option add *Canvasprintdialog.hPageCnt 1 widgetDefault
option add *Canvasprintdialog.orient landscape widgetDefault
option add *Canvasprintdialog.output printer widgetDefault
option add *Canvasprintdialog.pageSize A4 widgetDefault
option add *Canvasprintdialog.posterize 0 widgetDefault
option add *Canvasprintdialog.printCmd lpr widgetDefault
option add *Canvasprintdialog.printRegion "" widgetDefault
option add *Canvasprintdialog.vPageCnt 1 widgetDefault
option add *Canvasprintdialog.title "Canvas Print Dialog" widgetDefault
option add *Canvasprintdialog.master "." widgetDefault

#
# Usual options.
#
itk::usual Canvasprintdialog {
	keep -background -cursor -foreground -modality 
}

# ------------------------------------------------------------------
# CANVASPRINTDIALOG
# ------------------------------------------------------------------
itcl::class iwidgets::Canvasprintdialog {
	inherit iwidgets::Dialog

	constructor {args} {}   
	destructor {}

	method deactivate {args} {}
	method getoutput {} {}
	method setcanvas {canv} {}
	method refresh {} {}
	method print {} {}
}

#
# Provide a lowercased access method for the Canvasprintdialog class.
# 
proc ::iwidgets::canvasprintdialog {args} {
	uplevel ::iwidgets::Canvasprintdialog $args
}

# ------------------------------------------------------------------
# CONSTRUCTOR 
#
# Create new file selection dialog.
# ------------------------------------------------------------------
itcl::body iwidgets::Canvasprintdialog::constructor {args} {
	component hull configure -borderwidth 0

	# 
	# Instantiate a file selection box widget.
	#
	itk_component add cpb {
		iwidgets::Canvasprintbox $itk_interior.cpb
	} {
		usual
		keep -printregion -output -printcmd -filename -pagesize \
		     -orient -stretch -posterize -hpagecnt -vpagecnt
	}
	pack $itk_component(cpb) -fill both -expand yes

	#
	# Hide the apply and help buttons.
	#
	buttonconfigure OK -text Print
	buttonconfigure Apply -command [itcl::code $this refresh] -text Refresh
	hide Help

	eval itk_initialize $args
}   

# ------------------------------------------------------------------
# METHOD: deactivate
#
# Redefines method of dialog shell class. Stops the drawing of the
# thumbnail (when busy) upon deactivation of the dialog.
# ------------------------------------------------------------------
itcl::body iwidgets::Canvasprintdialog::deactivate {args} {
	$itk_component(cpb) stop
	return [eval Shell::deactivate $args]
}

# ------------------------------------------------------------------
# METHOD: getoutput
#
# Thinwrapped method of canvas print box class.
# ------------------------------------------------------------------
itcl::body iwidgets::Canvasprintdialog::getoutput {} {
	return [$itk_component(cpb) getoutput]
}

# ------------------------------------------------------------------
# METHOD: setcanvas
#
# Thinwrapped method of canvas print box class.
# ------------------------------------------------------------------
itcl::body iwidgets::Canvasprintdialog::setcanvas {canv} {
	return [$itk_component(cpb) setcanvas $canv]
}

# ------------------------------------------------------------------
# METHOD: refresh
#
# Thinwrapped method of canvas print box class.
# ------------------------------------------------------------------
itcl::body iwidgets::Canvasprintdialog::refresh {} {
	return [$itk_component(cpb) refresh]
}

# ------------------------------------------------------------------
# METHOD: print
#
# Thinwrapped method of canvas print box class.
# ------------------------------------------------------------------
itcl::body iwidgets::Canvasprintdialog::print {} {
	return [$itk_component(cpb) print]
}
