/**************************************************************
 * 
 * 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_text_AccessibleTextGraphicObjectView_idl__
#define __com_sun_star_text_AccessibleTextGraphicObjectView_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_XAccessibleImage_idl__
#include <com/sun/star/accessibility/XAccessibleImage.idl>
#endif

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


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

module com {  module sun {  module star {  module text {

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

/** The accessible view of graphics.

	 @since OpenOffice 1.1.2
 */
published service AccessibleTextGraphicObject
{
	/** This interface comprises the basic accessibility of text graphics.
		
		<ul>
			<li>The parent returned by 
                <method scope="::com::sun::star::accessibility"
                >XAccessibleContext::getAccessibleParent</method> is the
                accessible view of a paragraph if the graphic is bound as
                character, and the accessible view of the document (or of a
                page in the page preview) in any other case.
			<li>There are no chidren returned by
				<method scope="::com::sun::star::accessibility"
                >XAccessibleContext::getAccessibleChild</method>.
			<li>The role is <const scope="::com::sun::star::accessibility"
                >AccessibleRole::GRAPHIC</const>
			<li>The name is the one assigned to the graphic in the text
				document. This means that it is not internationalized.
			<li>The description is the one assigned to the graphic in the text
				document. This means that it is not internationalized. If no
				description has been set, the description equals the name.
			<li>There are no relations.
			<li>The following states might be contained in the state set
				returned by <method scope="::com::sun::star::accessibility
                ">XAccessibleContext::getAccessibleStateSet</type>:
				<ul>
					<li><const scope="::com::sun::star::accessibility"
                        >AccessibleStateType::DEFUNC</const> (indicates that
                        the document window has been closed or the graphic
                        is not existing any longer)
					<li><const scope="::com::sun::star::accessibility"
                        >AccessibleStateType::EDITABLE</const>
					<li><const scope="::com::sun::star::accessibility"
                        >AccessibleStateType::ENABLED</const> (always
                        contained)
					<li><const scope="::com::sun::star::accessibility"
                        >AccessibleStateType::OPAQUE</const>
					<li><const scope="::com::sun::star::accessibility"
                        >AccessibleStateType::SELECTABLE</const>
					<li><const scope="::com::sun::star::accessibility"
                        >AccessibleStateType::SELECTED</const>
                    <li><const scope="::com::sun::star::accessibility"
                        >AccessibleStateType::FOCUSABLE</const>
					<li><const scope="::com::sun::star::accessibility"
                        >AccessibleStateType::FOCUSED</const>
					<li><const scope="::com::sun::star::accessibility"
                        >AccessibleStateType::SHOWING</const>
					<li><const scope="::com::sun::star::accessibility"
                        >AccessibleStateType::VISIBLE</const>
				</ul>
			<li>The locale is the one the text document itself.
		</ul>

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

	/** This interface describes the graphical representation of a 
	  	graphic.
	 */
	interface ::com::sun::star::accessibility::XAccessibleComponent;

	/** This interface gives access to the image size and its description.
	 */
	interface ::com::sun::star::accessibility::XAccessibleImage;

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

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

}; }; }; };

#endif
