#
# Selectiondialog
# ----------------------------------------------------------------------
# Implements a selection box similar to the OSF/Motif standard selection
# dialog composite widget.  The Selectiondialog is derived from the 
# Dialog class and is composed of a SelectionBox with attributes to
# manipulate the dialog buttons.
# 
# ----------------------------------------------------------------------
#  AUTHOR: Mark L. Ulferts              EMAIL: mulferts@austin.dsccc.com
#
#  @(#) $Id: selectiondialog.itk,v 1.2 2001/08/07 19:56:48 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 Selectiondialog {
    keep -activebackground -activerelief -background -borderwidth -cursor \
	 -elementborderwidth -foreground -highlightcolor -highlightthickness \
	 -insertbackground -insertborderwidth -insertofftime -insertontime \
	 -insertwidth -jump -labelfont -modality -selectbackground \
	 -selectborderwidth -selectforeground -textbackground -textfont \
	 -troughcolor
}

# ------------------------------------------------------------------
#                           SELECTIONDIALOG
# ------------------------------------------------------------------
itcl::class iwidgets::Selectiondialog {
    inherit iwidgets::Dialog

    constructor {args} {}

    public method childsite {}
    public method get {}
    public method curselection {}
    public method clear {component}
    public method insert {component index args}
    public method delete {first {last {}}}
    public method size {}
    public method scan {option args}
    public method nearest {y}
    public method index {index}
    public method selection {option args}
    public method selectitem {}
}
    
#
# Provide a lowercased access method for the Selectiondialog class.
# 
proc ::iwidgets::selectiondialog {pathName args} {
    uplevel ::iwidgets::Selectiondialog $pathName $args
}

#
# Use option database to override default resources of base classes.
#
option add *Selectiondialog.title "Selection Dialog" widgetDefault
option add *Selectiondialog.master "." widgetDefault

# ------------------------------------------------------------------
#                        CONSTRUCTOR
# ------------------------------------------------------------------
itcl::body iwidgets::Selectiondialog::constructor {args} {
    #
    # Set the borderwidth to zero.
    #
    component hull configure -borderwidth 0
    
    # 
    # Instantiate a selection box widget.
    #
    itk_component add selectionbox {
	iwidgets::Selectionbox $itk_interior.selectionbox \
		-dblclickcommand [itcl::code $this invoke]
    } {
	usual

	keep -childsitepos -exportselection -itemscommand -itemslabel \
	    -itemson -selectionlabel -selectionon -selectioncommand
    }
    configure -itemscommand [itcl::code $this selectitem]
    
    pack $itk_component(selectionbox) -fill both -expand yes
    set itk_interior [$itk_component(selectionbox) childsite]
    
    hide Help

    eval itk_initialize $args
}   

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

# ------------------------------------------------------------------
# METHOD: childsite
#
# Thinwrapped method of selection box class.
# ------------------------------------------------------------------
itcl::body iwidgets::Selectiondialog::childsite {} {
    return [$itk_component(selectionbox) childsite]
}

# ------------------------------------------------------------------
# METHOD: get
#
# Thinwrapped method of selection box class.
# ------------------------------------------------------------------
itcl::body iwidgets::Selectiondialog::get {} {
    return [$itk_component(selectionbox) get]
}

# ------------------------------------------------------------------
# METHOD: curselection
#
# Thinwrapped method of selection box class.
# ------------------------------------------------------------------
itcl::body iwidgets::Selectiondialog::curselection {} {
    return [$itk_component(selectionbox) curselection]
}

# ------------------------------------------------------------------
# METHOD: clear component
#
# Thinwrapped method of selection box class.
# ------------------------------------------------------------------
itcl::body iwidgets::Selectiondialog::clear {component} {
    $itk_component(selectionbox) clear $component

    return
}

# ------------------------------------------------------------------
# METHOD: insert component index args
#
# Thinwrapped method of selection box class.
# ------------------------------------------------------------------
itcl::body iwidgets::Selectiondialog::insert {component index args} {
    eval $itk_component(selectionbox) insert $component $index $args

    return
}

# ------------------------------------------------------------------
# METHOD: delete first ?last?
#
# Thinwrapped method of selection box class.
# ------------------------------------------------------------------
itcl::body iwidgets::Selectiondialog::delete {first {last {}}} {
    $itk_component(selectionbox) delete $first $last

    return
}

# ------------------------------------------------------------------
# METHOD: size
#
# Thinwrapped method of selection box class.
# ------------------------------------------------------------------
itcl::body iwidgets::Selectiondialog::size {} {
    return [$itk_component(selectionbox) size]
}

# ------------------------------------------------------------------
# METHOD: scan option args
#
# Thinwrapped method of selection box class.
# ------------------------------------------------------------------
itcl::body iwidgets::Selectiondialog::scan {option args} {
    return [eval $itk_component(selectionbox) scan $option $args]
}

# ------------------------------------------------------------------
# METHOD: nearest y
#
# Thinwrapped method of selection box class.
# ------------------------------------------------------------------
itcl::body iwidgets::Selectiondialog::nearest {y} {
    return [$itk_component(selectionbox) nearest $y]
}

# ------------------------------------------------------------------
# METHOD: index index
#
# Thinwrapped method of selection box class.
# ------------------------------------------------------------------
itcl::body iwidgets::Selectiondialog::index {index} {
    return [$itk_component(selectionbox) index $index]
}

# ------------------------------------------------------------------
# METHOD: selection option args
#
# Thinwrapped method of selection box class.
# ------------------------------------------------------------------
itcl::body iwidgets::Selectiondialog::selection {option args} {
    eval $itk_component(selectionbox) selection $option $args
}

# ------------------------------------------------------------------
# METHOD: selectitem
#
# Set the default button to ok and select the item.
# ------------------------------------------------------------------
itcl::body iwidgets::Selectiondialog::selectitem {} {
    default OK
    $itk_component(selectionbox) selectitem
}

