/**************************************************************
 * 
 * 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_awt_AccessibleMenuItem_idl__
#define __com_sun_star_awt_AccessibleMenuItem_idl__

#ifndef __com_sun_star_accessibility_XAccessibleContext_idl__
#include <com/sun/star/accessibility/XAccessibleContext.idl>
#endif
#ifndef __com_sun_star_accessibility_XAccessibleEventBroadcaster_idl__
#include <com/sun/star/accessibility/XAccessibleEventBroadcaster.idl>
#endif
#ifndef __com_sun_star_accessibility_XAccessibleComponent_idl__
#include <com/sun/star/accessibility/XAccessibleComponent.idl>
#endif
#ifndef __com_sun_star_accessibility_XAccessibleExtendedComponent_idl__
#include <com/sun/star/accessibility/XAccessibleExtendedComponent.idl>
#endif
#ifndef __com_sun_star_accessibility_XAccessibleText_idl__
#include <com/sun/star/accessibility/XAccessibleText.idl>
#endif
#ifndef __com_sun_star_accessibility_XAccessibleAction_idl__
#include <com/sun/star/accessibility/XAccessibleAction.idl>
#endif
#ifndef __com_sun_star_accessibility_XAccessibleValue_idl__
#include <com/sun/star/accessibility/XAccessibleValue.idl>
#endif

module com { module sun { module star { module awt {
    
/** specifies accessibility support for a menu item.
    
    @since OOo 1.1.2
 */    
published service AccessibleMenuItem
{
    /** This interface gives access to the structural information of a
        menu item:

        <ul>
        <li>Role: The role of a menu item is <const 
            scope="com::sun::star::accessibility"
            >AccessibleRole::MENU_ITEM</const>.</li>
        <li>Name: The name of a menu item is the localized item text.</li>
        <li>Description: The description of a menu item is its localized
            help text.</li>
        <li>Children: There are no children.</li>
        <li>Parent: The parent of a menu item is a menu bar, a popup menu or
            a menu, whose accessible context supports the services
            <type>AccessibleMenuBar</type>, <type>AccessiblePopupMenu</type>
            or <type>AccessibleMenu</type>.</li>
        <li>Relations: There are no relations.</li>
        <li>States: The states supported by this service are
            <ul>
            <li><const scope="com::sun::star::accessibility"
                >AccessibleStateType::ARMED</const> is set
                if the object is highlighted.</li>
            <li><const scope="com::sun::star::accessibility"
                >AccessibleStateType::CHECKED</const> is set
                if the object is currently checked.</li>
            <li><const scope="com::sun::star::accessibility"
                >AccessibleStateType::DEFUNC</const>
                is set if the object has already been disposed
                and subsequent calls to this object result in				
                <type scope="com::sun::star::lang">DisposedException</type>
                exceptions.</li>
            <li><const scope="com::sun::star::accessibility"
                >AccessibleStateType::ENABLED</const> is set
                if the object is enabled.</li>
            <li><const scope="com::sun::star::accessibility"
                >AccessibleStateType::OPAQUE</const> is always set.</li>
            <li><const scope="com::sun::star::accessibility"
                >AccessibleStateType::SELECTABLE</const> is always set.</li>
            <li><const scope="com::sun::star::accessibility"
                >AccessibleStateType::SELECTED</const> is set
                if the object is selected.</li>
            <li><const scope="com::sun::star::accessibility"
                >AccessibleStateType::SHOWING</const> is set
                if the object is displayed on the screen.</li>
            <li><const scope="com::sun::star::accessibility"
                >AccessibleStateType::VISIBLE</const> is always set.</li>
            </ul>
            </li>
        </ul>
     */
    interface ::com::sun::star::accessibility::XAccessibleContext;
    
    interface ::com::sun::star::accessibility::XAccessibleEventBroadcaster;
    
    interface ::com::sun::star::accessibility::XAccessibleComponent;
    
    interface ::com::sun::star::accessibility::XAccessibleExtendedComponent;

    /** This interface gives read-only access to the text representation
        of a menu item.
     */
    interface ::com::sun::star::accessibility::XAccessibleText;

    /** This interface gives access to the actions that can be executed for
        a menu item. The supported actions for a menu item are:
        <ul>
        <li>select</li>
        </ul>
     */
    interface ::com::sun::star::accessibility::XAccessibleAction;

    /** This interface gives access to the numerical value of a
        menu item, which is related to the menu item's
        <const scope="com::sun::star::accessibility"
        >AccessibleStateType::SELECTED</const> state.
     */
    interface ::com::sun::star::accessibility::XAccessibleValue;
};

}; }; }; };

#endif
