    indexing
    	description: "Objects that represents a database table rowset and its graphical display."
    	legal: "See notice at end of class."
    	status: "See notice at end of class."
    	date: "$Date: 2006-01-22 18:25:44 -0800 (Sun, 22 Jan 2006) $"
    	revision: "$Revision: 56675 $"

    class interface
    	DV_TABLE_COMPONENT

    create
    	make
    			-- Initialize.

    feature -- Initialization

    	make
    			-- Initialize.

    	make_for_settings
    			-- Give access.
    			-- (from DV_DATABASE_HANDLE)

    feature -- Access

    	basic_confirmation_handler (message: STRING_8; action_to_confirm: PROCEDURE [ANY, TUPLE])
    			-- Execute `action_to_confirm' without confirmation.
    			-- (from DV_DATABASE_HANDLE)

    	basic_message_handler (message: STRING_8)
    			-- Display `message' on standard output.
    			-- (from DV_DATABASE_HANDLE)

    	database_handler: ABSTRACT_DB_TABLE_MANAGER
    			-- Interface with the database.
    			-- (from DV_DATABASE_HANDLE)

    	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)

    	selected_tablerow: DB_TABLE
    			-- Currently selected table row.

    	selected_tablerows: ARRAYED_LIST [DB_TABLE]
    			-- Last selected table row set.
    		require -- from DV_TABLEROWS_COMPONENT
    			is_activated: is_activated
    		ensure -- from DV_TABLEROWS_COMPONENT
    			result_not_void: Result /= Void

    	table_description: DB_TABLE_DESCRIPTION
    			-- Description of table represented by component.

    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))

    	is_equal (other: like Current): BOOLEAN
    			-- Is `other' attached to an object considered
    			-- equal to current object?
    			-- (from ANY)
    		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

    	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

    	can_be_activated: BOOLEAN
    			-- Can component be activated?

    	confirmation_handler_set: BOOLEAN
    			-- Is a confirmation handler set?

    	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

    	database_handler_set: BOOLEAN
    			-- Is a database handler set?
    			-- (from DV_DATABASE_HANDLE)

    	db_searcher_set: BOOLEAN
    			-- Is a component to search table rows set?

    	is_activated: BOOLEAN
    			-- Is component activated?

    	is_creating: BOOLEAN
    			-- Can the component create elements
    			-- in the database?

    	is_deleting: BOOLEAN
    			-- Can the component delete elements
    			-- in the database?

    	is_dependent: BOOLEAN
    			-- Is this subcomponent table dependent on
    			-- calling component table?

    	is_dependent_tablecode (code: INTEGER_32): BOOLEAN
    			-- Does `code' correspond to a dependent
    			-- table on represented table?

    	is_necessary: BOOLEAN
    			-- Is this subcomponent table necessary for
    			-- calling component table?

    	is_necessary_tablecode (code: INTEGER_32): BOOLEAN
    			-- Does `code' correspond to a necessary
    			-- table for represented table?

    	is_refreshing: BOOLEAN
    			-- Can the component refresh display from the database?

    	is_subcomponent: BOOLEAN
    			-- Is this component determined by a calling
    			-- component?

    	is_topcomponent: BOOLEAN
    			-- Is this component not determined by any calling
    			-- component?

    	is_valid_code (code: INTEGER_32): BOOLEAN
    			-- Does `code' represents a database table?
    			-- (from DB_TABLES_ACCESS_USE)

    	is_writing: BOOLEAN
    			-- Can the component write the database?

    	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))

    	status_handler_set: BOOLEAN
    			-- Is a status information handler set?

    	table_corresponds (tr_list: ARRAYED_LIST [DB_TABLE]): BOOLEAN
    			-- Does type of `tr_list' elements corresponds to represented
    			-- table?
    		require
    			not_void: tr_list /= Void

    	tables_set: BOOLEAN
    			-- Is abstract description of database tables
    			-- set?
    			-- (from DB_TABLES_ACCESS_USE)

    	warning_handler_set: BOOLEAN
    			-- Is a warning handler set?

    feature -- Status setting

    	set_db_creator (creator: DV_CREATOR)
    			-- Enable that component can create
    			-- elements in the database.
    		require
    			not_void: creator /= Void
    			not_activated: not is_activated
    		ensure
    			is_creating: is_creating

    	set_deleting_control (deleting_ctrl: DV_SENSITIVE_CONTROL)
    			-- Enable that component can
    			-- write the database.
    		require
    			not_void: deleting_ctrl /= Void
    			not_activated: not is_activated
    		ensure
    			is_deleting: is_deleting

    	set_refreshing_control (refreshing_ctrl: DV_SENSITIVE_CONTROL)
    			-- Enable that component can
    			-- write the database.
    		require
    			not_void: refreshing_ctrl /= Void
    			not_activated: not is_activated
    		ensure
    			is_refreshing: is_refreshing

    	set_writing_control (writing_ctrl: DV_SENSITIVE_CONTROL)
    			-- Enable that component can
    			-- write the database.
    		require
    			not_void: writing_ctrl /= Void
    			not_activated: not is_activated
    		ensure
    			is_writing: is_writing

    feature -- Duplication

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

    	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

    	activate
    			-- Activate component.
    		require -- from DV_COMPONENT
    			can_be_activated: can_be_activated
    		ensure -- from DV_COMPONENT
    			is_activated: is_activated

    	add_dependent_table (comp: DV_TABLE_COMPONENT)
    			-- Add a subcomponent representing a dependent
    			-- table on represented table.
    		require
    			is_dependent_table: is_dependent_tablecode (comp.table_description.table_code)
    			no_db_searcher_set: not comp.db_searcher_set
    			not_activated: not is_activated

    	add_necessary_table (comp: DV_TABLE_COMPONENT)
    			-- Add a subcomponent representing a necessary
    			-- table for represented table.
    		require
    			is_necessary_table: is_necessary_tablecode (comp.table_description.table_code)
    			no_db_searcher_set: not comp.db_searcher_set
    			not_activated: not is_activated

    	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)

    	desactivate
    			-- Desactivate component to add subcomponents.
    		ensure
    			not_activated: not is_activated

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

    	replace_selected_tablerows (tr_set: ARRAYED_LIST [DB_TABLE])
    			-- Replace current table row set with `tr_set'. Use this capability
    			-- when component is activated to switch between different
    			-- results. Database searcher set may have to afford to
    			-- refresh different searches.
    		require
    			is_activated: is_activated
    			not_void: tr_set /= Void
    			table_corresponds: table_corresponds (tr_set)

    	set_confirmation_handler (c_handler: PROCEDURE [ANY, TUPLE [STRING_8, PROCEDURE [ANY, TUPLE]]])
    			-- Set `c_handler' to confirmation_handler
    		require
    			not_activated: not is_activated
    			not_void: c_handler /= Void

    	set_database_handler (db_handler: ABSTRACT_DB_TABLE_MANAGER)
    			-- Set `db_handler' to
    			-- database_handler.
    			-- (from DV_DATABASE_HANDLE)

    	set_db_fields_component (db_fields_comp: DV_TABLEROW_FIELDS)
    			-- Set `db_fields_comp' to component displaying selected table row
    			-- content.
    		require
    			not_void: db_fields_comp /= Void
    			not_activated: not is_activated

    	set_db_searcher (db_srcher: DV_SEARCHER)
    			-- Set component enabling to load table rows, eventually from
    			-- database, to `db_srcher'.
    		require
    			not_void: db_srcher /= Void
    			not_activated: not is_activated
    		ensure
    			db_searcher_set: db_searcher_set

    	set_db_tablerow_navigator (db_tr_navigator: DV_TABLEROWS_NAVIGATOR)
    			-- Set `db_tr_navigator' to component enabling to navigate among
    			-- retrieved database table rows.
    			-- (from DV_TABLEROWS_COMPONENT)
    		require -- from DV_TABLEROWS_COMPONENT
    			not_void: db_tr_navigator /= Void
    			not_activated: not is_activated

    	set_status_handler (s_handler: PROCEDURE [ANY, TUPLE [STRING_8]])
    			-- Set `s_handler' to status_handler
    		require
    			not_activated: not is_activated
    			not_void: s_handler /= Void

    	set_tablecode (tablecode: INTEGER_32)
    			-- Initialize with `fields_set_comp' to display
    			-- current selection.
    		require
    			not_activated: not is_activated

    	set_warning_handler (w_handler: PROCEDURE [ANY, TUPLE [STRING_8]])
    			-- Set `w_handler' to warning_handler
    		require
    			not_activated: not is_activated
    			not_void: w_handler /= Void

    feature --

    	enter_field_value (type, name: STRING_8): STRING_8
    			-- Value of field with `name' and `type' not valid message.
    			-- (from DV_MESSAGES)

    	retrieve_field_value (type, name: STRING_8): STRING_8
    			-- Value of field with `name' and `type' retrieval failure message.
    			-- (from DV_MESSAGES)

    	type_not_recognized (name: STRING_8): STRING_8
    			-- Type of field with `name' not recognized message.
    			-- (from DV_MESSAGES)

    	wrong_date_format (name: STRING_8): STRING_8
    			-- Wrong date type format for field with `name' message.
    			-- (from DV_MESSAGES)

    	wrong_datetime_format (name: STRING_8): STRING_8
    			-- Wrong date & time type format for field with `name' message.
    			-- (from DV_MESSAGES)

    feature -- Combo box

    	empty_combo_item_label: STRING_8
    			-- Label for an empty combo item value.
    			-- (from DV_MESSAGES)

    feature -- Creation

    	creation_confirmation (table_name: STRING_8): STRING_8
    			-- Table row creation on `table_name' confirmation message.
    			-- (from DV_MESSAGES)

    	creation_done (table_name: STRING_8): STRING_8
    			-- Table row creation on `table_name' successful message.
    			-- (from DV_MESSAGES)

    feature -- Deletion

    	deletion_confirmation (table_name: STRING_8): STRING_8
    			-- Table row deletion on `table_name' confirmation message.
    			-- (from DV_MESSAGES)

    	deletion_done (table_name: STRING_8): STRING_8
    			-- Table row deletion on `table_name' successful message.
    			-- (from DV_MESSAGES)

    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 -- Selection

    	tablerows_selected (count: INTEGER_32): STRING_8
    			-- Database selection carried out message. `count' table rows
    			-- have been selected.
    			-- (from DV_MESSAGES)

    feature -- Update

    	update_done (table_name: STRING_8): STRING_8
    			-- Table row update on `table_name' successful message.
    			-- (from DV_MESSAGES)

    feature -- Window to select foreign key values for creation

    	selection_window_title (table_name: STRING_8): STRING_8
    			-- Selection window title.
    			-- (from DV_MESSAGES)

    	undetermined_table_name: STRING_8
    			-- Undetermined table name (use for selection_window_title).
    			-- (from DV_MESSAGES)

    invariant
    	top_is_not_cleared: is_topcomponent implies not is_cleared

    		-- 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 DV_TABLE_COMPONENT