/**************************************************************
 * 
 * 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_sheet_XAreaLink_idl__
#define __com_sun_star_sheet_XAreaLink_idl__

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

#ifndef __com_sun_star_table_CellRangeAddress_idl__
#include <com/sun/star/table/CellRangeAddress.idl>
#endif

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

module com {  module sun {  module star {  module sheet {

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

/** provides methods to change the settings of a linked cell range.

	@see com::sun::star::sheet::CellAreaLink
 */
published interface XAreaLink: com::sun::star::uno::XInterface
{
	//-------------------------------------------------------------------------

	/** returns the source of the range within the source document.

		<p>This can be the address of a cell or range in the form
		"Sheet1.A1:C5", or the name of a named range or database range.</p>
	 */
	string getSourceArea();

	//-------------------------------------------------------------------------

	/** sets the source of the range within the source document.

		<p>This can be the address of a cell or range in the form
		"Sheet1.A1:C5", or the name of a named range or database range.</p>
	 */
	void setSourceArea( [in] string aSourceArea );

	//-------------------------------------------------------------------------

	/** returns the position of the linked range in the destination
		document.
	 */
	com::sun::star::table::CellRangeAddress getDestArea();

	//-------------------------------------------------------------------------

	/** sets the position of the linked range in the destination document.
	 */
	void setDestArea( [in] com::sun::star::table::CellRangeAddress aDestArea );

};

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

}; }; }; };

#endif

