/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   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 .
 */

#ifndef __com_sun_star_drawing_AccessibleShape_idl__
#define __com_sun_star_drawing_AccessibleShape_idl__

#include <com/sun/star/accessibility/XAccessible.idl>
#include <com/sun/star/accessibility/XAccessibleContext.idl>
#include <com/sun/star/accessibility/XAccessibleExtendedComponent.idl>

module com {  module sun {  module star {  module drawing {

/** The AccessibleShape service is implemented by UNO shapes to
    provide accessibility information that describe the shape's features.
    A UNO shape is any object that implements the
    ::com::sun::star::drawing::XShape interface.

    <p>The content of a draw page is modelled as tree of accessible shapes
    and accessible text paragraphs.  The root of this (sub-)tree is the
    accessible draw document view.  An accessible shape implements either
    this service or one of the "derived" services
    AccessibleGraphicShape or AccessibleOLEShape.
    See the section Children in the description of the
    ::com::sun::star::accessibility::XAccessibleContext
    interface support for more details.</p>

    <p>There are two services that extend this one:  the
    AccessibleGraphicShape and the
    AccessibleOLEShape services provide additional interfaces.
    See there for details.</p>

    <p>A shape object is either fully or partially visible on the screen or
    has set the ::com::sun::star::accessibility::AccessibleStateType::DEFUNC
    state to indicate that it is no longer
    actively supported by its parent.</p>

    <p>Each shape object that has not set the DEFUNC state has a valid
    parent.  That is either the containing draw page or a group shape or a
    3D scene object.</p>

     @since OOo 1.1.2
*/
service AccessibleShape
{
    /** Base interface for being accessible.  It gives access to the
        ::com::sun::star::accessibility::XAccessibleContext
        interface.
    */
    interface ::com::sun::star::accessibility::XAccessible;

    /** Give access to the structural information of a shape.

        <p>You can access the following information for the shape being made
        accessible:
        <ul>
        <li>Role: The role of all shapes is
        com::sun::star::accessibility::AccessibleRole::SHAPE.</li>
        <li>Name: The name of a shape is its localized type name.</li>
        <li>Description: Descriptions are localized and start with the
            shape's type and style.  After that follow some properties that
            differ from the defaults with respect to the style.
        <li>Children: The children of a shape are either other accessible
            shapes or accessible text paragraphs.  Only group shapes, 3D scene
            shapes, and OLE shapes may contain other shapes as children.
            Some of the shapes may have text paragraphs as (additional)
            children.  See ::com::sun::star::text::AccessibleParagraphView for
            details of how this text is represented.</li>
        <li>Parent: The parent is either the document view as represented by
            AccessibleDrawDocumentView or a group shape, 3D
            scene shape, or OLE shape.</li>
        <li>Relations: Are set and maintained from the outside.  See the
        service description of the object that has accessible shapes as
        children for details.</li>
        <li>States: The states supported by this service are:
            <ul>
            <li><p>com::sun::star::accessibility::AccessibleStateType::DEFUNC
                is set if an accessible
                shape is not visible but still existent for some reason.
                This should not really happen and is a sign that someone,
                e.g. an AT-Tool holds references to such a shape.  The
                reason for this is that either the owner of the accessible
                shape did not remove it from its list of children or that
                the AT-Tool does not care for the events indicating
                this.</p>
                <p>Usually an object that has the
                com::sun::star::accessibility::AccessibleStateType::DEFUNC
                state set has already
                been disposed and subsequent calls to this object result in
                ::com::sun::star::lang::DisposedException
                exceptions.</p>
                <p>If this state is set then no other of the states below is
                set.  This  is also true for the states that are otherwise
                always set (which  makes "always" more of a sort of
                "normally").</p></li>
            <li>com::sun::star::accessibility::AccessibleStateType::EDITABLE
                is always set.
                This state is interpreted to mean that not only text but
                also other, graphical, properties of a shape can be modified.
                </li>
            <li>com::sun::star::accessibility::AccessibleStateType::ENABLED
                is always set.</li>
            <li>com::sun::star::accessibility::AccessibleStateType::FOCUSABLE
                is always set.</li>
            <li>com::sun::star::accessibility::AccessibleStateType::FOCUSED
                is set according to
                whether the shape currently has the focus.</li>
            <li>com::sun::star::accessibility::AccessibleStateType::MULTI_LINE
                is set if a shape supports the
                ::com::sun::star::accessibility::XAccessibleText interface.</li>
            <li>com::sun::star::accessibility::AccessibleStateType::OPAQUE
                is set for certain shapes
                with certain attributes like for a filled rectangle.</li>
            <li>com::sun::star::accessibility::AccessibleStateType::RESIZABLE
                is always set.</li>
            <li>com::sun::star::accessibility::AccessibleStateType::SELECTABLE
                is always set.</li>
            <li>com::sun::star::accessibility::AccessibleStateType::SELECTED
                is set according to
                whether the shape is currently selected.</li>
            <li>com::sun::star::accessibility::AccessibleStateType::SHOWING
                is always set.</li>
            <li>com::sun::star::accessibility::AccessibleStateType::VISIBLE
                is always set.</li>
            </ul>
        <li>Locale: The shape returns the locale of its parent.</li>
        <li>Property change listeners: Property change listeners that are
            registered with a shape are informed of the usual events.</li>
        </ul>
    */
    interface ::com::sun::star::accessibility::XAccessibleContext;

    /** Give access to the graphical representation of a shape.

        <p>The bounding box returned by the
        ::com::sun::star::accessibility::XAccessibleComponent::getBounds()
        function returns the
        shape's bounding box clipped at its parent's bounding box</p>

        <p>An accessible shape tries as best as it can to return proper
        values for calls to the
        ::com::sun::star::accessibility::XAccessibleExtendedComponent::getForeground()
        and
        ::com::sun::star::accessibility::XAccessibleExtendedComponent::getBackground()
        functions.
        If the shape is painted with a uniform and non-transparent color
        then the returned colors may differ from the ones visible on the
        screen.</p>

        <p>Key bindings are not supported at the moment</p>
    */
    interface ::com::sun::star::accessibility::XAccessibleComponent;

    /** Give extended access to the graphical representation of a shape.

        <p>The functions
        ::com::sun::star::accessibility::XAccessibleExtendedComponent::getFont(),
        ::com::sun::star::accessibility::XAccessibleExtendedComponent::getTitledBorderText(), and
        ::com::sun::star::accessibility::XAccessibleExtendedComponent::getToolTipText()
        are not supported and return empty references respectively empty
        strings.</p>

        <p>The support of this interface is optional to reduce overhead in
        case that no text is displayed and color information can not be
        determined with an acceptable cost.</p>
    */
    [optional] interface ::com::sun::star::accessibility::XAccessibleExtendedComponent;
};

}; }; }; };

#endif

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
