Interface changes, delegate chaining, type in widget addition
diff --git a/Tools/pynche/PyncheWidget.py b/Tools/pynche/PyncheWidget.py
index d40a6ed..b6bd8f7 100644
--- a/Tools/pynche/PyncheWidget.py
+++ b/Tools/pynche/PyncheWidget.py
@@ -5,13 +5,16 @@
 import Pmw
 import ColorDB
 from ChipWidget import ChipWidget
+from TypeinWidget import TypeinWidget
 
 class PyncheWidget(Pmw.MegaWidget):
     def __init__(self, colordb, parent=None, **kw):
 	self.__colordb = colordb
 
-	optionsdefs = (('color', 'grey50', self.__set_color),)
-	self.defineoptions(kw, optionsdefs)
+	options = (('color', (128, 128, 128), self.__set_color),
+		   ('delegate', None, None),
+		   )
+	self.defineoptions(kw, options)
 
 	# initialize base class -- after defining options
 	Pmw.MegaWidget.__init__(self, parent)
@@ -32,20 +35,41 @@
 	self.__nearest.grid(row=0, column=1)
 
 	# create the options window
-	options = Pmw.Group(parent, tag_text='Options')
-	options.pack(expand=YES, fill=BOTH)
+	group = Pmw.Group(parent, tag_text='Options')
+	group.pack(expand=YES, fill=BOTH)
+	self.__typein = TypeinWidget(group.interior())
+	self.__typein.grid()
 
 	# Check keywords and initialize options
 	self.initialiseoptions(PyncheWidget)
 
+	self.__typein.configure(delegate=self)
+
+    #
+    # PUBLIC INTERFACE
+    #
+
+
+    def set_color(self, obj, rgbtuple):
+	print 'setting color to:', rgbtuple
+	nearest = self.__colordb.nearest(rgbtuple)
+	red, green, blue, rrggbb = self.__colordb.find_byname(nearest)
+	# for an exact match, use the color name
+	if (red, green, blue) == rgbtuple:
+	    self.__selected.configure(color=nearest)
+	# otherwise, use the #rrggbb name
+	else:
+	    rrggbb = ColorDB.triplet_to_rrggbb(rgbtuple)
+	    self.__selected.configure(color=rrggbb)
+	self.__nearest.configure(color=nearest)
+	self.__typein.configure(color=rgbtuple)
+	delegate = self['delegate']
+	if delegate:
+	    delegate.set_color(self, rgbtuple)
+
+    #
+    # PRIVATE INTERFACE
+    #
 
     def __set_color(self):
-	color = self['color']
-	try:
-	    red, green, blue, rrggbb = self.__colordb.find_byname(color)
-	except ColorDB.BadColor:
-	    red, green, blue = ColorDB.rrggbb_to_triplet(color)
-	    
-	nearest = self.__colordb.nearest(red, green, blue)
-	self.__selected.configure(color=color)
-	self.__nearest.configure(color=nearest)
+	self.set_color(self, self['color'])