mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-30 22:20:21 +00:00
6c7411c776
No one will ask you about your dives in the last seven months (and the existing code actually provided the past 210 days in that case). Instead do more intuitive periods. Last month, quarter, half year, year. Use Qt's ability to make sane date calculations easy. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
185 lines
4.7 KiB
QML
185 lines
4.7 KiB
QML
// SPDX-License-Identifier: GPL-2.0
|
|
import QtQuick 2.12
|
|
import QtQuick.Controls 2.12
|
|
import QtQuick.Controls 1.4
|
|
import QtQuick.Layouts 1.12
|
|
import QtQuick.Dialogs 1.3
|
|
import org.subsurfacedivelog.mobile 1.0
|
|
import org.kde.kirigami 2.4 as Kirigami
|
|
|
|
Kirigami.ScrollablePage {
|
|
id: summary
|
|
DiveSummaryModel { id: summaryModel }
|
|
property string firstDive: ""
|
|
property string lastDive: ""
|
|
property int headerColumnWidth: Math.floor(width / 3)
|
|
|
|
background: Rectangle { color: subsurfaceTheme.backgroundColor }
|
|
title: qsTr("Dive summary")
|
|
|
|
function reload() {
|
|
summaryModel.setNumData(2)
|
|
summaryModel.calc(0, selectionPrimary.currentIndex)
|
|
summaryModel.calc(1, selectionSecondary.currentIndex)
|
|
firstDive = Backend.firstDiveDate()
|
|
lastDive = Backend.lastDiveDate()
|
|
}
|
|
|
|
onVisibleChanged: {
|
|
if (visible) {
|
|
reload()
|
|
}
|
|
}
|
|
Connections {
|
|
target: Backend
|
|
onLengthChanged: {
|
|
reload()
|
|
}
|
|
onVolumeChanged: {
|
|
reload()
|
|
}
|
|
}
|
|
|
|
GridLayout {
|
|
columns: 3
|
|
width: parent.width
|
|
columnSpacing: Kirigami.Units.smallSpacing
|
|
rowSpacing: Kirigami.Units.smallSpacing
|
|
|
|
ListModel {
|
|
id: monthModel
|
|
ListElement {text: qsTr("All")}
|
|
ListElement {text: qsTr("1 month")}
|
|
ListElement {text: qsTr("3 months")}
|
|
ListElement {text: qsTr("6 months")}
|
|
ListElement {text: qsTr("1 year")}
|
|
}
|
|
|
|
TemplateLabel {
|
|
text: qsTr("last dive:")
|
|
font.bold: true
|
|
width: headerColumnWidth
|
|
}
|
|
TemplateLabel {
|
|
Layout.alignment: Qt.AlignCenter
|
|
text: summary.lastDive
|
|
}
|
|
TemplateLabel { /* just filling the third column with nothing */ }
|
|
TemplateLabel {
|
|
text: qsTr("first dive:")
|
|
font.bold: true
|
|
width: headerColumnWidth
|
|
}
|
|
TemplateLabel {
|
|
Layout.alignment: Qt.AlignCenter
|
|
text: summary.firstDive
|
|
}
|
|
TemplateLabel { /* just filling the third column with nothing */ }
|
|
|
|
TemplateLabel {
|
|
Layout.columnSpan: 3
|
|
}
|
|
|
|
TemplateButton {
|
|
/* Replace by signals from the core in due course. */
|
|
text: "Refresh"
|
|
width: headerColumnWidth
|
|
onClicked: reload()
|
|
}
|
|
TemplateComboBox {
|
|
id: selectionPrimary
|
|
editable: false
|
|
currentIndex: 0
|
|
model: monthModel
|
|
onActivated: {
|
|
summaryModel.calc(0, currentIndex)
|
|
}
|
|
}
|
|
TemplateComboBox {
|
|
id: selectionSecondary
|
|
editable: false
|
|
currentIndex: 3
|
|
model: monthModel
|
|
onActivated: {
|
|
summaryModel.calc(1, currentIndex)
|
|
}
|
|
}
|
|
|
|
Component {
|
|
id: rowDelegate
|
|
Row {
|
|
height: headerLabel.height + Kirigami.Units.largeSpacing
|
|
Rectangle {
|
|
width: Kirigami.Units.gridUnit * 2
|
|
height: parent.height
|
|
color: "transparent"
|
|
}
|
|
Rectangle {
|
|
color: index & 1 ? subsurfaceTheme.backgroundColor : subsurfaceTheme.lightPrimaryColor
|
|
width: headerColumnWidth
|
|
height: headerLabel.height + Kirigami.Units.largeSpacing
|
|
Label {
|
|
id: headerLabel
|
|
color: subsurfaceTheme.textColor
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
leftPadding: Kirigami.Units.largeSpacing
|
|
text: header !== undefined ? header : ""
|
|
font.bold: true
|
|
}
|
|
}
|
|
Rectangle {
|
|
color: index & 1 ? subsurfaceTheme.backgroundColor : subsurfaceTheme.lightPrimaryColor
|
|
width: headerColumnWidth - 2 * Kirigami.Units.gridUnit
|
|
height: headerLabel.height + Kirigami.Units.largeSpacing
|
|
Label {
|
|
color: subsurfaceTheme.textColor
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
text: col0 !== undefined ? col0 : ""
|
|
}
|
|
}
|
|
Rectangle {
|
|
color: index & 1 ? subsurfaceTheme.backgroundColor : subsurfaceTheme.lightPrimaryColor
|
|
width: headerColumnWidth - 2 * Kirigami.Units.gridUnit
|
|
height: headerLabel.height + Kirigami.Units.largeSpacing
|
|
Label {
|
|
color: subsurfaceTheme.textColor
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
text: col1 !== undefined ? col1 : ""
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Component {
|
|
id: sectionDelegate
|
|
Rectangle {
|
|
width: headerColumnWidth * 3 - Kirigami.Units.gridUnit * 2
|
|
height: sectionLabel.height + Kirigami.Units.largeSpacing
|
|
Label {
|
|
id: sectionLabel
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
leftPadding: Kirigami.Units.largeSpacing
|
|
color: subsurfaceTheme.textColor
|
|
text: section
|
|
font.bold: true
|
|
}
|
|
}
|
|
}
|
|
ListView {
|
|
id: resultsTable
|
|
model: summaryModel
|
|
Layout.columnSpan: 3
|
|
width: summary.width
|
|
height: summaryModel.rowCount() * 2 * Kirigami.Units.gridUnit
|
|
delegate: rowDelegate
|
|
section.property: "section"
|
|
section.delegate: sectionDelegate
|
|
Component.onCompleted: {
|
|
manager.appendTextToLog("SUMMARY: width: " + width + " height: " + height + " rows: " + model.rowCount())
|
|
}
|
|
onModelChanged: {
|
|
manager.appendTextToLog("SUMMARY model changed; now width: " + width + " height: " + height + " rows: " + model.rowCount())
|
|
}
|
|
}
|
|
}
|
|
}
|