农历日历 v1.0.4
载入中...
搜索中...
未找到
LunarCalendarModel.h
1
6#ifndef CCALENDARMODEL_H
7#define CCALENDARMODEL_H
8
9#include <QAbstractTableModel>
10#include <QDate>
11#include <QLocale>
12#include <QTextCharFormat>
13#include <QVector>
14#include <QtSql/QSqlDatabase>
15#include <QNetworkReply>
16#include <QSslError>
17#include <QFile>
18
19#include "LunarCalendar.h"
20#include "Download.h"
21
48class CLunarCalendarModel : public QAbstractTableModel
49{
50 Q_OBJECT
51
52public:
53 explicit CLunarCalendarModel(QObject *parent = nullptr);
54 virtual ~CLunarCalendarModel();
55
56 // Header:
57 QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
58 bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override;
59
60 // Basic functionality:
61 int rowCount(const QModelIndex &parent = QModelIndex()) const override;
62 int columnCount(const QModelIndex &parent = QModelIndex()) const override;
63
64 enum _COLOR_ROLE
65 {
66 ColorNormal,
67 ColorDisable,
68 ColorHighlight,
69 ColorRed
70 };
71 enum _FONT_ROLE
72 {
73 FontBold,
74 FontNormal,
75 };
76
77 enum ROLE
78 {
79 SolarRole = Qt::UserRole + 1,
80 SolarColorRole,
81 SolarFontRole,
82 LunarRole,
83 LunarColorRole,
84 LunarFontRole,
85 BackgroupImage,
86 Tasks,
87 TasksColorRole,
88 TodayRole,
89 WorkDayRole,
90 WorkDayColorRole,
91 CalendarTypeRole
92 };
93 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
94
95 // Editable:
96 bool setData(const QModelIndex &index, const QVariant &value,
97 int role = Qt::EditRole) override;
98
99 Qt::ItemFlags flags(const QModelIndex& index) const override;
100
101 int showMonth(int year, int month, bool bForce = false);
102 int showWeek(int year, int week, bool bForce = false);
103 const int GetShowWeek() const;
104 const int GetShowMonth() const;
105 const int GetShowYear() const;
106 const int GetWeeksOfYear(int year = QDate::currentDate().day()) const;
107 int setDate(const QDate &d);
108 const QDate GetDate() const;
109 int SetMinimumDate(const QDate &date);
110 const QDate GetMinimumDate() const;
111 int SetMaximumDate(const QDate &date);
112 const QDate GetMaximumDate() const;
113 int setRange(const QDate &min, const QDate &max);
114 const Qt::DayOfWeek firstDayOfWeek() const;
115 //void setFirstDayOfWeek(Qt::DayOfWeek dayOfWeek);
116
117 const QDate dateForCell(int row, int column) const;
118 void cellForDate(const QDate &date, int *row, int *column) const;
119
120 void EnableToolTip(bool enable);
121 bool EnableHolidays(bool bEnable = true);
122 bool EnableSolarTerm(bool bEnable = true);
123
124 int SetTaskHandle(QSharedPointer<CLunarCalendar::CTaskHandler> handler);
125#if HAS_CPP_11
129 virtual int SetTaskHandle(std::function<uint (const QDate &, QStringList &)> cbHandler);
130#endif
131 int SetCalendarType(CLunarCalendar::_CalendarType type);
132 const CLunarCalendar::_CalendarType GetCalendarType() const;
133 int SetViewType(CLunarCalendar::_VIEW_TYPE type);
134 const CLunarCalendar::_VIEW_TYPE GetViewType() const;
135
136private Q_SLOTS:
137 int slotUpdate();
138
139private:
140 void internalUpdate();
141 const QDate firstDateMonth() const;
142 const QDate endDateMonth() const;
143 const int WeeksOfMonth() const;
144 const QDate dateForCellMonth(int row, int column) const;
145 void cellForDateMonth(const QDate &date, int *row, int *column) const;
146 const QDate dateForCellWeek(int row, int column) const;
147 void cellForDateWeek(const QDate &date, int *row, int *column) const;
148 const int columnForFirstOfMonth(const QDate &date) const;
149 const int columnForDayOfWeek(Qt::DayOfWeek day) const;
150 const QTextCharFormat formatForCell(QDate d, int row, int col) const;
151 const QColor GetHeight() const;
152
153 int InitHoliday();
154
155private:
156 QDate m_Date;
157 QDate m_MinimumDate;
158 QDate m_MaximumDate;
159 int m_ShownYear;
160 int m_ShownMonth;
161 int m_ShowWeek;
162 int m_ColumnCount, m_RowCount;
163 Qt::DayOfWeek m_FirstDay;
164 QLocale m_Locale;
165 enum class __WORK_DAY {
166 NO = 0,
167 WORK,
168 REST,
169 };
170 // cached day
171 struct _DAY
172 {
173 int Solar;
174
175 int nLunarYear;
176 int nLunarMonth;
177 int nLunarDay;
178 QString szLunar;
179 QString szLunarDay;
180
181 QStringList SolarHoliday;
182 QStringList LunarHoliday;
183
184 QStringList Tasks;
185 uint TaskCounts;
186
187 QString szImageBackgroup;
188 __WORK_DAY WorkDay;
189 };
190 QVector<_DAY> m_Day;
191 _DAY GetDay(int row, int col) const;
192
193 bool m_bEnableHolidays;
194 bool m_bEnableSolarTerm;
195
197 CLunarCalendar::_CalendarType m_calendarType;
198
199 bool m_bEnableToolTip;
200
201 QSharedPointer<CLunarCalendar::CTaskHandler> m_GetTaskHandler;
202#if HAS_CPP_11
203 std::function<uint(/*in*/const QDate& date,
204 /*out*/QStringList& tasks)> m_cbTaskHandler;
205#endif
206
207 QSqlDatabase m_Database;
208 int OpenDatabase();
209 int ExecSqlFile(const QString& szFile);
210 int InitTableHolidays();
216 const QStringList GetHoliday(const QDate& d) const;
217 const QStringList GetLunarHoliday(int month, int day) const;
218 QSharedPointer<RabbitCommon::CDownload> m_DownloadHolidaysSql;
219 QFile m_HolidaysSql;
220 int DownloadHolidaysSqlFile(const QVector<QUrl> &urls);
221 void CheckUpdateHolidaysTable();
222private Q_SLOTS:
223 void slotDownloadHolidaysSqlFileError(int nErr, const QString szError);
224 void slotDownloadHolidaysSqlFileFinished(const QString szFile);
225
226private:
227 // Chinese holidays sql
228 QSharedPointer<RabbitCommon::CDownload> m_DownloadChineseHolidaysSql;
229 QFile m_ChineseHolidaysSql;
230 int InitTableChineseHolidays();
231 void CheckUpdateChineseHolidaysTable();
237 int DownloadChineseHolidaysSqlFile(const QVector<QUrl> &urls);
238 __WORK_DAY GetChineseHolidays(const QDate& d);
239
240private Q_SLOTS:
241 void slotDownloadChineseHolidaysSqlFileError(int nErr, const QString szError);
242 void slotDownloadChineseHolidaysSqlFileFinished(const QString szFile);
243};
244
245#endif // CCALENDARMODEL_H
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
得到数据
_VIEW_TYPE
视图类型
_CalendarType
日历类型