###########################################################################
# The Gk Class Builder
#
# PURPOSE
# The intention of the gkClassBuilder is to make building combination
# widgets easier.  
#
# USAGE
# This Version of the gkClassBuilder requires TCL version 7.4 and
# Tk version 4.0.
#
# The actual class builder resides in the file gkClassBuilder.tcl
# In order to use any of the gkClassBuilder files you will need to do
# the following command:
#	lappend auto_path gkClassBuilderDirectory
#
#
# For examples on how to use the class builder see the files:
# 	Label.tcl
#       FancyLabel.tcl
#	FrameLabel.tcl
#
# NOTE: wherever "classname" appears this is the name of the new
#       class that is being created.
#
# The main things to note about using the gkClassBuilder are the following:
# 	1. inheritance - A new class can inherit all of the commands and 
#		options of already known classes of widgets, including the 
#		standard tcl widgets.  What is inherited is based on the 
#		order the classes appear in the list; the first one is
#		highest priority.  However, how these commands and
#		options effect the new class are left up to the designer
#		of the new class.  To inherit values from other classes
#		just define classname(inherit).
#
#	    eg. set myClass(inherit) {frame button}
#               This will result in myClass having all of the options
#               and commands of both button and frame.  The actual value
#               of the options will first be determined by the values of
#		the frame options then the button options.  ie. if the
#		background color of the frame was blue and the background
#		color of the button was grey then the new class would have
#		a background color of blue.
#
#	2. root window specification
#	   	The default root window is a frame widget with the
#	       	appropriate class setting.  However, the root window
#		maybe any standard Tk widget or any widget constructed
#		with this class builder.  The only problem with this is
#		the class of the widget may not be set properly.  The
#		root window is specified as follows:
#			set classname(rootWindow) rootWindowName
#
#       3. new commands/options - Additional options and commands can
#	   	also be given to the class.  All of the new options
#		are expected to be in "classname(options)" and the 
#		commands in "classname(methods)".  The actual value
#		of the new options are given by variables of the
#		form "classname(option)" where option is the new
#		option.
#	    
#	    eg. To define new options
#		set myClass(options) {-newopt1 -newopt2} 
#               set myClass(-newopt1) {-newopt1 newOpt1 NewOpt1 value1}
#               set myClass(-newopt1) {-newopt1 newOpt1 NewOpt1 value1}
#		
#		To define new methods	        
#		set myClass(methods) {method1}
#		proc myClass_method1 {args}  { body }
#
#	4. option values - Default values can be specified for the
#		various options of the class.
#
#           eg. This defines the default values for the background color
#               and relief.
#	        upvar #0 $widget data
#	        data(-background) red
#		data(-relief)  	  sunken
#
#	5. main procedure - The main procedures used to construct
#		a new class are as follows:
#
#		classname - This is the procedure that gets called when
#			a widget of the class "classname" is created.
#			Typically it just calls "gkInt_CreateWidget"
#		classname_Config - Overrides the configuration routine
#			which is automatically created.  It will be
#			called whenever the config command is invoked.
#			This routine will only ever get one option and
#			its new value passed to it.
#		classname_ConstructWidget - This procedure constructs
#			a widget for the class.
#		classname_CreateClassRec - This procedure defines all
#			of the class options, commands, and inheritance.
#		classname_DestroyWidget - Defines what is to be done
#			when a widget is destroyed.
#		classname_InitWidgetRec - Defines the default values for
#			options.
#		classname_Method - Here Method is any one of the methods/
#			commands used by the class.  This procedure defines
#			what action to take when the command is invoked.
#		classname_SetWidgetBindings - Defines the bindings for
#			the class.
#
# NOTE:  It is not necessary to define all of these procedures.  The only
#	 one needed is classname.
#
# AUTHORS
#
# Much of this code was borrowed from Tix 3.6; Author Ioi Kim Lam.
# Specifically the file Intrinsc.tcl was used.
#
# The modifications and extensions were done by Shannon Jaeger at the
# University of Calgary. 
#
# The work is part of the GroupLab project, whose goal is to build
# groupware applications and toolkits.
# For further information, contact Saul Greenberg at
# Dr Saul Greenberg       (saul@cpsc.ucalgary.ca)
# Department of Computer Science, University of Calgary 
# Calgary, Alberta CANADA T2N 1N4
# Phone: (403) 220-6087   Fax: (403) 284-4707
#
###########################################################################