/**************************************************************
 * 
 * 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_WindowStateConfiguration_idl__
#define __com_sun_star_ui_WindowStateConfiguration_idl__

#ifndef __com_sun_star_container_XNameAccess_idl__
#include <com/sun/star/container/XNameAccess.idl>
#endif

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

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

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

/** a service which provides window based information about user interface
    elements.

    <p>
    OpenOffice.org has an amout of user interface elements that can be positioned,
    resized, closed and their style can be changed. This service provides access
    to the window based information of available user interface elements which are
    part of OpenOffice.org modules, like Writer or Calc.
    </p>

    @since OOo 2.0
*/

published service WindowStateConfiguration
{
    /** provides access to window based information about user interface elements
        of all installed application modules.

        <p>
        To access the window based information of a module, a unique module specifier
        must be provided to <member scope="com::sun::star::container">XNameAccess::getByName()</member> function.
        The module specifier can be retrieved from the <type scope="com::sun::star::frame">ModuleManager</type>
        service. The interface provides references to a <type scope="com::sun:star::ui">ModuleWindowStateConfiguration</type>.
        </p>

        @see com::sun::star::frame::ModuleManager
    */

    interface com::sun::star::container::XNameAccess;
};

}; }; }; };

#endif
