Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[nemo-qml-plugin-calendar] Support filtering out non all-day events f…
…rom AgendaModel
  • Loading branch information
pvuorela committed May 21, 2014
1 parent 37cc042 commit 8aad127
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 3 deletions.
33 changes: 30 additions & 3 deletions src/calendaragendamodel.cpp
Expand Up @@ -38,7 +38,7 @@
#include "calendarmanager.h"

NemoCalendarAgendaModel::NemoCalendarAgendaModel(QObject *parent)
: QAbstractListModel(parent), mIsComplete(true)
: QAbstractListModel(parent), mIsComplete(true), mFilterMode(FilterNone)
{
connect(NemoCalendarManager::instance(), SIGNAL(storageModified()), this, SLOT(refresh()));
connect(NemoCalendarManager::instance(), SIGNAL(dataUpdated()), this, SLOT(refresh()));
Expand Down Expand Up @@ -126,11 +126,24 @@ static bool eventsLessThan(const NemoCalendarEventOccurrence *e1,

void NemoCalendarAgendaModel::doRefresh(QList<NemoCalendarEventOccurrence *> newEvents)
{
qSort(newEvents.begin(), newEvents.end(), eventsLessThan);

QList<NemoCalendarEventOccurrence *> events = mEvents;
QList<NemoCalendarEventOccurrence *> skippedEvents;

// filter out if necessary
if (mFilterMode == FilterNonAllDay) {
QList<NemoCalendarEventOccurrence *>::iterator it = newEvents.begin();
while (it != newEvents.end()) {
if (!(*it)->eventObject()->allDay()) {
skippedEvents.append(*it);
it = newEvents.erase(it);
} else {
it++;
}
}
}

qSort(newEvents.begin(), newEvents.end(), eventsLessThan);

int oldEventCount = mEvents.count();
int newEventsCounter = 0;
int eventsCounter = 0;
Expand Down Expand Up @@ -196,6 +209,20 @@ int NemoCalendarAgendaModel::count() const
return mEvents.size();
}

int NemoCalendarAgendaModel::filterMode() const
{
return mFilterMode;
}

void NemoCalendarAgendaModel::setFilterMode(int mode)
{
if (mode != mFilterMode) {
mFilterMode = mode;
emit filterModeChanged();
refresh();
}
}

int NemoCalendarAgendaModel::rowCount(const QModelIndex &index) const
{
if (index != QModelIndex())
Expand Down
13 changes: 13 additions & 0 deletions src/calendaragendamodel.h
Expand Up @@ -44,9 +44,11 @@ class NemoCalendarAgendaModel : public QAbstractListModel, public QQmlParserStat
{
Q_OBJECT
Q_INTERFACES(QQmlParserStatus)
Q_ENUMS(FilterMode)
Q_PROPERTY(int count READ count NOTIFY countChanged)
Q_PROPERTY(QDate startDate READ startDate WRITE setStartDate NOTIFY startDateChanged)
Q_PROPERTY(QDate endDate READ endDate WRITE setEndDate NOTIFY endDateChanged)
Q_PROPERTY(int filterMode READ filterMode WRITE setFilterMode NOTIFY filterModeChanged)

public:
enum {
Expand All @@ -55,6 +57,11 @@ class NemoCalendarAgendaModel : public QAbstractListModel, public QQmlParserStat
SectionBucketRole
};

enum FilterMode {
FilterNone,
FilterNonAllDay
};

explicit NemoCalendarAgendaModel(QObject *parent = 0);
virtual ~NemoCalendarAgendaModel();

Expand All @@ -66,6 +73,9 @@ class NemoCalendarAgendaModel : public QAbstractListModel, public QQmlParserStat

int count() const;

int filterMode() const;
void setFilterMode(int mode);

// NemoCalendarAgendaModel takes ownership of the NemoCalendarEventOccurrence objects
void doRefresh(QList<NemoCalendarEventOccurrence *>);

Expand All @@ -74,11 +84,13 @@ class NemoCalendarAgendaModel : public QAbstractListModel, public QQmlParserStat

virtual void classBegin();
virtual void componentComplete();

signals:
void countChanged();
void startDateChanged();
void endDateChanged();
void updated();
void filterModeChanged();

protected:
virtual QHash<int, QByteArray> roleNames() const;
Expand All @@ -92,6 +104,7 @@ private slots:
QList<NemoCalendarEventOccurrence *> mEvents;

bool mIsComplete;
int mFilterMode;
};

#endif // CALENDARAGENDAMODEL_H

0 comments on commit 8aad127

Please sign in to comment.