Warning, /pim/itinerary/src/app/StatisticsPage.qml is written in an unsupported language. File is not indexed.

0001 // SPDX-FileCopyrightText: 2019 Volker Krause <vkrause@kde.org>
0002 // SPDX-FileCopyrightText: 2022 Carl Schwan <carl@carlschwan.eu>
0003 // SPDX-License-Identifier: LGPL-2.0-or-later
0004 
0005 import QtQuick
0006 import QtQuick.Layouts
0007 import QtQuick.Controls as QQC2
0008 import org.kde.kirigami as Kirigami
0009 import org.kde.i18n.localeData
0010 import org.kde.itinerary
0011 import org.kde.kirigamiaddons.formcard as FormCard
0012 
0013 FormCard.FormCardPage {
0014     id: root
0015     title: i18n("Statistics")
0016 
0017     property alias reservationManager: model.reservationManager
0018     property alias tripGroupManager: model.tripGroupManager
0019 
0020     data: [
0021         StatisticsModel {
0022             id: model
0023         },
0024         StatisticsTimeRangeModel {
0025             id: timeRangeModel
0026             reservationManager: model.reservationManager
0027         }
0028     ]
0029 
0030     FormCard.FormHeader {}
0031     FormCard.FormCard {
0032         FormCard.FormComboBoxDelegate {
0033             model: timeRangeModel
0034             text: i18n("Year")
0035             textRole: "display"
0036             onActivated: {
0037                 const begin = timeRangeModel.data(timeRangeModel.index(currentIndex, 0), StatisticsTimeRangeModel.BeginRole);
0038                 const end = timeRangeModel.data(timeRangeModel.index(currentIndex, 0), StatisticsTimeRangeModel.EndRole);
0039                 model.setTimeRange(begin, end);
0040             }
0041             currentIndex: 0
0042         }
0043     }
0044 
0045     FormCard.FormHeader {
0046         title: i18n("Total")
0047     }
0048     FormCard.FormCard {
0049         StatisticsDelegate { statItem: model.totalCount }
0050         FormCard.FormDelegateSeparator {}
0051         StatisticsDelegate { statItem: model.totalDistance }
0052         FormCard.FormDelegateSeparator {}
0053         StatisticsDelegate { statItem: model.totalNights }
0054         FormCard.FormDelegateSeparator {}
0055         StatisticsDelegate { statItem: model.totalCO2 }
0056 
0057         FormCard.FormDelegateSeparator {}
0058 
0059         FormCard.FormButtonDelegate {
0060             id: countryDetailsLink
0061             text: model.visitedCountries.label
0062             description: model.visitedCountries.value.split(" ").map(countryCode => Country.fromAlpha2(countryCode).emojiFlag).join(" ")
0063             onClicked: countryDetailsDelegate.visible = !countryDetailsDelegate.visible
0064             descriptionItem.font.family: 'emoji'
0065         }
0066 
0067         FormCard.FormDelegateSeparator { visible: countryDetailsDelegate.visible }
0068 
0069         FormCard.AbstractFormDelegate {
0070             id: countryDetailsDelegate
0071             background: Item {}
0072             visible: false
0073             property var model: visible ? model.visitedCountries.value.split(" ") : []
0074             contentItem: ColumnLayout {
0075                 Repeater {
0076                     id: countryDetailsRepeater
0077                     model: countryDetailsDelegate.model
0078                     QQC2.Label {
0079                         Layout.fillWidth: true
0080                         wrapMode: Text.WordWrap
0081                         readonly property var country: Country.fromAlpha2(modelData)
0082                         textFormat: Text.RichText
0083                         text: '<span style="font-family: emoji">' + country.emojiFlag + "</span> " + country.name
0084                         Accessible.name: country.name
0085                     }
0086                 }
0087             }
0088         }
0089     }
0090 
0091     FormCard.FormHeader {
0092         title: i18n("Flight")
0093         visible: model.flightCount.hasData
0094     }
0095     FormCard.FormCard {
0096         visible: model.flightCount.hasData
0097 
0098         StatisticsDelegate { statItem: model.flightCount }
0099         FormCard.FormDelegateSeparator {}
0100         StatisticsDelegate { statItem: model.flightDistance }
0101         FormCard.FormDelegateSeparator {}
0102         StatisticsDelegate { statItem: model.flightCO2 }
0103     }
0104 
0105     FormCard.FormHeader {
0106         title: i18n("Train")
0107         visible: model.trainCount.hasData
0108     }
0109     FormCard.FormCard {
0110         visible: model.trainCount.hasData
0111 
0112         StatisticsDelegate { statItem: model.trainCount }
0113         FormCard.FormDelegateSeparator {}
0114         StatisticsDelegate { statItem: model.trainDistance }
0115         FormCard.FormDelegateSeparator {}
0116         StatisticsDelegate { statItem: model.trainCO2 }
0117     }
0118 
0119     FormCard.FormHeader {
0120         title: i18n("Bus")
0121         visible: model.busCount.hasData
0122     }
0123     FormCard.FormCard {
0124         visible: model.busCount.hasData
0125 
0126         StatisticsDelegate { statItem: model.busCount }
0127         FormCard.FormDelegateSeparator {}
0128         StatisticsDelegate { statItem: model.busDistance }
0129         FormCard.FormDelegateSeparator {}
0130         StatisticsDelegate { statItem: model.busCO2 }
0131     }
0132 
0133     FormCard.FormHeader {
0134         title: i18n("Boat")
0135         visible: model.boatCount.hasData
0136     }
0137     FormCard.FormCard {
0138         visible: model.boatCount.hasData
0139 
0140         StatisticsDelegate { statItem: model.boatCount }
0141         FormCard.FormDelegateSeparator {}
0142         StatisticsDelegate { statItem: model.boatDistance }
0143         FormCard.FormDelegateSeparator {}
0144         StatisticsDelegate { statItem: model.boatCO2 }
0145     }
0146 
0147     FormCard.FormHeader {
0148         title: i18n("Car")
0149         visible: model.carCount.hasData
0150     }
0151     FormCard.FormCard {
0152         visible: model.carCount.hasData
0153 
0154         StatisticsDelegate { statItem: model.carCount }
0155         FormCard.FormDelegateSeparator {}
0156         StatisticsDelegate { statItem: model.carDistance }
0157         FormCard.FormDelegateSeparator {}
0158         StatisticsDelegate { statItem: model.carCO2 }
0159     }
0160 }