/**************************************************************
 * 
 * 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_AccessibleCheckBox_idl__
#define __com_sun_star_awt_AccessibleCheckBox_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 check box.
    
    @since OpenOffice 1.1.2    
 */    
published service AccessibleCheckBox
{
    /** This interface gives access to the structural information of a
        check box:

        <ul>
        <li>Role: The role of a check box is <const 
            scope="com::sun::star::accessibility"
            >AccessibleRole::CHECK_BOX</const>.</li>
        <li>Name: The name of a check box is its localized label.</li>
        <li>Description: The description of a check box is its localized
            help text.</li>
        <li>Children: There are no children.</li>
        <li>Parent: The parent is the window that contains the check box.</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::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::FOCUSABLE</const> is always set.</li>
            <li><const scope="com::sun::star::accessibility"
                >AccessibleStateType::FOCUSED</const> is set
                if the object currently has the keyboard focus.</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 check box.
     */
    interface ::com::sun::star::accessibility::XAccessibleText;
    
    /** This interface gives access to the actions that can be executed for
        a check box. The supported actions for a check box are:
        <ul>
        <li>click</li>
        </ul>
     */
    interface ::com::sun::star::accessibility::XAccessibleAction;

    /** This interface gives access to the numerical value of a
        check box, which is related to the check box state:

        <pre>
        0: not checked
        1: checked
        2: don't know
        </pre>
     */
    interface ::com::sun::star::accessibility::XAccessibleValue;
};

}; }; }; };

#endif
