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{
15 // Amount of dates to add each time the model adds more dates
16 Q_PROPERTY(int datesToAdd READ datesToAdd WRITE setDatesToAdd NOTIFY datesToAddChanged)
17 Q_PROPERTY(int scale READ scale WRITE setScale NOTIFY scaleChanged)
18 Q_PROPERTY(QDateTime currentDate READ currentDate WRITE setCurrentDate NOTIFY currentDateChanged)
19 Q_PROPERTY(QDateTime minimumDate READ minimumDate WRITE setMinimumDate NOTIFY minimumDateChanged)
20 Q_PROPERTY(QDateTime maximumDate READ maximumDate WRITE setMaximumDate NOTIFY maximumDateChanged)
21
22public:
23 // The decade scale is designed to be used in a 4x3 grid, so shows 12 years at a time
24 enum Scale { WeekScale, MonthScale, YearScale, DecadeScale };
25 Q_ENUM(Scale);
26
27 enum Roles {
28 StartDateRole = Qt::UserRole + 1,
29 FirstDayOfMonthRole,
30 SelectedMonthRole,
31 SelectedYearRole,
32 };
33 Q_ENUM(Roles);
34
35 explicit InfiniteCalendarViewModel(QObject *parent = nullptr);
36 ~InfiniteCalendarViewModel() = default;
37
38 void setup();
39 QVariant data(const QModelIndex &idx, int role) const override;
40 QHash<int, QByteArray> roleNames() const override;
41 int rowCount(const QModelIndex &parent = {}) const override;
42
43 void classBegin() override;
44 void componentComplete() override;
45
46 QDateTime currentDate() const;
47 void setCurrentDate(const QDateTime &currentDate);
48
49 QDateTime minimumDate() const;
50 void setMinimumDate(const QDateTime &minimumDate);
51
52 QDateTime maximumDate() const;
53 void setMaximumDate(const QDateTime &maximumDate);
54
55 Q_INVOKABLE void addDates(bool atEnd, const QDateTime startFrom = {});
56
57 int datesToAdd() const;
58 void setDatesToAdd(int datesToAdd);
59
60 int scale();
61 void setScale(int scale);
62
64 void datesToAddChanged();
65 void scaleChanged();
66 void currentDateChanged();
67 void minimumDateChanged();
68 void maximumDateChanged();
69
70private:
71 void addWeekDates(bool atEnd, const QDateTime &startFrom);
72 void addMonthDates(bool atEnd, const QDateTime &startFrom);
73 void addYearDates(bool atEnd, const QDateTime &startFrom);
74 void addDecadeDates(bool atEnd, const QDateTime &startFrom);
75
76 QDateTime m_currentDate;
77 QDateTime m_minimumDate;
78 QDateTime m_maximumDate;
79 QVector<QDateTime> m_startDates;
80 QVector<QDateTime> m_firstDayOfMonthDates;
81 QLocale m_locale;
82 int m_datesToAdd = 10;
83 int m_scale = MonthScale;
84 bool m_isCompleted = false;
85};
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 May 3 2024 11:46:57 by doxygen 1.10.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.