1 #include "eventmodel.h"
2 #include <conference.h>
4 EventModel::EventModel()
9 void EventModel::createTimeGroups()
19 const int timeSpan = 5400;
21 QTime startTime = mEvents.first().start().time();
22 mGroups << EventModel::Group(QString("%1 - %2").arg(startTime.toString("HH:mm"),
23 startTime.addSecs(timeSpan).toString("HH:mm")), 0);
24 QTime nextGroupTime = mEvents.first().start().time().addSecs(timeSpan);
26 for (int i=0; i<mEvents.count(); i++)
28 QTime eventTime = mEvents.at(i).start().time();
30 if (nextGroupTime < eventTime)
32 mGroups.last().mChildCount = i - mGroups.last().mFirstEventIndex;
33 mGroups << EventModel::Group(QString("%1 - %2").arg(nextGroupTime.toString("HH:mm"),
34 nextGroupTime.addSecs(timeSpan).toString("HH:mm")), i);
35 nextGroupTime = nextGroupTime.addSecs(timeSpan);
38 // add parent-child relation
39 mParents[mEvents.at(i).id()] = mGroups.count() - 1;
42 mGroups.last().mChildCount = mEvents.count() - mGroups.last().mFirstEventIndex;
45 QVariant EventModel::data(const QModelIndex& index, int role) const
47 if (index.isValid() && role == Qt::DisplayRole)
49 if (index.internalId() == 0)
50 { //range of time data
51 //qDebug() << qVariantValue<QString>(mGroups.at(index.row()).mTitle);
52 return mGroups.at(index.row()).mTitle;
56 //qDebug() << qVariantValue<QString>(static_cast<Event*>(index.internalPointer())->id());
57 //return static_cast<Event*>(index.internalPointer())->id();
58 //qDebug() << Event::getVirtualById(static_cast<Event*>(index.internalPointer())->id(), 1).title();// Id Conference is 1 by now
60 return static_cast<Event*>(index.internalPointer())->id();
67 QModelIndex EventModel::index(int row, int column, const QModelIndex& parent) const
69 // TODO: add checks for out of range rows
71 if (!parent.isValid())
73 return createIndex(row, column, 0);
75 else if (parent.internalId() == 0)
77 const Group& group = mGroups.at(parent.row());
78 Event* event = const_cast<Event*>(&mEvents.at(row + group.mFirstEventIndex));
79 return createIndex(row, column, reinterpret_cast<void*>(event));
87 QModelIndex EventModel::parent(const QModelIndex & index) const
91 if (index.internalId() == 0)
96 Event * event = static_cast<Event*>(index.internalPointer());
98 return createIndex(mParents[event->id()], 0, 0);
101 return QModelIndex();
104 int EventModel::columnCount(const QModelIndex & parent) const
110 int EventModel::rowCount (const QModelIndex & parent) const
112 if (!parent.isValid())
114 return mGroups.count();
117 if (parent.internalId() == 0)
119 return mGroups.at(parent.row()).mChildCount;
125 void EventModel::loadEvents(const QDate &aDate, int aConferenceId)
127 for(int i=0; i<mGroups.count(); i++)
129 QModelIndex idx = index(i,0);
130 Group group = mGroups[i];
131 beginRemoveRows(idx,0,group.mChildCount-1);
132 bool ok = removeRows(0,group.mChildCount,idx);
134 //qDebug() << "removing " << group.mChildCount << " events from group:" << i << idx.data() << ":" << ok;
139 // check for existence of the conference in the DB
140 if(Conference::getAll().count())
142 qDebug() << "Loading Conference Data: [" << Conference::getById(aConferenceId).title() << "] " << aDate;
143 mEvents = Event::getByDate(QDate(aDate.year(), aDate.month(), aDate.day()), aConferenceId);
148 void EventModel::loadFavEvents(const QDate &aDate, int aConferenceId)
150 for(int i=0; i<mGroups.count(); i++)
152 QModelIndex idx = index(i,0);
153 Group group = mGroups[i];
154 beginRemoveRows(idx,0,group.mChildCount-1);
155 bool ok = removeRows(0,group.mChildCount,idx);
157 //qDebug() << "removing " << group.mChildCount << " events from group:" << i << idx.data() << ":" << ok;
162 // check for existence of the conference in the DB
163 if(Conference::getAll().count())
165 qDebug() << "Loading FAV Conference Data: [" << Conference::getById(aConferenceId).title() << "] " << aDate;
166 mEvents = Event::getFavByDate(QDate(aDate.year(), aDate.month(), aDate.day()), aConferenceId);
171 void EventModel::emitDataChangedSignal(const QModelIndex &aTopLeft, const QModelIndex &aBottomRight)
173 emit(dataChanged(aTopLeft,aBottomRight));