diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2013-08-22 12:08:47 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2013-08-22 13:17:36 +0300 |
commit | 44f83ac64537ca6ac13a97a2c267492bdd288fe7 (patch) | |
tree | 19399700a719b18dda5c060a2b57ea76a85e1211 /examples | |
parent | 3ab324d0a6d6ff5fa7d15588ee2dc613f0c5e4b9 (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.qml | 7 | ||||
-rw-r--r-- | examples/widget/chart.cpp | 68 | ||||
-rw-r--r-- | examples/widget/chart.h | 3 | ||||
-rw-r--r-- | examples/widget/main.cpp | 8 |
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); |