/**************************************************************
 * 
 * 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_document_XEmbeddedObjectSupplier2_idl__  
#define __com_sun_star_document_XEmbeddedObjectSupplier2_idl__  
  
#ifndef __com_sun_star_embed_XEmbeddedObject_idl__  
#include <com/sun/star/embed/XEmbeddedObject.idl>  
#endif  
 
#ifndef __com_sun_star_graphic_XGraphic_idl__  
#include <com/sun/star/graphic/XGraphic.idl>  
#endif  

#ifndef __com_sun_star_document_XEmbeddedObjectSupplier_idl__  
#include <com/sun/star/document/XEmbeddedObjectSupplier.idl>  
#endif  
  
  
//=============================================================================  
  
module com {   module sun {   module star {   module document {   
  
//=============================================================================  
  
/** represents something that provides an embedded object.
 */
interface XEmbeddedObjectSupplier2: com::sun::star::document::XEmbeddedObjectSupplier
{  
	//-------------------------------------------------------------------------  
	/** returns the object which is embedded into this object.

		<p>
		This method does not return the model that is controlled by the
		embedded object, but the embedded object itself.
		</p>
	 */
	com::sun::star::embed::XEmbeddedObject getExtendedControlOverEmbeddedObject();  
  
	//-------------------------------------------------------------------------  
	/** allows to control the aspect of the object.
	 */
	[attribute] hyper Aspect;

	//-------------------------------------------------------------------------  
	/** allows to get the replacement image of the object.
	 */
	[attribute,readonly] com::sun::star::graphic::XGraphic ReplacementGraphic;

};  
  
//=============================================================================  
  
}; }; }; };   
  
#endif

