-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtimetablemodel.cpp
80 lines (66 loc) · 1.77 KB
/
timetablemodel.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include "timetablemodel.h"
TimeTableModel::TimeTableModel(int _groupId, QObject* parent)
: QAbstractListModel(parent), groupId(_groupId)
{
}
TimeTableModel::~TimeTableModel()
{
}
void TimeTableModel::addEntry(TimeTableEntry* entry)
{
beginInsertRows(QModelIndex(), rowCount(), rowCount());
timeTable << entry;
endInsertRows();
}
int TimeTableModel::rowCount(const QModelIndex & parent) const {
Q_UNUSED(parent);
return timeTable.count();
}
QVariant TimeTableModel::data(const QModelIndex & index, int role) const {
if (index.row() < 0 || index.row() >= timeTable.count())
return QVariant();
TimeTableEntry* entry = timeTable[index.row()];
switch (role)
{
case DateRole:
return entry->dateTime.date();
case TimeRole:
return entry->dateTime.time();
case GroupRole:
return entry->subgroup;
case StudentsRole:
{
QVariant var;
var.setValue(entry->students);
return var;
}
}
return QVariant();
}
QHash<int, QByteArray> TimeTableModel::roleNames() const {
QHash<int, QByteArray> roles;
roles[DateRole] = "date";
roles[TimeRole] = "time";
roles[GroupRole] = "group";
roles[StudentsRole] = "students";
return roles;
}
int TimeTableModel::getGroupId() const
{
return groupId;
}
int TimeTableModel::getClosestEntryIndex()
{
QDateTime now = QDateTime::currentDateTimeUtc();
int closest = 0;
for (int i = 0; i < timeTable.size(); i++)
{
if (i != closest)
{
TimeTableEntry* entry = timeTable.at(i);
if (abs(entry->dateTime.secsTo(now)) < abs(timeTable.at(closest)->dateTime.secsTo(now)))
closest = i;
}
}
return closest;
}