diff options
Diffstat (limited to 'src/datavis3d/engine')
-rw-r--r-- | src/datavis3d/engine/drawer.cpp | 5 | ||||
-rw-r--r-- | src/datavis3d/engine/labelitem.cpp | 11 | ||||
-rw-r--r-- | src/datavis3d/engine/labelitem_p.h | 1 | ||||
-rw-r--r-- | src/datavis3d/engine/qdataset.cpp | 135 | ||||
-rw-r--r-- | src/datavis3d/engine/qdataset.h | 1 | ||||
-rw-r--r-- | src/datavis3d/engine/qdataset_p.h | 27 |
6 files changed, 57 insertions, 123 deletions
diff --git a/src/datavis3d/engine/drawer.cpp b/src/datavis3d/engine/drawer.cpp index 3fdaa58b..92d6b8db 100644 --- a/src/datavis3d/engine/drawer.cpp +++ b/src/datavis3d/engine/drawer.cpp @@ -308,10 +308,7 @@ void Drawer::generateLabelItem(LabelItem *item, const QString &text) { initializeOpenGL(); - // Delete previous texture, if there is one - GLuint labelTexture = item->textureId(); - if (labelTexture) - glDeleteTextures(1, &labelTexture); + item->clear(); // Create labels // Print label into a QImage using QPainter diff --git a/src/datavis3d/engine/labelitem.cpp b/src/datavis3d/engine/labelitem.cpp index 7c76df5d..07798607 100644 --- a/src/datavis3d/engine/labelitem.cpp +++ b/src/datavis3d/engine/labelitem.cpp @@ -51,6 +51,8 @@ LabelItem::LabelItem() LabelItem::~LabelItem() { + // Note: Cannot delete texture here, unless we also implement + // reference counting for created textures. } void LabelItem::setSize(const QSize &size) @@ -73,4 +75,13 @@ GLuint LabelItem::textureId() return m_textureId; } +void LabelItem::clear() +{ + if (m_textureId) { + glDeleteTextures(1, &m_textureId); + m_textureId = 0; + } + m_size = QSize(0, 0); +} + QT_DATAVIS3D_END_NAMESPACE diff --git a/src/datavis3d/engine/labelitem_p.h b/src/datavis3d/engine/labelitem_p.h index 31666278..7a5f5f11 100644 --- a/src/datavis3d/engine/labelitem_p.h +++ b/src/datavis3d/engine/labelitem_p.h @@ -68,6 +68,7 @@ public: QSize size(); void setTextureId(GLuint textureId); GLuint textureId(); + void clear(); private: QSize m_size; diff --git a/src/datavis3d/engine/qdataset.cpp b/src/datavis3d/engine/qdataset.cpp index 38d8d0b4..1b2400b9 100644 --- a/src/datavis3d/engine/qdataset.cpp +++ b/src/datavis3d/engine/qdataset.cpp @@ -44,6 +44,10 @@ #include "qdatarow.h" #include "qdatarow_p.h" +#include "qvalueaxis.h" +#include "qcategoryaxis.h" +#include "qabstractaxis_p.h" + #include <QPoint> #include <QString> @@ -51,8 +55,6 @@ QT_DATAVIS3D_BEGIN_NAMESPACE -const QString empty; - /*! * \class QDataSet * \inmodule QtDataVis3D @@ -100,40 +102,12 @@ void QDataSet::setLabels(const QString &xAxis, const QVector<QString> &labelsRow, const QVector<QString> &labelsColumn) { - // skip empty labels, keep the previous ones - if (xAxis != empty && d_ptr->m_xAxis != xAxis) { - d_ptr->m_xAxis = xAxis; - // Generate axis label texture - if (d_ptr->m_drawer) - d_ptr->m_drawer->generateLabelItem(&d_ptr->m_xAxisItem, xAxis); - } - if (zAxis != empty && d_ptr->m_zAxis != zAxis) { - d_ptr->m_zAxis = zAxis; - // Generate axis label texture - if (d_ptr->m_drawer) - d_ptr->m_drawer->generateLabelItem(&d_ptr->m_zAxisItem, zAxis); - } - if (yAxis != empty && d_ptr->m_yAxis != yAxis) { - d_ptr->m_yAxis = yAxis; - // Generate axis label texture - if (d_ptr->m_drawer) - d_ptr->m_drawer->generateLabelItem(&d_ptr->m_yAxisItem, yAxis); - } - d_ptr->m_labelsRow = labelsRow; - d_ptr->m_labelsColumn = labelsColumn; - // Generate row and column label textures - if (d_ptr->m_drawer) { - for (int itemCount = 0; itemCount < labelsColumn.size(); itemCount++) { - d_ptr->m_labelItemsColumn.append(LabelItem()); - d_ptr->m_drawer->generateLabelItem(&d_ptr->m_labelItemsColumn[itemCount], - labelsColumn.at(itemCount)); - } - for (int itemCount = 0; itemCount < labelsRow.size(); itemCount++) { - d_ptr->m_labelItemsRow.append(LabelItem()); - d_ptr->m_drawer->generateLabelItem(&d_ptr->m_labelItemsRow[itemCount], - labelsRow.at(itemCount)); - } - } + d_ptr->m_axisX->setTitle(xAxis); + d_ptr->m_axisZ->setTitle(zAxis); + d_ptr->m_axisY->setTitle(yAxis); + + static_cast<QCategoryAxis *>(d_ptr->m_axisX)->setLabels(labelsRow); + static_cast<QCategoryAxis *>(d_ptr->m_axisZ)->setLabels(labelsColumn); } /*! @@ -150,17 +124,9 @@ void QDataSet::addRow(QDataRow *row) QDataSetPrivate::QDataSetPrivate(QDataSet *q) : q_ptr(q), m_set(QVector<QDataRow*>()), - m_xAxis(QString()), - m_zAxis(QString()), - m_yAxis(QString()), - m_labelsRow(QVector<QString>()), - m_labelsColumn(QVector<QString>()), - m_xAxisItem(LabelItem()), - m_zAxisItem(LabelItem()), - m_yAxisItem(LabelItem()), - m_labelItemsRow(QVector<LabelItem>()), - m_labelItemsColumn(QVector<LabelItem>()), - m_drawer(0) + m_axisX(new QCategoryAxis()), + m_axisZ(new QCategoryAxis()), + m_axisY(new QValueAxis()) { } @@ -169,36 +135,13 @@ QDataSetPrivate::~QDataSetPrivate() for (int itemCount = 0; itemCount < m_set.size(); itemCount++) delete m_set.at(itemCount); m_set.clear(); - // Delete axis textures - GLuint textureid = m_xAxisItem.textureId(); - if (textureid) - glDeleteTextures(1, &textureid); - textureid = m_zAxisItem.textureId(); - if (textureid) - glDeleteTextures(1, &textureid); - textureid = m_yAxisItem.textureId(); - if (textureid) - glDeleteTextures(1, &textureid); - // Delete row and column textures - for (int itemCount = 0; itemCount < m_labelItemsColumn.size(); itemCount++) { - LabelItem item = m_labelItemsColumn.at(itemCount); - textureid = item.textureId(); - if (textureid) - glDeleteTextures(1, &textureid); - } - for (int itemCount = 0; itemCount < m_labelItemsRow.size(); itemCount++) { - LabelItem item = m_labelItemsRow.at(itemCount); - textureid = item.textureId(); - if (textureid) - glDeleteTextures(1, &textureid); - } } void QDataSetPrivate::setDrawer(Drawer *drawer) { - m_drawer = drawer; - connect(m_drawer, SIGNAL(drawerChanged()), this, SLOT(updateTextures())); - updateTextures(); + m_axisX->d_ptr->setDrawer(drawer); + m_axisY->d_ptr->setDrawer(drawer); + m_axisZ->d_ptr->setDrawer(drawer); } QVector<QDataRow*> QDataSetPrivate::set() @@ -216,37 +159,43 @@ QDataRow *QDataSetPrivate::getRow(int rowIndex) QVector<QString> QDataSetPrivate::rowLabels() { - return m_labelsRow; + // TODO get rid of this function + return m_axisX->labels(); } QVector<QString> QDataSetPrivate::columnLabels() { - return m_labelsColumn; + // TODO get rid of this function + return m_axisZ->labels(); } QVector<LabelItem> QDataSetPrivate::rowLabelItems() { - return m_labelItemsRow; + // TODO get rid of this function + return m_axisX->d_ptr->labelItems(); } QVector<LabelItem> QDataSetPrivate::columnLabelItems() { - return m_labelItemsColumn; + // TODO get rid of this function + return m_axisZ->d_ptr->labelItems(); } void QDataSetPrivate::axisLabels(QString *xAxis, QString *zAxis, QString *yAxis) { - *xAxis = m_xAxis; - *zAxis = m_zAxis; - *yAxis = m_yAxis; + // TODO get rid of this function + *xAxis = m_axisX->title(); + *zAxis = m_axisZ->title(); + *yAxis = m_axisY->title(); } void QDataSetPrivate::axisLabelItems(LabelItem *xAxisItem, LabelItem *zAxisItem, LabelItem *yAxisItem) { - *xAxisItem = m_xAxisItem; - *zAxisItem = m_zAxisItem; - *yAxisItem = m_yAxisItem; + // TODO get rid of this function + *xAxisItem = m_axisX->d_ptr->titleItem(); + *zAxisItem = m_axisZ->d_ptr->titleItem(); + *yAxisItem = m_axisY->d_ptr->titleItem(); } void QDataSetPrivate::verifySize(int colSize, int rowSize) @@ -284,24 +233,4 @@ QPair<GLfloat, GLfloat> QDataSetPrivate::limitValues() return limits; } -void QDataSetPrivate::updateTextures() -{ - if (m_xAxis != empty) - m_drawer->generateLabelItem(&m_xAxisItem, m_xAxis); - if (m_zAxis != empty) - m_drawer->generateLabelItem(&m_zAxisItem, m_zAxis); - if (m_yAxis != empty) - m_drawer->generateLabelItem(&m_yAxisItem, m_yAxis); - for (int itemCount = 0; itemCount < m_labelsColumn.size(); itemCount++) { - if (m_labelItemsColumn.size() < itemCount + 1) - m_labelItemsColumn.append(LabelItem()); - m_drawer->generateLabelItem(&m_labelItemsColumn[itemCount], m_labelsColumn.at(itemCount)); - } - for (int itemCount = 0; itemCount < m_labelsRow.size(); itemCount++) { - if (m_labelItemsRow.size() < itemCount + 1) - m_labelItemsRow.append(LabelItem()); - m_drawer->generateLabelItem(&m_labelItemsRow[itemCount], m_labelsRow.at(itemCount)); - } -} - QT_DATAVIS3D_END_NAMESPACE diff --git a/src/datavis3d/engine/qdataset.h b/src/datavis3d/engine/qdataset.h index e4054d35..b4f3bac4 100644 --- a/src/datavis3d/engine/qdataset.h +++ b/src/datavis3d/engine/qdataset.h @@ -62,6 +62,7 @@ public: explicit QDataSet(); ~QDataSet(); + // TODO: Dataset specialized for bar chart. Generalize it to better serve other chart types. Q_INVOKABLE void setLabels(const QString &xAxis = QString(), const QString &zAxis = QString(), const QString &yAxis = QString(), diff --git a/src/datavis3d/engine/qdataset_p.h b/src/datavis3d/engine/qdataset_p.h index 062494e9..1ef8b893 100644 --- a/src/datavis3d/engine/qdataset_p.h +++ b/src/datavis3d/engine/qdataset_p.h @@ -54,6 +54,7 @@ #include "datavis3dglobal_p.h" #include "qdataset.h" +#include "qabstractaxis.h" #include "drawer_p.h" #include "labelitem_p.h" #include <QVector> @@ -70,35 +71,29 @@ public: ~QDataSetPrivate(); void setDrawer(Drawer *drawer); - QVector<QDataRow*> set(); + QVector<QDataRow *> set(); QDataRow *getRow(int rowIndex); + + // TODO: These functions need to go, these need to be asked from axes directly. + // Also, these are called a lot an each call constructs a new vector... QVector<QString> rowLabels(); QVector<QString> columnLabels(); QVector<LabelItem> rowLabelItems(); QVector<LabelItem> columnLabelItems(); void axisLabels(QString *xAxis, QString *zAxis, QString *yAxis); void axisLabelItems(LabelItem *xAxisItem, LabelItem *zAxisItem, LabelItem *yAxisItem); + void verifySize(int colSize, int rowSize = 0); // If rowSize is 0, don't verify rows // first = min, second = max QPair<GLfloat, GLfloat> limitValues(); -public Q_SLOTS: - void updateTextures(); - private: QDataSet *q_ptr; - QVector<QDataRow*> m_set; - QString m_xAxis; - QString m_zAxis; - QString m_yAxis; - QVector<QString> m_labelsRow; - QVector<QString> m_labelsColumn; - LabelItem m_xAxisItem; - LabelItem m_zAxisItem; - LabelItem m_yAxisItem; - QVector<LabelItem> m_labelItemsRow; - QVector<LabelItem> m_labelItemsColumn; - Drawer *m_drawer; + QVector<QDataRow *> m_set; + QAbstractAxis *m_axisX; + QAbstractAxis *m_axisY; + QAbstractAxis *m_axisZ; + friend class QDataSet; }; |