/* -*- 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_data_DataSequence_idl
#define com_sun_star_chart2_data_DataSequence_idl

#include <com/sun/star/beans/XPropertySet.idl>
#include <com/sun/star/container/XIndexReplace.idl>
#include <com/sun/star/util/XCloneable.idl>
#include <com/sun/star/util/XModifyBroadcaster.idl>
#include <com/sun/star/chart2/data/XDataSequence.idl>
#include <com/sun/star/chart2/data/XNumericalDataSequence.idl>
#include <com/sun/star/chart2/data/XTextualDataSequence.idl>
#include <com/sun/star/chart2/data/DataSequenceRole.idl>

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

/** describes a container for a sequence of values.

    <p>With the interface XDataSequence it is possible to
    transfer a complete sequence of values.

    <p>With the optional
    com::sun::star::container::XIndexReplace it is
    possible to modify single elements, if the corresponding
    DataProvider supports modification of its values.</p>
  */
service DataSequence
{
    /** provides read- and write-access to the underlying data.
     */
    interface XDataSequence;

    /** you may implement this interface to allow a fast access to
        numerical data.  With this interface you can get a
        `sequence` of `double` values.
    */
    [optional] interface   XNumericalDataSequence;

    /** you may implement this interface to allow a fast access to
        textual data.  With this interface you can get a
        `sequence` of `string` values.
    */
    [optional] interface   XTextualDataSequence;

    /** provides read- and write-access to single elements of the
        underlying data.

        <p>Only when supporting this interface, it is possible for
        client applications to modify the content of the data that is
        provided by this DataSequence.</p>
     */
    [optional] interface ::com::sun::star::container::XIndexReplace;

    /** Allows creating copies of data sequences.  If this interface
        is not supported, the same object will be shared if used by
        multiple objects.

        <p>Cloning is especially useful when using identifiers.  A
        cloned data sequence will get a new identifier while the
        source range representation is identical to the original
        one.</p>

        <p>Note that, when this interface is not implemented the
        releasing of identifiers at the XDataProvider
        will not work properly, because more than one object may use
        the same identifier.  So, when an object releases the
        identifier, another object might use a stale identifier.</p>
     */
    [optional] interface ::com::sun::star::util::XCloneable;

    /** is used to broadcast change events whenever the content (data)
        or the range representations change.
     */
    interface com::sun::star::util::XModifyBroadcaster;

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


    /** The key (index) of the number format that this sequence should
        be formatted with.

        <p>The key identifies a number format in an
        com::sun::star::util::XNumberFormats
        object.  This object can be retrieved by the
        com::sun::star::util::XNumberFormatsSupplier
        interface supported by
        com::sun::star::chart::ChartDocument.</p>

        @todo use proper number format instead of a transient key.
     */
//     [optional, property] long                     NumberFormatKey;

    /** The role of the series inside a data series.  This may be any
        string.  However some strings are predefined and should always
        be used in the same way.

        @see DataSequenceRole
     */
    [property] DataSequenceRole                   Role;

    /** If set to false `FALSE`, values from hidden cells are not returned.
     */
    [optional, property] boolean                  IncludeHiddenCells;

    /** a sequence of indexes that identify values that are hidden in the underlying
        data provider.
     */
    [optional, property] sequence< long >         HiddenValues;
};

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


#endif

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