/**************************************************************
 * 
 * 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_XRangeSelection_idl__ 
#define __com_sun_star_sheet_XRangeSelection_idl__ 

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

#ifndef __com_sun_star_beans_PropertyValue_idl__ 
#include <com/sun/star/beans/PropertyValue.idl> 
#endif 

//============================================================================= 
 
 module com {  module sun {  module star {  module sheet {  

 published interface XRangeSelectionListener;
 published interface XRangeSelectionChangeListener;

//============================================================================= 
 
/** allows to let the user to select a cell range.

	@see com::sun::star::sheet::SpreadsheetView
 */
published interface XRangeSelection: com::sun::star::uno::XInterface
{ 
	/** starts the range selection.

		@param aArguments 
		the <type>RangeSelectionArguments</type> that specify how the
		range selection is done.
	 */
	void startRangeSelection(
				[in] sequence<com::sun::star::beans::PropertyValue> aArguments );

	/** aborts the range selection.
	 */
	void abortRangeSelection();

	/** adds a listener that is notified when range selection is completed
		or aborted.
	 */
	void addRangeSelectionListener(
				[in] com::sun::star::sheet::XRangeSelectionListener aListener ); 
	 
	/** removes the specified listener.
	 */
	void removeRangeSelectionListener(
				[in] com::sun::star::sheet::XRangeSelectionListener aListener );

	/** adds a listener that is notified when the selected range is changed.
	 */
	void addRangeSelectionChangeListener(
				[in] com::sun::star::sheet::XRangeSelectionChangeListener aListener ); 
	 
	/** removes the specified listener.
	 */
	void removeRangeSelectionChangeListener(
				[in] com::sun::star::sheet::XRangeSelectionChangeListener aListener );

};
 
//============================================================================= 
 
}; }; }; };  

#endif

