/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   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 .
 */
#ifndef com_sun_star_chart2_DataSeries_idl
#define com_sun_star_chart2_DataSeries_idl

#include <com/sun/star/beans/PropertySet.idl>
#include <com/sun/star/container/XIndexContainer.idl>
#include <com/sun/star/container/XContainer.idl>
#include <com/sun/star/chart2/DataPointProperties.idl>
#include <com/sun/star/chart2/StackingDirection.idl>
#include <com/sun/star/chart2/XDataSeries.idl>
#include <com/sun/star/chart2/XRegressionCurveContainer.idl>
#include <com/sun/star/chart2/data/XDataSink.idl>
#include <com/sun/star/chart2/data/XDataSource.idl>

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

    // NOTES

    // ability to be combined - data series combiner (another component?)
    // coordinatesystem-supplier
    // chart-type ? property string rendererServiceName


/** reflects the model data of the object that has all the information
    for a DataRenderer to create a visible data series in
    a chart.

    <p>It combines one or more DataSequences which are
    interpreted by evaluating their role-string.</p>

    @see DataSequenceRole
  */
service DataSeries
{
    /** allows to connect a CoordinateSystem to a DataSeries
     */
//     service CoordinateSystemSupplier;

//    service ChartTypeSupplier;
    /** the property interface by which the properties of all
        supported services are exchanged
    */
    service ::com::sun::star::beans::PropertySet;

    /** these properties serve as default for data points.

        <p>So, an attribute for a data point comes from one point in
        the following hierarchy:</p>

        <ul>
         <li>default value of data series</li>
         <li>value from style of data series (if a style was set)</li>
         <li>value from hard attribute of data series (set with setPropertyValue)</li>
         <li>value from style of data point (if a style was set)</li>
         <li>value from hard attribute of data point (set with setPropertyValue)</li>
        </ul>
     */
    service DataPointProperties;


    /** allows setting a coordinate-system
     */
    interface XDataSeries;

    /** allows attaching data sequences to a series.
     */
    interface data::XDataSink;

    /** allows querying the data that was set.
     */
    interface data::XDataSource;

    /** gives access to the data points contained in a data series.

        <p>The objects returned by the
        com::sun::star::container::XIndexAccess
        are of type
        com::sun::star::beans::XPropertySet
        and support the service
        DataPoint.
    */
//     interface ::com::sun::star::container::XIndexContainer;

    /** establishes a broadcaster-listener mechanism for the
        com::sun::star::container::XIndexContainer
        to keep changes and the property
        DataSeries::AttributedDataPoints in sync.
     */
//     interface ::com::sun::star::container::XContainer;

    /** Holds regression curves (aka trend-lines) for a data series.
     */
    [optional] interface XRegressionCurveContainer;


    /** This service will be used to render this data series.

        <p>This service name can be used to determine which DataSeries
        are of the same type.</p>

        <p>The result of the
        DataSeries::DataSequenceRoles depends on the
        renderer service set here.</p>
     */
    // stored at the DataSeriesGroup now
//     [property] string                             DataRendererServiceName;

    /** a sequence of indexes denoting which data points have set
        properties that differ from the default.

        <p>The default values are determined by the properties set at
        the #DataPointProperties of the data
        series.</p>

        <p>If the sequence is empty, that means that all data points
        look alike.  They are formatted using the property values set
        in the data series.</p>

        <p>The indexes in this sequence match the indexes used by the
        XIndexContainer.</p>

        <p>This property is especially useful for large data series
        with only some formatted data points, because you do not have
        to iterate over all elements.</p>
     */
    [readonly, optional, property] sequence< long > AttributedDataPoints;

    /** indicates whether this series should be stacked with respect to the previous series.
    */
    [property] StackingDirection StackingDirection;

    /** If `TRUE`, the data points of this series get different
        colors by default, like in a pie chart.
     */
    [optional, property] boolean                    VaryColorsByPoint;

    /** This property describes whether the series should be shown at
        the main value axis or at the secondary value axis.  Having
        this property not set or setting it to 0 means that this data
        series will be scaled at the primary y-axis ( of the
        coordinate system in which this series is hosted ).

        <p>Setting this property to 1 means that this series should be
        scaled at the secondary y-axis.  If there is no secondary axis
        the main axis should be used for scaling instead.</p>

        <p>If you want to scale a series at a different x or z axis
        you need to create an additional coordinate system and host
        this series there.</p>
    */
    [optional, property] long                       AttachedAxisIndex;

    /** This property describes whether the legend entry for the
        the data series should be shown.

        @since LibreOffice 6.3
      */
    [optional, property] boolean                    ShowLegendEntry;
};

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


#endif

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
