/**************************************************************
 * 
 * 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_AccessibleSpreadsheet_idl__
#define __com_sun_star_sheet_AccessibleSpreadsheet_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 sheet {

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

/** The accessible view of a spreadsheet document

	 @since OOo 1.1.2
*/
published service AccessibleSpreadsheet
{
	/** This interface gives access to any object in the currently visible table
		on the desktop.

	<ul>
		<li>The parent returned by <method scope="::com::sun::star::accessibility"
            >XAccessibleContext::getAccessibleParent</method>
			is the accessible spreadsheet document view.</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 following service.</li>
		<ul>
			<li><type scope="::com::sun::star::sheet">AccessibleCell</type>:
				A child where calling 
                <method scope="::com::sun::star::accessibility"
                >XAccessibleContext::getAccessibleChild</method>
				an object that supports this service is returned for
				every cell in this table.</li>
		</ul>
		<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.</li>
		<li>The role is <const scope="::com::sun::star::accessibility"
            >AccessibleRole::TABLE</const></li>
		<li>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 and the document is open, otherwise it
                    is true.</li>
				<li><const scope="::com::sun::star::accessibility"
                    >AccessibleStateType::EDITABLE</const> is false if 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 always
                    true.</li>
				<li><const scope="::com::sun::star::accessibility"
                    >AccessibleStateType::OPAQUE</const> is always true.</li>
				<li><const scope="::com::sun::star::accessibility"
                    >AccessibleStateType::RESIZEABLE</const>is always 
                    false.</li>
				<li><const scope="::com::sun::star::accessibility"
                    >AccessibleStateType::SELECTABLE</const> is always 
                    true.</li>
				<li><const scope="::com::sun::star::accessibility"
                    >AccessibleStateType::SELECTED</const> is true if the 
                    complete table (all cells) is selected.</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 table.
	*/
	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.
	 */
	interface ::com::sun::star::accessibility::XAccessibleSelection;

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

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

}; }; }; };

#endif
