- Changed EmailListModel from QAbstractListModel to QAbstractTableModel - Added columnCount() returning 3 columns (Subject, Sender, Date) - Added headerData() for column headers (Asunto, De, Fecha) - Modified data() to handle Qt::DisplayRole per column index - Updated MailListView::setModel() to use column indices instead of role-based column hiding - Added proper column resize modes (Stretch for Subject/Sender, ResizeToContents for Date) - Default sort by Date column descending
130 lines
3.1 KiB
C++
130 lines
3.1 KiB
C++
#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;
|
|
} |