feat: responsive compact mail view + folder unread badges
- CompactMailDelegate: card-based view for narrow panels (<420px) * Avatar with hash-based color, sender + date (relative format) * Subject line with attachment icon * Action buttons: flag, delete, category, more (context menu) * Unread highlight with light blue background + bold sender - MailListView: automatic switch between tree/table (wide) and list/cards (narrow) * QStackedWidget with QTreeView + QListView sharing same proxy model * resizeEvent threshold at 420px * Signals forwarded to MainMainWindow for actions - FolderTreeDelegate: custom paint for folder tree * Unread count badge (blue pill) right-aligned on folder nodes * Account nodes bold, folder nodes normal weight * Proper indentation per depth level - MailItemDao::countUnreadByFolderId() for real-time unread counts - MainMainWindow handlers for compact actions (flag, delete, category, more menu)
This commit is contained in:
@@ -42,28 +42,45 @@ template <> constexpr inline auto ReaderView::qt_create_metaobjectdata<qt_meta_t
|
||||
"ReaderView",
|
||||
"replyRequested",
|
||||
"",
|
||||
"const MailItem*",
|
||||
"item",
|
||||
"mailId",
|
||||
"forwardRequested",
|
||||
"deleteRequested",
|
||||
"detachRequested"
|
||||
"detachRequested",
|
||||
"openAttachmentRequested",
|
||||
"path",
|
||||
"onReplyClicked",
|
||||
"onForwardClicked",
|
||||
"onDeleteClicked",
|
||||
"onDetachClicked"
|
||||
};
|
||||
|
||||
QtMocHelpers::UintData qt_methods {
|
||||
// Signal 'replyRequested'
|
||||
QtMocHelpers::SignalData<void(const MailItem *)>(1, 2, QMC::AccessPublic, QMetaType::Void, {{
|
||||
{ 0x80000000 | 3, 4 },
|
||||
QtMocHelpers::SignalData<void(int)>(1, 2, QMC::AccessPublic, QMetaType::Void, {{
|
||||
{ QMetaType::Int, 3 },
|
||||
}}),
|
||||
// Signal 'forwardRequested'
|
||||
QtMocHelpers::SignalData<void(const MailItem *)>(5, 2, QMC::AccessPublic, QMetaType::Void, {{
|
||||
{ 0x80000000 | 3, 4 },
|
||||
QtMocHelpers::SignalData<void(int)>(4, 2, QMC::AccessPublic, QMetaType::Void, {{
|
||||
{ QMetaType::Int, 3 },
|
||||
}}),
|
||||
// Signal 'deleteRequested'
|
||||
QtMocHelpers::SignalData<void(const MailItem *)>(6, 2, QMC::AccessPublic, QMetaType::Void, {{
|
||||
{ 0x80000000 | 3, 4 },
|
||||
QtMocHelpers::SignalData<void(int)>(5, 2, QMC::AccessPublic, QMetaType::Void, {{
|
||||
{ QMetaType::Int, 3 },
|
||||
}}),
|
||||
// Signal 'detachRequested'
|
||||
QtMocHelpers::SignalData<void()>(7, 2, QMC::AccessPublic, QMetaType::Void),
|
||||
QtMocHelpers::SignalData<void()>(6, 2, QMC::AccessPublic, QMetaType::Void),
|
||||
// Signal 'openAttachmentRequested'
|
||||
QtMocHelpers::SignalData<void(const QString &)>(7, 2, QMC::AccessPublic, QMetaType::Void, {{
|
||||
{ QMetaType::QString, 8 },
|
||||
}}),
|
||||
// Slot 'onReplyClicked'
|
||||
QtMocHelpers::SlotData<void()>(9, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
// Slot 'onForwardClicked'
|
||||
QtMocHelpers::SlotData<void()>(10, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
// Slot 'onDeleteClicked'
|
||||
QtMocHelpers::SlotData<void()>(11, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
// Slot 'onDetachClicked'
|
||||
QtMocHelpers::SlotData<void()>(12, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
};
|
||||
QtMocHelpers::UintData qt_properties {
|
||||
};
|
||||
@@ -87,22 +104,29 @@ void ReaderView::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id,
|
||||
auto *_t = static_cast<ReaderView *>(_o);
|
||||
if (_c == QMetaObject::InvokeMetaMethod) {
|
||||
switch (_id) {
|
||||
case 0: _t->replyRequested((*reinterpret_cast<std::add_pointer_t<const MailItem*>>(_a[1]))); break;
|
||||
case 1: _t->forwardRequested((*reinterpret_cast<std::add_pointer_t<const MailItem*>>(_a[1]))); break;
|
||||
case 2: _t->deleteRequested((*reinterpret_cast<std::add_pointer_t<const MailItem*>>(_a[1]))); break;
|
||||
case 0: _t->replyRequested((*reinterpret_cast<std::add_pointer_t<int>>(_a[1]))); break;
|
||||
case 1: _t->forwardRequested((*reinterpret_cast<std::add_pointer_t<int>>(_a[1]))); break;
|
||||
case 2: _t->deleteRequested((*reinterpret_cast<std::add_pointer_t<int>>(_a[1]))); break;
|
||||
case 3: _t->detachRequested(); break;
|
||||
case 4: _t->openAttachmentRequested((*reinterpret_cast<std::add_pointer_t<QString>>(_a[1]))); break;
|
||||
case 5: _t->onReplyClicked(); break;
|
||||
case 6: _t->onForwardClicked(); break;
|
||||
case 7: _t->onDeleteClicked(); break;
|
||||
case 8: _t->onDetachClicked(); break;
|
||||
default: ;
|
||||
}
|
||||
}
|
||||
if (_c == QMetaObject::IndexOfMethod) {
|
||||
if (QtMocHelpers::indexOfMethod<void (ReaderView::*)(const MailItem * )>(_a, &ReaderView::replyRequested, 0))
|
||||
if (QtMocHelpers::indexOfMethod<void (ReaderView::*)(int )>(_a, &ReaderView::replyRequested, 0))
|
||||
return;
|
||||
if (QtMocHelpers::indexOfMethod<void (ReaderView::*)(const MailItem * )>(_a, &ReaderView::forwardRequested, 1))
|
||||
if (QtMocHelpers::indexOfMethod<void (ReaderView::*)(int )>(_a, &ReaderView::forwardRequested, 1))
|
||||
return;
|
||||
if (QtMocHelpers::indexOfMethod<void (ReaderView::*)(const MailItem * )>(_a, &ReaderView::deleteRequested, 2))
|
||||
if (QtMocHelpers::indexOfMethod<void (ReaderView::*)(int )>(_a, &ReaderView::deleteRequested, 2))
|
||||
return;
|
||||
if (QtMocHelpers::indexOfMethod<void (ReaderView::*)()>(_a, &ReaderView::detachRequested, 3))
|
||||
return;
|
||||
if (QtMocHelpers::indexOfMethod<void (ReaderView::*)(const QString & )>(_a, &ReaderView::openAttachmentRequested, 4))
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -125,32 +149,32 @@ int ReaderView::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
|
||||
if (_id < 0)
|
||||
return _id;
|
||||
if (_c == QMetaObject::InvokeMetaMethod) {
|
||||
if (_id < 4)
|
||||
if (_id < 9)
|
||||
qt_static_metacall(this, _c, _id, _a);
|
||||
_id -= 4;
|
||||
_id -= 9;
|
||||
}
|
||||
if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
|
||||
if (_id < 4)
|
||||
if (_id < 9)
|
||||
*reinterpret_cast<QMetaType *>(_a[0]) = QMetaType();
|
||||
_id -= 4;
|
||||
_id -= 9;
|
||||
}
|
||||
return _id;
|
||||
}
|
||||
|
||||
// SIGNAL 0
|
||||
void ReaderView::replyRequested(const MailItem * _t1)
|
||||
void ReaderView::replyRequested(int _t1)
|
||||
{
|
||||
QMetaObject::activate<void>(this, &staticMetaObject, 0, nullptr, _t1);
|
||||
}
|
||||
|
||||
// SIGNAL 1
|
||||
void ReaderView::forwardRequested(const MailItem * _t1)
|
||||
void ReaderView::forwardRequested(int _t1)
|
||||
{
|
||||
QMetaObject::activate<void>(this, &staticMetaObject, 1, nullptr, _t1);
|
||||
}
|
||||
|
||||
// SIGNAL 2
|
||||
void ReaderView::deleteRequested(const MailItem * _t1)
|
||||
void ReaderView::deleteRequested(int _t1)
|
||||
{
|
||||
QMetaObject::activate<void>(this, &staticMetaObject, 2, nullptr, _t1);
|
||||
}
|
||||
@@ -160,4 +184,10 @@ void ReaderView::detachRequested()
|
||||
{
|
||||
QMetaObject::activate(this, &staticMetaObject, 3, nullptr);
|
||||
}
|
||||
|
||||
// SIGNAL 4
|
||||
void ReaderView::openAttachmentRequested(const QString & _t1)
|
||||
{
|
||||
QMetaObject::activate<void>(this, &staticMetaObject, 4, nullptr, _t1);
|
||||
}
|
||||
QT_WARNING_POP
|
||||
|
||||
Reference in New Issue
Block a user