	function add_key, parent, label, values, labels, types, $
		frame=frame
;	----------------------------------------------------------
;+							10-Jan-92
;   Name: add_key
;
;   Purpose: add a new key button to a search widget
;
;   Input Parameters:
;      parent - widget id of parent
;      label  - label of top level button
;      values - values of low level buttons
;      labels - labels of low level buttons (if diff from values)
;      types  - type of action to take for each low level button
;
;   History - slf, 1/2/91 for wmkkey
;		modified 10-Jan-92, GAL
;	---------------------------------------------------------
;
; set up defaults
if n_elements(label)  eq 0 then label='Button'
if n_elements(values) eq 0 then values=label
if n_elements(labels) eq 0 then labels=values
if n_elements(types)  eq 0 then types =replicate(0L, n_elements(labels))
;
but_instance=make_str("{xx,butpar:0L,"		+ $	; id of parent
				"uvalue:''," 	+ $	; string value
				"value:'',"	+ $	; string value
				"type:0L,"	+ $	; integer value
			   	"rangex:[0l,0l]," + $   ; 
				"rangey:[0l,0l]}")

frame=keyword_set(frame)
top=widget_button(parent, value=label, menu=2, frame=frame)
but_instance.butpar=top
;	Skip null elements of the labels:
lab = labels(where(labels ne string(replicate(32b, STRLEN(labels(0)) )) ))
for i=0,n_elements(lab)-1 do begin 
   low=widget_button(top, value=lab(i))		;GAL-changed to labels
   but_instance.uvalue=labels(i)
   but_instance.value =values(i)
   but_instance.type  =types(i)
   widget_control, set_uvalue=but_instance, low
endfor
;
return,top
end
