/**************************************************************
 * 
 * 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_DataPilotSource_idl__
#define __com_sun_star_sheet_DataPilotSource_idl__

#ifndef __com_sun_star_sheet_XDimensionsSupplier_idl__
#include <com/sun/star/sheet/XDimensionsSupplier.idl>
#endif

#ifndef __com_sun_star_sheet_XDataPilotResults_idl__
#include <com/sun/star/sheet/XDataPilotResults.idl>
#endif

#ifndef __com_sun_star_util_XRefreshable_idl__
#include <com/sun/star/util/XRefreshable.idl>
#endif

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

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

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

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

/** represents a data pilot source.

	<p>A component that implements this service can be used as data source
	for a data pilot table in a spreadsheet document.</p>
 */
published service DataPilotSource
{
	//-------------------------------------------------------------------------

	/** provides access to the collection of the dimensions of the data
		pilot source.
	 */
	interface com::sun::star::sheet::XDimensionsSupplier;

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

	/** gives access to the results of the data pilot table.
	 */
	interface com::sun::star::sheet::XDataPilotResults;

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

	/** provides methods to refresh the data pilot table, that means to
		read the data again from the data pilot source.
	 */
	interface com::sun::star::util::XRefreshable;

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

//!published service PropertySet
	/** provides access to the properties.
	 */
	interface com::sun::star::beans::XPropertySet;

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

	/** specifies if grand totals for the columns are inserted.
	 */
	[property] boolean ColumnGrand;

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

	/** specifies if grand totals for the rows are inserted.
	 */
	[property] boolean RowGrand;

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

    /** specifies the number of row fields.

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

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

    /** specifies the number of column fields. 

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

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

    /** specifies the number of data fields. 

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

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

}; }; }; };

#endif

