/**************************************************************
 *
 * 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_drawing_XDrawPageExpander_idl__
#define __com_sun_star_drawing_XDrawPageExpander_idl__

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

#ifndef __com_sun_star_drawing_XDrawPages_idl__
#include <com/sun/star/drawing/XDrawPages.idl>
#endif

#ifndef __com_sun_star_drawing_XDrawPage_idl__
#include <com/sun/star/drawing/XDrawPage.idl>
#endif


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

 module com {  module sun {  module star {  module drawing {

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

/** is implemented by documents that can expand the contents
	of a summary on a <type>DrawPage</type> into a collection of
	<type>DrawPage</type>s.

	@see XDrawPageSummarizer

	@deprecated
 */
published interface XDrawPageExpander: com::sun::star::uno::XInterface
{
	//-------------------------------------------------------------------------

	/** creates a collection of <type>DrawPage</type>s from the
		summary inside the given <type>DrawPage</type> and adds
		them to the same model as the source <type>DrawPage</type>.
	*/
	com::sun::star::drawing::XDrawPages expand( [in] com::sun::star::drawing::XDrawPage xPage );

};

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

}; }; }; };

#endif
