/**************************************************************
 * 
 * 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_RangeSelectionArguments_idl__ 
#define __com_sun_star_sheet_RangeSelectionArguments_idl__ 
 
//============================================================================= 
 
 module com {  module sun {  module star {  module sheet {  
 
//============================================================================= 
 
/** contains the arguments for starting the range selection.

	@see com::sun::star::sheet::XRangeSelection
 */
published service RangeSelectionArguments
{ 
	/** contains the initial value for the range descriptor.
	 */
	[property] string InitialValue; 

	/** contains a title for the operation.
	 */
	[property] string Title; 

	/** specifies if the range selection is finished when the
		mouse button is released, after selecting cells.
	 */
	[property] boolean CloseOnMouseRelease; 
	
    /** specifies if the range selection is limited to a single
        cell only.

        <p>If <TRUE/>, the selection is restricted to a 
        single cell.  If <FALSE/>, multiple adjoining cells can be 
        selected.  The default value is <FALSE/>.</p>

	@since OOo 2.0.3
     */
    [optional, property] boolean SingleCellMode;
}; 
 
//============================================================================= 
 
}; }; }; };  
 
#endif

