summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2013-08-22 12:08:47 +0300
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2013-08-22 13:17:36 +0300
commit44f83ac64537ca6ac13a97a2c267492bdd288fe7 (patch)
tree19399700a719b18dda5c060a2b57ea76a85e1211 /examples
parent3ab324d0a6d6ff5fa7d15588ee2dc613f0c5e4b9 (diff)
Selection improvements for bars:
- Signal to notify of selection change - Setting selection via API Change-Id: I87c71005d76b15dd259f745392ff7b5112d146b5 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Diffstat (limited to 'examples')
-rw-r--r--examples/qmlbarchart/qml/qmlbarchart/main.qml7
-rw-r--r--examples/widget/chart.cpp68
-rw-r--r--examples/widget/chart.h3
-rw-r--r--examples/widget/main.cpp8
4 files changed, 63 insertions, 23 deletions
diff --git a/examples/qmlbarchart/qml/qmlbarchart/main.qml b/examples/qmlbarchart/qml/qmlbarchart/main.qml
index 1fbd4682..887cb3d7 100644
--- a/examples/qmlbarchart/qml/qmlbarchart/main.qml
+++ b/examples/qmlbarchart/qml/qmlbarchart/main.qml
@@ -126,13 +126,20 @@ Item {
axisY: valueAxis
axisZ: columnAxis
itemLabelFormat: "@valueTitle for @colLabel, @rowLabel: @valueLabel"
+
+ onDataResolved: {
+ // Can't select a bar until data has been resolved from model to proxy
+ selectedBarPos = Qt.point(0, 5)
+ }
}
+
}
Component.onCompleted: {
testchart.data = dataModel
}
+
TableView {
id: tableView
x: 0
diff --git a/examples/widget/chart.cpp b/examples/widget/chart.cpp
index 80aea13c..3b4acf20 100644
--- a/examples/widget/chart.cpp
+++ b/examples/widget/chart.cpp
@@ -40,7 +40,8 @@ ChartModifier::ChartModifier(Q3DBars *barchart)
m_segments(4),
m_subSegments(3),
m_minval(-20.0), // TODO Barchart Y-axis currently only properly supports zero-centered ranges
- m_maxval(20.0)
+ m_maxval(20.0),
+ m_selectedBarPos(-1, -1)
{
// Don't set any styles or specifications, start from defaults
// Generate generic labels
@@ -84,7 +85,7 @@ void ChartModifier::restart(bool dynamicData)
// Set up sample space
m_chart->setDataWindow(m_rowCount, m_columnCount);
// Set selection mode to full
- m_chart->setSelectionMode(QDataVis::ModeItemRowAndColumn);
+ m_chart->setSelectionMode(QDataVis::ModeSliceRow);
m_chart->valueAxis()->setSegmentCount(m_segments * 2);
m_chart->valueAxis()->setSubSegmentCount(1);
m_chart->valueAxis()->setAutoAdjustRange(true);
@@ -102,6 +103,16 @@ void ChartModifier::restart(bool dynamicData)
}
}
+void ChartModifier::selectBar()
+{
+ QPoint targetBar(5, 5);
+ QPoint noSelection(-1, -1);
+ if (m_selectedBarPos != targetBar)
+ m_chart->setSelectedBarPos(targetBar);
+ else
+ m_chart->setSelectedBarPos(noSelection);
+}
+
void ChartModifier::addDataSet()
{
// Prepare data to be visualized
@@ -138,6 +149,7 @@ void ChartModifier::addDataSet()
m_chart->valueAxis()->setSubSegmentCount(m_subSegments);
m_chart->valueAxis()->setRange(m_minval, m_maxval);
m_chart->valueAxis()->setLabelFormat(QString(QStringLiteral("%d ") + celsiusString));
+ m_chart->setSelectionMode(QDataVis::ModeSliceRow);
// Create data rows
QBarDataArray *dataSet = new QBarDataArray;
@@ -170,7 +182,10 @@ void ChartModifier::addRow()
(*dataRow)[i].setValue(((i + 1) / (float)m_columnCount) * (float)(rand() % 100));
//(*dataRow)[i].setValue(i + m_chart->dataProxy()->rowCount());
}
- m_chart->dataProxy()->insertRow(0, dataRow);
+
+ // TODO Needs to be changed to account for data window offset once it is implemented.
+ int row = qMax(m_selectedBarPos.x(), 0);
+ m_chart->dataProxy()->insertRow(row, dataRow);
}
void ChartModifier::addRows()
@@ -184,27 +199,28 @@ void ChartModifier::addRows()
(*dataRow)[j].setValue(qreal(j + i + m_chart->dataProxy()->rowCount()));
dataArray.append(dataRow);
}
- m_chart->dataProxy()->insertRows(0, dataArray);
+
+ // TODO Needs to be changed to account for data window offset once it is implemented.
+ int row = qMax(m_selectedBarPos.x(), 0);
+ m_chart->dataProxy()->insertRows(row, dataArray);
qDebug() << "Added" << m_rowCount << "rows, time:" << timer.elapsed();
}
void ChartModifier::changeItem()
{
- // TODO fix to use actual selected item, for now just assume some row/column are selected
- int row = qMin(4, (m_chart->dataProxy()->rowCount() - 1));
- if (row >= 0) {
- int column = qMin(4, (m_chart->dataProxy()->rowAt(row)->size() - 1));
- if (column >= 0) {
- QBarDataItem item(qreal(rand() % 100));
- m_chart->dataProxy()->setItem(row, column, item);
- }
+ // TODO Needs to be changed to account for data window offset once it is implemented.
+ int row = m_selectedBarPos.x();
+ int column = m_selectedBarPos.y();
+ if (row >= 0 && column >= 0) {
+ QBarDataItem item(qreal(rand() % 100));
+ m_chart->dataProxy()->setItem(row, column, item);
}
}
void ChartModifier::changeRow()
{
- // TODO fix to use actual selected item, for now just assume some is selected
- int row = qMin(4, (m_chart->dataProxy()->rowCount() - 1));
+ // TODO Needs to be changed to account for data window offset once it is implemented.
+ int row = m_selectedBarPos.x();
if (row >= 0) {
QBarDataRow *newRow = new QBarDataRow(m_chart->dataProxy()->rowAt(row)->size());
for (int i = 0; i < newRow->size(); i++)
@@ -215,8 +231,8 @@ void ChartModifier::changeRow()
void ChartModifier::changeRows()
{
- // TODO fix to use actual selected item, for now just assume some is selected
- int row = qMin(4, (m_chart->dataProxy()->rowCount() - 1));
+ // TODO Needs to be changed to account for data window offset once it is implemented.
+ int row = m_selectedBarPos.x();
if (row >= 0) {
int startRow = qMax(row - 2, 0);
QBarDataArray newArray;
@@ -232,16 +248,16 @@ void ChartModifier::changeRows()
void ChartModifier::removeRow()
{
- // TODO fix to use actual selected item, for now just assume some is selected
- int row = qMin(4, (m_chart->dataProxy()->rowCount() - 1));
+ // TODO Needs to be changed to account for data window offset once it is implemented.
+ int row = m_selectedBarPos.x();
if (row >= 0)
m_chart->dataProxy()->removeRows(row, 1);
}
void ChartModifier::removeRows()
{
- // TODO fix to use actual selected item, for now just assume some is selected
- int row = qMin(4, (m_chart->dataProxy()->rowCount() - 1));
+ // TODO Needs to be changed to account for data window offset once it is implemented.
+ int row = m_selectedBarPos.x();
if (row >= 0) {
int startRow = qMax(row - 2, 0);
m_chart->dataProxy()->removeRows(startRow, 3);
@@ -320,12 +336,12 @@ void ChartModifier::changeTransparency()
void ChartModifier::changeSelectionMode()
{
- static int selectionMode = QDataVis::ModeNone;
-
- m_chart->setSelectionMode((QDataVis::SelectionMode)selectionMode);
+ static int selectionMode = m_chart->selectionMode();
if (++selectionMode > QDataVis::ModeSliceColumn)
selectionMode = QDataVis::ModeNone;
+
+ m_chart->setSelectionMode((QDataVis::SelectionMode)selectionMode);
}
void ChartModifier::changeFont(const QFont &font)
@@ -361,6 +377,12 @@ void ChartModifier::shadowQualityUpdatedByVisual(QDataVis::ShadowQuality sq)
emit shadowQualityChanged(quality);
}
+void ChartModifier::handleSelectionChange(const QPoint &position)
+{
+ m_selectedBarPos = position;
+ qDebug() << "Selected bar position:" << position;
+}
+
void ChartModifier::changeShadowQuality(int quality)
{
QDataVis::ShadowQuality sq = QDataVis::ShadowNone;
diff --git a/examples/widget/chart.h b/examples/widget/chart.h
index 85fa36ea..c8b14246 100644
--- a/examples/widget/chart.h
+++ b/examples/widget/chart.h
@@ -61,10 +61,12 @@ public:
void setSampleCountZ(int samples);
void start();
void restart(bool dynamicData);
+ void selectBar();
public slots:
void changeShadowQuality(int quality);
void shadowQualityUpdatedByVisual(QDataVis::ShadowQuality shadowQuality);
+ void handleSelectionChange(const QPoint &position);
signals:
void shadowQualityChanged(int quality);
@@ -86,6 +88,7 @@ private:
qreal m_maxval;
QStringList m_genericRowLabels;
QStringList m_genericColumnLabels;
+ QPoint m_selectedBarPos;
};
#endif
diff --git a/examples/widget/main.cpp b/examples/widget/main.cpp
index 4fa4f9ba..3c0e44cf 100644
--- a/examples/widget/main.cpp
+++ b/examples/widget/main.cpp
@@ -95,6 +95,9 @@ int main(int argc, char **argv)
QPushButton *selectionButton = new QPushButton(widget);
selectionButton->setText(QStringLiteral("Change selection mode"));
+ QPushButton *setSelectedBarButton = new QPushButton(widget);
+ setSelectedBarButton->setText(QStringLiteral("Select/deselect bar at (5,5)"));
+
QCheckBox *backgroundCheckBox = new QCheckBox(widget);
backgroundCheckBox->setText(QStringLiteral("Show background"));
backgroundCheckBox->setChecked(true);
@@ -192,6 +195,7 @@ int main(int argc, char **argv)
vLayout->addWidget(styleButton, 0, Qt::AlignTop);
vLayout->addWidget(cameraButton, 0, Qt::AlignTop);
vLayout->addWidget(selectionButton, 0, Qt::AlignTop);
+ vLayout->addWidget(setSelectedBarButton, 0, Qt::AlignTop);
vLayout->addWidget(backgroundCheckBox);
vLayout->addWidget(gridCheckBox);
vLayout->addWidget(new QLabel(QStringLiteral("Adjust shadow quality")));
@@ -227,6 +231,8 @@ int main(int argc, char **argv)
&QComboBox::setCurrentIndex);
QObject::connect(widgetchart, &Q3DBars::shadowQualityChanged, modifier,
&ChartModifier::shadowQualityUpdatedByVisual);
+ QObject::connect(widgetchart, &Q3DBars::selectedBarPosChanged, modifier,
+ &ChartModifier::handleSelectionChange);
QObject::connect(fontSizeSlider, &QSlider::valueChanged, modifier,
&ChartModifier::changeFontSize);
@@ -246,6 +252,8 @@ int main(int argc, char **argv)
QObject::connect(removeRowsButton, &QPushButton::clicked, modifier, &ChartModifier::removeRows);
QObject::connect(selectionButton, &QPushButton::clicked, modifier,
&ChartModifier::changeSelectionMode);
+ QObject::connect(setSelectedBarButton, &QPushButton::clicked, modifier,
+ &ChartModifier::selectBar);
QObject::connect(fontList, &QFontComboBox::currentFontChanged, modifier,
&ChartModifier::changeFont);