#
# Dialog
# ----------------------------------------------------------------------
# Implements a standard dialog box providing standard buttons and a 
# child site for use in derived classes.  The buttons include ok, apply,
# cancel, and help.  Options exist to configure the buttons.
#    
# ----------------------------------------------------------------------
#  AUTHOR: Mark L. Ulferts              EMAIL: mulferts@austin.dsccc.com
#
#  @(#) $Id: dialog.itk,v 1.2 2001/08/07 19:56:47 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 Dialog {
    keep -background -cursor -foreground -modality 
}

# ------------------------------------------------------------------
#                            DIALOG
# ------------------------------------------------------------------
itcl::class iwidgets::Dialog {
    inherit iwidgets::Dialogshell

    constructor {args} {}
}

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

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

# ------------------------------------------------------------------
#                        CONSTRUCTOR
# ------------------------------------------------------------------
itcl::body iwidgets::Dialog::constructor {args} {
    #
    # Add the standard buttons: OK, Apply, Cancel, and Help, making
    # OK be the default button.
    #
    add OK -text OK -command [itcl::code $this deactivate 1]
    add Apply -text Apply
    add Cancel -text Cancel -command [itcl::code $this deactivate 0]
    add Help -text Help
    
    default OK
    
    #
    # Bind the window manager delete protocol to invocation of the
    # cancel button.  This can be overridden by the user via the
    # execution of a similar command outside the class.
    #
    wm protocol $itk_component(hull) WM_DELETE_WINDOW \
	[itcl::code $this invoke Cancel]
    
    #
    # Initialize the widget based on the command line options.
    #
    eval itk_initialize $args
}

