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.

There are some hard coded paths to icons and such within the code.  These should be changed to reflect the 
folder structure the code is run from.

matt_uo_search - main object inherited from datawindow

	Usage notes:  To use the search on a grid datawindow you first bring up the search control via 
		Ctl - Rt Click, then you click on a column you wish to search on (a column with data), 
		then enter a search string in the search control and click on the magnifying glass icon.

	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
