/**************************************************************************** ** ** Copyright (C) 2012 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 Qt Commercial Charts Add-on. ** ** $QT_BEGIN_LICENSE$ ** Licensees holding valid Qt Commercial licenses may use this file in ** accordance with the Qt Commercial 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 ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef BARSERIES_H #define BARSERIES_H #include #include QTCOMMERCIALCHART_BEGIN_NAMESPACE typedef QStringList QBarCategories; class QBarSet; class BarChartModel; class BarCategory; // Container for series class QTCOMMERCIALCHART_EXPORT QBarSeries : public QSeries { Q_OBJECT public: QBarSeries(QStringList categories, QObject *parent = 0); virtual QSeriesType type() const { return QSeries::SeriesTypeBar; } void appendBarSet(QBarSet *set); // Takes ownership of set void removeBarSet(QBarSet *set); // Releases ownership, doesn't delete set void insertBarSet(int i, QBarSet *set); void insertCategory(int i, QString category); void removeCategory(int i); int barsetCount() const; int categoryCount() const; QList barSets() const; QBarCategories categories() const; void setValuesVisible(bool visible = true); bool setModel(QAbstractItemModel *model); QAbstractItemModel *modelExt() { return m_model; } void setModelMapping(int categories, int bottomBoundry, int topBoundry, Qt::Orientation orientation = Qt::Vertical); void setModelMappingShift(int first, int count); public: // TODO: Functions below this are not part of api and will be moved // to private implementation, when we start using it // TODO: TO PIMPL ---> QBarSet* barsetAt(int index); QString categoryName(int category); qreal min(); qreal max(); qreal valueAt(int set, int category); qreal percentageAt(int set, int category); qreal categorySum(int category); qreal maxCategorySum(); BarChartModel& model(); // <--- TO PIMPL Q_SIGNALS: void clicked(QBarSet *barset, QString category, Qt::MouseButtons button); // Up to user of api, what to do with these signals // void updatedBars(); void restructuredBar(int); // TODO: internal signals, these to private implementation. // TODO: TO PIMPL ---> void showToolTip(QPoint pos, QString tip); // <--- TO PIMPL public Q_SLOTS: void setToolTipEnabled(bool enabled = true); // enables tooltips // TODO: TO PIMPL ---> void barsetClicked(QString category, Qt::MouseButtons button); // <--- TO PIMPL private Q_SLOTS: // slots for updating bars when data in model changes void modelUpdated(QModelIndex topLeft, QModelIndex bottomRight); void modelDataAdded(QModelIndex parent, int start, int end); void modelDataRemoved(QModelIndex parent, int start, int end); void barsetChanged(); protected: BarChartModel *m_internalModel; // TODO: this may change... current "2 models" situation doesn't look good. QAbstractItemModel* m_model; int m_mapCategories; int m_mapBarBottom; int m_mapBarTop; int m_mapFirst; int m_mapCount; Qt::Orientation m_mapOrientation; }; QTCOMMERCIALCHART_END_NAMESPACE #endif // BARSERIES_H