#
# itk::Archetype
# ----------------------------------------------------------------------
# Base class for all widgets in the [incr Tk] Toolkit.  Provides
# facilities to merge widget options into a composite list of options
# for the overall widget.  Derived classes add widgets and methods to
# specialize behavior.
#
#   METHODS:
#     configure
#     configure -option
#     configure -option value ?-option value?...
#        Used to set/query configuration options
#
#     component
#     component <name> <command> ?<arg> <arg>...?
#        Invokes the given <command> as a method on the component
#        called <name>.
#
#     itk_component add <name> <create-cmd> <option-cmds>
#        Creates a component widget and merges its options into
#        the composite option list for the overall widget
#
#     itk_component delete <name> ?<name>...?
#        Destroys a component widget and removes its options from
#        the composite option list
#
#     itk_option add <name> ?<name>...?
#        Adds the option <name> belonging to a class or component
#        widget into the option list.  Options can be added even
#        if they were not originally kept when the component was
#        created.
#
#     itk_option remove <name> ?<name>...?
#        Removes the option <name> belonging to a class or component
#        widget from the option list.  This allows a derived class
#        to turn off or redefine undesirable options inherited from
#        a base class.
#
#   WIDGET ATTRIBUTES:
#     none
#
# ----------------------------------------------------------------------
#   AUTHOR:  Michael J. McLennan
#            Bell Labs Innovations for Lucent Technologies
#            mmclennan@lucent.com
#            http://www.tcltk.com/itcl
#
#      RCS:  $Id: Archetype.itk,v 1.1 1998/07/27 18:45:26 stanton Exp $
# ----------------------------------------------------------------------
#            Copyright (c) 1993-1998  Lucent Technologies, Inc.
# ======================================================================
# See the file "license.terms" for information on usage and
# redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.

itcl::class itk::Archetype {

    constructor {args} {
        _initOptionInfo
        eval itk_initialize $args
    }

    destructor {
        _deleteOptionInfo
    }

    method cget {option} @Archetype-cget
    method configure {{option ""} args} \
        @Archetype-configure
    method config {{option ""} args} {
        eval configure $option $args
    }

    method component {{name ""} args} \
        @Archetype-component

    protected method itk_component {option args} \
        @Archetype-itk_component

    protected method itk_option {option args} \
        @Archetype-itk_option

    protected method itk_initialize {args} \
        @Archetype-itk_initialize

    protected variable itk_option
    protected variable itk_component
    protected variable itk_interior ""

    # ------------------------------------------------------------------
    #  Options common to all widgets
    # ------------------------------------------------------------------
    itk_option define -clientdata clientData ClientData ""

    # ------------------------------------------------------------------
    #  Private methods needed for option management
    # ------------------------------------------------------------------
    private method _initOptionInfo {} @Archetype-init
    private method _deleteOptionInfo {} @Archetype-delete
}
