/**************************************************************
 * 
 * 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_XUIConfigurationStorage_idl__
#define __com_sun_star_ui_XUIConfigurationStorage_idl__

#ifndef __com_sun_star_embed_XStorage_idl__
#include <com/sun/star/embed/XStorage.idl>
#endif

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

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

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

/** supplies functions to change or get information about the storage
    of a user interface configuration manager.

    @since OOo 2.0
*/

interface XUIConfigurationStorage : ::com::sun::star::uno::XInterface
{
    /** connects a storage to the user interface configuration manager 
        which is used on subsequent calls of <member>load</member> and 
        <member>store</member>. 
        
        @param Storage
            all configuration data is loaded/stored from/into this storage. 
            If the storage is in read/write mode <member>load</member> 
            and <member>store</member> can be used otherwise only 
            <member>load</member> is possible.

        <p>
        This call needs careful usage as data loss can occur. If the 
        implementation has modified data and a new storage is set the 
        implementation is not allowed to write back the data to the old
        storage. This must be done explicitly with <member>store</member>.
        In general a user interface configuration manager instance is 
        created and initialize by the document model or the module user 
        interface configuration supplier. Normally there is no need to 
        set a storage for a user interface configuration manager. If a 
        copy of the configuration data to another storage should be made, 
        use <member>storeToStorage</member>.
        </p>
    */
    void setStorage( [in] ::com::sun::star::embed::XStorage Storage );

    /** checks if an instance has already a storage to load/store its data.
        
        @return
            <TRUE/> if the instance has a storage otherwise <FALSE/>.
    */
    boolean hasStorage();    
};

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

}; }; }; };

#endif
