Warning, /plasma-mobile/calindori/src/contents/ui/CalendarEditor.qml is written in an unsupported language. File is not indexed.

0001 /*
0002  * SPDX-FileCopyrightText: 2018 Dimitris Kardarakos <dimkard@posteo.net>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 import QtQuick 2.7
0008 import QtQuick.Controls 2.0 as Controls2
0009 import QtQuick.Layouts 1.3
0010 import org.kde.kirigami 2.12 as Kirigami
0011 import org.kde.calindori 0.1 as Calindori
0012 
0013 Kirigami.Page {
0014     id: root
0015 
0016     enum Mode {
0017         Create,
0018         AddExisting,
0019         Edit
0020     }
0021 
0022     property var loadedCalendar
0023     property alias calendarName: nameInput.text
0024     property alias ownerName: ownerNameInput.text
0025     property alias ownerEmail: ownerEmail.text
0026     property int mode: CalendarEditor.Mode.Create
0027     property url calendarFile
0028 
0029     signal calendarEditorSaved
0030     signal calendarEditorCancelled
0031 
0032     title: mode === CalendarEditor.Mode.Edit ? calendarName : i18n("New calendar")
0033 
0034     function addLocalCalendarCfgEntry() {
0035         var insertResult = Calindori.CalindoriConfig.addInternalCalendar(root.calendarName, root.ownerName, root.ownerEmail);
0036 
0037         if(!(insertResult.success)) {
0038             validationFooter.text = insertResult.reason;
0039             validationFooter.visible = true;
0040             return;
0041         }
0042 
0043         validationFooter.visible = false;
0044         calendarEditorSaved();
0045     }
0046 
0047     function addSharedCalendarCfgEntry() {
0048         var addSharedResult = Calindori.CalindoriConfig.addExternalCalendar(root.calendarName, root.ownerName, root.ownerEmail,  root.calendarFile);
0049 
0050         if(!(addSharedResult.success)) {
0051             validationFooter.text = addSharedResult.reason;
0052             validationFooter.visible = true;
0053             return;
0054         }
0055 
0056         Calindori.CalindoriConfig.setOwnerInfo(root.calendarName, root.ownerName, root.ownerEmail);
0057 
0058         validationFooter.visible = false;
0059         calendarEditorSaved();
0060     }
0061 
0062     Kirigami.FormLayout {
0063         id: calendarInputPage
0064 
0065         anchors.centerIn: parent
0066 
0067         Controls2.TextField {
0068             id: nameInput
0069 
0070             visible: root.mode !== CalendarEditor.Mode.Edit
0071             Kirigami.FormData.label: i18n("Calendar:")
0072         }
0073 
0074         Controls2.Label {
0075             id: fileName
0076 
0077             property bool showFileName: (root.mode == CalendarEditor.Mode.AddExisting) && (root.calendarFile != "")
0078 
0079             visible: showFileName
0080             Kirigami.FormData.label: i18n("File:")
0081             text: showFileName ? Calindori.CalendarController.fileNameFromUrl(root.calendarFile) : ""
0082         }
0083 
0084         Kirigami.Separator {
0085             Kirigami.FormData.label: i18n("Owner")
0086             Kirigami.FormData.isSection: true
0087         }
0088 
0089         Controls2.TextField {
0090             id: ownerNameInput
0091 
0092             Kirigami.FormData.label: i18n("Name:")
0093         }
0094 
0095         Controls2.TextField {
0096             id: ownerEmail
0097 
0098             Kirigami.FormData.label: i18n("Email:")
0099         }
0100 
0101     }
0102 
0103     actions {
0104 
0105         left: Kirigami.Action {
0106             id: cancelAction
0107 
0108             text: i18n("Cancel")
0109             icon.name : "dialog-cancel"
0110 
0111             onTriggered: {
0112                 calendarEditorCancelled();
0113             }
0114         }
0115 
0116         main: Kirigami.Action {
0117             id: saveAction
0118 
0119             text: i18n("Save")
0120             enabled: (mode == CalendarEditor.Mode.AddExisting) ? (root.calendarName != "" && root.calendarFile != "") : (root.calendarName != "")
0121 
0122             icon.name : "dialog-ok"
0123 
0124             onTriggered: {
0125                 if ((mode === CalendarEditor.Mode.AddExisting) || (mode === CalendarEditor.Mode.Create))  {
0126                     var canAddResult = Calindori.CalindoriConfig.canAddCalendar(root.calendarName);
0127 
0128                     if(canAddResult && !(canAddResult.success)) {
0129                         validationFooter.text = canAddResult.reason;
0130                         validationFooter.visible = true;
0131                         return;
0132                     }
0133                 }
0134 
0135                 switch(mode) {
0136                     case CalendarEditor.Mode.AddExisting:
0137                         addSharedCalendarCfgEntry();
0138                         break;
0139                     case CalendarEditor.Mode.Create:
0140                         addLocalCalendarCfgEntry();
0141                         break;
0142                     case CalendarEditor.Mode.Edit:
0143                         Calindori.CalindoriConfig.setOwnerInfo(root.calendarName, root.ownerName, root.ownerEmail);
0144                         calendarEditorSaved();
0145                         break;
0146                     default:
0147                         return;
0148                 }
0149             }
0150         }
0151 
0152         right: Kirigami.Action {
0153             id: addFile
0154 
0155             visible: root.mode == CalendarEditor.Mode.AddExisting
0156             text: i18n("Add")
0157             icon.name: "list-add"
0158 
0159             onTriggered: fileChooser.open()
0160         }
0161 
0162     }
0163 
0164     footer: Kirigami.InlineMessage {
0165         id: validationFooter
0166 
0167         showCloseButton: true
0168         type: Kirigami.MessageType.Warning
0169         visible: false
0170     }
0171 
0172     FileChooser {
0173         id: fileChooser
0174 
0175         onAccepted: root.calendarFile = fileUrl
0176     }
0177 
0178 }