summaryrefslogtreecommitdiffstats
path: root/src/datavis3dqml2/declarativebars.cpp
diff options
context:
space:
mode:
authorTomi Korpipää <tomi.korpipaa@digia.com>2013-06-24 09:26:00 +0300
committerTomi Korpipää <tomi.korpipaa@digia.com>2013-06-24 10:55:43 +0300
commit8af1198998123f11f7e343685389d7ba76de24d5 (patch)
tree1fe774c382372b102516d968fbeb5efaf29957f7 /src/datavis3dqml2/declarativebars.cpp
parentfb7efe0169401e49a8bbf8e4b2b495d98f26046a (diff)
Crash fix to QML bars exit
Still possible to get crashing if datasets, rows and items are created in reverse order. Needs to be documented. Change-Id: Ia35b54eb9652ba031da35dd37f9ef9cae9aca04d Change-Id: Ia35b54eb9652ba031da35dd37f9ef9cae9aca04d Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Diffstat (limited to 'src/datavis3dqml2/declarativebars.cpp')
-rw-r--r--src/datavis3dqml2/declarativebars.cpp110
1 files changed, 87 insertions, 23 deletions
diff --git a/src/datavis3dqml2/declarativebars.cpp b/src/datavis3dqml2/declarativebars.cpp
index 19fd8ee7..8c458be1 100644
--- a/src/datavis3dqml2/declarativebars.cpp
+++ b/src/datavis3dqml2/declarativebars.cpp
@@ -42,6 +42,8 @@
#include "declarativebars.h"
#include "bars3dcontroller_p.h"
#include "qdataset.h"
+#include "qdataset_p.h"
+#include "qdatarow_p.h"
#include <QtQuick/QQuickWindow>
#include <QtGui/QOpenGLFramebufferObject>
@@ -61,9 +63,6 @@ DeclarativeBars::DeclarativeBars(QQuickItem *parent)
setFlags(QQuickItem::ItemHasContents);
setAcceptedMouseButtons(Qt::AllButtons);
- // TODO: Note; this does not flip the render result correctly. It is in mirror image.
- //setRotation(180.0);
-
// TODO: These seem to have no effect; find a way to activate anti-aliasing
setAntialiasing(true);
setSmooth(true);
@@ -99,16 +98,6 @@ QSGNode *DeclarativeBars::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData
m_cachedState->m_isSampleSpaceSet = false;
}
- if (m_cachedState->m_dataRow) {
- m_shared->addDataRow(m_cachedState->m_dataRow);
- m_cachedState->m_dataRow = 0;
- }
-
- if (m_cachedState->m_dataSet) {
- m_shared->addDataSet(m_cachedState->m_dataSet);
- m_cachedState->m_dataSet = 0;
- }
-
if (m_cachedState->m_isSelectionModeSet) {
m_shared->setSelectionMode(m_cachedState->m_selectionMode);
m_cachedState->m_isSelectionModeSet = false;
@@ -129,6 +118,16 @@ QSGNode *DeclarativeBars::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData
m_cachedState->m_isGridSet = false;
}
+ if (m_cachedState->m_dataRow) {
+ m_shared->addDataRow(m_cachedState->m_dataRow);
+ m_cachedState->m_dataRow = 0;
+ }
+
+ if (m_cachedState->m_dataSet) {
+ m_shared->addDataSet(m_cachedState->m_dataSet);
+ m_cachedState->m_dataSet = 0;
+ }
+
// If old node exists and has right size, reuse it.
if (oldNode && m_initialisedSize == boundingRect().size().toSize()) {
// Update bounding rectangle (that has same size as before).
@@ -282,20 +281,42 @@ void DeclarativeBars::addDataRow(const QVector<float> &dataRow, const QString &l
const QVector<QString> &labelsColumn)
{
qDebug() << "Enter DeclarativeBars::addDataRow(const QVector<float> &dataRow...)";
- m_shared->addDataRow(dataRow, labelRow, labelsColumn);
+ // TODO: Save labels to cachedstate
+ QDataItem *newItem;
+ delete m_cachedState->m_dataRow;
+ m_cachedState->m_dataRow = new QDataRow();
+ for (int i = 0; i < dataRow.count(); i++) {
+ newItem = new QDataItem(dataRow.at(i));
+ m_cachedState->m_dataRow->addItem(newItem);
+ }
+ update();
}
-void DeclarativeBars::addDataRow(const QVector<QDataItem*> &dataRow, const QString &labelRow,
+void DeclarativeBars::addDataRow(const QVector<QDataItem *> &dataRow, const QString &labelRow,
const QVector<QString> &labelsColumn)
{
qDebug() << "Enter DeclarativeBars::addDataRow(const QVector<QDataItem*> &dataRow...)";
- m_shared->addDataRow(dataRow, labelRow, labelsColumn);
+ // TODO: Save labels to cachedstate
+ QDataItem *newItem;
+ delete m_cachedState->m_dataRow;
+ m_cachedState->m_dataRow = new QDataRow();
+ for (int i = 0; i < dataRow.count(); i++) {
+ newItem = new QDataItem(*dataRow.at(i));
+ m_cachedState->m_dataRow->addItem(newItem);
+ }
+ update();
}
void DeclarativeBars::addDataRow(QDataRow *dataRow)
{
qDebug() << "Enter DeclarativeBars::addDataRow(QDataRow *dataRow)";
- m_cachedState->m_dataRow = dataRow;
+ QDataItem *newItem;
+ delete m_cachedState->m_dataRow;
+ m_cachedState->m_dataRow = new QDataRow();
+ for (int i = 0; i < dataRow->d_ptr->row().count(); i++) {
+ newItem = new QDataItem(*dataRow->d_ptr->getItem(i));
+ m_cachedState->m_dataRow->addItem(newItem);
+ }
update();
}
@@ -303,19 +324,62 @@ void DeclarativeBars::addDataSet(const QVector< QVector<float> > &data,
const QVector<QString> &labelsRow,
const QVector<QString> &labelsColumn)
{
- m_shared->addDataSet(data, labelsRow, labelsColumn);
+ qDebug() << "void DeclarativeBars::addDataSet(const QVector< QVector<float> >...";
+ // TODO: Save labels to cachedstate
+ QDataItem *newItem;
+ QDataRow *newRow;
+ delete m_cachedState->m_dataSet;
+ m_cachedState->m_dataSet = new QDataSet();
+ for (int row = 0; row < data.count(); row++) {
+ newRow = new QDataRow();
+ for (int i = 0; i < data.at(row).count(); i++) {
+ newItem = new QDataItem(data.at(row).at(i));
+ newRow->addItem(newItem);
+ }
+ m_cachedState->m_dataSet->addRow(newRow);
+ }
+ update();
}
-void DeclarativeBars::addDataSet(const QVector< QVector<QDataItem*> > &data,
+void DeclarativeBars::addDataSet(const QVector< QVector<QDataItem *> > &data,
const QVector<QString> &labelsRow,
const QVector<QString> &labelsColumn)
{
- m_shared->addDataSet(data, labelsRow, labelsColumn);
+ qDebug() << "void DeclarativeBars::addDataSet(const QVector< QVector<QDataItem *> >...";
+ // TODO: Save labels to cachedstate
+ QDataItem *newItem;
+ QDataRow *newRow;
+ delete m_cachedState->m_dataSet;
+ m_cachedState->m_dataSet = new QDataSet();
+ for (int row = 0; row < data.count(); row++) {
+ newRow = new QDataRow();
+ for (int i = 0; i < data.at(row).count(); i++) {
+ newItem = new QDataItem(*data.at(row).at(i));
+ newRow->addItem(newItem);
+ }
+ m_cachedState->m_dataSet->addRow(newRow);
+ }
+ update();
}
-void DeclarativeBars::addDataSet(QDataSet* dataSet)
-{
- m_cachedState->m_dataSet = dataSet;
+void DeclarativeBars::addDataSet(QDataSet *dataSet)
+{
+ qDebug() << "void DeclarativeBars::addDataSet(QDataSet *dataSet)";
+ // TODO: Handle labels?
+ QDataItem *newItem;
+ QDataRow *newRow;
+ delete m_cachedState->m_dataSet;
+ m_cachedState->m_dataSet = new QDataSet();
+ for (int row = 0; row < dataSet->d_ptr->set().count(); row++) {
+ newRow = new QDataRow();
+ for (int i = 0; i < dataSet->d_ptr->getRow(row)->d_ptr->row().count(); i++) {
+ newItem = new QDataItem(1.0f);//*dataSet->d_ptr->getRow(row)->d_ptr->getItem(i));
+ qDebug() << "adding" << row << ":" << i << newRow << newItem;
+ newRow->addItem(newItem);
+ }
+ m_cachedState->m_dataSet->addRow(newRow);
+ }
+ update();
}
void DeclarativeBars::setSelectionMode(DeclarativeBars::SelectionMode mode)