/*
* Copyright 2015-2016 Canonical Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*
*/
#include "MockNotificationModel.h"
#include "MockNotification.h"
#include
#include
#include
#include
#include
#include
#include
using namespace unity::shell::notifications;
MockNotificationModel::MockNotificationModel(QObject *parent) : QAbstractListModel(parent) {
}
MockNotificationModel::~MockNotificationModel() {
Q_FOREACH(MockNotification *n, m_queue) {
n->deleteLater();
}
m_queue.clear();
}
int MockNotificationModel::rowCount(const QModelIndex &) const {
return m_queue.size();
}
int MockNotificationModel::getCount() const {
return m_queue.size();
}
QVariant MockNotificationModel::data(const QModelIndex &index, int role) const {
if (!index.isValid())
return QVariant();
switch(role) {
case ModelInterface::RoleType:
return QVariant(m_queue[index.row()]->getType());
case ModelInterface::RoleId:
return QVariant(m_queue[index.row()]->getID());
case ModelInterface::RoleSummary:
return QVariant(m_queue[index.row()]->getSummary());
case ModelInterface::RoleBody:
return QVariant(m_queue[index.row()]->getBody());
case ModelInterface::RoleValue:
return QVariant(m_queue[index.row()]->getValue());
case ModelInterface::RoleIcon:
return QVariant(m_queue[index.row()]->getIcon());
case ModelInterface::RoleSecondaryIcon:
return QVariant(m_queue[index.row()]->getSecondaryIcon());
case ModelInterface::RoleActions:
return QVariant::fromValue(m_queue[index.row()]->getActions());
case ModelInterface::RoleHints:
return QVariant(m_queue[index.row()]->getHints());
case ModelInterface::RoleNotification:
return QVariant::fromValue(m_queue[index.row()]);
default:
return QVariant();
}
}
void MockNotificationModel::append(MockNotification* n) {
QQmlEngine::setObjectOwnership(n, QQmlEngine::CppOwnership);
int location = m_queue.size();
QModelIndex insertionPoint = QModelIndex();
beginInsertRows(insertionPoint, location, location);
m_queue.insert(location, n);
endInsertRows();
}
MockNotification* MockNotificationModel::getNotification(int id) const {
for(int i = 0; i < m_queue.size(); i++) {
MockNotification* n = m_queue.at(i);
if(n && n->getID() == id) {
return n;
}
}
return nullptr;
}
void MockNotificationModel::remove(const int id) {
for(int i = 0; i < m_queue.size(); i++) {
if(m_queue[i]->getID() == id) {
removeInternal(i);
return;
}
}
}
void MockNotificationModel::removeFirst() {
if(m_queue.isEmpty())
return;
removeInternal(0);
}
void MockNotificationModel::removeInternal(int loc) {
QModelIndex deletePoint = QModelIndex();
beginRemoveRows(deletePoint, loc, loc);
m_queue.erase(m_queue.begin() + loc);
endRemoveRows();
}
MockNotification* MockNotificationModel::getRaw(const int notificationId) const {
return getNotification(notificationId);
}
int MockNotificationModel::queued() const {
return m_queue.size();
}
QHash MockNotificationModel::roleNames() const {
QHash roles;
roles.insert(ModelInterface::RoleType, "type");
roles.insert(ModelInterface::RoleUrgency, "urgency");
roles.insert(ModelInterface::RoleId, "id");
roles.insert(ModelInterface::RoleSummary, "summary");
roles.insert(ModelInterface::RoleBody, "body");
roles.insert(ModelInterface::RoleValue, "value");
roles.insert(ModelInterface::RoleIcon, "icon");
roles.insert(ModelInterface::RoleSecondaryIcon, "secondaryIcon");
roles.insert(ModelInterface::RoleActions, "actions");
roles.insert(ModelInterface::RoleHints, "hints");
roles.insert(ModelInterface::RoleNotification, "notification");
return roles;
}
void MockNotificationModel::onCompleted(int id) {
remove(id);
}
void MockNotificationModel::onDataChanged(int id) {
for(int i = 0; i < m_queue.size(); i++) {
if(m_queue[i]->getID() == id) {
Q_EMIT dataChanged(index(i, 0), index(i, 0));
break;
}
}
}