Warning, /utilities/kweather/src/qml/TemperatureChartCard.qml is written in an unsupported language. File is not indexed.

0001 /*
0002  * Copyright 2020 Han Young <hanyoung@protonmail.com>
0003  * Copyright 2020 Devin Lin <espidev@gmail.com>
0004  * SPDX-FileCopyrightText: 2021 Nicolas Fella <nicolas.fella@gmx.de>
0005  *
0006  * SPDX-License-Identifier: GPL-2.0-or-later
0007  */
0008 
0009 import QtQuick
0010 import QtQuick.Controls
0011 import QtQuick.Layouts
0012 import QtCharts
0013 import org.kde.kirigami as Kirigami
0014 import org.kde.kweather
0015 import org.kde.kweather.backgrounds
0016 
0017 Kirigami.AbstractCard {
0018     id: tempChartCard
0019 
0020     required property var location
0021     property var backgroundColor: location.cardBackgroundColor
0022     property var textColor: location.cardTextColor
0023 
0024     leftPadding: 0; rightPadding: 0; topPadding: 0; bottomPadding: 0;
0025     implicitHeight: Math.round(Kirigami.Units.gridUnit * 8.5)
0026 
0027     clip: true
0028 
0029     contentItem: ScrollView {
0030         id: scrollView
0031         contentHeight: -1
0032         contentWidth: page.maximumContentWidth
0033 
0034         Item {
0035             width: page.maximumContentWidth
0036             height: Math.round(Kirigami.Units.gridUnit * 8.5)
0037 
0038             TemperatureChartData {
0039                 id: chartData
0040                 weatherData: location.dayForecasts
0041             }
0042 
0043             ChartView {
0044                 id: chartView
0045                 anchors.fill: parent
0046                 margins.left: Kirigami.Units.largeSpacing; margins.right: Kirigami.Units.largeSpacing
0047                 margins.top: 0; margins.bottom: Kirigami.Units.smallSpacing
0048                 legend.visible: false
0049                 antialiasing: true
0050                 localizeNumbers: true
0051                 animationOptions: ChartView.NoAnimation
0052                 backgroundColor: tempChartCard.backgroundColor
0053                 plotAreaColor: tempChartCard.backgroundColor
0054 
0055                 height: tempChartCard.height
0056                 width: Math.max(Kirigami.Units.gridUnit * 25, tempChartCard.width)
0057 
0058                 SplineSeries {
0059                     id: splineSeries
0060                     axisX: DateTimeAxis {
0061                         id: axisX
0062                         tickCount: dailyListView.count
0063                         format: "ddd"
0064                         labelsColor: tempChartCard.textColor
0065                         lineVisible: false
0066                         gridLineColor: Qt.rgba(tempChartCard.textColor.r, tempChartCard.textColor.g, tempChartCard.textColor.b, 0.05)
0067                     }
0068                     axisY: ValueAxis {
0069                         id: axisY
0070                         visible: false
0071 
0072                         min: chartData.minTempLimit
0073                         max: chartData.maxTempLimit
0074                         labelsColor: tempChartCard.textColor
0075                     }
0076                     name: i18n("temperature")
0077                     pointLabelsVisible: true
0078                     pointLabelsFormat: "@yPoint°"
0079                     pointLabelsClipping: false
0080                     pointLabelsColor: tempChartCard.textColor
0081                     pointLabelsFont.pointSize: Kirigami.Theme.defaultFont.pointSize
0082                 }
0083 
0084                 Component.onCompleted: {
0085                     chartData.initAxes(axisX, axisY);
0086                     chartData.initSeries(chartView.series(0));
0087                 }
0088                 Component.onDestruction: {
0089                     // ensure that the series is a nullptr
0090                     chartData.initSeries(null);
0091                 }
0092             }
0093 
0094             // allow continuous mouse scrolling
0095             MouseArea {
0096                 anchors.fill: parent
0097                 property int scrollDist: Kirigami.Units.gridUnit * 2
0098                 onWheel: wheel => {
0099                     //check if mouse is scrolling up or down
0100                     if (wheel.angleDelta.y < 0){
0101                         page.flickable.contentY += scrollDist
0102                     } else {
0103                         page.flickable.contentY -= scrollDist
0104                     }
0105                 }
0106                 onPressed: mouse =>  mouse.accepted = false // forward mouse event
0107                 onReleased: mouse => mouse.accepted = false // forward mouse event
0108             }
0109         }
0110     }
0111 }