/**************************************************************
 * 
 * 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 OOo 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 OOo 3.3

     */
    [optional, property] string SourceServiceName;

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

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

    @since OOo 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 OOo 3.4
     */
    [optional, property] string GrandTotalName;

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

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

}; }; }; };

#endif
