aboutsummaryrefslogtreecommitdiffstats
path: root/examples/labs/calendar
diff options
context:
space:
mode:
Diffstat (limited to 'examples/labs/calendar')
-rw-r--r--examples/labs/calendar/DateTimePicker.qml175
-rw-r--r--examples/labs/calendar/EventView.qml209
-rw-r--r--examples/labs/calendar/TumblerDelegate.qml54
-rw-r--r--examples/labs/calendar/calendar.pro19
-rw-r--r--examples/labs/calendar/calendar.qrc8
-rw-r--r--examples/labs/calendar/main.cpp233
-rw-r--r--examples/labs/calendar/main.qml220
7 files changed, 0 insertions, 918 deletions
diff --git a/examples/labs/calendar/DateTimePicker.qml b/examples/labs/calendar/DateTimePicker.qml
deleted file mode 100644
index 091cf267..00000000
--- a/examples/labs/calendar/DateTimePicker.qml
+++ /dev/null
@@ -1,175 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.6
-import Qt.labs.calendar 1.0
-import Qt.labs.controls 1.0
-
-Item {
- id: dateTimePicker
- enabled: dateToShow.getFullYear() >= fromYear || dateToShow.getFullYear() <= toYear
- implicitWidth: row.implicitWidth
- implicitHeight: row.implicitHeight
-
- readonly property var days: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
-
- readonly property int fromYear: 2000
- readonly property int toYear: 2020
-
- readonly property alias chosenDate: dateTimePicker.__date
- property var __date: new Date(
- fromYear + yearTumbler.currentIndex,
- monthTumbler.currentIndex,
- dayTumbler.currentIndex + 1,
- hoursTumbler.currentIndex + (amPmTumbler.currentIndex == 0 ? 0 : 12),
- minutesTumbler.currentIndex);
-
- property date dateToShow: new Date()
- onDateToShowChanged: {
- yearTumbler.currentIndex = dateToShow.getFullYear() - fromYear;
- monthTumbler.currentIndex = dateToShow.getMonth();
- dayTumbler.currentIndex = dateToShow.getDate() - 1;
- }
-
- FontMetrics {
- id: fontMetrics
- }
-
- Row {
- id: row
- spacing: 2
-
- Frame {
- padding: 0
-
- Row {
- Tumbler {
- id: dayTumbler
-
- delegate: TumblerDelegate {
- text: modelData
- font.pixelSize: fontMetrics.font.pixelSize * (Tumbler.tumbler.activeFocus ? 2 : 1.25)
- }
-
- function updateModel() {
- var previousIndex = dayTumbler.currentIndex;
- var array = [];
- var newDays = dateTimePicker.days[monthTumbler.currentIndex];
- for (var i = 0; i < newDays; ++i) {
- array.push(i + 1);
- }
- dayTumbler.model = array;
- dayTumbler.currentIndex = Math.min(newDays - 1, previousIndex);
- }
-
- Component.onCompleted: updateModel()
- }
- Tumbler {
- id: monthTumbler
- model: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
- delegate: TumblerDelegate {
- text: modelData
- font.pixelSize: fontMetrics.font.pixelSize * (Tumbler.tumbler.activeFocus ? 2 : 1.25)
- }
- onCurrentIndexChanged: dayTumbler.updateModel()
- }
- Tumbler {
- id: yearTumbler
- width: 80
- model: {
- var years = [];
- for (var i = fromYear; i <= toYear; ++i) {
- years.push(i);
- }
- return years;
- }
- delegate: TumblerDelegate {
- text: modelData
- font.pixelSize: fontMetrics.font.pixelSize * (Tumbler.tumbler.activeFocus ? 2 : 1.25)
- }
- }
- }
- }
-
- Frame {
- padding: 0
-
- Row {
- Tumbler {
- id: hoursTumbler
- model: 12
- delegate: TumblerDelegate {
- text: modelData.toString().length < 2 ? "0" + modelData : modelData
- font.pixelSize: fontMetrics.font.pixelSize * (Tumbler.tumbler.activeFocus ? 2 : 1.25)
- }
- }
-
- Tumbler {
- id: minutesTumbler
- model: 60
- delegate: TumblerDelegate {
- text: modelData.toString().length < 2 ? "0" + modelData : modelData
- font.pixelSize: fontMetrics.font.pixelSize * (Tumbler.tumbler.activeFocus ? 2 : 1.25)
- }
- }
-
- Tumbler {
- id: amPmTumbler
- model: ["AM", "PM"]
- delegate: TumblerDelegate {
- font.pixelSize: fontMetrics.font.pixelSize * (Tumbler.tumbler.activeFocus ? 2 : 1.25)
- }
-
- contentItem: ListView {
- anchors.fill: parent
- model: amPmTumbler.model
- delegate: amPmTumbler.delegate
-
- snapMode: ListView.SnapToItem
- highlightRangeMode: ListView.StrictlyEnforceRange
- preferredHighlightBegin: height / 2 - (height / 3 / 2)
- preferredHighlightEnd: height / 2 + (height / 3 / 2)
- clip: true
- }
- }
- }
- }
- }
-}
diff --git a/examples/labs/calendar/EventView.qml b/examples/labs/calendar/EventView.qml
deleted file mode 100644
index e47e7486..00000000
--- a/examples/labs/calendar/EventView.qml
+++ /dev/null
@@ -1,209 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.6
-import Qt.labs.controls 1.0
-
-Rectangle {
- border.color: Theme.frameColor
-
- property date selectedDate
- property var locale
- property var eventModel
-
- signal addEventClicked
-
- Component {
- id: eventListHeader
-
- Row {
- id: eventDateRow
- width: parent.width
- height: eventDayLabel.height
- spacing: 10
-
- Label {
- id: eventDayLabel
- text: selectedDate.getDate()
- font.pointSize: 35
- }
-
- Column {
- height: eventDayLabel.height
-
- Label {
- readonly property var options: { weekday: "long" }
- text: Qt.locale().standaloneDayName(selectedDate.getDay(), Locale.LongFormat)
- font.pointSize: 18
- }
- Label {
- text: Qt.locale().standaloneMonthName(selectedDate.getMonth())
- + selectedDate.toLocaleDateString(Qt.locale(), " yyyy")
- font.pointSize: 12
- }
- }
- }
- }
-
- ListView {
- id: eventsListView
- spacing: 4
- clip: true
- header: eventListHeader
- anchors.fill: parent
- anchors.margins: 10
- model: eventModel
-
- delegate: Rectangle {
- width: eventsListView.width
- height: eventItemColumn.height
- anchors.horizontalCenter: parent.horizontalCenter
-
- Rectangle {
- width: parent.width
- height: 1
- color: "#eee"
- }
-
- Column {
- id: eventItemColumn
- x: 4
- y: 4
- width: parent.width - 8
- height: timeRow.height + descriptionLabel.height + 8
-
- Label {
- id: descriptionLabel
- width: parent.width
- wrapMode: Text.Wrap
- text: description
- }
- Row {
- id: timeRow
- width: parent.width
- Label {
- text: start.toLocaleTimeString(locale, Locale.ShortFormat)
- color: "#aaa"
- }
- Label {
- text: "-" + end.toLocaleTimeString(locale, Locale.ShortFormat)
- visible: start.getTime() !== end.getTime() && start.getDate() === end.getDate()
- color: "#aaa"
- }
- }
- }
-
- MouseArea {
- anchors.fill: parent
- onPressAndHold: removeButton.opacity = 1
- onClicked: removeButton.opacity = 0
- }
-
- Button {
- id: removeButton
- opacity: 0
-
- Behavior on opacity {
- NumberAnimation {
- duration: 150
- }
- }
-
- anchors.right: parent.right
- anchors.rightMargin: 12
- anchors.verticalCenter: parent.verticalCenter
-
- onClicked: eventModel.removeEvent(index)
-
- background: Rectangle {
- implicitWidth: 32
- implicitHeight: 32
-
- radius: width / 2
- color: Qt.tint(!addButton.enabled ? addButton.Theme.disabledColor :
- addButton.activeFocus ? addButton.Theme.focusColor : "red",
- addButton.pressed ? addButton.Theme.pressColor : "transparent")
- }
- }
-
- // Don't want the white icon to change opacity.
- Rectangle {
- anchors.centerIn: removeButton
- width: 18
- height: 4
- radius: 1
- }
- }
- }
-
- Button {
- id: addButton
-
- anchors.right: parent.right
- anchors.bottom: parent.bottom
- anchors.margins: 12
-
- onClicked: addEventClicked()
-
- background: Rectangle {
- implicitWidth: 32
- implicitHeight: 32
-
- radius: width / 2
- color: Qt.tint(!addButton.enabled ? addButton.Theme.disabledColor :
- addButton.activeFocus ? addButton.Theme.focusColor : addButton.Theme.accentColor,
- addButton.pressed ? addButton.Theme.pressColor : "transparent")
- }
-
- Rectangle {
- anchors.centerIn: parent
- width: 4
- height: 18
- radius: 1
- }
-
- Rectangle {
- anchors.centerIn: parent
- width: 18
- height: 4
- radius: 1
- }
- }
-}
diff --git a/examples/labs/calendar/TumblerDelegate.qml b/examples/labs/calendar/TumblerDelegate.qml
deleted file mode 100644
index e379e8c0..00000000
--- a/examples/labs/calendar/TumblerDelegate.qml
+++ /dev/null
@@ -1,54 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.6
-import Qt.labs.controls 1.0
-
-Text {
- text: isNaN(modelData) ? modelData : modelData + 1
- color: "#666666"
- opacity: 0.4 + Math.max(0, 1 - Math.abs(Tumbler.displacement)) * 0.6
- horizontalAlignment: Text.AlignHCenter
- verticalAlignment: Text.AlignVCenter
-
- Behavior on font.pixelSize {
- NumberAnimation {}
- }
-}
diff --git a/examples/labs/calendar/calendar.pro b/examples/labs/calendar/calendar.pro
deleted file mode 100644
index 9ee101b7..00000000
--- a/examples/labs/calendar/calendar.pro
+++ /dev/null
@@ -1,19 +0,0 @@
-TEMPLATE = app
-TARGET = calendar
-QT += quick sql
-
-SOURCES += \
- main.cpp
-
-OTHER_FILES += \
- main.qml
-
-RESOURCES += \
- calendar.qrc
-
-target.path = $$[QT_INSTALL_EXAMPLES]/labs/calendar/calendar
-INSTALLS += target
-
-DISTFILES += \
- DateTimePicker.qml \
- EventView.qml
diff --git a/examples/labs/calendar/calendar.qrc b/examples/labs/calendar/calendar.qrc
deleted file mode 100644
index d0f67b26..00000000
--- a/examples/labs/calendar/calendar.qrc
+++ /dev/null
@@ -1,8 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>main.qml</file>
- <file>DateTimePicker.qml</file>
- <file>TumblerDelegate.qml</file>
- <file>EventView.qml</file>
- </qresource>
-</RCC>
diff --git a/examples/labs/calendar/main.cpp b/examples/labs/calendar/main.cpp
deleted file mode 100644
index 651a51ec..00000000
--- a/examples/labs/calendar/main.cpp
+++ /dev/null
@@ -1,233 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtGui>
-#include <QtQml>
-#include <QtSql>
-
-class Event : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(QString description MEMBER description NOTIFY descriptionChanged)
- Q_PROPERTY(QDateTime start MEMBER start NOTIFY startChanged)
- Q_PROPERTY(QDateTime end MEMBER end NOTIFY endChanged)
-
-public:
- explicit Event(const QString &description, QObject *parent = 0) :
- QObject(parent),
- description(description)
- {
-
- }
-
- QString description;
- QDateTime start;
- QDateTime end;
-
-signals:
- void descriptionChanged();
- void startChanged();
- void endChanged();
-};
-
-static void addEvent(const QString &description, const QDateTime &start, qint64 duration = 0)
-{
- QSqlQuery query;
- QDateTime end = start.addSecs(duration);
- if (!query.exec(QStringLiteral("INSERT INTO Event (description, start, end) VALUES ('%1', %2, %3)")
- .arg(description).arg(start.toMSecsSinceEpoch()).arg(end.toMSecsSinceEpoch()))) {
- qWarning() << query.lastError();
- }
-}
-
-// create an in-memory SQLITE database
-static void createDatabase()
-{
- QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
- db.setDatabaseName(":memory:");
- if (!db.open()) {
- qFatal("Cannot open database");
- return;
- }
-
- QSqlQuery query;
- query.exec("CREATE TABLE IF NOT EXISTS Event (description TEXT, start BIGINT, end BIGINT)");
-
- const QDate current = QDate::currentDate();
- addEvent("Job interview", QDateTime(current.addDays(-19), QTime(12, 0)));
- addEvent("Grocery shopping", QDateTime(current.addDays(-14), QTime(18, 0)));
- addEvent("Ice skating", QDateTime(current.addDays(-14), QTime(20, 0)), 5400);
- addEvent("Dentist''s appointment", QDateTime(current.addDays(-8), QTime(14, 0)), 1800);
- addEvent("Cross-country skiing", QDateTime(current.addDays(1), QTime(19, 30)), 3600);
- addEvent("Conference", QDateTime(current.addDays(10), QTime(9, 0)), 432000);
- addEvent("Hairdresser", QDateTime(current.addDays(19), QTime(13, 0)));
- addEvent("Doctor''s appointment", QDateTime(current.addDays(21), QTime(16, 0)));
- addEvent("Vacation", QDateTime(current.addDays(35), QTime(0, 0)), 604800);
-}
-
-class SqlEventModel : public QSqlTableModel
-{
- Q_OBJECT
- Q_PROPERTY(QDate min READ min CONSTANT)
- Q_PROPERTY(QDate max READ max CONSTANT)
- Q_PROPERTY(QDate date READ date WRITE setDate NOTIFY dateChanged FINAL)
- Q_PROPERTY(int rowCount READ rowCount NOTIFY rowCountChanged)
-
-public:
- SqlEventModel(QObject *parent = 0) :
- QSqlTableModel(parent, QSqlDatabase::database(":memory:"))
- {
- connect(this, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SIGNAL(rowCountChanged()));
- connect(this, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SIGNAL(rowCountChanged()));
-
- setTable("Event");
- setEditStrategy(QSqlTableModel::OnManualSubmit);
- select();
-
- setDate(QDate::currentDate());
- }
-
- QDate min() const
- {
- QSqlQuery query(QStringLiteral("SELECT MIN(start) FROM Event"));
- if (query.next())
- return QDateTime::fromMSecsSinceEpoch(query.value(0).toLongLong()).date();
- return QDate();
- }
-
- QDate max() const
- {
- QSqlQuery query(QStringLiteral("SELECT MAX(end) FROM Event"));
- if (query.next())
- return QDateTime::fromMSecsSinceEpoch(query.value(0).toLongLong()).date();
- return QDate();
- }
-
- QDate date() const
- {
- return mDate;
- }
-
- void setDate(const QDate &date)
- {
- if (date != mDate) {
- mDate = date;
-
- qint64 from = QDateTime(mDate, QTime(0, 0)).toMSecsSinceEpoch();
- qint64 to = QDateTime(mDate, QTime(23, 59)).toMSecsSinceEpoch();
-
- setFilter(QStringLiteral("start <= %1 AND end >= %2").arg(to).arg(from));
-
- emit dateChanged();
- }
- }
-
- enum {
- DescriptionRole = Qt::UserRole,
- StartDateRole,
- EndDateRole
- };
-
- QHash<int,QByteArray> roleNames() const Q_DECL_OVERRIDE
- {
- QHash<int,QByteArray> names;
- names[DescriptionRole] = "description";
- names[StartDateRole] = "start";
- names[EndDateRole] = "end";
- return names;
- }
-
- QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE
- {
- if (role < Qt::UserRole)
- return QSqlTableModel::data(index, role);
-
- int columnIndex = role - DescriptionRole;
- QModelIndex modelIndex = this->index(index.row(), columnIndex);
- QVariant eventData = QSqlTableModel::data(modelIndex, Qt::DisplayRole);
- if (role == DescriptionRole)
- return eventData;
-
- return QDateTime::fromMSecsSinceEpoch(eventData.toLongLong());
- }
-
- Q_INVOKABLE void addEvent(const QString &description, const QDateTime &date)
- {
- const int row = rowCount();
- insertRows(row, 1);
- setData(index(row, 0), description);
- setData(index(row, 1), date.toMSecsSinceEpoch());
- setData(index(row, 2), date.toMSecsSinceEpoch());
- submitAll();
- }
-
- Q_INVOKABLE void removeEvent(int modelRow)
- {
- if (modelRow < 0 || modelRow >= rowCount()) {
- qWarning() << "Invalid model row:" << modelRow;
- return;
- }
-
- removeRows(modelRow, 1);
- submitAll();
- }
-
-signals:
- void dateChanged();
- void rowCountChanged();
-
-private:
- // The date to show events for.
- QDate mDate;
-};
-
-int main(int argc, char *argv[])
-{
- QGuiApplication app(argc, argv);
- createDatabase();
- qmlRegisterType<SqlEventModel>("io.qt.examples.calendar", 1, 0, "SqlEventModel");
- QQmlApplicationEngine engine;
- engine.load(QUrl("qrc:/main.qml"));
- if (engine.rootObjects().isEmpty())
- return -1;
- return app.exec();
-}
-
-#include "main.moc"
diff --git a/examples/labs/calendar/main.qml b/examples/labs/calendar/main.qml
deleted file mode 100644
index d7088fbe..00000000
--- a/examples/labs/calendar/main.qml
+++ /dev/null
@@ -1,220 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.6
-import Qt.labs.controls 1.0
-import Qt.labs.calendar 1.0
-import QtQuick.Layouts 1.0
-import io.qt.examples.calendar 1.0
-
-ApplicationWindow {
- id: window
- width: 640
- height: 400
- minimumWidth: 400
- minimumHeight: 300
- color: "#f4f4f4"
- visible: true
- title: "Qt Labs Calendar - Example"
-
- SqlEventModel {
- id: eventModel
- date: calendar.selectedDate
- }
-
- StackView {
- id: stackView
- anchors.fill: parent
- anchors.margins: 20
-
- initialItem: flow
- }
-
- Flow {
- id: flow
- spacing: 10
- layoutDirection: Qt.RightToLeft
-
- ListView {
- id: calendar
- property date selectedDate: new Date()
-
- clip: true
- width: (parent.width > parent.height ? (parent.width - parent.spacing) * 0.6 : parent.width)
- height: (parent.height > parent.width ? (parent.height - parent.spacing) * 0.6 : parent.height)
-
- model: CalendarModel {
- id: model
- from: eventModel.min
- to: eventModel.max
- }
-
- focus: true
- currentIndex: model.indexOf(selectedDate.getFullYear(), selectedDate.getMonth() + 1)
- snapMode: ListView.SnapOneItem
- highlightMoveDuration: 250
- highlightRangeMode: ListView.StrictlyEnforceRange
- orientation: parent.width > parent.height ? ListView.Vertical : ListView.Horizontal
-
- delegate: MonthGrid {
- id: delegate
-
- width: calendar.width
- height: calendar.height
-
- month: model.month
- year: model.year
-
- topPadding: title.height
- Column {
- id: title
- x: delegate.contentItem.x
- width: delegate.contentItem.width
- spacing: 6
- Text {
- width: parent.width
- height: implicitHeight * 2
- text: delegate.title
- horizontalAlignment: Text.AlignHCenter
- verticalAlignment: Text.AlignVCenter
- font.pointSize: 18
- }
- DayOfWeekRow {
- width: parent.width
- }
- }
-
- leftPadding: weekNumbers.width
- WeekNumberColumn {
- id: weekNumbers
- month: model.month
- year: model.year
- y: delegate.contentItem.y
- height: delegate.contentItem.height
- }
-
- onClicked: calendar.selectedDate = date
-
- delegate: Text {
- text: model.day
- opacity: model.month === delegate.month ? 1 : 0
- color: model.today ? Theme.accentColor : Theme.textColor
- minimumPointSize: 8
- fontSizeMode: Text.Fit
- horizontalAlignment: Text.AlignHCenter
- verticalAlignment: Text.AlignVCenter
- Rectangle {
- z: -1
- anchors.centerIn: parent
- width: Math.min(parent.width * 0.6, parent.width * 0.6)
- height: width
- radius: width / 2
- opacity: 0.5
- color: pressed ? Theme.pressColor : "transparent";
-
- SqlEventModel {
- id: delegateEventModel
- }
-
- border.color: delegateEventModel.rowCount > 0 ? Theme.accentColor : "transparent"
- }
- }
- }
- Rectangle {
- z: -1
- parent: calendar
- anchors.fill: parent
- border.color: Theme.frameColor
- }
- }
-
- EventView {
- width: (parent.width > parent.height ? (parent.width - parent.spacing) * 0.4 : parent.width)
- height: (parent.height > parent.width ? (parent.height - parent.spacing) * 0.4 : parent.height)
- selectedDate: calendar.selectedDate
- eventModel: eventModel
- locale: calendar.locale
-
- onAddEventClicked: stackView.push(createEventComponent)
- }
- }
-
- Component {
- id: createEventComponent
-
- ColumnLayout {
- spacing: 10
- visible: StackView.index === stackView.currentIndex
-
- DateTimePicker {
- id: dateTimePicker
- anchors.horizontalCenter: parent.horizontalCenter
- dateToShow: calendar.selectedDate
- }
- Frame {
- Layout.fillWidth: true
-
- TextArea {
- id: descriptionField
- placeholderText: "Description"
- anchors.fill: parent
- }
- }
- RowLayout {
- Layout.fillWidth: true
-
- Button {
- text: "Cancel"
- Layout.fillWidth: true
- onClicked: stackView.pop()
- }
- Button {
- text: "Create"
- enabled: dateTimePicker.enabled
- Layout.fillWidth: true
- onClicked: {
- eventModel.addEvent(descriptionField.text, dateTimePicker.chosenDate);
- stackView.pop();
- }
- }
- }
- }
- }
-}