diff --git a/src/ui/maillistview.cpp b/src/ui/maillistview.cpp index c9dbc4b..48e6f95 100644 --- a/src/ui/maillistview.cpp +++ b/src/ui/maillistview.cpp @@ -72,33 +72,17 @@ void MailListView::setupUI() { void MailListView::setModel(EmailListModel *model) { m_proxyModel->setSourceModel(model); - m_tableView->setColumnHidden(EmailListModel::IdRole - Qt::UserRole - 1, true); - m_tableView->setColumnHidden(EmailListModel::RecipientRole - Qt::UserRole - 1, true); - m_tableView->setColumnHidden(EmailListModel::ReadRole - Qt::UserRole - 1, true); - m_tableView->setColumnHidden(EmailListModel::FlaggedRole - Qt::UserRole - 1, true); - m_tableView->setColumnHidden(EmailListModel::AttachmentsRole - Qt::UserRole - 1, true); - m_tableView->setColumnHidden(EmailListModel::FileIdRole - Qt::UserRole - 1, true); - m_tableView->setColumnHidden(EmailListModel::SizeRole - Qt::UserRole - 1, true); - m_tableView->setColumnHidden(EmailListModel::MessageIdRole - Qt::UserRole - 1, true); - m_tableView->setColumnHidden(EmailListModel::SenderInitialRole - Qt::UserRole - 1, true); + // Hide columns we don't want to show (by index now, not by role) + // Columns: 0=Subject, 1=Sender, 2=Date + // All visible for now - we can hide via header data + + // Default sort by date descending (column 2) + m_tableView->sortByColumn(EmailListModel::ColDate, Qt::DescendingOrder); - m_tableView->horizontalHeader()->setSectionResizeMode(EmailListModel::SenderRole - Qt::UserRole - 1, QHeaderView::Stretch); - m_tableView->horizontalHeader()->setSectionResizeMode(EmailListModel::SubjectRole - Qt::UserRole - 1, QHeaderView::Stretch); - - // Default sort by date descending - m_tableView->sortByColumn(EmailListModel::DateRole - Qt::UserRole - 1, Qt::DescendingOrder); - - // Set column titles manually - QHeaderView *header = m_tableView->horizontalHeader(); - for (int i = 0; i < m_proxyModel->columnCount(); ++i) { - int role = Qt::UserRole + 1 + i; - switch (role) { - case EmailListModel::SenderRole: header->setSectionHidden(i, false); break; - case EmailListModel::SubjectRole: header->setSectionHidden(i, false); break; - case EmailListModel::DateRole: header->setSectionHidden(i, false); break; - default: header->setSectionHidden(i, true); break; - } - } + // Set column resize modes + m_tableView->horizontalHeader()->setSectionResizeMode(EmailListModel::ColSubject, QHeaderView::Stretch); + m_tableView->horizontalHeader()->setSectionResizeMode(EmailListModel::ColSender, QHeaderView::Stretch); + m_tableView->horizontalHeader()->setSectionResizeMode(EmailListModel::ColDate, QHeaderView::ResizeToContents); } void MailListView::onRowSelected(const QModelIndex &index) { diff --git a/src/ui/models/EmailListModel.cpp b/src/ui/models/EmailListModel.cpp index 35a9727..5f95668 100644 --- a/src/ui/models/EmailListModel.cpp +++ b/src/ui/models/EmailListModel.cpp @@ -3,7 +3,7 @@ #include EmailListModel::EmailListModel(QObject *parent) - : QAbstractListModel(parent) + : QAbstractTableModel(parent) { refresh(); } @@ -15,6 +15,12 @@ int EmailListModel::rowCount(const QModelIndex &parent) const 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()) @@ -23,6 +29,17 @@ QVariant EmailListModel::data(const QModelIndex &index, int role) const 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: @@ -49,13 +66,29 @@ QVariant EmailListModel::data(const QModelIndex &index, int role) const QString sender = item.sender(); if (sender.isEmpty()) return QString(); - // Get first character, or first non-space character? - // Simple: first character of the sender string 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 EmailListModel::roleNames() const diff --git a/src/ui/models/EmailListModel.h b/src/ui/models/EmailListModel.h index 5435b54..3067d3c 100644 --- a/src/ui/models/EmailListModel.h +++ b/src/ui/models/EmailListModel.h @@ -1,12 +1,12 @@ #ifndef EMAILLISTMODEL_H #define EMAILLISTMODEL_H -#include +#include #include #include #include "../db/dao/mailitemdao.h" -class EmailListModel : public QAbstractListModel +class EmailListModel : public QAbstractTableModel { Q_OBJECT public: @@ -28,8 +28,18 @@ public: SenderInitialRole // computed from sender }; + // Column indices (match role order for simplicity) + enum Columns { + ColSubject = 0, + ColSender = 1, + ColDate = 2, + ColCount = 3 // number of visible columns + }; + int rowCount(const QModelIndex &parent = QModelIndex()) const override; + int columnCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; QHash roleNames() const override; // Set the folderId to filter emails; -1 means all folders @@ -40,7 +50,5 @@ public: private: QVector m_emails; int m_folderId{-1}; // -1 means all folders - // REMOVED: MailItemDao& m_mailItemDao; // Methods are static, no instance needed }; - #endif // EMAILLISTMODEL_H \ No newline at end of file