/**************************************************************
 * 
 * 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_XAccessibleValue_idl__
#include <com/sun/star/accessibility/XAccessibleValue.idl>
#endif

#ifndef __com_sun_star_accessibility_XAccessibleText_idl__
#include <com/sun/star/accessibility/XAccessibleText.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 cell in a text document or in the page preview 
  	of a spreadsheet document. See 
	<type scope="::com::sun::star::sheet">AccessibleCell</type> for cells in 
    the edit view of a spreadsheet.
    @since OOo 1.1.2
*/
published service AccessibleCellView
{
	/** This interface gives access to the visible content of a cell in a
		accessible spreadsheet page preview or accessible text document view.
	<ul>
		<li>The parent returned by <method scope="::com::sun::star::accessibility"
            >XAccessibleContext::getAccessibleParent</method>
			is the accessible table 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"
            >XAccessibleContext::getAccessibleContext</method> for these
            children returns an object that supports the service
			<type scope="::com::sun::star::text"
            >AccessibleParagraphView</type>:
			A child of this kind is returned for every paragraph
			fragment that is contained in the cell and
			is at least partially visible. A paragraph fragment is
			the part of a paragraph that is displayed on a
			certain page.
		<li>The name is something like A10 or B23 or so on.</li>
		<li>The description is the name or the content of the given note.</li>
		<li>The role is <const scope="::com::sun::star::accessibility"
            >AccessibleRole::TABLE_CELL</const></li>
		<li>For spreadsheets, there are relations between the cell and the 
			shapes with an anchor on this cell.</li>
		<li>The following states are supported:
			<ul>
				<li><const scope="::com::sun::star::accessibility"
                    >AccessibleStateType::DEFUNC</const> is always false if the
                    cell is showed, otherwise it is true.</li>
				<li><const scope="::com::sun::star::accessibility"
                    >AccessibleStateType::EDITABLE</const> is false if the cell
                    is showed in a page preview or the cell 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_LINE</const> is always true in
                    spreadsheets and false otherwise.</li>
				<li><const scope="::com::sun::star::accessibility"
                    >AccessibleStateType::OPAQUE</const> is false if the cell
                    has no background color or graphic, otherwise it is true.</li>
				<li><const scope="::com::sun::star::accessibility"
                    >AccessibleStateType::SELECTABLE</const> is true if the
                    cell is not showed in a page preview, otherwise is it
                    false.</li>
				<li><const scope="::com::sun::star::accessibility"
                    >AccessibleStateType::SELECTED</const> is true, if the cell
                    is selected. This is not possible in the page preview.</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::TRANSIENT</const>Is true if the cell 
                    is showed in a spreadsheet page preview. 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 cell.
	*/
	interface ::com::sun::star::accessibility::XAccessibleComponent;

	/** This interface gives access to the value of the cell.
		Only a readonly access is possible.
	 */
	interface ::com::sun::star::accessibility::XAccessibleValue;

	/** This interface is for selecting the text, value or parts of this in the
		cell. This interface is optional.
	 */
	[optional] interface ::com::sun::star::accessibility::XAccessibleSelection;

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

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

}; }; }; };

#endif
