/**************************************************************
 * 
 * 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_frame_XToolbarController_idl__
#define __com_sun_star_frame_XToolbarController_idl__

#ifndef __com_sun_star_awt_XWindow_idl__
#include <com/sun/star/awt/XWindow.idl>
#endif

#ifndef __com_sun_star_awt_KeyModifier_idl__
#include <com/sun/star/awt/KeyModifier.idl>
#endif

//=============================================================================

 module com {  module sun {  module star {  module frame {

//=============================================================================
/** is an abstract service for a component which offers a more complex user interface
    to users within a toolbar.

    <p>
    A generic toolbar function is represented as a button which has a state 
    (enabled,disabled and selected, not selected). A toolbar controller can be added to a 
    toolbar and provide information or functions with a more sophisticated user interface.<br/>
    A typical example for toolbar controller is a font chooser on a toolbar. It provides
    all available fonts in a dropdown box and shows the current chosen font.
    <p>

    @see com::sun::star::frame::XDispatchProvider

    @since OOo 2.0
 */
interface XToolbarController : com::sun::star::uno::XInterface
{
    //=============================================================================
    /** provides a function to execute the command which is bound to the toolbar controller.

        @param 
            a combination of <type scope="com::sun::star::awt">KeyModifier</type> value that represent
            the current state of the modifier keys.

        <p>
        This function is usally called by a toolbar implementation when a user clicked on a toolbar button
        or pressed enter on the keyboard when the item has the input focus.
        </p>
    */
    void execute( [in] short KeyModifier );

    //=============================================================================
    /** notifies a component that a single click has been made on the toolbar item.
    */
    void click();

    //=============================================================================
    /** notifies a component that a double click has been made on the toolbar item.
    */
    void doubleClick();

    //=============================================================================
    /** requests to create a popup window for additional functions.

        @return
            a <type scope="com::sun::star::awt">XWindow</type> which provides additional functions 
            to the user. The reference must be empty if component does not want to provide a separate
            window.
    */
    com::sun::star::awt::XWindow createPopupWindow();

    //=============================================================================
    /** requests to create an item window which can be added to the toolbar.

        @param Parent
            a <type scope="com::sun::star::awt">XWindow</type> which must be used as a parent
            for the requested item window.
        
        @return
            a <type scope="com::sun::star::awt">XWindow</type> which can be added to a toolbar. 
            The reference must be empty if a component does not want to provide an item window.
    */
    com::sun::star::awt::XWindow createItemWindow( [in] com::sun::star::awt::XWindow Parent );
};

}; }; }; };

#endif
