/**************************************************************
 * 
 * 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_DatabaseRange_idl__
#define __com_sun_star_sheet_DatabaseRange_idl__

#ifndef __com_sun_star_sheet_XDatabaseRange_idl__
#include <com/sun/star/sheet/XDatabaseRange.idl>
#endif

#ifndef __com_sun_star_sheet_XCellRangeReferrer_idl__
#include <com/sun/star/sheet/XCellRangeReferrer.idl>
#endif

#ifndef __com_sun_star_beans_XPropertySet_idl__
#include <com/sun/star/beans/XPropertySet.idl>
#endif

#ifndef __com_sun_star_container_XNamed_idl__
#include <com/sun/star/container/XNamed.idl>
#endif

#ifndef __com_sun_star_util_XRefreshable_idl__
#include <com/sun/star/util/XRefreshable.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 {

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

/** represents a database range in a spreadsheet document.

	<p>A database range is a name for a cell range that also stores filtering,
	sorting, subtotal and data import settings and options.</p>

	@see com::sun::star::sheet::DatabaseRanges
 */
published service DatabaseRange
{
	// DocMerge: empty anyway
	interface com::sun::star::sheet::XDatabaseRange;

	// DocMerge: empty anyway
	interface com::sun::star::sheet::XCellRangeReferrer;

	// DocMerge: empty anyway
	interface com::sun::star::beans::XPropertySet;

	// DocMerge: empty anyway
	interface com::sun::star::container::XNamed;

	[optional] interface com::sun::star::util::XRefreshable;

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

	// DocMerge from xml: property com::sun::star::sheet::DatabaseRange::MoveCells
	/** if this property is set, columns or rows are inserted or deleted
		when the size of the range is changed by an update operation.
	 */
	[property] boolean MoveCells;

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

	// DocMerge from xml: property com::sun::star::sheet::DatabaseRange::KeepFormats
	/** if this property is set, cell formats are extended
		when the size of the range is changed by an update operation.
	 */
	[property] boolean KeepFormats;

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

	// DocMerge from xml: property com::sun::star::sheet::DatabaseRange::StripData
	/** if this property is set, the cell contents within the database
		range are left out when the document is saved.
	 */
	[property] boolean StripData;

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

	/** specifies whether the AutoFilter is enabled or not.

		@since OOo 1.1.2
	 */
	[optional, property] boolean AutoFilter;

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

	/** specifies whether the filter criteria should be taken from a CellRange.

		@since OOo 1.1.2
	 */
	[optional, property] boolean UseFilterCriteriaSource;

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

	/** specifies the range where the filter can find the filter criterias.
		<p>This is only used if <member>SheetFilterDescriptor::UseFilterCriteriaSource</member> is <TRUE/>.</p>

		@since OOo 1.1.2
	 */
	[optional, property] com::sun::star::table::CellRangeAddress FilterCriteriaSource;

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

	/** specifies the time between two refresh actions in seconds.

		@since OOo 2.0
	 */
	[optional, property] long RefreshPeriod;

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

	/** specifies whether the imported data is only a selection of the database.

		@since OOo 2.0
	 */
	[optional, property] boolean FromSelection;

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

    /** returns the index used to refer to this range in token arrays.

        <p>A token describing a database range shall contain the op-code
        obtained from the <const>FormulaMapGroupSpecialOffset::DB_AREA</const>
        and this index as data part.</p>

        @see com::sun::star::sheet::FormulaToken
        @see com::sun::star::sheet::FormulaMapGroupSpecialOffset::DB_AREA

        @since OOo 3.0
     */
    [optional, readonly, property] long TokenIndex;
};

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

}; }; }; };

/*=============================================================================

=============================================================================*/
#endif
