mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-29 21:50:26 +00:00
35f1b9e204
Sometimes (and it's unclear why that happens) after rotation the stats widget is blank. Setting the first variable back to itself appears enough to ensure that the statistics view is redrawn. Try to do that programatically after a short delay. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
235 lines
6.2 KiB
QML
235 lines
6.2 KiB
QML
// SPDX-License-Identifier: GPL-2.0
|
|
import QtQuick 2.6
|
|
import QtQuick.Controls 2.4
|
|
import QtQuick.Layouts 1.2
|
|
import org.subsurfacedivelog.mobile 1.0
|
|
import org.kde.kirigami 2.4 as Kirigami
|
|
|
|
Kirigami.Page {
|
|
id: statisticsPage
|
|
objectName: "StatisticsPage"
|
|
title: qsTr("Statistics")
|
|
leftPadding: 0
|
|
topPadding: 0
|
|
rightPadding: 0
|
|
bottomPadding: 0
|
|
width: rootItem.width
|
|
implicitWidth: rootItem.width
|
|
background: Rectangle { color: subsurfaceTheme.backgroundColor }
|
|
property bool wide: width > rootItem.height
|
|
StatsManager {
|
|
id: statsManager
|
|
}
|
|
ChartListModel {
|
|
id: chartListModel
|
|
}
|
|
onVisibleChanged: {
|
|
if (visible)
|
|
statsManager.doit()
|
|
}
|
|
onWidthChanged: {
|
|
if (visible) {
|
|
statsManager.doit()
|
|
}
|
|
}
|
|
onWideChanged: {
|
|
// so this means we rotated the device - and sometimes after rotation
|
|
// the stats widget is empty.
|
|
rotationRedrawTrigger.start()
|
|
}
|
|
Timer {
|
|
// wait .5 seconds (so the OS rotation animation has a chance to run) and then set var1 again
|
|
// to its current value, which appears to be enough to ensure that the chart is drawn again
|
|
id: rotationRedrawTrigger
|
|
interval: 500
|
|
onTriggered: statsManager.var1Changed(i1.var1currentIndex)
|
|
}
|
|
|
|
Component {
|
|
id: chartListDelegate
|
|
Kirigami.AbstractListItem {
|
|
id: chartListDelegateItem
|
|
height: isHeader ? 1 + 8 * Kirigami.Units.smallSpacing : 11 * Kirigami.Units.smallSpacing // delegateInnerItem.height
|
|
onClicked: {
|
|
if (!isHeader) {
|
|
chartTypePopup.close()
|
|
statsManager.setChart(id)
|
|
}
|
|
}
|
|
Item {
|
|
id: chartListDelegateInnerItem
|
|
Row {
|
|
height: childrenRect.height
|
|
spacing: Kirigami.Units.smallSpacing
|
|
Kirigami.Icon {
|
|
id: chartIcon
|
|
source: icon
|
|
width: iconSize !== undefined ? iconSize.width : 0
|
|
}
|
|
Label {
|
|
text: chartName
|
|
font.bold: isHeader
|
|
color: subsurfaceTheme.textColor
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Popup {
|
|
id: chartTypePopup
|
|
x: Kirigami.Units.gridUnit * 2
|
|
y: Kirigami.Units.gridUnit
|
|
width: Math.min(Kirigami.Units.gridUnit * 12, statisticsPage.width * 0.6)
|
|
height: Math.min(statisticsPage.height - 3 * Kirigami.Units.gridUnit, chartListModel.count * Kirigami.Units.gridUnit * 2.75)
|
|
modal: true
|
|
focus: true
|
|
clip: true
|
|
closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside
|
|
ListView {
|
|
id: chartTypes
|
|
model: chartListModel
|
|
anchors.fill: parent
|
|
delegate: chartListDelegate
|
|
}
|
|
}
|
|
|
|
GridLayout {
|
|
anchors.fill: parent
|
|
ColumnLayout {
|
|
id: i1
|
|
Layout.column: 0
|
|
Layout.row: 0
|
|
Layout.leftMargin: Kirigami.Units.smallSpacing
|
|
Layout.topMargin: Kirigami.Units.smallSpacing
|
|
property alias var1currentIndex: var1.currentIndex
|
|
TemplateLabelSmall {
|
|
text: qsTr("Base variable")
|
|
}
|
|
TemplateSlimComboBox {
|
|
id: var1
|
|
model: statsManager.var1List
|
|
currentIndex: statsManager.var1Index;
|
|
onCurrentIndexChanged: {
|
|
statsManager.var1Changed(currentIndex)
|
|
}
|
|
}
|
|
}
|
|
ColumnLayout {
|
|
id: i2
|
|
Layout.column: wide ? 0 : 1
|
|
Layout.row: wide ? 1 : 0
|
|
Layout.leftMargin: Kirigami.Units.smallSpacing
|
|
TemplateLabelSmall {
|
|
text: qsTr("Binning")
|
|
}
|
|
TemplateSlimComboBox {
|
|
id: var1Binner
|
|
model: statsManager.binner1List
|
|
currentIndex: statsManager.binner1Index;
|
|
onCurrentIndexChanged: {
|
|
statsManager.var1BinnerChanged(currentIndex)
|
|
}
|
|
}
|
|
}
|
|
ColumnLayout {
|
|
id: i3
|
|
Layout.column: wide ? 0 : 0
|
|
Layout.row: wide ? 2 : 1
|
|
Layout.leftMargin: Kirigami.Units.smallSpacing
|
|
TemplateLabelSmall {
|
|
text: qsTr("Data")
|
|
}
|
|
TemplateSlimComboBox {
|
|
id: var2
|
|
model: statsManager.var2List
|
|
currentIndex: statsManager.var2Index;
|
|
Layout.fillWidth: false
|
|
onCurrentIndexChanged: {
|
|
statsManager.var2Changed(currentIndex)
|
|
}
|
|
}
|
|
}
|
|
ColumnLayout {
|
|
id: i4
|
|
Layout.column: wide ? 0 : 1
|
|
Layout.row: wide ? 3 : 1
|
|
Layout.leftMargin: Kirigami.Units.smallSpacing
|
|
TemplateLabelSmall {
|
|
text: qsTr("Binning")
|
|
}
|
|
TemplateSlimComboBox {
|
|
id: var2Binner
|
|
model: statsManager.binner2List
|
|
currentIndex: statsManager.binner2Index;
|
|
Layout.fillWidth: false
|
|
onCurrentIndexChanged: {
|
|
statsManager.var2BinnerChanged(currentIndex)
|
|
}
|
|
}
|
|
}
|
|
ColumnLayout {
|
|
id: i5
|
|
Layout.column: wide ? 0 : 0
|
|
Layout.row: wide ? 4 : 2
|
|
Layout.leftMargin: Kirigami.Units.smallSpacing
|
|
TemplateLabelSmall {
|
|
text: qsTr("Operation")
|
|
}
|
|
TemplateSlimComboBox {
|
|
id: var2Operation
|
|
model: statsManager.operation2List
|
|
currentIndex: statsManager.operation2Index;
|
|
Layout.fillWidth: false
|
|
onCurrentIndexChanged: {
|
|
statsManager.var2OperationChanged(currentIndex)
|
|
}
|
|
}
|
|
}
|
|
Button {
|
|
id: chartTypeButton
|
|
Layout.column: wide ? 0 : 1
|
|
Layout.row: wide ? 5 : 2
|
|
Layout.leftMargin: Kirigami.Units.smallSpacing
|
|
Layout.topMargin: Kirigami.Units.largeSpacing
|
|
Layout.preferredHeight: Kirigami.Units.gridUnit * 2
|
|
Layout.preferredWidth: Kirigami.Units.gridUnit * 8
|
|
background: Rectangle {
|
|
color: chartTypeButton.pressed ? subsurfaceTheme.darkerPrimaryColor : subsurfaceTheme.primaryColor
|
|
antialiasing: true
|
|
radius: Kirigami.Units.smallSpacing * 2
|
|
height: Kirigami.Units.gridUnit * 2
|
|
}
|
|
contentItem: Text {
|
|
verticalAlignment: Qt.AlignVCenter
|
|
horizontalAlignment: Qt.AlignHCenter
|
|
color: subsurfaceTheme.primaryTextColor
|
|
text: qsTr("Chart type")
|
|
}
|
|
onClicked: chartTypePopup.open()
|
|
}
|
|
Item {
|
|
Layout.column: wide ? 0 : 2
|
|
Layout.row: wide ? 6 : 2
|
|
Layout.preferredHeight: wide ? parent.height - Kirigami.Units.gridUnit * 16 : Kirigami.Units.gridUnit
|
|
Layout.fillWidth: wide ? false : true
|
|
// just used for spacing
|
|
}
|
|
StatsView {
|
|
Layout.column: wide ? 1 : 0
|
|
Layout.row: wide ? 0 : 3
|
|
Layout.columnSpan: wide ? 1 : 3
|
|
Layout.rowSpan: wide ? 7 : 1
|
|
id: statsView
|
|
Layout.margins: Kirigami.Units.smallSpacing
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
Layout.maximumHeight: wide ? statisticsPage.height - 2 * Kirigami.Units.gridUnit :
|
|
statisticsPage.height - 2 * Kirigami.Units.gridUnit - i4.height
|
|
Layout.maximumWidth: wide ? statisticsPage.width - 2 * Kirigami.Units.gridUnit - i4.width :
|
|
statisticsPage.width - 2 * Kirigami.Units.smallSpacing
|
|
}
|
|
}
|
|
Component.onCompleted: {
|
|
statsManager.init(statsView, chartListModel)
|
|
}
|
|
}
|