/**************************************************************
 *
 * 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_XDrawPageDuplicator_idl__
#define __com_sun_star_drawing_XDrawPageDuplicator_idl__

#ifndef __com_sun_star_uno_XInterface_idl__
#include <com/sun/star/uno/XInterface.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 {

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

/** makes it possible to duplicate pages within the same document.
 */
published interface XDrawPageDuplicator: com::sun::star::uno::XInterface
{
	//-------------------------------------------------------------------------

	/** creates a duplicate of a <type>DrawPage</type> or <type>MasterPage</type>,
		including the <type>Shape</type>s on that page and inserts it into the
		same model.

		@param xPage
			that is the source <type>DrawPage</type> or <type>MasterPage</type>
			that will be duplicated

		@return
			a newly created <type>DrawPage</type> or <type>MasterPage</type>
			that as all properties and copies of all <type>Shape</type>s from
			the source page.
	 */
	com::sun::star::drawing::XDrawPage duplicate( [in] com::sun::star::drawing::XDrawPage xPage );

};

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

}; }; }; };

#endif
