Warning, /plasma/plasma-workspace/components/calendar/qml/MonthViewHeader.qml is written in an unsupported language. File is not indexed.

0001 /*
0002     SPDX-FileCopyrightText: 2022 Tanbir Jishan <tantalising007@gmail.com>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 import QtQuick 2.15
0007 import QtQuick.Layouts 1.1
0008 
0009 import org.kde.plasma.components 3.0 as PlasmaComponents3
0010 import org.kde.plasma.extras 2.0 as PlasmaExtras
0011 import org.kde.kirigami 2.20 as Kirigami
0012 
0013 // NOTE : This header is designed to be usable by both the generic calendar component and the digital clock applet
0014 // which requires a little different layout to accomodate for configure and pin buttons because it may be in panel
0015 
0016 //                      CALENDAR                                               DIGTAL CLOCK
0017 // |---------------------------------------------------|  |----------------------------------------------------|
0018 // | January                              < today >    |  | January                            config+  pin/   |
0019 // |        Days          Months         Year          |  |   Days       Months       Year          < today >  |
0020 // |                                                   |  |                                                    |
0021 // |               Rest of the calendar                |  |              Rest of the calendar                  |
0022 // |...................................................|  |....................................................|
0023 //
0024 
0025 
0026 Item {
0027     id: root
0028 
0029     required property var swipeView
0030     required property var monthViewRoot
0031 
0032     readonly property bool isDigitalClock: monthViewRoot.showDigitalClockHeader
0033     readonly property var buttons: isDigitalClock ? dateManipulationButtonsForDigitalClock : dateManipulationButtons
0034     readonly property var tabButton: isDigitalClock ? configureButton : todayButton
0035     readonly property var previousButton: buttons.previousButton
0036     readonly property var todayButton: buttons.todayButton
0037     readonly property var nextButton: buttons.nextButton
0038     readonly property alias tabBar: tabBar
0039     readonly property alias heading: heading
0040     readonly property alias configureButton: dateAndPinButtons.configureButton
0041     readonly property alias pinButton: dateAndPinButtons.pinButton
0042 
0043     implicitWidth: viewHeader.implicitWidth
0044     implicitHeight: viewHeader.implicitHeight
0045 
0046     KeyNavigation.up: configureButton
0047 
0048     Loader {
0049         anchors.fill: parent
0050         sourceComponent: PlasmaExtras.PlasmoidHeading {}
0051         active: isDigitalClock
0052     }
0053 
0054     ColumnLayout {
0055         id: viewHeader
0056         width: parent.width
0057 
0058         RowLayout {
0059             spacing: 0
0060             Layout.leftMargin: Kirigami.Units.largeSpacing
0061 
0062             Kirigami.Heading {
0063                 id: heading
0064                 // Needed for Appium testing
0065                 objectName: "monthHeader"
0066 
0067                 text: root.swipeView.currentIndex > 0 || monthViewRoot.selectedYear !== today.getFullYear() ? i18ndc("plasmashellprivateplugin", "Format: month year", "%1 %2", monthViewRoot.selectedMonth, monthViewRoot.selectedYear.toString()) : monthViewRoot.selectedMonth
0068                 textFormat: Text.PlainText
0069                 level: root.isDigitalClock ? 1 : 2
0070                 elide: Text.ElideRight
0071                 font.capitalization: Font.Capitalize
0072                 Layout.fillWidth: true
0073             }
0074 
0075             Loader {
0076                 id: dateManipulationButtons
0077 
0078                 property var previousButton: item && item.previousButton
0079                 property var todayButton: item && item.todayButton
0080                 property var nextButton: item && item.nextButton
0081 
0082                 sourceComponent: buttonsGroup
0083                 active: !root.isDigitalClock
0084             }
0085 
0086             Loader {
0087                 id: dateAndPinButtons
0088 
0089                 readonly property var configureButton: item && item.configureButton
0090                 readonly property var pinButton: item && item.pinButton
0091 
0092                 sourceComponent: dateAndPin
0093                 active: root.isDigitalClock
0094             }
0095         }
0096 
0097         RowLayout {
0098             spacing: 0
0099             PlasmaComponents3.TabBar {
0100                 id: tabBar
0101 
0102                 currentIndex: root.swipeView.currentIndex
0103                 Layout.fillWidth: true
0104                 Layout.bottomMargin: root.isDigitalClock ? 0 : Kirigami.Units.smallSpacing
0105 
0106                 KeyNavigation.up: root.isDigitalClock ? root.configureButton : root.previousButton
0107                 KeyNavigation.right: dateManipulationButtonsForDigitalClock.previousButton
0108                 KeyNavigation.left:  root.monthViewRoot.eventButton && root.monthViewRoot.eventButton.visible ?
0109                                                                                root.monthViewRoot.eventButton :
0110                                                                                root.monthViewRoot.eventButton && root.monthViewRoot.eventButton.KeyNavigation.down
0111 
0112                 PlasmaComponents3.TabButton {
0113                     Accessible.onPressAction: clicked()
0114                     text: i18nd("plasmashellprivateplugin", "Days");
0115                     onClicked: monthViewRoot.showMonthView();
0116                     display: PlasmaComponents3.AbstractButton.TextOnly
0117                 }
0118                 PlasmaComponents3.TabButton {
0119                     Accessible.onPressAction: clicked()
0120                     text: i18nd("plasmashellprivateplugin", "Months");
0121                     onClicked: monthViewRoot.showYearView();
0122                     display: PlasmaComponents3.AbstractButton.TextOnly
0123                 }
0124                 PlasmaComponents3.TabButton {
0125                     Accessible.onPressAction: clicked()
0126                     text: i18nd("plasmashellprivateplugin", "Years");
0127                     onClicked: monthViewRoot.showDecadeView();
0128                     display: PlasmaComponents3.AbstractButton.TextOnly
0129                 }
0130             }
0131 
0132             Loader {
0133                 id: dateManipulationButtonsForDigitalClock
0134 
0135                 property var previousButton: item && item.previousButton
0136                 property var todayButton: item && item.todayButton
0137                 property var nextButton: item && item.nextButton
0138 
0139                 sourceComponent: buttonsGroup
0140                 active: root.isDigitalClock
0141             }
0142         }
0143     }
0144 
0145     // ------------------------------------------ UI ends ------------------------------------------------- //
0146 
0147     Component {
0148         id: buttonsGroup
0149 
0150         RowLayout {
0151             spacing: 0
0152 
0153             readonly property alias previousButton: previousButton
0154             readonly property alias todayButton: todayButton
0155             readonly property alias nextButton: nextButton
0156 
0157             KeyNavigation.up: root.configureButton
0158 
0159             PlasmaComponents3.ToolButton {
0160                 id: previousButton
0161                 text: {
0162                     switch(monthViewRoot.calendarViewDisplayed) {
0163                         case MonthView.CalendarView.DayView:
0164                             return i18nd("plasmashellprivateplugin", "Previous Month")
0165                         case MonthView.CalendarView.MonthView:
0166                             return i18nd("plasmashellprivateplugin", "Previous Year")
0167                         case MonthView.CalendarView.YearView:
0168                             return i18nd("plasmashellprivateplugin", "Previous Decade")
0169                         default:
0170                             return "";
0171                     }
0172                 }
0173 
0174                 icon.name: Qt.application.layoutDirection === Qt.RightToLeft ? "go-next" : "go-previous"
0175                 display: PlasmaComponents3.AbstractButton.IconOnly
0176                 KeyNavigation.right: todayButton
0177 
0178                 onClicked: monthViewRoot.previousView()
0179 
0180                 PlasmaComponents3.ToolTip { text: parent.text }
0181             }
0182 
0183             PlasmaComponents3.ToolButton {
0184                 id: todayButton
0185                 text: i18ndc("plasmashellprivateplugin", "Reset calendar to today", "Today")
0186                 Accessible.description: i18nd("plasmashellprivateplugin", "Reset calendar to today")
0187                 KeyNavigation.right: nextButton
0188 
0189                 onClicked: monthViewRoot.resetToToday()
0190             }
0191 
0192             PlasmaComponents3.ToolButton {
0193                 id: nextButton
0194                 text: {
0195                     switch(monthViewRoot.calendarViewDisplayed) {
0196                         case MonthView.CalendarView.DayView:
0197                             return i18nd("plasmashellprivateplugin", "Next Month")
0198                         case MonthView.CalendarView.MonthView:
0199                             return i18nd("plasmashellprivateplugin", "Next Year")
0200                         case MonthView.CalendarView.YearView:
0201                             return i18nd("plasmashellprivateplugin", "Next Decade")
0202                         default:
0203                             return "";
0204                     }
0205                 }
0206 
0207                 icon.name: Qt.application.layoutDirection === Qt.RightToLeft ? "go-previous" : "go-next"
0208                 display: PlasmaComponents3.AbstractButton.IconOnly
0209                 KeyNavigation.tab: root.swipeView
0210 
0211                 onClicked: monthViewRoot.nextView();
0212 
0213                 PlasmaComponents3.ToolTip { text: parent.text }
0214             }
0215         }
0216     }
0217 
0218     Component {
0219         id: dateAndPin
0220 
0221         RowLayout {
0222             spacing: 0
0223 
0224             readonly property alias configureButton: configureButton
0225             readonly property alias pinButton: pinButton
0226 
0227             KeyNavigation.up: pinButton
0228 
0229             PlasmaComponents3.ToolButton {
0230                 id: configureButton
0231 
0232                 visible: root.monthViewRoot.digitalClock.internalAction("configure").enabled
0233 
0234                 display: PlasmaComponents3.AbstractButton.IconOnly
0235                 icon.name: "configure"
0236                 text: root.monthViewRoot.digitalClock.internalAction("configure").text
0237 
0238                 KeyNavigation.left: tabBar.KeyNavigation.left
0239                 KeyNavigation.right: pinButton
0240                 KeyNavigation.down: root.todayButton
0241 
0242                 onClicked: root.monthViewRoot.digitalClock.internalAction("configure").trigger()
0243                 PlasmaComponents3.ToolTip {
0244                     text: parent.text
0245                 }
0246             }
0247 
0248             // Allows the user to keep the calendar open for reference
0249             PlasmaComponents3.ToolButton {
0250                 id: pinButton
0251 
0252                 checkable: true
0253                 checked: root.monthViewRoot.digitalClock.configuration.pin
0254 
0255                 display: PlasmaComponents3.AbstractButton.IconOnly
0256                 icon.name: "window-pin"
0257                 text: i18n("Keep Open")
0258 
0259                 KeyNavigation.down: root.nextButton
0260 
0261                 onToggled: root.monthViewRoot.digitalClock.configuration.pin = checked
0262 
0263                 PlasmaComponents3.ToolTip {
0264                     text: parent.text
0265                 }
0266             }
0267         }
0268     }
0269 }