    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