- MailListView: ExtendedSelection mode for both tree and list views
- Action bar (blue bar) appears when items selected
- Select all checkbox + counter label
- Batch actions: Flag, Mark unread, Move (TODO), Delete, Exit selection
- Signals: selectionChanged, batchFlagRequested, batchDeleteRequested, batchMarkUnreadRequested, batchMoveRequested
- enterMultiSelectMode()/exitMultiSelectMode() state management
- Works in both normal and compact views
- EmailListModel: QAbstractListModel with canFetchMore/fetchMore
* Batch loading (default 50 emails per fetch)
* Total count query for scrollbar
* TotalCountChanged signal
* Paginated DB queries: findAllPaginated, findByFolderIdPaginated
* Count queries: countAll, countByFolderId
- MailItemDao: new paginated methods
* findAllPaginated(offset, limit, filters...)
* findByFolderIdPaginated(folderId, offset, limit, filters...)
* countAll(filters...), countByFolderId(folderId, filters...)
- MailListView: scroll-triggered fetchMore
* Connects verticalScrollBar valueChanged on both TreeView and ListView
* Triggers fetchMore at 90% scroll threshold
* onRowsInserted updates EmailTreeModel when new emails arrive
* Works in both normal (tree) and compact (list) views
- 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