/**************************************************************
 * 
 * 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_datatransfer_clipboard_XClipboardEx_idl__
#define __com_sun_star_datatransfer_clipboard_XClipboardEx_idl__

#ifndef __com_sun_star_datatransfer_clipboard_XClipboard_idl__
#include <com/sun/star/datatransfer/clipboard/XClipboard.idl>
#endif

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

module com { module sun { module star { module datatransfer { module clipboard {

//=============================================================================
/** The extended clipboard interface.

	@see com::sun::star::datatransfer::clipboard::XClipboard
*/

published interface XClipboardEx: com::sun::star::datatransfer::clipboard::XClipboard
{
	//-------------------------------------------------------------------------
	/** To determine the supported rendering capabilities of the clipboard instance.

		@returns
		A set of flags describing the rendering capabilities of the clipboard instance.

		@see RenderingCapabilities
	*/
	byte getRenderingCapabilities();
};

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

}; }; }; }; };

#endif
