Warning, /utilities/daykountdown/src/contents/ui/AddEditSheet.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 * SPDX-FileCopyrightText: (C) 2021 Claudio Cambra <claudio.cambra@gmail.com> 0003 * 0004 * SPDX-LicenseRef: GPL-3.0-or-later 0005 */ 0006 0007 // Includes relevant modules used by the QML 0008 import QtQuick 2.6 0009 import QtQuick.Controls 2.3 as Controls 0010 import QtQuick.Layouts 1.2 0011 import QtQuick.Dialogs 1.3 0012 import org.kde.kirigami 2.13 as Kirigami 0013 import org.kde.plasma.calendar 2.0 as PlasmaCalendar 0014 import org.kde.daykountdown.private 1.0 0015 0016 // Overlay sheets appear over a part of the window 0017 Kirigami.OverlaySheet { 0018 id: addEditSheet 0019 0020 // Sheet mode 0021 property string mode: "add" 0022 0023 property int index: -1 0024 property string name: "" 0025 property string description: "" 0026 property date kdate: nowDate 0027 property color colour: palette.text; 0028 0029 property alias datePickerComponent: datePicker 0030 0031 // Signals can be read an certain actions performed when these happen 0032 signal added (string name, string description, var kdate) 0033 signal edited(int index, string name, string description, var kdate) 0034 signal removed(int index) 0035 0036 onKdateChanged: { 0037 datePicker.selectedDate = kdate 0038 datePicker.clickedDate = kdate 0039 } 0040 0041 header: Kirigami.Heading { 0042 // i18nc is useful for adding context for translators 0043 text: mode === "add" ? i18nc("@title:window", "Add kountdown") : 0044 i18nc("@title:window", "Edit kountdown") 0045 } 0046 // Form layouts help align and structure a layout with several inputs 0047 Kirigami.FormLayout { 0048 id: formLayout 0049 // Textfields let you input text in a thin textbox 0050 Controls.TextField { 0051 id: nameField 0052 // Provides label attached to the textfield 0053 Kirigami.FormData.label: i18nc("@label:textbox", "Name:") 0054 // Placeholder text is visible before you enter anything 0055 placeholderText: i18n("Event name (required)") 0056 // What to do after input is accepted (i.e. pressed enter) 0057 // In this case, it moves the focus to the next field 0058 text: name 0059 onAccepted: descriptionField.forceActiveFocus() 0060 } 0061 Controls.TextField { 0062 id: descriptionField 0063 Kirigami.FormData.label: i18nc("@label:textbox", "Description:") 0064 placeholderText: i18n("Optional") 0065 text: description 0066 onAccepted: datePicker.forceActiveFocus() 0067 } 0068 // Advanced colourpicker widget 0069 ColorDialog { 0070 id: colorDialog 0071 title: i18n("Kountdown Colour") 0072 onAccepted: { 0073 colour = colorDialog.color; 0074 } 0075 } 0076 // Horizontally display kountdown colour buttons 0077 RowLayout { 0078 Layout.fillWidth: true 0079 Kirigami.FormData.label: i18n("Colour:") 0080 Controls.RoundButton { 0081 contentItem: Text { 0082 text: "\u2B24" 0083 color: "crimson" 0084 horizontalAlignment: Text.AlignHCenter 0085 verticalAlignment: Text.AlignVCenter 0086 } 0087 onClicked: colour = "crimson" 0088 } 0089 Controls.RoundButton { 0090 contentItem: Text { 0091 text: "\u2B24" 0092 color: "coral" 0093 horizontalAlignment: Text.AlignHCenter 0094 verticalAlignment: Text.AlignVCenter 0095 } 0096 onClicked: colour = "coral" 0097 } 0098 Controls.RoundButton { 0099 contentItem: Text { 0100 text: "\u2B24" 0101 color: "goldenrod" 0102 horizontalAlignment: Text.AlignHCenter 0103 verticalAlignment: Text.AlignVCenter 0104 } 0105 onClicked: colour = "goldenrod" 0106 } 0107 Controls.RoundButton { 0108 contentItem: Text { 0109 text: "\u2B24" 0110 color: "lightseagreen" 0111 horizontalAlignment: Text.AlignHCenter 0112 verticalAlignment: Text.AlignVCenter 0113 } 0114 onClicked: colour = "lightseagreen" 0115 } 0116 Controls.RoundButton { 0117 contentItem: Text { 0118 text: "\u2B24" 0119 color: "deepskyblue" 0120 horizontalAlignment: Text.AlignHCenter 0121 verticalAlignment: Text.AlignVCenter 0122 } 0123 onClicked: colour = "deepskyblue" 0124 } 0125 Controls.RoundButton { 0126 contentItem: Text { 0127 text: "\u2B24" 0128 color: "hotpink" 0129 horizontalAlignment: Text.AlignHCenter 0130 verticalAlignment: Text.AlignVCenter 0131 } 0132 onClicked: colour = "hotpink" 0133 } 0134 Controls.Button { 0135 id: openColourDialog 0136 onClicked: colorDialog.open() 0137 text: "More" 0138 Layout.fillWidth: true 0139 } 0140 } 0141 Rectangle { 0142 color: colour 0143 Layout.fillWidth: true 0144 height: 20 0145 } 0146 Kirigami.Separator { 0147 // Stops the rectangle being eaten into by the PlasmaCalendar 0148 visible: formLayout.wideMode 0149 } 0150 // This singleton is bringing in a component defined in DatePicker.qml 0151 ColumnLayout { 0152 Layout.fillWidth: true 0153 height: Kirigami.Units.gridUnit * 16 0154 0155 DatePicker { 0156 id: datePicker 0157 anchors.fill: parent 0158 } 0159 } 0160 // This is a button. 0161 Controls.Button { 0162 id: deleteButton 0163 Layout.fillWidth: true 0164 text: i18nc("@action:button", "Delete") 0165 visible: mode === "edit" 0166 onClicked: { 0167 addEditSheet.removed(index) 0168 close(); 0169 } 0170 } 0171 Controls.Button { 0172 id: doneButton 0173 Layout.fillWidth: true 0174 text: i18nc("@action:button", "Done") 0175 // Button is only enabled if the user has entered something into the nameField 0176 enabled: nameField.text.length > 0 0177 onClicked: { 0178 // Add a listelement to the kountdownModel ListModel 0179 if(mode === "add") { 0180 addEditSheet.added( 0181 nameField.text, 0182 descriptionField.text, 0183 datePicker.clickedDate, 0184 colour 0185 ); 0186 } 0187 else { 0188 addEditSheet.edited( 0189 index, 0190 nameField.text, 0191 descriptionField.text, 0192 datePicker.clickedDate, 0193 colour 0194 ); 0195 } 0196 close(); 0197 } 0198 } 0199 } 0200 }