indexing
	description: "Information on how to search a list view"
	legal: "See notice at end of class."
	status: "See notice at end of class."
	date: "$Date: 2006-03-22 23:29:03 -0800 (Wed, 22 Mar 2006) $"
	revision: "$Revision: 57641 $"

class interface
	WEL_LIST_VIEW_SEARCH_INFO

create 
	make
			-- Allocate item
			-- (from WEL_STRUCTURE)
		ensure -- from WEL_STRUCTURE
			not_shared: not shared

feature -- Access

	downwards: BOOLEAN
			-- Will search be downwards?

	flags: INTEGER_32
			-- Flags specifying type of search
			-- See class WEL_LVFI_CONSTANTS for possible value

	generating_type: STRING_8
			-- Name of current object's generating type
			-- (type of which it is a direct instance)
			-- (from ANY)

	generator: STRING_8
			-- Name of current object's generating class
			-- (base class of the type of which it is a direct instance)
			-- (from ANY)

	item: POINTER
			-- Generic Windows handle or structure pointer.
			-- Can be a HWND, HICON, RECT *, WNDCLASS *, etc...
			-- (from WEL_ANY)

	left: BOOLEAN
			-- Will search direction be left?

	lparam: INTEGER_32
			-- Search target
			-- Either target or lparam will be used during search according to flags.
		require
			valid_flags: flag_set (flags, lvfi_param)

	right: BOOLEAN
			-- Will search direction be right?

	starting_position: WEL_POINT
			-- Starting position of search
		require
			valid_flags: flag_set (flags, lvfi_nearestxy)

	target: STRING_32
			-- Search target
			-- Either target or lparam will be used during search according to flags.
		require
			valid_flags: flag_set (flags, lvfi_string)

	upwards: BOOLEAN
			-- Will search be upwards?
	
