Files
wino-mail-dtkqt/src/ui/models/EmailListModel.cpp
T

130 lines
3.1 KiB
C++
Raw Normal View History

#include "EmailListModel.h"
#include <QDebug>
#include <QDateTime>
EmailListModel::EmailListModel(QObject *parent)
: QAbstractTableModel(parent)
{
refresh();
}
int EmailListModel::rowCount(const QModelIndex &parent) const
{
if (parent.isValid())
return 0;
return m_emails.size();
}
int EmailListModel::columnCount(const QModelIndex &parent) const
{
Q_UNUSED(parent);
return ColCount;
}
QVariant EmailListModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid() || index.row() >= m_emails.size())
return QVariant();
const MailItem& item = m_emails.at(index.row());
switch (role) {
case Qt::DisplayRole:
case Qt::EditRole:
switch (index.column()) {
case ColSubject:
return item.subject();
case ColSender:
return item.sender();
case ColDate:
return item.date();
}
break;
case IdRole:
return item.id();
case SubjectRole:
return item.subject();
case SenderRole:
return item.sender();
case RecipientRole:
return item.recipient();
case DateRole:
return item.date();
case ReadRole:
return item.isRead();
case FlaggedRole:
return item.isFlagged();
case AttachmentsRole:
return QVariant::fromValue(item.attachments());
case FileIdRole:
return item.fileId();
case SizeRole:
return item.size();
case MessageIdRole:
return item.messageId();
case SenderInitialRole: {
QString sender = item.sender();
if (sender.isEmpty())
return QString();
return QString(sender.at(0)).toUpper();
}
default:
return QVariant();
}
return QVariant();
}
QVariant EmailListModel::headerData(int section, Qt::Orientation orientation, int role) const
{
if (orientation != Qt::Horizontal || role != Qt::DisplayRole)
return QVariant();
switch (section) {
case ColSubject:
return tr("Asunto");
case ColSender:
return tr("De");
case ColDate:
return tr("Fecha");
default:
return QVariant();
}
}
QHash<int, QByteArray> EmailListModel::roleNames() const
{
QHash<int, QByteArray> roles;
roles[IdRole] = "id";
roles[SubjectRole] = "subject";
roles[SenderRole] = "sender";
roles[RecipientRole] = "recipient";
roles[DateRole] = "date";
roles[ReadRole] = "read";
roles[FlaggedRole] = "flagged";
roles[AttachmentsRole] = "attachments";
roles[FileIdRole] = "fileId";
roles[SizeRole] = "size";
roles[MessageIdRole] = "messageId";
roles[SenderInitialRole] = "senderInitial";
return roles;
}
void EmailListModel::setFolderId(int folderId)
{
if (m_folderId == folderId)
return;
m_folderId = folderId;
refresh();
}
void EmailListModel::refresh()
{
beginResetModel();
if (m_folderId == -1) {
m_emails = MailItemDao::findAll();
} else {
m_emails = MailItemDao::findByFolderId(m_folderId);
}
endResetModel();
qDebug() << "EmailListModel refreshed with" << m_emails.size() << "emails for folderId" << m_folderId;
}