/**************************************************************
 *
 * 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_beans_XMaterialHolder_idl__
#define __com_sun_star_beans_XMaterialHolder_idl__

#ifndef __com_sun_star_uno_XInterface_idl__
#include <com/sun/star/uno/XInterface.idl>
#endif


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

 module com {  module sun {  module star {  module beans {

//=============================================================================
/** gives access to the material a (tool-) object is working on.

	<p>Example: The introspection service allows the inspection of an
	object's properties and methods. The result is represented as
	XIntrospectionAccess interface. The inspected object then is the
	material attached to the introspection tool and an implementation
	of <type>XIntrospectionAccess</type> should also support
	<type>XMaterialHolder</type> to give access to this material.</p>

	@see XIntrospectionAccess
 */
published interface XMaterialHolder: com::sun::star::uno::XInterface
{
	//-------------------------------------------------------------------------
	/** returns the material that is connected to this (tool-) object

		@returns
			the material that is connected to this (tool-) object.
	 */
	any getMaterial();

};

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

}; }; }; };

#endif
