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:
@@ -52,11 +52,52 @@ template <> constexpr inline auto SettingsView::qt_create_metaobjectdata<qt_meta
|
||||
"key",
|
||||
"QVariant",
|
||||
"value",
|
||||
"categoryAddRequested",
|
||||
"Category",
|
||||
"cat",
|
||||
"categoryEditRequested",
|
||||
"categoryDeleteRequested",
|
||||
"categoryId",
|
||||
"ruleAddRequested",
|
||||
"Rule",
|
||||
"rule",
|
||||
"ruleEditRequested",
|
||||
"ruleDeleteRequested",
|
||||
"ruleId",
|
||||
"templateAddRequested",
|
||||
"Template",
|
||||
"tmpl",
|
||||
"templateEditRequested",
|
||||
"templateDeleteRequested",
|
||||
"templateId",
|
||||
"signatureAddRequested",
|
||||
"Signature",
|
||||
"sig",
|
||||
"signatureEditRequested",
|
||||
"signatureDeleteRequested",
|
||||
"signatureId",
|
||||
"onAccountListChanged",
|
||||
"loadAccounts",
|
||||
"onEditClicked",
|
||||
"onDeleteClicked",
|
||||
"onAccountSelectionChanged"
|
||||
"onAccountSelectionChanged",
|
||||
"onCategorySelectionChanged",
|
||||
"onCategoryAddClicked",
|
||||
"onCategoryEditClicked",
|
||||
"onCategoryDeleteClicked",
|
||||
"onRuleSelectionChanged",
|
||||
"onRuleAddClicked",
|
||||
"onRuleEditClicked",
|
||||
"onRuleDeleteClicked",
|
||||
"onRuleToggleEnabled",
|
||||
"onTemplateSelectionChanged",
|
||||
"onTemplateAddClicked",
|
||||
"onTemplateEditClicked",
|
||||
"onTemplateDeleteClicked",
|
||||
"onSignatureSelectionChanged",
|
||||
"onSignatureAddClicked",
|
||||
"onSignatureEditClicked",
|
||||
"onSignatureDeleteClicked"
|
||||
};
|
||||
|
||||
QtMocHelpers::UintData qt_methods {
|
||||
@@ -78,16 +119,98 @@ template <> constexpr inline auto SettingsView::qt_create_metaobjectdata<qt_meta
|
||||
QtMocHelpers::SignalData<void(const QString &, const QVariant &)>(8, 2, QMC::AccessPublic, QMetaType::Void, {{
|
||||
{ QMetaType::QString, 9 }, { 0x80000000 | 10, 11 },
|
||||
}}),
|
||||
// Signal 'categoryAddRequested'
|
||||
QtMocHelpers::SignalData<void(const Category &)>(12, 2, QMC::AccessPublic, QMetaType::Void, {{
|
||||
{ 0x80000000 | 13, 14 },
|
||||
}}),
|
||||
// Signal 'categoryEditRequested'
|
||||
QtMocHelpers::SignalData<void(const Category &)>(15, 2, QMC::AccessPublic, QMetaType::Void, {{
|
||||
{ 0x80000000 | 13, 14 },
|
||||
}}),
|
||||
// Signal 'categoryDeleteRequested'
|
||||
QtMocHelpers::SignalData<void(qint64)>(16, 2, QMC::AccessPublic, QMetaType::Void, {{
|
||||
{ QMetaType::LongLong, 17 },
|
||||
}}),
|
||||
// Signal 'ruleAddRequested'
|
||||
QtMocHelpers::SignalData<void(const Rule &)>(18, 2, QMC::AccessPublic, QMetaType::Void, {{
|
||||
{ 0x80000000 | 19, 20 },
|
||||
}}),
|
||||
// Signal 'ruleEditRequested'
|
||||
QtMocHelpers::SignalData<void(const Rule &)>(21, 2, QMC::AccessPublic, QMetaType::Void, {{
|
||||
{ 0x80000000 | 19, 20 },
|
||||
}}),
|
||||
// Signal 'ruleDeleteRequested'
|
||||
QtMocHelpers::SignalData<void(qint64)>(22, 2, QMC::AccessPublic, QMetaType::Void, {{
|
||||
{ QMetaType::LongLong, 23 },
|
||||
}}),
|
||||
// Signal 'templateAddRequested'
|
||||
QtMocHelpers::SignalData<void(const Template &)>(24, 2, QMC::AccessPublic, QMetaType::Void, {{
|
||||
{ 0x80000000 | 25, 26 },
|
||||
}}),
|
||||
// Signal 'templateEditRequested'
|
||||
QtMocHelpers::SignalData<void(const Template &)>(27, 2, QMC::AccessPublic, QMetaType::Void, {{
|
||||
{ 0x80000000 | 25, 26 },
|
||||
}}),
|
||||
// Signal 'templateDeleteRequested'
|
||||
QtMocHelpers::SignalData<void(qint64)>(28, 2, QMC::AccessPublic, QMetaType::Void, {{
|
||||
{ QMetaType::LongLong, 29 },
|
||||
}}),
|
||||
// Signal 'signatureAddRequested'
|
||||
QtMocHelpers::SignalData<void(const Signature &)>(30, 2, QMC::AccessPublic, QMetaType::Void, {{
|
||||
{ 0x80000000 | 31, 32 },
|
||||
}}),
|
||||
// Signal 'signatureEditRequested'
|
||||
QtMocHelpers::SignalData<void(const Signature &)>(33, 2, QMC::AccessPublic, QMetaType::Void, {{
|
||||
{ 0x80000000 | 31, 32 },
|
||||
}}),
|
||||
// Signal 'signatureDeleteRequested'
|
||||
QtMocHelpers::SignalData<void(qint64)>(34, 2, QMC::AccessPublic, QMetaType::Void, {{
|
||||
{ QMetaType::LongLong, 35 },
|
||||
}}),
|
||||
// Slot 'onAccountListChanged'
|
||||
QtMocHelpers::SlotData<void()>(12, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
QtMocHelpers::SlotData<void()>(36, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
// Slot 'loadAccounts'
|
||||
QtMocHelpers::SlotData<void()>(13, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
QtMocHelpers::SlotData<void()>(37, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
// Slot 'onEditClicked'
|
||||
QtMocHelpers::SlotData<void()>(14, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
QtMocHelpers::SlotData<void()>(38, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
// Slot 'onDeleteClicked'
|
||||
QtMocHelpers::SlotData<void()>(15, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
QtMocHelpers::SlotData<void()>(39, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
// Slot 'onAccountSelectionChanged'
|
||||
QtMocHelpers::SlotData<void()>(16, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
QtMocHelpers::SlotData<void()>(40, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
// Slot 'onCategorySelectionChanged'
|
||||
QtMocHelpers::SlotData<void()>(41, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
// Slot 'onCategoryAddClicked'
|
||||
QtMocHelpers::SlotData<void()>(42, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
// Slot 'onCategoryEditClicked'
|
||||
QtMocHelpers::SlotData<void()>(43, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
// Slot 'onCategoryDeleteClicked'
|
||||
QtMocHelpers::SlotData<void()>(44, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
// Slot 'onRuleSelectionChanged'
|
||||
QtMocHelpers::SlotData<void()>(45, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
// Slot 'onRuleAddClicked'
|
||||
QtMocHelpers::SlotData<void()>(46, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
// Slot 'onRuleEditClicked'
|
||||
QtMocHelpers::SlotData<void()>(47, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
// Slot 'onRuleDeleteClicked'
|
||||
QtMocHelpers::SlotData<void()>(48, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
// Slot 'onRuleToggleEnabled'
|
||||
QtMocHelpers::SlotData<void()>(49, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
// Slot 'onTemplateSelectionChanged'
|
||||
QtMocHelpers::SlotData<void()>(50, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
// Slot 'onTemplateAddClicked'
|
||||
QtMocHelpers::SlotData<void()>(51, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
// Slot 'onTemplateEditClicked'
|
||||
QtMocHelpers::SlotData<void()>(52, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
// Slot 'onTemplateDeleteClicked'
|
||||
QtMocHelpers::SlotData<void()>(53, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
// Slot 'onSignatureSelectionChanged'
|
||||
QtMocHelpers::SlotData<void()>(54, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
// Slot 'onSignatureAddClicked'
|
||||
QtMocHelpers::SlotData<void()>(55, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
// Slot 'onSignatureEditClicked'
|
||||
QtMocHelpers::SlotData<void()>(56, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
// Slot 'onSignatureDeleteClicked'
|
||||
QtMocHelpers::SlotData<void()>(57, 2, QMC::AccessPrivate, QMetaType::Void),
|
||||
};
|
||||
QtMocHelpers::UintData qt_properties {
|
||||
};
|
||||
@@ -116,11 +239,40 @@ void SettingsView::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id
|
||||
case 2: _t->accountDeleteRequested((*reinterpret_cast<std::add_pointer_t<int>>(_a[1]))); break;
|
||||
case 3: _t->themeChanged((*reinterpret_cast<std::add_pointer_t<QString>>(_a[1]))); break;
|
||||
case 4: _t->settingChanged((*reinterpret_cast<std::add_pointer_t<QString>>(_a[1])),(*reinterpret_cast<std::add_pointer_t<QVariant>>(_a[2]))); break;
|
||||
case 5: _t->onAccountListChanged(); break;
|
||||
case 6: _t->loadAccounts(); break;
|
||||
case 7: _t->onEditClicked(); break;
|
||||
case 8: _t->onDeleteClicked(); break;
|
||||
case 9: _t->onAccountSelectionChanged(); break;
|
||||
case 5: _t->categoryAddRequested((*reinterpret_cast<std::add_pointer_t<Category>>(_a[1]))); break;
|
||||
case 6: _t->categoryEditRequested((*reinterpret_cast<std::add_pointer_t<Category>>(_a[1]))); break;
|
||||
case 7: _t->categoryDeleteRequested((*reinterpret_cast<std::add_pointer_t<qint64>>(_a[1]))); break;
|
||||
case 8: _t->ruleAddRequested((*reinterpret_cast<std::add_pointer_t<Rule>>(_a[1]))); break;
|
||||
case 9: _t->ruleEditRequested((*reinterpret_cast<std::add_pointer_t<Rule>>(_a[1]))); break;
|
||||
case 10: _t->ruleDeleteRequested((*reinterpret_cast<std::add_pointer_t<qint64>>(_a[1]))); break;
|
||||
case 11: _t->templateAddRequested((*reinterpret_cast<std::add_pointer_t<Template>>(_a[1]))); break;
|
||||
case 12: _t->templateEditRequested((*reinterpret_cast<std::add_pointer_t<Template>>(_a[1]))); break;
|
||||
case 13: _t->templateDeleteRequested((*reinterpret_cast<std::add_pointer_t<qint64>>(_a[1]))); break;
|
||||
case 14: _t->signatureAddRequested((*reinterpret_cast<std::add_pointer_t<Signature>>(_a[1]))); break;
|
||||
case 15: _t->signatureEditRequested((*reinterpret_cast<std::add_pointer_t<Signature>>(_a[1]))); break;
|
||||
case 16: _t->signatureDeleteRequested((*reinterpret_cast<std::add_pointer_t<qint64>>(_a[1]))); break;
|
||||
case 17: _t->onAccountListChanged(); break;
|
||||
case 18: _t->loadAccounts(); break;
|
||||
case 19: _t->onEditClicked(); break;
|
||||
case 20: _t->onDeleteClicked(); break;
|
||||
case 21: _t->onAccountSelectionChanged(); break;
|
||||
case 22: _t->onCategorySelectionChanged(); break;
|
||||
case 23: _t->onCategoryAddClicked(); break;
|
||||
case 24: _t->onCategoryEditClicked(); break;
|
||||
case 25: _t->onCategoryDeleteClicked(); break;
|
||||
case 26: _t->onRuleSelectionChanged(); break;
|
||||
case 27: _t->onRuleAddClicked(); break;
|
||||
case 28: _t->onRuleEditClicked(); break;
|
||||
case 29: _t->onRuleDeleteClicked(); break;
|
||||
case 30: _t->onRuleToggleEnabled(); break;
|
||||
case 31: _t->onTemplateSelectionChanged(); break;
|
||||
case 32: _t->onTemplateAddClicked(); break;
|
||||
case 33: _t->onTemplateEditClicked(); break;
|
||||
case 34: _t->onTemplateDeleteClicked(); break;
|
||||
case 35: _t->onSignatureSelectionChanged(); break;
|
||||
case 36: _t->onSignatureAddClicked(); break;
|
||||
case 37: _t->onSignatureEditClicked(); break;
|
||||
case 38: _t->onSignatureDeleteClicked(); break;
|
||||
default: ;
|
||||
}
|
||||
}
|
||||
@@ -135,6 +287,30 @@ void SettingsView::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id
|
||||
return;
|
||||
if (QtMocHelpers::indexOfMethod<void (SettingsView::*)(const QString & , const QVariant & )>(_a, &SettingsView::settingChanged, 4))
|
||||
return;
|
||||
if (QtMocHelpers::indexOfMethod<void (SettingsView::*)(const Category & )>(_a, &SettingsView::categoryAddRequested, 5))
|
||||
return;
|
||||
if (QtMocHelpers::indexOfMethod<void (SettingsView::*)(const Category & )>(_a, &SettingsView::categoryEditRequested, 6))
|
||||
return;
|
||||
if (QtMocHelpers::indexOfMethod<void (SettingsView::*)(qint64 )>(_a, &SettingsView::categoryDeleteRequested, 7))
|
||||
return;
|
||||
if (QtMocHelpers::indexOfMethod<void (SettingsView::*)(const Rule & )>(_a, &SettingsView::ruleAddRequested, 8))
|
||||
return;
|
||||
if (QtMocHelpers::indexOfMethod<void (SettingsView::*)(const Rule & )>(_a, &SettingsView::ruleEditRequested, 9))
|
||||
return;
|
||||
if (QtMocHelpers::indexOfMethod<void (SettingsView::*)(qint64 )>(_a, &SettingsView::ruleDeleteRequested, 10))
|
||||
return;
|
||||
if (QtMocHelpers::indexOfMethod<void (SettingsView::*)(const Template & )>(_a, &SettingsView::templateAddRequested, 11))
|
||||
return;
|
||||
if (QtMocHelpers::indexOfMethod<void (SettingsView::*)(const Template & )>(_a, &SettingsView::templateEditRequested, 12))
|
||||
return;
|
||||
if (QtMocHelpers::indexOfMethod<void (SettingsView::*)(qint64 )>(_a, &SettingsView::templateDeleteRequested, 13))
|
||||
return;
|
||||
if (QtMocHelpers::indexOfMethod<void (SettingsView::*)(const Signature & )>(_a, &SettingsView::signatureAddRequested, 14))
|
||||
return;
|
||||
if (QtMocHelpers::indexOfMethod<void (SettingsView::*)(const Signature & )>(_a, &SettingsView::signatureEditRequested, 15))
|
||||
return;
|
||||
if (QtMocHelpers::indexOfMethod<void (SettingsView::*)(qint64 )>(_a, &SettingsView::signatureDeleteRequested, 16))
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -157,14 +333,14 @@ int SettingsView::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
|
||||
if (_id < 0)
|
||||
return _id;
|
||||
if (_c == QMetaObject::InvokeMetaMethod) {
|
||||
if (_id < 10)
|
||||
if (_id < 39)
|
||||
qt_static_metacall(this, _c, _id, _a);
|
||||
_id -= 10;
|
||||
_id -= 39;
|
||||
}
|
||||
if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
|
||||
if (_id < 10)
|
||||
if (_id < 39)
|
||||
*reinterpret_cast<QMetaType *>(_a[0]) = QMetaType();
|
||||
_id -= 10;
|
||||
_id -= 39;
|
||||
}
|
||||
return _id;
|
||||
}
|
||||
@@ -198,4 +374,76 @@ void SettingsView::settingChanged(const QString & _t1, const QVariant & _t2)
|
||||
{
|
||||
QMetaObject::activate<void>(this, &staticMetaObject, 4, nullptr, _t1, _t2);
|
||||
}
|
||||
|
||||
// SIGNAL 5
|
||||
void SettingsView::categoryAddRequested(const Category & _t1)
|
||||
{
|
||||
QMetaObject::activate<void>(this, &staticMetaObject, 5, nullptr, _t1);
|
||||
}
|
||||
|
||||
// SIGNAL 6
|
||||
void SettingsView::categoryEditRequested(const Category & _t1)
|
||||
{
|
||||
QMetaObject::activate<void>(this, &staticMetaObject, 6, nullptr, _t1);
|
||||
}
|
||||
|
||||
// SIGNAL 7
|
||||
void SettingsView::categoryDeleteRequested(qint64 _t1)
|
||||
{
|
||||
QMetaObject::activate<void>(this, &staticMetaObject, 7, nullptr, _t1);
|
||||
}
|
||||
|
||||
// SIGNAL 8
|
||||
void SettingsView::ruleAddRequested(const Rule & _t1)
|
||||
{
|
||||
QMetaObject::activate<void>(this, &staticMetaObject, 8, nullptr, _t1);
|
||||
}
|
||||
|
||||
// SIGNAL 9
|
||||
void SettingsView::ruleEditRequested(const Rule & _t1)
|
||||
{
|
||||
QMetaObject::activate<void>(this, &staticMetaObject, 9, nullptr, _t1);
|
||||
}
|
||||
|
||||
// SIGNAL 10
|
||||
void SettingsView::ruleDeleteRequested(qint64 _t1)
|
||||
{
|
||||
QMetaObject::activate<void>(this, &staticMetaObject, 10, nullptr, _t1);
|
||||
}
|
||||
|
||||
// SIGNAL 11
|
||||
void SettingsView::templateAddRequested(const Template & _t1)
|
||||
{
|
||||
QMetaObject::activate<void>(this, &staticMetaObject, 11, nullptr, _t1);
|
||||
}
|
||||
|
||||
// SIGNAL 12
|
||||
void SettingsView::templateEditRequested(const Template & _t1)
|
||||
{
|
||||
QMetaObject::activate<void>(this, &staticMetaObject, 12, nullptr, _t1);
|
||||
}
|
||||
|
||||
// SIGNAL 13
|
||||
void SettingsView::templateDeleteRequested(qint64 _t1)
|
||||
{
|
||||
QMetaObject::activate<void>(this, &staticMetaObject, 13, nullptr, _t1);
|
||||
}
|
||||
|
||||
// SIGNAL 14
|
||||
void SettingsView::signatureAddRequested(const Signature & _t1)
|
||||
{
|
||||
QMetaObject::activate<void>(this, &staticMetaObject, 14, nullptr, _t1);
|
||||
}
|
||||
|
||||
// SIGNAL 15
|
||||
void SettingsView::signatureEditRequested(const Signature & _t1)
|
||||
{
|
||||
QMetaObject::activate<void>(this, &staticMetaObject, 15, nullptr, _t1);
|
||||
}
|
||||
|
||||
// SIGNAL 16
|
||||
void SettingsView::signatureDeleteRequested(qint64 _t1)
|
||||
{
|
||||
QMetaObject::activate<void>(this, &staticMetaObject, 16, nullptr, _t1);
|
||||
}
|
||||
QT_WARNING_POP
|
||||
|
||||
Reference in New Issue
Block a user