/**************************************************************
 * 
 * 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_chart_ErrorBar_idl
#define com_sun_star_chart_ErrorBar_idl

#include <com/sun/star/drawing/LineProperties.idl>
#include <com/sun/star/chart/ErrorBarStyle.idl>

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

/**
 */
service ErrorBar
{
    /**
     */
    service ::com::sun::star::drawing::LineProperties;

    /** allows attaching data sequences to the error bars.
        @see data::DataSequenceRole
     */
    optional interface data::XDataSink;

    /** allows querying data sequences that were set at error bars.
        @see data::DataSequenceRole
     */
    [optional] interface data::XDataSource;
    /**
     */
    [property] ::com::sun::star::chart::ErrorBarStyle ErrorBarStyle;

    /**
     */
    [property] double PositiveError;

    /**
     */
    [property] double NegativeError;

    /** The weight for the standard deviation.
     */
    [property] double Weight;

    /**
     */
    [property] boolean ShowPositiveError;

    /**
     */
    [property] boolean ShowNegativeError;
};

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

#endif
