/**************************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 *************************************************************/


#ifndef __com_sun_star_sheet_AccessibleSpreadsheetDocumentView_idl__
#define __com_sun_star_sheet_AccessibleSpreadsheetDocumentView_idl__

#ifndef __com_sun_star_accessibility_XAccessibleContext_idl__
#include <com/sun/star/accessibility/XAccessibleContext.idl>
#endif

#ifndef __com_sun_star_accessibility_XAccessibleComponent_idl__
#include <com/sun/star/accessibility/XAccessibleComponent.idl>
#endif

#ifndef __com_sun_star_accessibility_XAccessibleTable_idl__
#include <com/sun/star/accessibility/XAccessibleTable.idl>
#endif

#ifndef __com_sun_star_accessibility_XAccessibleSelection_idl__
#include <com/sun/star/accessibility/XAccessibleSelection.idl>
#endif

#ifndef __com_sun_star_accessibility_XAccessibleEventBroadcaster_idl__
#include <com/sun/star/accessibility/XAccessibleEventBroadcaster.idl>
#endif


//=============================================================================

module com {  module sun {  module star {  module table {

//=============================================================================

/** The accessible view of a table in a text document or in the page preview 
  	of a spreadsheet document. See 
	<type scope="::com::sun::star::sheet">AccessibleSpreadsheet</type> for 
    tables in the edit view of a spreadsheet.
    @since OOo 1.1.2
*/
published service AccessibleTableView
{
	/** This interface gives access to any table cell that is contained in
	  	a table fragment that is at least partially visible. A table fragment
		is the part of a table that is displayed at a single page.

	<ul>
		<li>The parent returned by 
            <method scope="::com::sun::star::accessibility"
            >XAccessibleContext::getAccessibleParent</method>
			is the accessible text document view, a page of the accessible
		    text documenent page preview, or the accessible spreadsheet
			page preview.</li>
		<li>The children returned by 
            <method scope="::com::sun::star::accessibility"
            >XAccessibleContext::getAccessibleChild</method> all
			support the interface XAccessible. Calling
			<method scope="::com::sun::star::accessibility"
            >XAccessible::getAccessibleContext</method> for these children
            returns an object that supports the service.
			<type scope="::com::sun::star::table">AccessibleCellView</type>:
			A child where calling 
            <method scope="::com::sun::star::accessibility"
            >XAccessibleContext::getAccessibleChild</method>
			an object that supports this service is returned for
			every partially visible cell in this table.
		<p>The following rules apply to the children order.</p>
		<ul>
			<li>All the children are cells. The order of this cells is to
			the order on the screen. This means that the first cell is the
			cell in the left top edge of the table and the last one is the
			cell in the right bottom edge of the table. The second is the
			cell in the first row and second xolumn and so on.</li>
		</ul>
		<li>The description is ???.</li>
		<li>The name is the given table name and a number to make it non-ambiguous.</li>
		<li>The role is <const scope="::com::sun::star::accessibility"
            >AccessibleRole::TABLE</const></li>
		<li>In a spreadsheet page preview there are relations between the 
			table and the shapes with an anchor
			on this table (not with an anchor on a cell in this table).</li>
		<li>The following states are supported:
			<ul>
				<li><const scope="::com::sun::star::accessibility"
                    >AccessibleStateType::DEFUNC</const> is always false if the 
                    table is not deleted, the document is open. Also it is 
                    false if the table was showed in a page preview and the
                    page preview is allready opend, otherwise it is true.</li>
				<li><const scope="::com::sun::star::accessibility"
                    >AccessibleStateType::EDITABLE</const> is false if the 
                    table is showed in a page preview or the table is
                    protected, otherwise it is true.</li>
				<li><const scope="::com::sun::star::accessibility"
                    >AccessibleStateType::ENABLED</const> is always true.</li>
				<li><const scope="::com::sun::star::accessibility"
                    >AccessibleStateType::MULTI_SELECTABLE</const> is false
                    if the table is showed in a page preview, otherwise it is
                    true.</li>
				<li><const scope="::com::sun::star::accessibility"
                    >AccessibleStateType::OPAQUE</const> is false, if the table
                    has no background color or graphic, otherwise it is 
                    false.</li>
				<li><const scope="::com::sun::star::accessibility"
                    >AccessibleStateType::SHOWING</const>Is true if the 
                    Bounding Box lies in the Bounding Box of the parent. 
                    Otherwise it is false.</li>
				<li><const scope="::com::sun::star::accessibility"
                    >AccessibleStateType::VISIBLE</const>Is always true.</li>
			</ul>
		</li>
	</ul>

	 */
	interface ::com::sun::star::accessibility::XAccessibleContext;

	/** This interface gives access to the visibility of the document.
	*/
	interface ::com::sun::star::accessibility::XAccessibleComponent;

	/** This interface gives access to any cell that is at least partially
		visible on the screen. So this interface gives access to the same
		things like the XAccessibleContext interface. Therefor it use more
		usable methods. Also it gives access to some table specific data.
	 */
	interface ::com::sun::star::accessibility::XAccessibleTable;

	/** This interface is for selecting the cells. This interface is optional.
	 */
	[optional] interface ::com::sun::star::accessibility::XAccessibleSelection;

	/** This is the interface for listeners */
	interface ::com::sun::star::accessibility::XAccessibleEventBroadcaster;
};

//=============================================================================

}; }; }; };

#endif
