/**************************************************************
 * 
 * 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_DataPilotSourceDimension_idl__
#define __com_sun_star_sheet_DataPilotSourceDimension_idl__

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

#ifndef __com_sun_star_sheet_XHierarchiesSupplier_idl__
#include <com/sun/star/sheet/XHierarchiesSupplier.idl>
#endif

#ifndef __com_sun_star_util_XCloneable_idl__
#include <com/sun/star/util/XCloneable.idl>
#endif

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

#ifndef __com_sun_star_sheet_DataPilotFieldOrientation_idl__
#include <com/sun/star/sheet/DataPilotFieldOrientation.idl>
#endif

#ifndef __com_sun_star_sheet_GeneralFunction_idl__
#include <com/sun/star/sheet/GeneralFunction.idl>
#endif

#ifndef __com_sun_star_sheet_TableFilterField_idl__
#include <com/sun/star/sheet/TableFilterField.idl>
#endif

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

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

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

/** represents a dimension in a data pilot source.

	<p>A dimension is equivalent to a column of a cell range in a spreadsheet
	used for a data pilot field.</p>

	<p>In more complex data sources, a dimension may contain several
	hierarchies, which consolidate items of a complex data type, called
	levels.</p>

	<p>Example: In a database, a column contains date values. This column
	will be a dimension of the data pilot source. One hierarchy may contain
	the 3 levels year, month, day. Another hierarchy may contain the 2 levels
	year and week number.</p>

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

	/** provides access to the name of the dimension, i.e. used in
		collections.
	 */
	interface com::sun::star::container::XNamed;

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

	/** provides access to the collection of hierarchies of this dimension.
	 */
	interface com::sun::star::sheet::XHierarchiesSupplier;

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

	/** supports duplicating the dimension.

		<p>A dimension may be used several times in a data pilot table,
		i.e. as row field and data field.</p>
	 */
	interface com::sun::star::util::XCloneable;

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

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

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

	/** returns the name of the dimension from which this dimension was
		cloned, or <NULL/> if it was not cloned.
	 */
	[readonly, property] com::sun::star::container::XNamed Original;

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

	/** contains <TRUE/> if this is the dimension used to layout the
		different data dimensions.
	 */
	[readonly, property] boolean IsDataLayoutDimension;

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

	/** specifies where the dimension is used.
	 */
	[property] com::sun::star::sheet::DataPilotFieldOrientation Orientation;

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

	/** specifies the position of the dimension within its orientation.
	 */
	[property] long Position;

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

	/** specifies how data are aggregated.
	 */
	[property] com::sun::star::sheet::GeneralFunction Function;

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

	/** specifies which hierarchy of the dimension is used.

		@see com::sun::star::sheet::DataPilotSourceHierarchies
	 */
	[property] long UsedHierarchy;

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

	/** specifies which values are used.
	 */
	[property] sequence< com::sun::star::sheet::TableFilterField > Filter;

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

    /** contains flags that control the usage of the dimension.

        @see com::sun::star::sheet::DimensionFlags
     */
    [readonly, property, optional] long Flags;

};

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

}; }; }; };

#endif

