summaryrefslogtreecommitdiffstats
path: root/src/datavis3d/engine
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavis3d/engine')
-rw-r--r--src/datavis3d/engine/drawer.cpp5
-rw-r--r--src/datavis3d/engine/labelitem.cpp11
-rw-r--r--src/datavis3d/engine/labelitem_p.h1
-rw-r--r--src/datavis3d/engine/qdataset.cpp135
-rw-r--r--src/datavis3d/engine/qdataset.h1
-rw-r--r--src/datavis3d/engine/qdataset_p.h27
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;
};