/**************************************************************
 * 
 * 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_frame_DispatchProvider_idl__
#define __com_sun_star_frame_DispatchProvider_idl__

#ifndef __com_sun_star_frame_XDispatchProvider_idl__
#include <com/sun/star/frame/XDispatchProvider.idl>
#endif

#ifndef __com_sun_star_frame_XDispatchProviderInterception_idl__
#include <com/sun/star/frame/XDispatchProviderInterception.idl>
#endif

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

module com {  module sun {  module star {  module frame {

//=============================================================================
/** provides <type>XDispatch</type> objects for certain functions which
    are useful at the UI

    <p>
    Such dispatch objects must be queried explicitly and used for
    queried purposes only. They can handle requests with guaranteed
    notifications (<type>XNotifyingDispatch</type>) or with possible
    (but not guaranteed) notifications (<type>XDispatch</type>).
    </p>

    @see XNotifyingDispatch
    @see XDispatch
    @see XControlNotificationListener
 */
published service DispatchProvider
{
    //-------------------------------------------------------------------------
    /** provides handling of dispatches with defined result state

        <p>
        Base interface of <type>XNotifyingDispatch</type> is <type>XDispatch</type>
        and can be called for requests if result isn't neccessary for dispatch operation.
        </p>

        @see XDispatch
	 */
    interface XDispatchProvider;

    //-------------------------------------------------------------------------
    /** provides dispatch interception

        <p>
        It makes it possible to register an <type>XDispatchProvider</type> which
        intercepts all requests of <type>XDispatch</type> to this instance.
        </p>
	 */
    [optional] interface XDispatchProviderInterception;
};

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

}; }; }; };

#endif
