function wmkkey, parent
;
;+ 
;   Name: wmkkey
;
;   Purpose: make widget for key search input
;
;-
; define the instance widget 
;
keys=['opt','Xray','ExpMode','Res','Comp', 'Shape_Cmd','FOV_Center', $
		'PercentD','IMG_MAX','MBE','DPE']
types=[1,1,1,1,1,2,3, 1,1,1,1]
onekey=make_str("{dummy,"	+ $
		"nkeys:0,"	+ $
		"keyno:0,"	+ $
		"key:'',"	+ $
		"type:0,"	+ $
		"output:'',"	+ $
		"mkptr: 0L," + $
		"mtptr:0L}")
allkeys=replicate(onekey,n_elements(keys))
allkeys.nkeys = FIX(n_elements(keys))
allkeys.keyno = indgen(n_elements(keys))
allkeys.key=keys
allkeys.type=types
;
xpd1=[	'"Quit"		DONE'			,	$
	'"IDL"		STOP'			,	$
	'"Modify Keys" 	MODKEY'			,	$
	'"Logic" {'				,	$
	'"AND"		LAND'			,	$
	'"OR"		LOR'			,	$
	'"XOR"		LXOR'			,	$
		 '}'				,	$
	'"Save Current Key"	SAVKEY'			,	$		
	'"Clear Key"	CLRKEY'			,	$		
     	'}'] 

; set up main base
b1=widget_base(/column)
xpdmenu, xpd1, b1, /frame
;
; set up dialog boxs 1 and 2:
b1aa=widget_base(b1,/frame,/column)
l1aa=widget_label(b1aa,/frame,value='Current Key')
t1aa=widget_text(b1aa,/SCROLL,/frame)

b2aa=widget_base(b1,/frame,/column)
l2aa=widget_label(b2aa,/frame,value='Saved Key List')
initstr = string(replicate(32b,60))
initstr = replicate(initstr,4)
t2aa=widget_list(b2aa,/frame,value=initstr,ysize=5)
;
b1a=widget_base(b1,/row)
b1b=widget_base(b1a, /column)
;
; set up keys (1pdm / status box per key)
; menu definitions (string arrays, 1 per menu)

	mInfo = GetMenu(/sxt)			;get sxt search menu
;	filta=gt_filta(indgen(6)+1,/string)
;	filtb=gt_filtb(indgen(6)+1,/string)
;	exptype=['Normal','Dark Frame','Calibration']
;
;	stop, 'before loop to create menu items: ck mInfo'
	initval = string(replicate(32b,strlen(mInfo(0).labels(0)) ))
	FOR i= 0, N_ELEMENTS(minfo)-1 DO BEGIN	;do for all Menu items
	  b2=widget_base(b1b,/row, /frame)
;	stop, 'stop before add_key: '
	  mkptr = add_key(b2, mInfo(i).item, mInfo(i).vals, mInfo(i).labels, $
			mInfo(i).type, /frame)
	  mtptr = widget_text(b2, value= initval) 	;init val display
	  allkeys(i).mkptr = mkptr		;save ptrs
	  allkeys(i).mtptr = mtptr
	  widget_control, set_uvalue=allkeys(i), mkptr
	ENDFOR
;
;b3=widget_base(b1b,/row, /frame)
;m3=add_key(b3,'Filter B',filtb,/frame)
;d3=widget_text(b3, value=filtb(0)) 
;widget_control, set_uvalue=allkeys(1), m3  
;
;b4=widget_base(b1b,/row, /frame)
;m4=add_key(b4,'Exposure Type', exptype, /frame)
;d4=widget_text(b4, value= exptype(0))
;widget_control, set_uvalue=allkeys(2), m4
;

b5=widget_base(b1a, /column, /frame)
l0=widget_label(b5,value='Future Use',/frame)
l1=widget_list(b5,/frame,value=strtrim(sindgen(10),2), ysize=10)
widget_control, b1, /realize

;	Create Uvalue structure for event.top:
	nitems = N_ELEMENTS(minfo)	;number of requested menu keys
	etop = MAKE_STR("{dummy," 	+ $
	      		"curKeyb:0L," 	+ $
	      		"curKeyt:0L," 	+ $
			"keylstb:0L,"	+ $
			"keylstt:0L,"	+ $
			"curStr:'',"	+ $
			"lstStr:'',"	+ $
			"keyptrs:LONARR("+STRING(nitems)+") }")
	etop.curkeyb = b1aa		;pointer to current key base
	etop.curkeyt = t1aa		;ptr to current key text
	etop.keylstb = b2aa		;pointer to sea key list
	etop.keylstt = t2aa		;ptr to list text
	etop.keyptrs = allkeys.mkptr	;ptrs to menu keys
;	print,'	widget_control, set_uvalue=etop, event.top OR SOMETHING'
;	stop, 'save etop some how...'
	widget_control, set_uvalue=etop, b1	;load info to base widget

if n_elements(parent) eq 0 then $	; start event loop if top level
   xmanager,'wmkkey', b1
;
return, b1
end

