/**************************************************************
 *
 * 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_DataPilotTableDescriptor_idl__
#define __com_sun_star_sheet_DataPilotTableDescriptor_idl__

#ifndef __com_sun_star_sheet_XDataPilotDescriptor_idl__
#include <com/sun/star/sheet/XDataPilotDescriptor.idl>
#endif

#ifndef __com_sun_star_sheet_XDataPilotDataLayoutFieldSupplier_idl__
#include <com/sun/star/sheet/XDataPilotDataLayoutFieldSupplier.idl>
#endif

#ifndef __com_sun_star_beans_XPropertySet_idl__
#include <com/sun/star/beans/XPropertySet.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 {

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

/** represents the description of the layout of a data pilot table.

	@see com::sun::star::sheet::DataPilotTable
*/
published service DataPilotDescriptor
{
	//-------------------------------------------------------------------------

	/** provides access to the layout settings of the data pilot table.
	 */
    interface XDataPilotDescriptor;

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

	/** provides access to the layout settings of the data pilot table.
	 */
	[optional] interface com::sun::star::beans::XPropertySet;

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

    /** Provides access to the <type>DataPilotField</type> used to layout
        multiple data fields.
     */
    [optional] interface XDataPilotDataLayoutFieldSupplier;

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

    /** specifies parameters to create the data pilot table from a database.

    @see DatabaseImportDescriptor
    @since OpenOffice 3.3

     */
    [optional, property] sequence< com::sun::star::beans::PropertyValue > ImportDescriptor;

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

    /** specifies the name of a <type>DataPilotSource</type> implementation
        for the data pilot table.

    @since OpenOffice 3.3

     */
    [optional, property] string SourceServiceName;

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

    /** specifies arguments that are passed to the implementation named by
        <member>SourceServiceName</member>.

    @since OpenOffice 3.3

     */
    [optional, property] sequence< com::sun::star::beans::PropertyValue > ServiceArguments;

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

    /** specifies if empty rows in the source data are ignored.
	 */
	[optional, property] boolean IgnoreEmptyRows;

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

    /** specifies if empty category cells in the source data should be treated
        as repetition of the content from the previous row.
	 */
	[optional, property] boolean RepeatIfEmpty;

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

    /** specifies if columns for grand total results are created.
	 */
	[optional, property] boolean ColumnGrand;

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

    /** specifies if rows for grand total results are created.
	 */
	[optional, property] boolean RowGrand;

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

	/** specifies whether the filter button is shown.
	 */
	[optional, property] boolean ShowFilterButton;

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

	/** specifies whether to drill down to details or go into edit mode.
	 */
	[optional, property] boolean DrillDownOnDoubleClick;

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

    /** specifies a label for grand total results.

    @since OpenOffice 3.4
     */
    [optional, property] string GrandTotalName;

    //-------------------------------------------------------------------------
};

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

}; }; }; };

#endif
