matt_uo_search object 
Created by Matt Balent (www.anvil-of-time.com)
2012
This control demonstrates using a single object to add functionality to
datawindow controls on windows.

matt_uo_search - main object inherited from datawindow

	Events
	Constructor --set is_post_event and is_object_name
	ue_nv_registered -- is the service implemented on the calling datawindow?
	ue_nv_getfocus - triggered by getfocus on parent datawindow sets objects idw variable

	ALL windows need an instance var defined of type matt_uo_search
	
***SEARCH FUNCTIONALITY**** (w_search_example) & PB example app (w_tv_dw_link in pbexamw3.pbl)
	Events
	clicked --what button was clicked on
	getfocus --remove 'Search' from view
	rbuttondown (along with control key) triggers closeuserobject on parent window
	ue_mousemove - allows control to be moved by mouse
	ue_obj_clicked - sets up instance vars on the search uo
	ue_search - searches datawindow controls
	ue_search_generic - traffic cop - triggers event bases on object type to be searched
	ue_search_mle - searches multi line edit controls
	ue_search_rte - searches rich text edit controls
	ue_search_tv - searches treeveiw controls
	
	PB EXAMPLES CODE USED TO DEMO SEARCHING A TREEVIEW CONTROL
	getfocus on tv control
	[code]
	// 2012 PB Conference
	// search object demo
	//
	window lw_parent
	powerobject lpo, lpo_this

	IF IsValid(iuo_dw_svc) THEN
		lpo = getparent()
		
		DO UNTIL lpo.Typeof( ) = Window!
			lpo = lpo.getparent()
		LOOP
		lw_parent = lpo
		
		lpo_this = THIS
		// sets the parent window and the datawindow the searcher will work on
		iuo_dw_svc.of_register(lpo_this, lw_parent)
	END IF
	[/code]
	rightclicked on tv control
	[code]
	// PB Conference 2012 - search uo demo
	//search
	window lw_parent
	powerobject lpo, lpo_this

	IF KeyDown(KeyControl!) THEN

			lpo = getparent()
		
			DO UNTIL lpo.Typeof( ) = Window!
				lpo = lpo.getparent()
			LOOP
			lw_parent = lpo
			// open the search object in the upper left corner of the control
			lw_parent.openuserobjectwithparm(iuo_dw_svc, THIS, This.x, This.Y)

			iuo_dw_svc.of_setsearchtype(1) // generic search
		
			// if a post event on the parent window is desired, designate it here
			// this would be an event which is posted after each search is conducted
			//luo.of_setdwevent( /*string as_dw_name*/, /*string as_dw_event */)
	 
			
	END IF
	[/code]
	
	
	
****DDDW Type Ahead FUNCTIONALITY**** (w_example)
	Events
	ue_nv_editchanged - triggered by editchanged on dw where this is implemented
	ue_nv_itemfocuschanged - triggered by itemfocuschanged on dw where this is implemented
	
	
	Open event of the parent window
	- create the uo
	- register the datawindow and the parent window
	- register each dddw column to use the functionality
	Datawindow events for type ahead functionalty
	- editchanged - each dddw triggers ue_nv_editchanged on the uo
	- getfocus - triggers ue_nv_getfocus on the uo telling it what to operate on
	- itemfocuschanged - triggers ue_nv_itemfocuschanged on the uo
	
****MOUSE ROLLOVER******  (w_mouseover)
	ue_nv_mousemove
	
	NOTE: datawindow for single column rollover effect needs a computed column for tracking purposes
	
	Open event of the parent window
	- create the uo
	- register the datawindow and the parent window
	Datawindow events for single column rollover
	- getfocus - set tracking column (may register dw if multiple dws on window are being used)
		- set which columns will display the effect
	- losefocus - clear the effect
	- mousemove - trigger the ue_nv_mousemove on the uo
	Datawindow events for row mouseover effect
	- getfocus - register the dw if multiple dws are being used, call of_set_mouseover for gradient color
	- mousemove - trigger the ue_nv_mousemove on the uo
	
****DW TOOLTIP**** (w_dwbubblehelp)
	ue_nv_mousemove
	
	
	Open event of parent window
	- create the uo
	- register the datawindow and the parent window
	- set the width of the datawindow on the uo
	Resize event of the parent window
	- set the new width of the datawindow on the uo
