/**************************************************************
 * 
 * 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_StatusbarControllerFactory_idl__
#define __com_sun_star_frame_StatusbarControllerFactory_idl__

#ifndef __com_sun_star_lang_XMultiComponentFactory_idl__
#include <com/sun/star/lang/XMultiComponentFactory.idl>
#endif

#ifndef __com_sun_star_frame_XUIControllerRegistration_idl__
#include <com/sun/star/frame/XUIControllerRegistration.idl>
#endif

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

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

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

/** specifies a factory that creates instances of registered status bar 
    controller.

    <p>
    A status bar controller can be registered for a command URL and a model 
    service name. A status bar will automatically create a status bar controller 
    if it contains a registered command URL.
    </p>

    @since OOo 2.0
*/

service StatusbarControllerFactory
{
    /** this interface provides functions to create new instances of a registered 
        status bar controller.
    
        <p>
        Use <member scope="com.sun.star.lang">XMultiComponentFactory::createInstanceWithArguments()</member> 
        to create a new status bar controller instance. Use the CommandURL as the 
        service specifier.
        
        This call supports the following arguments provided as 
        <type scope="com::sun::star::beans">PropertyValue</type>:
        <ul>
            <li><b>Frame</b><br>specifies the <type scope="com::sun::star::frame">XFrame</type> 
                   instance to which the status bar controller belongs to. This 
                   property must be provided to the status bar controller, otherwise it 
                   cannot dispatch its internal commands.</li>
            <li><b>ModuleIdentifier</b><br>optional string that specifies in which module 
                   context the status bar controller should be created.</li>
        </ul>
        </p>
     */
    interface com::sun::star::lang::XMultiComponentFactory;

    /** provides functions to query for, register and deregister a status bar 
        controller.
     */
    interface com::sun::star::frame::XUIControllerRegistration;
};

}; }; }; };

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

#endif
