/**************************************************************
 * 
 * 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_AccessibleIconChoiceControlEntry_idl__
#define __com_sun_star_awt_AccessibleIconChoiceControlEntry_idl__

#ifndef __com_sun_star_accessibility_AccessibleContext_idl__
#include <com/sun/star/accessibility/AccessibleContext.idl>
#endif


module com { module sun { module star { module accessibility {

 published interface XAccessibleText;
 published interface XAccessibleComponent;

}; }; }; };

module com { module sun { module star { module awt {

/** specifies accessibility support for an icon choice control entry.

    @see com::sun::star::accessibility::AccessibleContext

    @see com::sun::star::accessibility::XAccessibleComponent
	@see com::sun::star::accessibility::XAccessibleText

	@since OpenOffice 1.1.2
*/
published service AccessibleIconChoiceControlEntry
{
	/** This interface gives access to the structural information of an icon choice control entry:

       <ul>
       <li>Role: The role of an icon choice control entry is <const 
           scope="com::sun::star::accessibility"
           >AccessibleRole::LABEL</const>.</li>
       <li>Name: The name of an icon choice control entry is it's text.</li>
       <li>Description: The description of an icon choice control entry is empty.</li>
       <li>Children: There exist no children.
		</li>            
       <li>Parent: The parent is either the <type scope="com::sun::star::awt">AccessibleIconChoiceControl</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::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::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>
		   <li><const scope="com::sun::star::accessibility"
               >AccessibleStateType::TRANSIENT</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 when it is selected.</li>
           </ul>
           </li>
       </ul>
    */
    service   com::sun::star::accessibility::AccessibleContext;

	interface com::sun::star::accessibility::XAccessibleComponent;

	/** This interface gives read-only access to the text representation
        of an icon choice control entry.
     */
    interface com::sun::star::accessibility::XAccessibleText;
};

}; }; }; };

#endif

