/**************************************************************
 * 
 * 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_DataPilotSourceMember_idl__
#define __com_sun_star_sheet_DataPilotSourceMember_idl__

#ifndef __com_sun_star_container_XNamed_idl__
#include <com/sun/star/container/XNamed.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 member in a data pilot source level.

	<p>Members are the data items that will appear in a data pilot table
	as row headers and column headers of the data range (if used in
	row or column dimensions), or to calculate the values of the
	data range (if used in data dimensions).</p>

	@see com::sun::star::sheet::DataPilotSourceLevel
	@see com::sun::star::sheet::DataPilotSource
 */
published service DataPilotSourceMember
{
	//-------------------------------------------------------------------------

	/** provides access to the name of the member.

		<p>This may be the textual representation of a numerical value.</p>
	 */
	interface com::sun::star::container::XNamed;

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

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

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

	/** specifies whether the member is visible.
	 */
	[property] boolean IsVisible;

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

	/** specifies whether details for the member are shown.
	 */
	[property] boolean ShowDetails;

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

    /** specifies the member's position in its hierarchy level if sorting
        is manual.

        @since OOo 2.4
     */
    [optional, property] boolean Position;
};

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

}; }; }; };

#endif

