/**************************************************************
 * 
 * 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_ModuleUIConfigurationManager_idl__
#define __com_sun_star_ui_ModuleUIConfigurationManager_idl__

#ifndef __com_sun_star_lang_XInitialization_idl__
#include <com/sun/star/lang/XInitialization.idl>
#endif

#ifndef __com_sun_star_ui_XUIConfigurationManager_idl__
#include <com/sun/star/ui/XUIConfigurationManager.idl>
#endif

#ifndef __com_sun_star_ui_XUIConfigurationPersistence_idl__
#include <com/sun/star/ui/XUIConfigurationPersistence.idl>
#endif

#ifndef __com_sun_star_ui_XModuleUIConfigurationManager_idl__
#include <com/sun/star/ui/XModuleUIConfigurationManager.idl>
#endif

#ifndef __com_sun_star_ui_XUIConfiguration_idl__
#include <com/sun/star/ui/XUIConfiguration.idl>
#endif

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

/** specifies a user interface configuration manager which gives access to user interface 
    configuration data of a module.
    
    <p>
    A module user interface configuratio manager supports two layers of configuration settings
    data:<br/>   
    1. Layer: A module default user interface configuration which describe all user interface 
    elements settings that are used by OpenOffice. It is not possible to insert, remove or change
    elements settings in this layer through the interfaces.</br>
    2. Layer: A module user interface configuration which only contains customized user interface 
    elements and user-defined ones. All changes on user interface element settings are done on
    this layer.</br>
    </p>
    
    @since OpenOffice 2.0
*/

service ModuleUIConfigurationManager
{    
    /** provides a function to initialize a module user interface configuration manager instance.

        <p>
        A module user interface configuration manager instance needs the following arguments as 
        <type scope="com::sun::star::beans">PropertyValue</type> to be in a working state:
        <ul>
            <li><b>DefaultConfigStorage</b>a reference to a <type scope="com::sun::star::embed">Storage</type> that 
            contains the default module user interface configuration settings.</li>
            <li><b>UserConfigStorage</b>a reference to a <type scope="com::sun::star::embed">Storage</type> that 
            contains the user-defined module user interface configuration settings.</li>
            <li><b>ModuleIdentifier</b>string that provides the module identifier.</li>
            <li><b>UserRootCommit</b>a reference to a <type scope="com::sun::star::embed">XTransactedObject</type> which
            represents the customizable root storage. Every implementation must use this reference to commit its
            changes also at the root storage.</li>
        </ul>
        A non-initialized module user interface configuration manager cannot be used, it is treated
        as a read-only container.
        </p>
    */
    interface com::sun::star::lang::XInitialization;

    /** provides access to persistence functions to load/store user interface element
        settings from/to a module storage.
    */
    interface com::sun::star::ui::XUIConfigurationPersistence;

    /** provides functions to change, insert and remove user interface element settings
        from a module user interface configuration manager.
    */
    interface com::sun::star::ui::XUIConfigurationManager;

    /** provides access to the default layer of a module based ui configuration
        manager.
    */
    interface com::sun::star::ui::XModuleUIConfigurationManager;

    /** provides functions to add and remove listeners for changes within a module user
        interface configuration manager.
    */
    interface com::sun::star::ui::XUIConfiguration;
};

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

}; }; }; };

#endif
