/**************************************************************
 * 
 * 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_XDataPilotDataLayoutFieldSupplier_idl__
#define __com_sun_star_sheet_XDataPilotDataLayoutFieldSupplier_idl__

#ifndef __com_sun_star_sheet_XDataPilotField_idl__
#include <com/sun/star/sheet/XDataPilotField.idl>
#endif

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

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

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

/** Provides access to the <type>DataPilotField</type> used to layout
    multiple data fields.

    <p>This data field can be inserted into the rows dimension or columns
    dimension by changing its <member scope="DataPilotField">Orientation</member>
    property. This interface can be used to access the data layout field
    before multiple data fields are inserted into the DataPilot table. It
    remains invisible as long as the DataPilot table contains at most one data
    field.</p>

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

    /** Returns the <type>DataPilotField</type> used to layout multiple data
        fields.

        <p>If the field does not exist yet, it will be created. It is possible
        to insert this field into the rows or columns dimension by changing
        its <member scope="DataPilotField">Orientation</member> property.</p>
     */
    XDataPilotField getDataLayoutField();

};

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

}; }; }; };

#endif

