/**************************************************************
 * 
 * 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_ui_ActionTriggerContainer_idl__
#define __com_sun_star_ui_ActionTriggerContainer_idl__

#ifndef __com_sun_star_container_XIndexContainer_idl__
#include <com/sun/star/container/XIndexContainer.idl>
#endif
#ifndef __com_sun_star_lang_XMultiServiceFactory_idl__
#include <com/sun/star/lang/XMultiServiceFactory.idl>
#endif
#ifndef __com_sun_star_container_XContainer_idl__
#include <com/sun/star/container/XContainer.idl>
#endif
#ifndef __com_sun_star_container_XEnumerationAccess_idl__
#include <com/sun/star/container/XEnumerationAccess.idl>
#endif

module com {  module sun {  module star {  module ui {


/** describes a container of user actions.

    <p>No assumption is made about any graphical representation:
    You could have a menu or a toolbox working with the same container
    describing their entries.</p>

	<p>Possible elements of the <type>ActionTriggerContainer</type> are
		<ul>
            <li><type>ActionTrigger</type> -
                        represents a simply clickable menu entry</li>
            <li><type>ActionTriggerSeparator</type> -
                        represents a separator between two entries<br/>
                 This entry type is of interest for components rendering a an
                 <type>ActionTriggerContainer</type>
             </li>
            <li><type>ActionTriggerContainer</type> -
                represents a sub container</li>
		</ul>
	</p>
*/
published service ActionTriggerContainer
{
    /** provides access to the entries of a menu. The element type
     is <type scope="com::sun::star::beans">XPropertySet</type>.
     The property set contains attributes like CommandURL, HelpURL
     as defined in the service <type scope="com::sun::star::ui">ActionTrigger</type>
     and optional a <type scope="com::sun::star::ui">ActionTriggerContainer</type>.
     */

    interface ::com::sun::star::container::XIndexContainer;

    /** creates elements to be inserted into the container.
		<p>Usually, the <method>XMultiServiceFactory::getSupportedServiceNames</method>
        gives you a <type>ActionTrigger</type> and
        optionally <type>ActionTriggerContainer</type> and
        <type>ActionTriggerSeparator</type>

     .</p>
     */
    interface ::com::sun::star::lang::XMultiServiceFactory;

    /** allows to enumerate the elements of the container
	*/
    [optional] interface ::com::sun::star::container::XEnumerationAccess;

	/** allows foreign components to register themself as listener for the container
		structure.
	*/
	[optional] interface ::com::sun::star::container::XContainer;
};
}; }; }; };
#endif
