#
# Scrolledcanvas
# ----------------------------------------------------------------------
# Implements horizontal and vertical scrollbars around a canvas childsite
# Includes options to control display of scrollbars.  The standard
# canvas options and methods are supported.
#
# ----------------------------------------------------------------------
#  AUTHOR: Mark Ulferts                        mulferts@austin.dsccc.com 
#
#  @(#) $Id: scrolledcanvas.itk,v 1.3 2001/08/17 19:04:06 smithc Exp $
# ----------------------------------------------------------------------
#            Copyright (c) 1995 DSC Technologies Corporation
# ======================================================================
# Permission to use, copy, modify, distribute and license this software 
# and its documentation for any purpose, and without fee or written 
# agreement with DSC, is hereby granted, provided that the above copyright 
# notice appears in all copies and that both the copyright notice and 
# warranty disclaimer below appear in supporting documentation, and that 
# the names of DSC Technologies Corporation or DSC Communications 
# Corporation not be used in advertising or publicity pertaining to the 
# software without specific, written prior permission.
# 
# DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING 
# ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON-
# INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE
# AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, 
# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL 
# DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR 
# ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 
# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION,
# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS 
# SOFTWARE.
# ======================================================================

#
# Usual options.
#
itk::usual Scrolledcanvas {
    keep -activebackground -activerelief -background -borderwidth -cursor \
	 -elementborderwidth -foreground -highlightcolor -highlightthickness \
	 -insertbackground -insertborderwidth -insertofftime -insertontime \
	 -insertwidth -jump -labelfont -selectbackground -selectborderwidth \
	 -selectforeground -textbackground -troughcolor
}

# ------------------------------------------------------------------
#                            SCROLLEDCANVAS
# ------------------------------------------------------------------
itcl::class iwidgets::Scrolledcanvas {
    inherit iwidgets::Scrolledwidget

    constructor {args} {}
    destructor {}

    itk_option define -autoresize autoResize AutoResize 1 
    itk_option define -automargin autoMargin AutoMargin 0

    public method childsite {} 
    public method justify {direction} 

    public method addtag {args} 
    public method bbox {args} 
    public method bind {args} 
    public method canvasx {args} 
    public method canvasy {args} 
    public method coords {args} 
    public method create {args} 
    public method dchars {args} 
    public method delete {args} 
    public method dtag {args} 
    public method find {args} 
    public method focus {args} 
    public method gettags {args} 
    public method icursor {args} 
    public method index {args} 
    public method insert {args} 
    public method itemconfigure {args} 
    public method itemcget {args} 
    public method lower {args} 
    public method move {args} 
    public method postscript {args} 
    public method raise {args} 
    public method scale {args} 
    public method scan {args} 
    public method select {args} 
    public method type {args} 
    public method xview {args} 
    public method yview {args} 
}

#
# Provide a lowercased access method for the Scrolledcanvas class.
# 
proc ::iwidgets::scrolledcanvas {pathName args} {
    uplevel ::iwidgets::Scrolledcanvas $pathName $args
}

#
# Use option database to override default resources of base classes.
#
option add *Scrolledcanvas.width 200 widgetDefault
option add *Scrolledcanvas.height 230 widgetDefault
option add *Scrolledcanvas.labelPos n widgetDefault

# ------------------------------------------------------------------
#                        CONSTRUCTOR
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::constructor {args} {
    #
    # Create a clipping frame which will provide the border for
    # relief display.
    #
    itk_component add clipper {
	frame $itk_interior.clipper
    } {
	usual

	keep -borderwidth -relief -highlightthickness -highlightcolor
	rename -highlightbackground -background background Background
    }	
    grid $itk_component(clipper) -row 0 -column 0 -sticky nsew
    grid rowconfigure $_interior 0 -weight 1
    grid columnconfigure $_interior 0 -weight 1

    # 
    # Create a canvas to scroll
    #
    itk_component add canvas {
	canvas $itk_component(clipper).canvas \
		-height 1.0 -width 1.0 \
                -scrollregion "0 0 1 1" \
                -xscrollcommand \
		[itcl::code $this _scrollWidget $itk_interior.horizsb] \
		-yscrollcommand \
		[itcl::code $this _scrollWidget $itk_interior.vertsb]
    } {
	usual

	ignore -highlightthickness -highlightcolor

	keep -closeenough -confine -scrollregion 
	keep -xscrollincrement -yscrollincrement

	rename -background -textbackground textBackground Background
    }
    grid $itk_component(canvas) -row 0 -column 0 -sticky nsew
    grid rowconfigure $itk_component(clipper) 0 -weight 1
    grid columnconfigure $itk_component(clipper) 0 -weight 1
    
    # 
    # Configure the command on the vertical scroll bar in the base class.
    #
    $itk_component(vertsb) configure \
	-command [itcl::code $itk_component(canvas) yview]

    #
    # Configure the command on the horizontal scroll bar in the base class.
    #
    $itk_component(horizsb) configure \
		-command [itcl::code $itk_component(canvas) xview]
    
    #
    # Initialize the widget based on the command line options.
    #
    eval itk_initialize $args
}

