File indexing completed on 2024-05-05 05:28:20
0001 /* 0002 * SPDX-FileCopyrightText: 2019 Nicolas Fella <nicolas.fella@gmx.de> 0003 * 0004 * SPDX-License-Identifier: GPL-3.0-or-later 0005 */ 0006 0007 #ifndef DAYSOFMONTHMODEL_H 0008 #define DAYSOFMONTHMODEL_H 0009 0010 #include <QAbstractListModel> 0011 #include <QVector> 0012 #include <QDate> 0013 #include <QLocale> 0014 0015 struct DayData { 0016 bool isCurrent; 0017 int dayNumber; 0018 int monthNumber; 0019 int yearNumber; 0020 bool isToday = false; 0021 }; 0022 0023 class DaysOfMonthModel : public QAbstractListModel 0024 { 0025 Q_OBJECT 0026 Q_PROPERTY(int year READ year WRITE setYear NOTIFY yearChanged) 0027 Q_PROPERTY(int month READ month WRITE setMonth NOTIFY monthChanged) 0028 Q_PROPERTY(int daysPerWeek READ daysPerWeek WRITE setDaysPerWeek NOTIFY daysPerWeekChanged) 0029 Q_PROPERTY(int weeks READ weeks WRITE setWeeks NOTIFY weeksChanged) 0030 public: 0031 enum Roles { 0032 CurrentMonthRole = Qt::UserRole + 1, 0033 DayNumberRole, 0034 MonthNumberRole, 0035 YearNumberRole, 0036 TodayRole 0037 }; 0038 0039 QHash<int, QByteArray> roleNames() const override; 0040 QVariant data(const QModelIndex &index, int role) const override; 0041 int rowCount(const QModelIndex &parent) const override; 0042 0043 int year() const; 0044 void setYear(int year); 0045 0046 int month() const; 0047 void setMonth(int month); 0048 0049 int daysPerWeek() const; 0050 void setDaysPerWeek(int daysPerWeek); 0051 0052 int weeks() const; 0053 void setWeeks(int weeks); 0054 0055 Q_INVOKABLE void goNextMonth(); 0056 Q_INVOKABLE void goPreviousMonth(); 0057 Q_INVOKABLE void goCurrentMonth(); 0058 Q_INVOKABLE void update(); 0059 0060 Q_SIGNALS: 0061 void yearChanged(); 0062 void monthChanged(); 0063 void daysPerWeekChanged(); 0064 void weeksChanged(); 0065 0066 private: 0067 0068 QVector<DayData> m_dayList; 0069 int m_firstDayOfWeek = QLocale::system().firstDayOfWeek(); 0070 int m_year; 0071 int m_month; 0072 int m_daysPerWeek = 7; 0073 int m_weeks = 6; 0074 }; 0075 0076 #endif // DAYSOFMONTHMODEL_H