summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/data/qbardataproxy.h
blob: e97e6a850fba7e6534b862f49d8c244b70f9f26a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc
** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
** This file is part of the QtDataVisualization module.
**
** Licensees holding valid Qt Enterprise licenses may use this file in
** accordance with the Qt Enterprise License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia.
**
** If you have questions regarding the use of this file, please use
** contact form at http://qt.digia.com
**
****************************************************************************/

#ifndef QBARDATAPROXY_H
#define QBARDATAPROXY_H

#include <QtDataVisualization/qabstractdataproxy.h>
#include <QtDataVisualization/qbardataitem.h>
#include <QVector>
#include <QStringList>

QT_DATAVISUALIZATION_BEGIN_NAMESPACE

typedef QVector<QBarDataItem> QBarDataRow;
typedef QList<QBarDataRow *> QBarDataArray;

class QBarDataProxyPrivate;
class QBar3DSeries;

class QT_DATAVISUALIZATION_EXPORT QBarDataProxy : public QAbstractDataProxy
{
    Q_OBJECT

    Q_PROPERTY(int rowCount READ rowCount)
    Q_PROPERTY(QStringList rowLabels READ rowLabels WRITE setRowLabels NOTIFY rowLabelsChanged)
    Q_PROPERTY(QStringList columnLabels READ columnLabels WRITE setColumnLabels NOTIFY columnLabelsChanged)
    Q_PROPERTY(QBar3DSeries *series READ series NOTIFY seriesChanged)
public:
    explicit QBarDataProxy(QObject *parent = 0);
    virtual ~QBarDataProxy();

    // TODO: Replace first part of class description in docs with this once all TODOs are done:
    /*
    * QBarDataProxy is optimized for adding, inserting, and removing rows of data.
    * Adding a column essentially means modifying every row, which is comparatively very inefficient.
    * Proxy is also optimized to use cases where the only defining characteristic of an individual
    * bar is its value. Modifying other data that might be added in the future such as color of
    * individual bar requires allocating additional data object for the bar.
    */

    QBar3DSeries *series();
    int rowCount() const;

    QStringList rowLabels() const;
    void setRowLabels(const QStringList &labels);
    QStringList columnLabels() const;
    void setColumnLabels(const QStringList &labels);

    const QBarDataArray *array() const;
    const QBarDataRow *rowAt(int rowIndex) const;
    const QBarDataItem *itemAt(int rowIndex, int columnIndex) const;

    void resetArray();
    void resetArray(QBarDataArray *newArray);
    void resetArray(QBarDataArray *newArray, const QStringList &rowLabels,
                    const QStringList &columnLabels);

    void setRow(int rowIndex, QBarDataRow *row);
    void setRow(int rowIndex, QBarDataRow *row, const QString &label);
    void setRows(int rowIndex, const QBarDataArray &rows);
    void setRows(int rowIndex, const QBarDataArray &rows, const QStringList &labels);

    // Setting a column is comparatively inefficient as it changes all rows.
    // Can resize rows that are shorter than columnIndex.
    // TODO void setColumn(int columnIndex, const QBarDataRow &column);
    // TODO void setColumns(int columnIndex, const QBarDataArray &columns);

    void setItem(int rowIndex, int columnIndex, const QBarDataItem &item);
    // Change block of items
    // TODO setItems(int rowIndex, int columnIndex, QBarDataArray *items);

    int addRow(QBarDataRow *row);
    int addRow(QBarDataRow *row, const QString &label);
    int addRows(const QBarDataArray &rows);
    int addRows(const QBarDataArray &rows, const QStringList &labels);
    // TODO int addColumn(const QBarDataRow &column); // returns the index of the added column
    // TODO int addColumns(const QBarDataArray &columns); // returns the index of the first added column

    void insertRow(int rowIndex, QBarDataRow *row);
    void insertRow(int rowIndex, QBarDataRow *row, const QString &label);
    void insertRows(int rowIndex, const QBarDataArray &rows);
    void insertRows(int rowIndex, const QBarDataArray &rows, const QStringList &labels);
    // TODO void insertColumn(int columnIndex, const QBarDataRow &column);
    // TODO void insertColumns(int columnIndex, const QBarDataArray &columns);

    void removeRows(int rowIndex, int removeCount, bool removeLabels = true);
    // TODO void removeColumns(int columnIndex, int removeCount);

signals:
    void arrayReset();
    void rowsAdded(int startIndex, int count);
    void rowsChanged(int startIndex, int count);
    void rowsRemoved(int startIndex, int count);
    void rowsInserted(int startIndex, int count);
    // TODO void columnsChanged(int startIndex, int count);
    // TODO void columnsAdded(int startIndex, int count);
    // TODO void columnsRemoved(int startIndex, int count);
    // TODO void columnsInserted(int startIndex, int count);
    void itemChanged(int rowIndex, int columnIndex); // TODO remove once itemsChanged is added?
    // TODO void itemsChanged(int rowIndex, int columnIndex, int rowCount, int columnCount);

    void rowLabelsChanged();
    void columnLabelsChanged();
    void seriesChanged(QBar3DSeries *series);

protected:
    explicit QBarDataProxy(QBarDataProxyPrivate *d, QObject *parent = 0);
    QBarDataProxyPrivate *dptr();
    const QBarDataProxyPrivate *dptrc() const;

private:
    Q_DISABLE_COPY(QBarDataProxy)

    friend class Bars3DController;
};

QT_DATAVISUALIZATION_END_NAMESPACE

#endif // QBARDATAPROXY_H