# ------------------------------------------------------------------
#                           DESTURCTOR
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::destructor {} {
}

# ------------------------------------------------------------------
#                             OPTIONS
# ------------------------------------------------------------------

# ------------------------------------------------------------------
# OPTION: -autoresize
#
# Automatically adjusts the scrolled region to be the bounding 
# box covering all the items in the canvas following the execution 
# of any method which creates or destroys items.  Thus, as new 
# items are added, the scrollbars adjust accordingly.
# ------------------------------------------------------------------
itcl::configbody iwidgets::Scrolledcanvas::autoresize {
    if {$itk_option(-autoresize)} {
	set bbox [$itk_component(canvas) bbox all]

	if {$bbox != {}} {
	    set marg $itk_option(-automargin)
	    set bbox [lreplace $bbox 0 0 [expr {[lindex $bbox 0] - $marg}]]
	    set bbox [lreplace $bbox 1 1 [expr {[lindex $bbox 1] - $marg}]]
	    set bbox [lreplace $bbox 2 2 [expr {[lindex $bbox 2] + $marg}]]
	    set bbox [lreplace $bbox 3 3 [expr {[lindex $bbox 3] + $marg}]]
	}

	$itk_component(canvas) configure -scrollregion $bbox
    }
}

# ------------------------------------------------------------------
#                            METHODS
# ------------------------------------------------------------------

# ------------------------------------------------------------------
# METHOD: childsite
#
# Returns the path name of the child site widget.
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::childsite {} {
    return $itk_component(canvas)
}

# ------------------------------------------------------------------
# METHOD: justify
#
# Justifies the canvas scrolled region in one of four directions: top,
# bottom, left, or right.
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::justify {direction} {
    if {[winfo ismapped $itk_component(canvas)]} {
	update idletasks
	
	switch $direction {
	    left { 
		$itk_component(canvas) xview moveto 0
	    }
	    right {
		$itk_component(canvas) xview moveto 1
	    }
	    top {
		$itk_component(canvas) yview moveto 0
	    }
	    bottom {
		$itk_component(canvas) yview moveto 1
	    }
	    default {
		error "bad justify argument \"$direction\": should be\
			left, right, top, or bottom"
	    }
	}
    }
}

# ------------------------------------------------------------------
# CANVAS METHODS:
#
# The following methods are thin wraps of standard canvas methods.
# Consult the Tk canvas man pages for functionallity and argument
# documentation
# ------------------------------------------------------------------

# ------------------------------------------------------------------
# METHOD: addtag tag searchSpec ?arg arg ...?
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::addtag {args} {
    return [eval $itk_component(canvas) addtag $args]
}

# ------------------------------------------------------------------
# METHOD: bbox tagOrId ?tagOrId tagOrId ...?
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::bbox {args} {
    return [eval $itk_component(canvas) bbox $args]
}

# ------------------------------------------------------------------
# METHOD: bind tagOrId ?sequence? ?command?
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::bind {args} {
    return [eval $itk_component(canvas) bind $args]
}

# ------------------------------------------------------------------
# METHOD: canvasx screenx ?gridspacing?
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::canvasx {args} {
    return [eval $itk_component(canvas) canvasx $args]
}

# ------------------------------------------------------------------
# METHOD: canvasy screeny ?gridspacing?
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::canvasy {args} {
    return [eval $itk_component(canvas) canvasy $args]
}

# ------------------------------------------------------------------
# METHOD: coords tagOrId ?x0 y0 ...?
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::coords {args} {
    return [eval $itk_component(canvas) coords $args]
}

