/**************************************************************
 * 
 * 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_DispatchDescriptor_idl__
#define __com_sun_star_frame_DispatchDescriptor_idl__

#ifndef __com_sun_star_util_URL_idl__
#include <com/sun/star/util/URL.idl>
#endif


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

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

//=============================================================================
/** describes a feature to be retrieved by a URL that
    has to be loaded into a specified frame

    <p>
    For a normal dispatch calls all needed parameters are seperated.
    For optimized remote functionality <member>XDispatch::queryDispatches()</member>
    it's neccessary to pack these parameters in a flat structure wich can be used
    in a simple manner.
    </p>

    @see XDispatchProvider::queryDispatches()
 */
published struct DispatchDescriptor
{
	//-------------------------------------------------------------------------
    /** specifies the URL of the resource/function

        <p>
        Must be a full parsed URL. Use service <type scope="com::sun::star::util">URLTransformer</type>
        for that.
        </p>

        @see com::sun::star::util::URLTransformer
	 */
	com::sun::star::util::URL FeatureURL;

	//-------------------------------------------------------------------------
    /** name of the target frame

        <p>
        Special targets (e.g. "_blank", "_self") or realy existing target names can be used.
        </p>

        @see XDispatchProvider::queryDispatch()
	 */
	string FrameName;

	//-------------------------------------------------------------------------
    /** describes how the target frame is to be searched

        <p>
        This optional parameter is used if <var>FrameName</var> isn't a special target only.
        </p>

        @see FrameSearchFlag
	 */
	long SearchFlags;
};

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

}; }; }; };

#endif
