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