/**************************************************************
 * 
 * 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 OOo 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