# ------------------------------------------------------------------
# METHOD: create type x y ?x y ...? ?option value ...?
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::create {args} {
    set retval [eval $itk_component(canvas) create $args]
    
    configure -autoresize $itk_option(-autoresize)
    
    return $retval
}

# ------------------------------------------------------------------
# METHOD: dchars  tagOrId first ?last?
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::dchars {args} {
    return [eval $itk_component(canvas) dchars $args]
}

# ------------------------------------------------------------------
# METHOD: delete tagOrId ?tagOrId tagOrId ...?
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::delete {args} {
    set retval [eval $itk_component(canvas) delete $args]
    
    configure -autoresize $itk_option(-autoresize)
    
    return $retval
}

# ------------------------------------------------------------------
# METHOD: dtag tagOrId ?tagToDelete?
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::dtag {args} {
    eval $itk_component(canvas) dtag $args
    
    configure -autoresize $itk_option(-autoresize)
}

# ------------------------------------------------------------------
# METHOD: find searchCommand ?arg arg ...?
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::find {args} {
    return [eval $itk_component(canvas) find $args]
}

# ------------------------------------------------------------------
# METHOD: focus ?tagOrId?
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::focus {args} {
    return [eval $itk_component(canvas) focus $args]
}

# ------------------------------------------------------------------
# METHOD: gettags tagOrId
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::gettags {args} {
    return [eval $itk_component(canvas) gettags $args]
}

# ------------------------------------------------------------------
# METHOD: icursor tagOrId index
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::icursor {args} {
    eval $itk_component(canvas) icursor $args
}

# ------------------------------------------------------------------
# METHOD: index tagOrId index
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::index {args} {
    return [eval $itk_component(canvas) index $args]
}

# ------------------------------------------------------------------
# METHOD: insert tagOrId beforeThis string
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::insert {args} {
    eval $itk_component(canvas) insert $args
}

# ------------------------------------------------------------------
# METHOD: itemconfigure tagOrId ?option? ?value? ?option value ...?
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::itemconfigure {args} {
    set retval [eval $itk_component(canvas) itemconfigure $args]
    
    configure -autoresize $itk_option(-autoresize)
    
    return $retval
}

# ------------------------------------------------------------------
# METHOD: itemcget tagOrId ?option? 
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::itemcget {args} {
    set retval [eval $itk_component(canvas) itemcget $args]
    
    return $retval
}

# ------------------------------------------------------------------
# METHOD: lower tagOrId ?belowThis?
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::lower {args} {
    eval $itk_component(canvas) lower $args
}

# ------------------------------------------------------------------
# METHOD: move tagOrId xAmount yAmount
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::move {args} {
    eval $itk_component(canvas) move $args
    
    configure -autoresize $itk_option(-autoresize)
}

# ------------------------------------------------------------------
# METHOD: postscript ?option value ...?
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::postscript {args} {
    #
    # Make sure the fontmap is in scope.
    #
    set fontmap ""
    regexp -- {-fontmap +([^ ]+)} $args all fontmap

    if {$fontmap != ""} {
	global $fontmap
    }

    return [eval $itk_component(canvas) postscript $args]
}

# ------------------------------------------------------------------
# METHOD: raise tagOrId ?aboveThis?
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::raise {args} {
    eval $itk_component(canvas) raise $args
}

# ------------------------------------------------------------------
# METHOD: scale tagOrId xOrigin yOrigin xScale yScale
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::scale {args} {
    eval $itk_component(canvas) scale $args
}

# ------------------------------------------------------------------
# METHOD: scan option args
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::scan {args} {
    eval $itk_component(canvas) scan $args
}

# ------------------------------------------------------------------
# METHOD: select option ?tagOrId arg?
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::select {args} {
    eval $itk_component(canvas) select $args
}

# ------------------------------------------------------------------
# METHOD: type tagOrId
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::type {args} {
    return [eval $itk_component(canvas) type $args]
}

# ------------------------------------------------------------------
# METHOD: xview index
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::xview {args} {
    eval $itk_component(canvas) xview $args
}

# ------------------------------------------------------------------
# METHOD: yview index 
# ------------------------------------------------------------------
itcl::body iwidgets::Scrolledcanvas::yview {args} {
    eval $itk_component(canvas) yview $args
}
