/**************************************************************
 * 
 * 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_chart2_XAnyDescriptionAccess_idl__ 
#define __com_sun_star_chart2_XAnyDescriptionAccess_idl__ 
 
#ifndef __com_sun_star_chart_XComplexDescriptionAccess_idl__ 
#include <com/sun/star/chart/XComplexDescriptionAccess.idl> 
#endif 
 
//============================================================================= 
 
 module com {  module sun {  module star {  module chart2 {  
 
//============================================================================= 
 
/** Offers any access to column and row descriptions.
This allows to set date values as categories.

<p>Can be obtained from interface <type>XChartDocument</type> via method getData().</p>

@since OpenOffice 3.4
*/

interface XAnyDescriptionAccess : ::com::sun::star::chart::XComplexDescriptionAccess
{ 
	//------------------------------------------------------------------------- 

	/** retrieves the descriptions for all rows.

    	@returns
        	a sequence of sequences of anys representing the descriptions
        	of all rows. The outer index represents different rows.
            The inner index represents the different levels (usually there is only one).
            The any might be strings for category text axis or doubles for date axis.
	 */
	sequence< sequence< any > > getAnyRowDescriptions();
 
	//------------------------------------------------------------------------- 
	 
	/** sets the descriptions for all rows.
    
        @param rRowDescriptions
            a sequence of sequences of anys representing the descriptions of all
        	rows. The outer index represents different rows.
            The inner index represents the different levels (usually there is only one).
            The any might be strings for category text axis or doubles for date axis.
    */
	void setAnyRowDescriptions( [in] sequence< sequence< any > > rRowDescriptions ); 
 
	//------------------------------------------------------------------------- 

	/** retrieves the descriptions for all columns.
    
        @returns
        	a sequence of sequences of anys representing the descriptions
        	of all columns. The outer index represents different columns.
            The inner index represents the different levels (usually there is only one).
            The any might be strings for category text axis or doubles for date axis.
	 */
	sequence< sequence< any > > getAnyColumnDescriptions();
 
	//------------------------------------------------------------------------- 

	/** sets the descriptions for all columns.

        @param rColumnDescriptions
        	a sequence of sequences of anys which represent the descriptions of
        	all columns. The outer index represents different columns.
            The inner index represents the different levels (usually there is only one).
            The any might be strings for category text axis or doubles for date axis.
	 */
	void setAnyColumnDescriptions( [in] sequence< sequence< any > > rColumnDescriptions );
}; 
 
//============================================================================= 
 
}; }; }; };  
 
#endif 