feature -- Comparison

	frozen deep_equal (some: ANY; other: like arg #1): BOOLEAN
			-- Are `some' and `other' either both void
			-- or attached to isomorphic object structures?
			-- (from ANY)
		ensure -- from ANY
			shallow_implies_deep: standard_equal (some, other) implies Result
			both_or_none_void: (some = Void) implies (Result = (other = Void))
			same_type: (Result and (some /= Void)) implies some.same_type (other)
			symmetric: Result implies deep_equal (other, some)

	frozen equal (some: ANY; other: like arg #1): BOOLEAN
			-- Are `some' and `other' either both void or attached
			-- to objects considered equal?
			-- (from ANY)
		ensure -- from ANY
			definition: Result = (some = Void and other = Void) or else ((some /= Void and other /= Void) and then some.is_equal (other))

	frozen standard_equal (some: ANY; other: like arg #1): BOOLEAN
			-- Are `some' and `other' either both void or attached to
			-- field-by-field identical objects of the same type?
			-- Always uses default object comparison criterion.
			-- (from ANY)
		ensure -- from ANY
			definition: Result = (some = Void and other = Void) or else ((some /= Void and other /= Void) and then some.standard_is_equal (other))

	frozen standard_is_equal (other: like Current): BOOLEAN
			-- Is `other' attached to an object of the same type
			-- as current object, and field-by-field identical to it?
			-- (from ANY)
		require -- from ANY
			other_not_void: other /= Void
		ensure -- from ANY
			same_type: Result implies same_type (other)
			symmetric: Result implies other.standard_is_equal (Current)
	
feature -- Status report

	conforms_to (other: ANY): BOOLEAN
			-- Does type of current object conform to type
			-- of `other' (as per Eiffel: The Language, chapter 13)?
			-- (from ANY)
		require -- from ANY
			other_not_void: other /= Void

	exists: BOOLEAN
			-- Does the item exist?
			-- (from WEL_ANY)
		ensure -- from WEL_ANY
			Result = (item /= default_pointer)

	flag_set (flags, mask: INTEGER_32): BOOLEAN
			-- Is `mask' set in flags?
			-- (from WEL_BIT_OPERATIONS)

	same_type (other: ANY): BOOLEAN
			-- Is type of current object identical to type of `other'?
			-- (from ANY)
		require -- from ANY
			other_not_void: other /= Void
		ensure -- from ANY
			definition: Result = (conforms_to (other) and other.conforms_to (Current))

	shared: BOOLEAN
			-- Is item shared by another object?
			-- If False (by default), item will
			-- be destroyed by destroy_item.
			-- If True, item will not be destroyed.
			-- (from WEL_ANY)
	
feature -- Status setting

	set_shared
			-- Set shared to True.
			-- (from WEL_ANY)
		ensure -- from WEL_ANY
			shared: shared

	set_unshared
			-- Set shared to False.
			-- (from WEL_ANY)
		ensure -- from WEL_ANY
			unshared: not shared
	
feature -- Element change

	set_item (an_item: POINTER)
			-- Set item with `an_item'
			-- (from WEL_ANY)
		ensure -- from WEL_ANY
			item_set: item = an_item
	
feature -- Removal

	dispose
			-- Destroy the inner structure of `Current'.
			--
			-- This function should be called by the GC when the
			-- object is collected or by the user if `Current' is
			-- no more usefull. 
			-- (from WEL_ANY)
	
feature -- Duplication

	frozen deep_copy (other: like Current)
			-- Effect equivalent to that of:
			--		copy (`other' . deep_twin)
			-- (from ANY)
		require -- from ANY
			other_not_void: other /= Void
		ensure -- from ANY
			deep_equal: deep_equal (Current, other)

	frozen deep_twin: like Current
			-- New object structure recursively duplicated from Current.
			-- (from ANY)
		ensure -- from ANY
			deep_equal: deep_equal (Current, Result)

	frozen standard_copy (other: like Current)
			-- Copy every field of `other' onto corresponding field
			-- of current object.
			-- (from ANY)
		require -- from ANY
			other_not_void: other /= Void
			type_identity: same_type (other)
		ensure -- from ANY
			is_standard_equal: standard_is_equal (other)

	frozen standard_twin: like Current
			-- New object field-by-field identical to `other'.
			-- Always uses default copying semantics.
			-- (from ANY)
		ensure -- from ANY
			standard_twin_not_void: Result /= Void
			equal: standard_equal (Result, Current)

	frozen twin: like Current
			-- New object equal to `Current'
			-- twin calls copy; to change copying/twining semantics, redefine copy.
			-- (from ANY)
		ensure -- from ANY
			twin_not_void: Result /= Void
			is_equal: Result.is_equal (Current)
	
feature -- Basic operations

	clear_flag (flags, mask: INTEGER_32): INTEGER_32
			-- Clear the `mask' in flags
			-- (from WEL_BIT_OPERATIONS)
		ensure -- from WEL_BIT_OPERATIONS
			flag_unset: not flag_set (Result, mask)

	copy (other: like Current)
			-- Update current object using fields of object attached
			-- to `other', so as to yield equal objects.
			-- (from WEL_STRUCTURE)
		require -- from ANY
			other_not_void: other /= Void
			type_identity: same_type (other)
		ensure -- from ANY
			is_equal: is_equal (other)

	frozen default: like Current
			-- Default value of object's type
			-- (from ANY)

	frozen default_pointer: POINTER
			-- Default value of type `POINTER'
			-- (Avoid the need to write `p'.default for
			-- some `p' of type `POINTER'.)
			-- (from ANY)

	default_rescue
			-- Process exception for routines with no Rescue clause.
			-- (Default: do nothing.)
			-- (from ANY)

	frozen do_nothing
			-- Execute a null action.
			-- (from ANY)

	initialize
			-- Fill Current with zeros.
			-- (from WEL_STRUCTURE)
		require -- from WEL_STRUCTURE
			exists: exists

	initialize_with_character (a_character: CHARACTER_8)
			-- Fill current with `a_character'.
			-- (from WEL_STRUCTURE)
		require -- from WEL_STRUCTURE
			exists: exists

	is_equal (other: like Current): BOOLEAN
			-- Is `other' attached to an object considered
			-- equal to current object?
			-- (from WEL_STRUCTURE)
		require -- from ANY
			other_not_void: other /= Void
		ensure -- from ANY
			symmetric: Result implies other.is_equal (Current)
			consistent: standard_is_equal (other) implies Result

	memory_copy (source_pointer: POINTER; length: INTEGER_32)
			-- Copy `length' bytes from `source_pointer' to item.
			-- (from WEL_STRUCTURE)
		require -- from WEL_STRUCTURE
			length_small_enough: length <= structure_size
			length_large_enough: length > 0
			exists: exists

	set_flag (flags, mask: INTEGER_32): INTEGER_32
			-- Set the `mask' in flags
			-- (from WEL_BIT_OPERATIONS)
		ensure -- from WEL_BIT_OPERATIONS
			flag_set: flag_set (Result, mask)
	
feature -- Acess

	lvfi_nearestxy: INTEGER_32 is 64
			-- Search item nearest specified position in specified direction
			--
			-- Declared in Windows as LVFI_NEARESTXY
			-- (from WEL_LVFI_CONSTANTS)

	lvfi_param: INTEGER_32 is 1
			-- Search item with corresponding lparam attribute
			--
			-- Declared in Windows as LVFI_PARAM
			-- (from WEL_LVFI_CONSTANTS)

	lvfi_partial: INTEGER_32 is 8
			-- Search item including given string
			--
			-- Declared in Windows as LVFI_PARTIAL
			-- (from WEL_LVFI_CONSTANTS)

	lvfi_string: INTEGER_32 is 2
			-- Search item with exact corresponding string
			--
			-- Declared in Windows as LVFI_STRING
			-- (from WEL_LVFI_CONSTANTS)

	lvfi_wrap: INTEGER_32 is 32
			-- Start search from start when end of list view is reached
			--
			-- Declared in Windows as LVFI_WRAP
			-- (from WEL_LVFI_CONSTANTS)
	
feature -- Element Change

	add_flag (a_flag: like flags)
			-- Add `a_flag' to flags.
		require
			valid_flags: is_valid_list_view_flag (a_flag)
		ensure
			added: flag_set (flags, a_flag)

	set_downwards
			-- Set search direction downwards

	set_flags (a_flags: like flags)
			-- Set flags with `a_flags'.
		require
			valid_flags: is_valid_list_view_flag (a_flags)
		ensure
			flags_set: flags = a_flags

	set_left
			-- Set search direction left

	set_lparam (a_lparam: like lparam)
			-- Set lparam with `a_lparam'.
		ensure
			lparam_set: lparam = a_lparam

	set_right
			-- Set search direction right

	set_starting_position (a_starting_position: like starting_position)
			-- Set starting_position with `a_starting_position'.
		require
			non_void_starting_position: a_starting_position /= Void
			valid_starting_position: a_starting_position.exists

	set_target (a_target: STRING_GENERAL)
			-- Set target with `a_target'.
		require
			non_void_target: a_target /= Void
			valid_target: not a_target.is_empty
		ensure
			target_set: target.is_equal (a_target)

	set_upwards
			-- Set search direction upwards
	
feature -- Measurment

	structure_size: INTEGER_32
			-- Structure size
		ensure -- from WEL_STRUCTURE
			positive_result: Result > 0
	
feature -- Output

	io: STD_FILES
			-- Handle to standard file setup
			-- (from ANY)

	out: STRING_8
			-- New string containing terse printable representation
			-- of current object
			-- Was declared in ANY as synonym of tagged_out.
			-- (from ANY)

	print (some: ANY)
			-- Write terse external representation of `some'
			-- on standard output.
			-- (from ANY)

	frozen tagged_out: STRING_8
			-- New string containing terse printable representation
			-- of current object
			-- Was declared in ANY as synonym of out.
			-- (from ANY)
	
feature -- Platform

	operating_environment: OPERATING_ENVIRONMENT
			-- Objects available from the operating system
			-- (from ANY)
	
feature -- Validation

	is_valid_list_view_flag (a_flag: INTEGER_32): BOOLEAN
			-- Is `a_flag' a valid list view search flag?
			-- (from WEL_LVFI_CONSTANTS)
	
invariant
	valid_direction: (upwards implies (not downwards and not right and not left)) and (downwards implies (not upwards and not right and not left)) and (right implies (not upwards and not downwards and not left)) and (left implies (not upwards and not downwards and not right))

		-- from ANY
	reflexive_equality: standard_is_equal (Current)
	reflexive_conformance: conforms_to (Current)

indexing
	copyright: "Copyright (c) 1984-2006, Eiffel Software and others"
	license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
	source: "[
		Eiffel Software
		356 Storke Road, Goleta, CA 93117 USA
		Telephone 805-685-1006, Fax 805-685-6869
		Website http://www.eiffel.com
		Customer support http://support.eiffel.com
	]"

end -- class WEL_LIST_VIEW_SEARCH_INFO