summaryrefslogtreecommitdiff
path: root/libsowatch
diff options
context:
space:
mode:
authorJavier S. Pedro <maemo@javispedro.com>2013-06-15 20:35:33 +0200
committerJavier S. Pedro <maemo@javispedro.com>2013-06-15 20:35:33 +0200
commit378611f629abc146eaf0b13301f119d826edb86b (patch)
tree3f2447b75bfe155bbb013b07e08f2922d23a0f3a /libsowatch
parenta3797790c7da7a5c88005735619dc56a96264930 (diff)
downloadsowatch-378611f629abc146eaf0b13301f119d826edb86b.tar.gz
sowatch-378611f629abc146eaf0b13301f119d826edb86b.zip
add some support for notifications in liveview
Diffstat (limited to 'libsowatch')
-rw-r--r--libsowatch/notificationsmodel.cpp90
-rw-r--r--libsowatch/notificationsmodel.h9
-rw-r--r--libsowatch/watchserver.cpp3
3 files changed, 80 insertions, 22 deletions
diff --git a/libsowatch/notificationsmodel.cpp b/libsowatch/notificationsmodel.cpp
index 53b714e..16f6692 100644
--- a/libsowatch/notificationsmodel.cpp
+++ b/libsowatch/notificationsmodel.cpp
@@ -22,17 +22,13 @@ NotificationsModel::NotificationsModel(QObject *parent) :
int NotificationsModel::rowCount(const QModelIndex &parent) const
{
- int count = 0;
Q_UNUSED(parent);
- FOREACH_TYPE(type) {
- count += _list[type].count();
- }
- return count;
+ return size();
}
QVariant NotificationsModel::data(const QModelIndex &index, int role) const
{
- const Notification *n = getNotificationByIndex(index.row());
+ const Notification *n = at(index.row());
if (!n) return QVariant();
switch (role) {
case Qt::DisplayRole:
@@ -47,6 +43,63 @@ QVariant NotificationsModel::data(const QModelIndex &index, int role) const
return QVariant();
}
+int NotificationsModel::size() const
+{
+ int count = 0;
+ FOREACH_TYPE(type) {
+ count += _list[type].count();
+ }
+ return count;
+}
+
+int NotificationsModel::size(const QList<Notification::Type>& types) const
+{
+ int count = 0;
+ foreach(Notification::Type type, types) {
+ count += _list[type].count();
+ }
+ return count;
+}
+
+Notification * NotificationsModel::at(int position) const
+{
+ FOREACH_TYPE(type) {
+ const int size = _list[type].size();
+ if (position < size) {
+ return _list[type].at(position);
+ } else {
+ position -= size;
+ }
+ }
+ qWarning() << "Notification with index" << position << "not found";
+ return 0;
+}
+
+Notification * NotificationsModel::at(Notification::Type type, int position) const
+{
+ const int size = _list[type].size();
+ if (position < size) {
+ return _list[type].at(position);
+ } else {
+ qWarning() << "Notification with index" << position << "not found";
+ return 0;
+ }
+}
+
+Notification * NotificationsModel::at(const QList<Notification::Type>& types, int position) const
+{
+ foreach(Notification::Type type, types) {
+ const int size = _list[type].size();
+ if (position < size) {
+ return _list[type].at(position);
+ } else {
+ position -= size;
+ }
+ }
+ qWarning() << "Notification with index" << position << "not found";
+ return 0;
+}
+
void NotificationsModel::add(Notification *n)
{
const Notification::Type type = n->type();
@@ -83,6 +136,17 @@ void NotificationsModel::remove(Notification::Type type, Notification *n)
emit modelChanged();
}
+int NotificationsModel::countByType(Notification::Type type) const
+{
+ int count = 0;
+ Q_FOREACH(const Notification *n, _list[type]) {
+ if (n->priority() != Notification::Silent) {
+ count++;
+ }
+ }
+ return count;
+}
+
int NotificationsModel::fullCount() const
{
int count = 0;
@@ -160,20 +224,6 @@ int NotificationsModel::getIndexForNotification(Notification *n) const
return getOffsetForType(type) + subindex;
}
-const Notification * NotificationsModel::getNotificationByIndex(int index) const
-{
- FOREACH_TYPE(type) {
- const int size = _list[type].size();
- if (index < size) {
- return _list[type].at(index);
- } else {
- index -= size;
- }
- }
- qWarning() << "Notification with index" << index << "not found";
- return 0;
-}
-
void NotificationsModel::handleNotificationChanged()
{
QObject *obj = sender();
diff --git a/libsowatch/notificationsmodel.h b/libsowatch/notificationsmodel.h
index ffd8ab7..86ed2af 100644
--- a/libsowatch/notificationsmodel.h
+++ b/libsowatch/notificationsmodel.h
@@ -24,10 +24,18 @@ public:
int rowCount(const QModelIndex &parent) const;
QVariant data(const QModelIndex &index, int role) const;
+ int size() const;
+ int size(const QList<Notification::Type>& types) const;
+ Notification* at(int position) const;
+ Notification* at(Notification::Type type, int position) const;
+ Notification* at(const QList<Notification::Type>& types, int position) const;
+
void add(Notification *n);
void remove(Notification *n);
void remove(Notification::Type type, Notification *n);
+ Q_INVOKABLE int countByType(Notification::Type type) const;
+
Q_INVOKABLE int fullCount() const;
Q_INVOKABLE int fullCountByType(Notification::Type type) const;
Q_INVOKABLE int fullCountByType(int type) const; // See QTBUG-26415
@@ -44,7 +52,6 @@ private:
int getOffsetForType(Notification::Type type) const;
int getAppendOffsetForType(Notification::Type type) const;
int getIndexForNotification(Notification *n) const;
- const Notification* getNotificationByIndex(int index) const;
private slots:
void handleNotificationChanged();
diff --git a/libsowatch/watchserver.cpp b/libsowatch/watchserver.cpp
index da93730..373d367 100644
--- a/libsowatch/watchserver.cpp
+++ b/libsowatch/watchserver.cpp
@@ -32,6 +32,7 @@ WatchServer::WatchServer(Watch* watch, QObject* parent) :
_watchlets->setWatchModel(_watch->model());
_watch->setWatchletsModel(_watchlets);
+ _watch->setNotificationsModel(_notifications);
}
Watch* WatchServer::watch()
@@ -242,7 +243,7 @@ void WatchServer::closeWatchlet()
deactivateActiveWatchlet();
}
_currentWatchlet = 0;
- if (_watch->isConnected() && _pendingNotifications.empty()) {
+ if (_watch->isConnected()) {
goToIdle();
}
}