/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   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 .
 */

#ifndef __com_sun_star_ui_XUIConfigurationManager_idl__
#define __com_sun_star_ui_XUIConfigurationManager_idl__

#include <com/sun/star/container/XIndexContainer.idl>
#include <com/sun/star/container/XIndexAccess.idl>
#include <com/sun/star/beans/XPropertySet.idl>
#include <com/sun/star/beans/PropertyValue.idl>
#include <com/sun/star/ui/XUIConfigurationListener.idl>
#include <com/sun/star/ui/XAcceleratorConfiguration.idl>
#include <com/sun/star/container/ElementExistException.idl>
#include <com/sun/star/container/NoSuchElementException.idl>
#include <com/sun/star/lang/IllegalArgumentException.idl>
#include <com/sun/star/lang/IllegalAccessException.idl>

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

/** specifies a user interface configuration manager interface which
    controls the structure of all customizable user interface
    elements.

    @since OOo 2.0
*/

interface XUIConfigurationManager : ::com::sun::star::uno::XInterface
{
    /** resets the configuration manager to the default user interface
        configuration data.
        <p>
        This means that all user interface configuration data of the
        instance will be removed. A module based user interface
        configuration manager removes user defined elements, but set all
        other elements back to default. It is not possible to remove
        default elements from a module user interface configuration
        manager.
        </p>
    */
    void reset();

    /** retrieves information about all user interface elements within
        the user interface configuration manager.

        @param ElementType
            makes it possible to narrow the result set to only one type
            of user interface elements. If all user interface element
            types should be returned com::sun::star::ui::UIElementType::UNKNOWN
            must be provided.

        @return
            returns all user interface elements within the user interface
            configuration manager that meet the given ElementType
            specification. <p>The following
            com::sun::star::beans::PropertyValue entries
            are defined inside the sequence for every user interface element.
            <ul>
                <li><b>ResourceURL</b>specifies the unique resource URL for
                the user interface element.</li>
                <li><b>UIName</b>specifies the user interface name for the
                user interface element. Not all user interface elements have
                set UIName. At least menubars do not.</li>
            </ul>
            <p>

        @see UIElementType
    */
    sequence< sequence< com::sun::star::beans::PropertyValue > > getUIElementsInfo( [in] short ElementType ) raises ( com::sun::star::lang::IllegalArgumentException );

    /** creates an empty settings data container.

        @return
            an empty user interface element settings data container, which
            implements UIElementSettings.
    */
    ::com::sun::star::container::XIndexContainer createSettings();

    /** determines if the settings of a user interface element is part the
        user interface configuration manager.

        @param ResourceURL
            a resource URL which identifies the user interface element. A
            resource URL must meet the following syntax:
            "private:resource/$type/$name. It is only allowed to use ASCII
            characters for type and name.

        @return
            `TRUE` if settings have been found, otherwise `FALSE`.
    */
    boolean hasSettings( [in] string ResourceURL ) raises ( com::sun::star::lang::IllegalArgumentException );

    /** retrieves the settings of a user interface element.

        @param ResourceURL
            a resource URL which identifies the user interface element. A
            resource URL must meet the following syntax:
            "private:resource/$type/$name. It is only allowed to use ASCII
            characters for type and name.

        @param bWriteable
            must be `TRUE` if the retrieved settings should be a writable.
            Otherwise `FALSE` should be provided to get a shareable reference
            to the settings data.

        @return
            settings data of an existing user interface element, which
            implements UIElementSettings. If the settings data
            cannot be found a
            com::sun::star::container::NoSuchElementException
            is thrown.  If the \p ResourceURL is not valid or
            describes an unknown type a
            com::sun::star::lang::IllegalArgumentException
            is thrown.
    */
    ::com::sun::star::container::XIndexAccess getSettings( [in] string ResourceURL, [in] boolean bWriteable ) raises ( com::sun::star::container::NoSuchElementException, com::sun::star::lang::IllegalArgumentException );

    /** replaces the settings of a user interface element with new settings.

        @param ResourceURL
            a resource URL which identifies the user interface element to
            be replaced. If no element with the given resource URL exists a
            com::sun::star::container::NoSuchElementException
            is thrown.

        @param aNewData
            the new settings data of an existing user interface element, which
            implements UIElementSettings.

        <p>
        If the settings data cannot be found a
        com::sun::star::container::NoSuchElementException
        is thrown. If the \p ResourceURL is not valid or describes
        an unknown type a
        com::sun::star::lang::IllegalArgumentException
        is thrown. If the configuration manager is read-only a
        com::sun::star::lang::IllegalAccessException is
        thrown.
        </p>
    */
    void replaceSettings( [in] string ResourceURL, [in] ::com::sun::star::container::XIndexAccess aNewData ) raises ( com::sun::star::container::NoSuchElementException, com::sun::star::lang::IllegalArgumentException, com::sun::star::lang::IllegalAccessException );

    /** removes the settings of an existing user interface element.

        @param ResourceURL
            a resource URL which identifies the user interface element settings
            to be removed.

        <p>
        If the settings data cannot be found a
        com::sun::star::container::NoSuchElementException is
        thrown. If the \p ResourceURL is not valid or describes an
        unknown type a com::sun::star::lang::IllegalArgumentException
        is thrown. If the configuration manager is read-only a
        com::sun::star::lang::IllegalAccessException is thrown.
        </p>
    */
    void removeSettings( [in] string ResourceURL ) raises ( com::sun::star::container::NoSuchElementException, com::sun::star::lang::IllegalArgumentException, com::sun::star::lang::IllegalAccessException );

    /** inserts the settings of a new user interface element.

        @param NewResourceURL
            a resource URL which identifies the new user interface element.

        @param aNewData
            the settings data of the new user interface element, which implements
            UIElementSettings.

        <p>
        If the settings data is already present a
        com::sun::star::container::ElementExistException
        is thrown. If the \p NewResourceURL is not valid or describes
        an unknown type a com::sun::star::lang::IllegalArgumentException
        is thrown. If the configuration manager is read-only a
        com::sun::star::lang::IllegalAccessException is thrown.
        </p>
    */
    void insertSettings( [in] string NewResourceURL, [in] ::com::sun::star::container::XIndexAccess aNewData ) raises ( com::sun::star::container::ElementExistException, com::sun::star::lang::IllegalArgumentException, com::sun::star::lang::IllegalAccessException );

    /** retrieves the image manager from the user interface configuration
        manager.

        <p>
        Every user interface configuration manager has one image manager
        instance which controls all images of a module or document.
        </p>

        @return
            the image manager of the user interface configuration manager.
    */
    com::sun::star::uno::XInterface getImageManager();

    /** retrieves the keyboard short cut manager from the user interface
        configuration manager.

        <p>
        Every user interface configuration manager has one keyboard short cut
        manager instance which controls all short cuts of a module or document.
        </p>

        @return
            the short cut manager of the user interface configuration manager.
    */
    com::sun::star::ui::XAcceleratorConfiguration getShortCutManager();

    /** retrieves the events manager from the user interface configuration manager.

        <p>
        Every user interface configuration manager has one events manager
        instance which controls the mapping of events to script URLs of a module
        or document.
        </p>

        @return
            the events manager of the user interface configuration
            manager, if one exists.
    */
    com::sun::star::uno::XInterface getEventsManager();
};


}; }; }; };

#endif

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
