diff options
author | Mika Salmela <mika.salmela@digia.com> | 2013-12-18 11:50:03 +0200 |
---|---|---|
committer | Mika Salmela <mika.salmela@digia.com> | 2013-12-18 11:51:20 +0200 |
commit | 07aba602fc82ac31684988f8e8e22521d2b3c982 (patch) | |
tree | 7ae1da139e8661bf157f996fe71844031d2995f4 /examples/qmlbars/qml/qmlbars/main.qml | |
parent | cf0cf6ca67aec8ae480bb705443ea17f5ab9f9e2 (diff) | |
parent | ea0442bc81ae034d22c5742b6075dee993fdd54d (diff) |
Merge branch 'develop' into mergebranch
Conflicts:
examples/qmlbars/qml/qmlbars/main.qml
examples/qmlscatter/qml/qmlscatter/main.qml
examples/qmlsurface/qml/qmlsurface/main.qml
src/datavisualization/data/qitemmodelbardatamapping.cpp
src/datavisualization/data/qitemmodelscatterdatamapping.cpp
src/datavisualization/data/qitemmodelsurfacedatamapping.cpp
src/datavisualization/engine/drawer.cpp
Change-Id: I731ebdb2cc5cee8f2cb32becee96d1fc1b3e5de1
Diffstat (limited to 'examples/qmlbars/qml/qmlbars/main.qml')
-rw-r--r-- | examples/qmlbars/qml/qmlbars/main.qml | 338 |
1 files changed, 237 insertions, 101 deletions
diff --git a/examples/qmlbars/qml/qmlbars/main.qml b/examples/qmlbars/qml/qmlbars/main.qml index 78102023..1f8c1a3d 100644 --- a/examples/qmlbars/qml/qmlbars/main.qml +++ b/examples/qmlbars/qml/qmlbars/main.qml @@ -18,7 +18,9 @@ import QtQuick 2.1 import QtQuick.Controls 1.0 +import QtQuick.Layouts 1.0 import QtDataVisualization 1.0 +import QtQuick.Window 2.0 import "." Item { @@ -27,6 +29,9 @@ Item { height: 1024 visible: true + property int buttonLayoutHeight: 180; + state: Screen.width < Screen.height ? "portrait" : "landscape" + Data { id: graphData } @@ -35,134 +40,265 @@ Item { id: graphAxes } + property Bar3DSeries selectedSeries + selectedSeries: barSeries + + function handleSelectionChange(series, position) { + if (position != series.invalidSelectionPosition()) { + selectedSeries = series + } + + // Set tableView current row to selected bar + var rowRole = series.dataProxy.rowLabels[position.x]; + var colRole = series.dataProxy.columnLabels[position.y]; + var currentRow = tableView.currentRow + if (currentRow === -1 || rowRole !== graphData.model.get(currentRow).year + || colRole !== graphData.model.get(currentRow).month) { + var totalRows = tableView.rowCount; + for (var i = 0; i < totalRows; i++) { + var currentRowRole = graphData.model.get(i).year + var currentColRole = graphData.model.get(i).month + if (currentRowRole === rowRole && currentColRole === colRole) { + tableView.currentRow = i + // Workaround to 5.2 row selection issue + if (typeof tableView.selection != "undefined") { + tableView.selection.clear() + tableView.selection.select(i) + } + break + } + } + } + } + Item { id: dataView - width: parent.width - tableView.width - height: parent.height - anchors.right: parent.right; + anchors.right: mainview.right; + anchors.bottom: mainview.bottom Bars3D { id: testGraph width: dataView.width height: dataView.height shadowQuality: AbstractGraph3D.ShadowQualityMedium - selectionMode: AbstractGraph3D.SelectionModeItem - font.pointSize: 35 - theme: AbstractGraph3D.ThemeRetro - labelStyle: AbstractGraph3D.LabelStyleFromTheme - dataProxy: graphData.proxy - barThickness: 0.5 + selectionMode: AbstractGraph3D.SelectionItem + theme: Theme3D { + type: Theme3D.ThemeRetro + labelBorderEnabled: true + font.pointSize: 35 + labelBackgroundEnabled: true + colorStyle: Theme3D.ColorStyleRangeGradient + singleHighlightGradient: customGradient + + ColorGradient { + id: customGradient + ColorGradientStop { position: 1.0; color: "#FFFF00" } + ColorGradientStop { position: 0.0; color: "#808000" } + } + } + barThickness: 0.7 barSpacing: Qt.size(0.5, 0.5) barSpacingRelative: false - scene.activeCamera.cameraPreset: AbstractGraph3D.CameraPresetRight + scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeftHigh columnAxis: graphAxes.column - valueAxis: graphAxes.expenses - itemLabelFormat: "@valueTitle for @colLabel, @rowLabel: @valueLabel" - - onSelectedBarPosChanged: { - // Set tableView current row to selected bar - var rowRole = graphData.proxy.rowLabels[position.x]; - var colRole = graphData.proxy.columnLabels[position.y]; - var currentRow = tableView.currentRow - if (currentRow === -1 || rowRole !== graphData.model.get(currentRow).year - || colRole !== graphData.model.get(currentRow).month) { - var totalRows = tableView.rowCount; - for (var i = 0; i < totalRows; i++) { - var currentRowRole = graphData.model.get(i).year - var currentColRole = graphData.model.get(i).month - if (currentRowRole === rowRole && currentColRole === colRole) { - tableView.currentRow = i - // Workaround to 5.2 row selection issue - if (typeof tableView.selection != "undefined") { - tableView.selection.clear() - tableView.selection.select(i) - } - break - } - } + valueAxis: graphAxes.income + + //! [3] + Bar3DSeries { + id: barSeries + itemLabelFormat: "Income for @colLabel, @rowLabel: @valueLabel" + baseGradient: barGradient + + ItemModelBarDataProxy { + id: modelProxy + itemModel: graphData.model + rowRole: "year" + columnRole: "month" + valueRole: "income" } - } - } - } + //! [3] - Button { - id: mappingToggle - anchors.bottom: parent.bottom - width: tableView.width - height: 60 - text: "Show Income" - //! [0] - onClicked: { - if (graphData.mapping.valueRole === "expenses") { - graphData.mapping.valueRole = "income" - text = "Show Expenses" - testGraph.valueAxis = graphAxes.income - } else { - graphData.mapping.valueRole = "expenses" - text = "Show Income" - testGraph.valueAxis = graphAxes.expenses - } - } - //! [0] - } + ColorGradient { + id: barGradient + ColorGradientStop { position: 1.0; color: "#00FF00" } + ColorGradientStop { position: 0.0; color: "#006000" } + } - Button { - id: shadowToggle - anchors.bottom: mappingToggle.top - width: tableView.width - height: 60 - text: "Hide Shadows" - onClicked: { - if (testGraph.shadowQuality == AbstractGraph3D.ShadowQualityNone) { - testGraph.shadowQuality = AbstractGraph3D.ShadowQualityMedium; - text = "Hide Shadows" - } else { - testGraph.shadowQuality = AbstractGraph3D.ShadowQualityNone; - text = "Show Shadows" + onSelectedBarChanged: handleSelectionChange(barSeries, position) } - } - } - Button { - id: dataToggle - anchors.bottom: shadowToggle.top - width: tableView.width - height: 60 - text: "Show 2010 - 2012" - //! [1] - onClicked: { - if (testGraph.rowAxis.max !== 6) { - text = "Show 2010 - 2012" - graphData.mapping.autoRowCategories = true - } else { - text = "Show all years" - // Explicitly defining row categories, since we do not want to show data for - // all years in the model, just for the selected ones. - graphData.mapping.autoRowCategories = false - graphData.mapping.rowCategories = ["2010", "2011", "2012"] + //! [4] + Bar3DSeries { + id: secondarySeries + visible: false + itemLabelFormat: "Expenses for @colLabel, @rowLabel: @valueLabel" + baseGradient: secondaryGradient + + ItemModelBarDataProxy { + id: secondaryProxy + itemModel: graphData.model + rowRole: "year" + columnRole: "month" + valueRole: "expenses" + } + //! [4] + + ColorGradient { + id: secondaryGradient + ColorGradientStop { position: 1.0; color: "#FF0000" } + ColorGradientStop { position: 0.0; color: "#600000" } + } + + onSelectedBarChanged: handleSelectionChange(secondarySeries, position) } } - //! [1] } TableView { id: tableView - x: 0 - y: 0 - width: 298 - height: parent.height - mappingToggle.height - shadowToggle.height - dataToggle.height - TableViewColumn{ role: "year" ; title: "Year" ; width: 80 } - TableViewColumn{ role: "month" ; title: "Month" ; width: 80 } - TableViewColumn{ role: "expenses" ; title: "Expenses" ; width: 60 } - TableViewColumn{ role: "income" ; title: "Income" ; width: 60 } + anchors.top: parent.top + anchors.left: parent.left + TableViewColumn{ role: "year" ; title: "Year" ; width: tableView.width / 4 } + TableViewColumn{ role: "month" ; title: "Month" ; width: tableView.width / 4 } + TableViewColumn{ role: "expenses" ; title: "Expenses" ; width: tableView.width / 4 } + TableViewColumn{ role: "income" ; title: "Income" ; width: tableView.width / 4 } model: graphData.model //! [2] onCurrentRowChanged: { - var rowIndex = graphData.proxy.activeMapping.rowCategoryIndex(graphData.model.get(currentRow).year) - var colIndex = graphData.proxy.activeMapping.columnCategoryIndex(graphData.model.get(currentRow).month) - testGraph.selectedBarPos = Qt.point(rowIndex, colIndex) + var rowIndex = modelProxy.rowCategoryIndex(graphData.model.get(currentRow).year) + var colIndex = modelProxy.columnCategoryIndex(graphData.model.get(currentRow).month) + if (selectedSeries.visible) + mainview.selectedSeries.selectedBar = Qt.point(rowIndex, colIndex) + else if (barSeries.visible) + barSeries.selectedBar = Qt.point(rowIndex, colIndex) + else + secondarySeries.selectedBar = Qt.point(rowIndex, colIndex) } //! [2] } + + ColumnLayout { + id: controlLayout + spacing: 0 + + Button { + id: dataToggle + Layout.fillWidth: true + Layout.fillHeight: true + text: "Show 2010 - 2012" + clip: true + //! [1] + onClicked: { + if (testGraph.rowAxis.max !== 6) { + text = "Show 2010 - 2012" + modelProxy.autoRowCategories = true + secondaryProxy.autoRowCategories = true + } else { + text = "Show all years" + // Explicitly defining row categories, since we do not want to show data for + // all years in the model, just for the selected ones. + modelProxy.autoRowCategories = false + secondaryProxy.autoRowCategories = false + modelProxy.rowCategories = ["2010", "2011", "2012"] + secondaryProxy.rowCategories = ["2010", "2011", "2012"] + } + } + //! [1] + } + + Button { + id: shadowToggle + Layout.fillWidth: true + Layout.fillHeight: true + text: "Hide Shadows" + clip: true + onClicked: { + if (testGraph.shadowQuality == AbstractGraph3D.ShadowQualityNone) { + testGraph.shadowQuality = AbstractGraph3D.ShadowQualityMedium; + text = "Hide Shadows" + } else { + testGraph.shadowQuality = AbstractGraph3D.ShadowQualityNone; + text = "Show Shadows" + } + } + } + + Button { + id: seriesToggle + Layout.fillWidth: true + Layout.fillHeight: true + text: "Show Expenses" + clip: true + //! [0] + onClicked: { + if (!secondarySeries.visible) { + text = "Show Both" + testGraph.valueAxis = graphAxes.expenses + barSeries.visible = false + secondarySeries.visible = true + } else if (!barSeries.visible){ + barSeries.visible = true + text = "Show Income" + testGraph.valueAxis = graphAxes.income + } else { + secondarySeries.visible = false + text = "Show Expenses" + testGraph.valueAxis = graphAxes.income + } + } + //! [0] + } + } + + states: [ + State { + name: "landscape" + PropertyChanges { + target: dataView + width: mainview.width / 4 * 3 + height: mainview.height + } + PropertyChanges { + target: tableView + height: mainview.height - buttonLayoutHeight + anchors.right: dataView.left + anchors.left: mainview.left + anchors.bottom: undefined + } + PropertyChanges { + target: controlLayout + width: mainview.width / 4 + height: buttonLayoutHeight + anchors.top: tableView.bottom + anchors.bottom: mainview.bottom + anchors.left: mainview.left + anchors.right: dataView.left + } + }, + State { + name: "portrait" + PropertyChanges { + target: dataView + width: mainview.height / 4 * 3 + height: mainview.width + } + PropertyChanges { + target: tableView + height: mainview.width + anchors.right: controlLayout.left + anchors.left: mainview.left + anchors.bottom: dataView.top + } + PropertyChanges { + target: controlLayout + width: mainview.height / 4 + height: mainview.width / 4 + anchors.top: mainview.top + anchors.bottom: dataView.top + anchors.left: undefined + anchors.right: mainview.right + } + } + ] } |