diff --git a/views/calendar/qml/DateSelector.qml b/views/calendar/qml/DateSelector.qml index cdaa819b..890a1a8b 100644 --- a/views/calendar/qml/DateSelector.qml +++ b/views/calendar/qml/DateSelector.qml @@ -1,101 +1,105 @@ /* * 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.4 import QtQuick.Controls 2.2 import Qt.labs.calendar 1.0 import org.kube.framework 1.0 as Kube Column { id: root property date selectedDate spacing: Kube.Units.smallSpacing Item { anchors { left: parent.left right: parent.right } height: Kube.Units.gridUnit Kube.IconButton { anchors { verticalCenter: parent.verticalCenter left: parent.left } color: Kube.Colors.darkBackgroundColor iconName: Kube.Icons.goBack_inverted onClicked: { var dateOffset = (24*60*60*1000) * 7; //7 days var myDate = root.selectedDate; myDate.setTime(myDate.getTime() - dateOffset); root.selectedDate = myDate } } Kube.Label { anchors { verticalCenter: parent.verticalCenter horizontalCenter: parent.horizontalCenter } color: Kube.Colors.highlightedTextColor font.bold: true text: root.selectedDate.toLocaleString(Qt.locale(), "MMMM yyyy") } Kube.IconButton { anchors { verticalCenter: parent.verticalCenter right: parent.right } color: Kube.Colors.darkBackgroundColor iconName: Kube.Icons.goNext_inverted onClicked: { var dateOffset = (24*60*60*1000) * 7; //7 days var myDate = root.selectedDate; myDate.setTime(myDate.getTime() + dateOffset); root.selectedDate = myDate } } } MonthGrid { id: grid month: root.selectedDate.getMonth() year: root.selectedDate.getFullYear() locale: Qt.locale() delegate: Text { horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter opacity: model.month === grid.month ? 1 : 0.5 text: model.day font: grid.font color: Kube.Colors.highlightedTextColor Rectangle { anchors { left: parent.left right: parent.right bottom: parent.bottom } width: Kube.Units.gridUnit height: 1 color: Kube.Colors.plasmaBlue opacity: 0.6 visible: model.day === root.selectedDate.getDate() && model.month === root.selectedDate.getMonth() } } + + onClicked: { + root.selectedDate = date + } } } diff --git a/views/calendar/qml/View.qml b/views/calendar/qml/View.qml index f49d8bff..3fc5d021 100644 --- a/views/calendar/qml/View.qml +++ b/views/calendar/qml/View.qml @@ -1,160 +1,162 @@ /* * 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.9 import QtQuick.Controls 2.1 import QtQuick.Layouts 1.2 import org.kube.framework 1.0 as Kube RowLayout { id: root property date currentDate: new Date() property date selectedDate: getFirstDayOfWeek(currentDate) property bool autoUpdateDate: true Timer { running: autoUpdateDate interval: 2000; repeat: true onTriggered: root.currentDate = new Date() } function getFirstDayOfWeek(date) { var firstDay = Qt.locale().firstDayOfWeek var year = date.getFullYear() var month = date.getMonth() //Jup, getDate returns the day of the month var day = date.getDate() while (true) { if (date.getDay() === firstDay) { return date } day = day - 1 date = new Date(year, month, day) } return date } StackView.onActivated: { Kube.Fabric.postMessage(Kube.Messages.synchronize, {"type": "event"}) } Rectangle { width: Kube.Units.gridUnit * 10 Layout.fillHeight: parent.height color: Kube.Colors.darkBackgroundColor Kube.PositiveButton { id: newEventButton objectName: "newEventButton" anchors { top: parent.top left: parent.left right: parent.right margins: Kube.Units.largeSpacing } focus: true text: qsTr("New Event") onClicked: {} } Column { anchors { top: newEventButton.bottom left: newEventButton.left topMargin: Kube.Units.largeSpacing } width: parent.width spacing: Kube.Units.smallSpacing DateView { date: root.currentDate } } ColumnLayout { anchors { bottom: parent.bottom left: newEventButton.left right: parent.right bottomMargin: Kube.Units.largeSpacing } spacing: Kube.Units.largeSpacing DateSelector { + id: dateSelector selectedDate: root.selectedDate onSelectedDateChanged: { - root.selectedDate = selectedDate + root.selectedDate = getFirstDayOfWeek(dateSelector.selectedDate) + selectedDate = root.selectedDate } } Column { anchors { left: parent.left right: parent.right } spacing: Kube.Units.smallSpacing Repeater { model: Kube.EntityModel { type: "calendar" roles: ["name", "color"] } delegate: Item { width: parent.width - Kube.Units.largeSpacing height: Kube.Units.gridUnit Row { spacing: Kube.Units.smallSpacing Kube.CheckBox { opacity: 0.9 checked: true } Kube.Label { text: model.name color: Kube.Colors.highlightedTextColor } } Rectangle { anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter width: Kube.Units.gridUnit height: width radius: width / 2 color: model.color opacity: 0.9 } } } } } } WeekView { Layout.fillHeight: true Layout.fillWidth: true currentDate: root.currentDate startDate: root.selectedDate } }