mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	Fix some runtime warnings when running the mobile build caused by binding loops and deprecated handler syntax. Signed-off-by: Michael Keller <mikeller@042.ch>
		
			
				
	
	
		
			272 lines
		
	
	
	
		
			7.1 KiB
		
	
	
	
		
			QML
		
	
	
	
	
	
			
		
		
	
	
			272 lines
		
	
	
	
		
			7.1 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: {
 | |
| 					if (currentIndex != statsManager.var1Index) {
 | |
| 						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: {
 | |
| 					if (currentIndex != statsManager.binner1Index) {
 | |
| 						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: {
 | |
| 					if (currentIndex != statsManager.var2Index) {
 | |
| 						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: {
 | |
| 					if (currentIndex != statsManager.binner2Index) {
 | |
| 						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: {
 | |
| 					if (currentIndex != statsManager.operation2Index) {
 | |
| 						statsManager.var2OperationChanged(currentIndex)
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		ColumnLayout {
 | |
| 			id: i6
 | |
| 			Layout.column: wide ? 0 : 0
 | |
| 			Layout.row: wide ? 6 : 3
 | |
| 			Layout.leftMargin: Kirigami.Units.smallSpacing
 | |
| 			TemplateLabelSmall {
 | |
| 				text: qsTr("SortMode")
 | |
| 			}
 | |
| 			TemplateSlimComboBox {
 | |
| 				id: sortMode1
 | |
| 				model: statsManager.sortMode1List
 | |
| 				currentIndex: statsManager.sortMode1Index
 | |
| 				Layout.fillWidth: false
 | |
| 				onCurrentIndexChanged: {
 | |
| 					statsManager.sortMode1Changed(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 : 4
 | |
| 			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)
 | |
| 	}
 | |
| 	onBackRequested: {
 | |
| 		// if the menu drawer is open, the back button should close it
 | |
| 		if (globalDrawer.visible) {
 | |
| 			globalDrawer.close()
 | |
| 		} else {
 | |
| 			showDiveList()
 | |
| 		}
 | |
| 		event.accepted = true;
 | |
| 	}
 | |
| }
 |