diff --git a/views/calendar/main.qml b/views/calendar/main.qml new file mode 100644 index 00000000..4065b876 --- /dev/null +++ b/views/calendar/main.qml @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2018 Christian Mollekopf, + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Window 2.0 + +import org.kube.framework 1.0 as Kube +import org.kube.test 1.0 +import "qml" + +ApplicationWindow { + id: app + height: Screen.desktopAvailableHeight * 0.8 + width: Screen.desktopAvailableWidth * 0.8 + + Component.onCompleted: { + var initialState = { + accounts: [{ + id: "account1", + name: "Test Account" + }], + identities: [{ + account: "account1", + name: "Test Identity", + address: "identity@example.org" + }], + resources: [{ + id: "resource1", + account: "account1", + type: "dummy" + }, + { + id: "resource2", + account: "account1", + type: "mailtransport" + }], + folders: [{ + id: "folder1", + resource: "resource1", + name: "Folder 1", + specialpurpose: ["inbox"], + mails: [{ + resource: "resource1", + messageId: "", + date: "2017-07-24T15:46:29", + subject: "subject1", + body: "body", + to: ["to@example.org"], + cc: ["cc@example.org"], + bcc: ["bcc@example.org"], + }, + { + resource: "resource1", + inReplyTo: "", + date: "2017-07-24T16:46:29", + subject: "subject2", + body: "body2", + to: ["to@example.org"], + }, + { + resource: "resource1", + date: "2017-07-24T18:46:29", + subject: "subject4", + body: "body4", + to: ["to@example.org"], + }, + ] + }], + } + TestStore.setup(initialState) + } + + View { + anchors.fill: parent + } +} diff --git a/views/calendar/metadata.json b/views/calendar/metadata.json new file mode 100644 index 00000000..669f85a6 --- /dev/null +++ b/views/calendar/metadata.json @@ -0,0 +1,4 @@ +{ + "icon": "mail-task", + "tooltip": "Get things done!" +} diff --git a/views/calendar/qml/DaylongEvents.qml b/views/calendar/qml/DaylongEvents.qml new file mode 100644 index 00000000..340c9d79 --- /dev/null +++ b/views/calendar/qml/DaylongEvents.qml @@ -0,0 +1,16 @@ +import QtQuick 2.7 + +ListModel { + ListElement { + color: "#af1a6a" + starts: 1 + duration: 4 + text: "Baustelle Adalbertstr." + } + ListElement { + color: "#134bab" + starts: 0 + duration: 6 + text: "Urlaub" + } +} diff --git a/views/calendar/qml/View.qml b/views/calendar/qml/View.qml new file mode 100644 index 00000000..1b72881d --- /dev/null +++ b/views/calendar/qml/View.qml @@ -0,0 +1,141 @@ +/* + * Copyright (C) 2018 Michael Bohlender, + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +import QtQuick 2.4 +import QtQuick.Layouts 1.1 +import QtQuick.Controls 2.0 +import Qt.labs.calendar 1.0 + +import org.kube.framework 1.0 as Kube + +FocusScope { + id: root + + property var month: Calendar.March + property var year: 2017 + + + Column { + anchors.centerIn: parent + + DayOfWeekRow { + + anchors.horizontalCenter: parent.horizontalCenter + + spacing: 0 + locale: Qt.locale("de") + + delegate: Rectangle { + width: Kube.Units.gridUnit * 7 + height: Kube.Units.gridUnit + Kube.Units.smallSpacing * 3 + + border.width: 1 + border.color: "lightgrey" + color: Kube.Colors.viewBackgroundColor + + Kube.Label { + anchors { + top: parent.top + left: parent.left + margins: Kube.Units.smallSpacing + } + text: model.shortName + } + } + } + + Rectangle { + height: Kube.Units.gridUnit * 3 + width: parent.width + color: Kube.Colors.viewBackgroundColor + + ListView { + id: daylong + + anchors.fill: parent + + model: DaylongEvents {} + + delegate: Item { + height: Kube.Units.gridUnit + width: daylong.width + + Rectangle { + width: Kube.Units.gridUnit * 7 * model.duration + height: Kube.Units.gridUnit + x: Kube.Units.gridUnit * 7 * model.starts + color: model.color + + Kube.Label { + anchors { + left: parent.left + leftMargin: Kube.Units.smallSpacing + } + color: Kube.Colors.highlightedTextColor + text: model.text + } + } + } + } + } + + RowLayout { + + anchors.horizontalCenter: parent.horizontalCenter + + spacing: 0 + + Repeater { + model: WeekEvents{} + delegate: Rectangle { + id: day + + property var events: model.events + + width: Kube.Units.gridUnit * 7 + height: Kube.Units.gridUnit * 20 + + border.width: 1 + border.color: "lightgrey" + color: Kube.Colors.viewBackgroundColor + + Repeater { + model: parent.events + + delegate: Rectangle { + anchors.horizontalCenter: parent.horizontalCenter + width: parent.width - Kube.Units.smallSpacing * 2 + height: Kube.Units.gridUnit * duration + y: Kube.Units.gridUnit * starts + color: model.color + + Kube.Label { + anchors { + left: parent.left + leftMargin: Kube.Units.smallSpacing + } + text: model.text + color: Kube.Colors.highlightedTextColor + } + } + } + } + } + } + } +} diff --git a/views/calendar/qml/WeekEvents.qml b/views/calendar/qml/WeekEvents.qml new file mode 100644 index 00000000..b08c00a5 --- /dev/null +++ b/views/calendar/qml/WeekEvents.qml @@ -0,0 +1,65 @@ +import QtQuick 2.7 + +ListModel { + ListElement { + events: [ + ListElement { + color: "#af1a6a" + starts: 1 + duration: 4 + text: "Meeting" + }, + ListElement { + color: "#134bab" + starts: 9 + duration: 5 + text: "Sport" + } + ] + } + ListElement { + events: [ + ListElement { + color: "#134bab" + starts: 9 + duration: 5 + text: "Sport" + } + ] + } + ListElement { + events: [] + } + ListElement { + events: [ + ListElement { + color: "#af1a6a" + starts: 1 + duration: 4 + text: "Meeting" + } + ] + } + ListElement { + events: [ + ListElement { + color: "#af1a6a" + starts: 3 + duration: 5 + text: "Meeting" + }, + ListElement { + color: "#af1a6a" + starts: 9 + duration: 4 + text: "Meeting2" + } + ] + } + ListElement { + events: [] + } + ListElement { + events: [] + } +} diff --git a/views/calendar/tests/tst_calendar.qml b/views/calendar/tests/tst_calendar.qml new file mode 100644 index 00000000..46f7dba2 --- /dev/null +++ b/views/calendar/tests/tst_calendar.qml @@ -0,0 +1,36 @@ +/* + * Copyright 2017 Christian Mollekopf + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +import QtQuick 2.7 +import QtTest 1.0 +import "../qml" + +TestCase { + width: 400 + height: 400 + name: "Todo" + + View { + id: view + } + + function test_start() { + verify(view) + } +}