feat: Wino-style compact mail view with display modes + hover actions

- CompactMailDelegate: 3 display modes (Compact/Medium/Spacious) like WinUI original
  * Compact: 64px, minimal, no preview
  * Medium: 96px, with preview, detailed categories
  * Spacious: 120px, full padding, preview visible
- Hover actions: Reply (↩), Forward (↪), Mark unread (✎) on right side
- Unread dot indicator (top-right, blue) like WinUI
- User-configurable display mode via combo box in filter bar
- MainMainWindow handlers for reply/forward/mark-unread from compact view
- Signals: replyRequested, forwardRequested, markUnreadRequested
This commit is contained in:
2026-08-25 13:41:43 +02:00
parent 4c4fec7a0a
commit fa699b5399
92 changed files with 26111 additions and 13449 deletions
+38
View File
@@ -70,6 +70,22 @@ void MailListView::setupUI()
filterLayout->addStretch();
// Display mode combo (Compact/Medium/Spacious)
m_displayModeCombo = new QComboBox();
m_displayModeCombo->addItem("Compacto");
m_displayModeCombo->addItem("Medio");
m_displayModeCombo->addItem("Espacioso");
m_displayModeCombo->setFixedWidth(120);
m_displayModeCombo->setStyleSheet(
"QComboBox { border: 1px solid #d1d1d6; border-radius: 4px; padding: 4px 8px; "
"background: white; min-height: 20px; }"
"QComboBox:hover { border-color: #bdbdbd; }"
"QComboBox:focus { border-color: #1976D2; }"
);
connect(m_displayModeCombo, QOverload<int>::of(&QComboBox::currentIndexChanged),
this, &MailListView::onDisplayModeChanged);
filterLayout->addWidget(m_displayModeCombo);
// Group by combo
m_groupByCombo = new QComboBox();
m_groupByCombo->addItem("Sin agrupación");
@@ -282,4 +298,26 @@ void MailListView::onCompactMoreRequested(int mailId, const QPoint &globalPos)
void MailListView::onCompactMailClicked(int mailId)
{
emit emailSelected(mailId);
}
void MailListView::onCompactReplyRequested(int mailId)
{
emit replyRequested(mailId);
}
void MailListView::onCompactForwardRequested(int mailId)
{
emit forwardRequested(mailId);
}
void MailListView::onCompactMarkUnreadRequested(int mailId)
{
emit markUnreadRequested(mailId);
}
void MailListView::onDisplayModeChanged(int index)
{
CompactMailDelegate::DisplayMode mode = static_cast<CompactMailDelegate::DisplayMode>(index);
m_compactDelegate->setDisplayMode(mode);
m_listView->update();
}