/**************************************************************
 * 
 * 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_DataPoint_idl
#define com_sun_star_chart2_DataPoint_idl

#include <com/sun/star/style/CharacterProperties.idl>

#include <com/sun/star/style/XStyle.idl>

module com
{
module sun
{
module star
{
module chart2
{

service DataPoint
{
    service DataPointProperties;

    service ::com::sun::star::style::CharacterProperties;
    [optional] service ::com::sun::star::style::CharacterPropertiesAsian;
    [optional] service ::com::sun::star::style::CharacterPropertiesComplex;

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

    /** this property handles the style.  This property must support
        the service <type scope="com::sun::star::style">Style</type>.

        <p>It should provide templates for all properties in this
        service, thus it must also support <type>DataPoint</type>.</p>
	 */
// 	[property]  ::com::sun::star::style::XStyle     Style;

    /** Gives the offset of the data point.  For PieDiagrams this
        would be the percentage by which pies are dragged out of the
        cake.
     */
    [optional, property] double                   Offset;
};

} ; // chart2
} ; // com
} ; // sun
} ; // star


#endif
