/**************************************************************
 * 
 * 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_sdb_ContentLoader_idl__ 
#define __com_sun_star_sdb_ContentLoader_idl__ 

#ifndef __com_sun_star_frame_Frame_idl__ 
#include <com/sun/star/frame/FrameLoader.idl>
#endif

module com {  module sun {  module star {  module sdb { 

//============================================================================= 
/** implements a loader for various datasource-related user interface components.

	<p>Usually, you don't deal with this loader directly. Instead, use an instance with
    the <type scope="com::sun::star::frame">XComponentLoader</type> interface, and pass
    one of the below-mentioned URLs to it.</p>

	@see com::sun::star::frame::XComponentLoader
	@see com::sun::star::frame::Desktop
*/
published service ContentLoader
{
	/** ensures the basic functionality.

		<p>
		Supporting this service ensures that you can plug any of the components
		the loader can create into an arbitrary frame.
		</p>

		The loader should be registered for the URL scheme 
		<b>
		.component:DB/ *
		</b>
		, the concrete URLs supported are:
		<ul>
			<li><b>.component:DB/DataSourceBrowser</b><br/>
				Using this URL creates an instance of the 
				<type scope="com::sun::star::sdb">DataSourceBrowser</type>
				service and plugs it into the frame passed to the loader.
			</li>
			<li><b>.component:DB/FormGridView</b><br/>
				Using this URL creates an instance of the 
				<type scope="com::sun::star::sdb">ExternalSourceBrowser</type>
				service and plugs it into the frame passed to the loader.
			</li>
			<li><b>.component:DB/QueryDesign</b><br/>
				Using this URL creates an instance of the 
				<type scope="com::sun::star::sdb">QueryDesign</type>
				service and plugs it into the frame passed to the loader.
			</li>
			<li><b>.component:DB/TableDesign</b><br/>
				Using this URL creates an instance of the 
				<type scope="com::sun::star::sdb">TableDesign</type>
				service and plugs it into the frame passed to the loader.
			</li>
			<li><b>.component:DB/RelationDesign</b><br/>
				Using this URL creates an instance of the 
				<type scope="com::sun::star::sdb">RelationDesign</type>
				service and plugs it into the frame passed to the loader.
			</li>
		</ul>

		The parameters passed to the 
		<member scope="com::sun::star::frame">XFrameLoader::load()</member>
		are forwarded to the object being created, 
		in particular to its 
		<type scope="com::sun::star::lang">XInitialization</type>
		interface.
	**/
	service com::sun::star::frame::FrameLoader;
};
 
//============================================================================= 
}; }; }; }; 
 
#endif 
