Kirigami-addons

infinitecalendarviewmodel.h
1// SPDX-FileCopyrightText: 2021 Claudio Cambra <claudio.cambra@gmail.com>
2// SPDX-License-Identifier: LGPL-2.1-or-later
3
4#pragma once
5
6#include <QAbstractItemModel>
7#include <QCalendar>
8#include <QDateTime>
9#include <QLocale>
10#include <QQmlParserStatus>
11
12class InfiniteCalendarViewModel : public QAbstractListModel, public QQmlParserStatus
13{
16
17 // Amount of dates to add each time the model adds more dates
18 Q_PROPERTY(int datesToAdd READ datesToAdd WRITE setDatesToAdd NOTIFY datesToAddChanged)
19 Q_PROPERTY(int scale READ scale WRITE setScale NOTIFY scaleChanged)
20 Q_PROPERTY(QDateTime currentDate READ currentDate WRITE setCurrentDate NOTIFY currentDateChanged)
21 Q_PROPERTY(QDateTime minimumDate READ minimumDate WRITE setMinimumDate NOTIFY minimumDateChanged)
22 Q_PROPERTY(QDateTime maximumDate READ maximumDate WRITE setMaximumDate NOTIFY maximumDateChanged)
23
24public:
25 // The decade scale is designed to be used in a 4x3 grid, so shows 12 years at a time
26 enum Scale { WeekScale, MonthScale, YearScale, DecadeScale };
27 Q_ENUM(Scale);
28
29 enum Roles {
30 StartDateRole = Qt::UserRole + 1,
31 FirstDayOfMonthRole,
32 SelectedMonthRole,
33 SelectedYearRole,
34 };
35 Q_ENUM(Roles);
36
37 explicit InfiniteCalendarViewModel(QObject *parent = nullptr);
38 ~InfiniteCalendarViewModel() = default;
39
40 void setup();
41 QVariant data(const QModelIndex &idx, int role) const override;
42 QHash<int, QByteArray> roleNames() const override;
43 int rowCount(const QModelIndex &parent = {}) const override;
44
45 void classBegin() override;
46 void componentComplete() override;
47
48 QDateTime currentDate() const;
49 void setCurrentDate(const QDateTime &currentDate);
50
51 QDateTime minimumDate() const;
52 void setMinimumDate(const QDateTime &minimumDate);
53
54 QDateTime maximumDate() const;
55 void setMaximumDate(const QDateTime &maximumDate);
56
57 Q_INVOKABLE void addDates(bool atEnd, const QDateTime startFrom = {});
58
59 int datesToAdd() const;
60 void setDatesToAdd(int datesToAdd);
61
62 int scale();
63 void setScale(int scale);
64
66 void datesToAddChanged();
67 void scaleChanged();
68 void currentDateChanged();
69 void minimumDateChanged();
70 void maximumDateChanged();
71
72private:
73 void addWeekDates(bool atEnd, const QDateTime &startFrom);
74 void addMonthDates(bool atEnd, const QDateTime &startFrom);
75 void addYearDates(bool atEnd, const QDateTime &startFrom);
76 void addDecadeDates(bool atEnd, const QDateTime &startFrom);
77
78 QDateTime m_currentDate;
79 QDateTime m_minimumDate;
80 QDateTime m_maximumDate;
81 QVector<QDateTime> m_startDates;
82 QVector<QDateTime> m_firstDayOfMonthDates;
83 QLocale m_locale;
84 int m_datesToAdd = 10;
85 int m_scale = MonthScale;
86 bool m_isCompleted = false;
87};
Q_INTERFACES(...)
Q_INVOKABLEQ_INVOKABLE
Q_OBJECTQ_OBJECT
Q_PROPERTY(...)
Q_SIGNALSQ_SIGNALS
QObject * parent() const const
UserRole
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Fri Jul 26 2024 11:54:39 by doxygen 1.11.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.