1 // For license of this file, see <project-root-folder>/LICENSE.md. 2 3 #ifndef MESSAGESMODEL_H 4 #define MESSAGESMODEL_H 5 6 #include "core/messagesmodelsqllayer.h" 7 #include <QSqlQueryModel> 8 9 #include "core/message.h" 10 #include "definitions/definitions.h" 11 #include "services/abstract/rootitem.h" 12 13 #include <QFont> 14 #include <QIcon> 15 16 class MessagesModelCache; 17 18 class MessagesModel : public QSqlQueryModel, public MessagesModelSqlLayer { 19 Q_OBJECT 20 21 public: 22 23 // Enum which describes basic filtering schemes 24 // for messages. 25 enum class MessageHighlighter { 26 NoHighlighting = 100, 27 HighlightUnread = 101, 28 HighlightImportant = 102 29 }; 30 31 // Constructors and destructors. 32 explicit MessagesModel(QObject* parent = nullptr); 33 virtual ~MessagesModel(); 34 35 // Fetches ALL available data to the model. 36 // NOTE: This activates the SQL query and populates the model with new data. 37 void repopulate(); 38 39 // Model implementation. 40 bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole); 41 QVariant data(const QModelIndex& idx, int role = Qt::DisplayRole) const; 42 QVariant data(int row, int column, int role = Qt::DisplayRole) const; 43 QVariant headerData(int section, Qt::Orientation orientation, int role) const; 44 Qt::ItemFlags flags(const QModelIndex& index) const; 45 46 // Returns message at given index. 47 48 QList<Message> messagesAt(const QList<int>& row_indices) const; 49 Message messageAt(int row_index) const; 50 int messageId(int row_index) const; 51 RootItem::Importance messageImportance(int row_index) const; 52 53 RootItem* loadedItem() const; 54 MessagesModelCache* cache() const; 55 56 void setupFonts(); 57 void updateDateFormat(); 58 void updateFeedIconsDisplay(); 59 void reloadWholeLayout(); 60 61 // SINGLE message manipulators. 62 bool switchMessageImportance(int row_index); 63 bool setMessageRead(int row_index, RootItem::ReadStatus read); 64 65 // BATCH messages manipulators. 66 bool switchBatchMessageImportance(const QModelIndexList& messages); 67 bool setBatchMessagesDeleted(const QModelIndexList& messages); 68 bool setBatchMessagesRead(const QModelIndexList& messages, RootItem::ReadStatus read); 69 bool setBatchMessagesRestored(const QModelIndexList& messages); 70 71 // Highlights messages. 72 void highlightMessages(MessageHighlighter highlight); 73 74 // Loads messages of given feeds. 75 void loadMessages(RootItem* item); 76 77 public slots: 78 79 // NOTE: These methods DO NOT actually change data in the DB, just in the model. 80 // These are particularly used by msg browser. 81 bool setMessageImportantById(int id, RootItem::Importance important); 82 bool setMessageReadById(int id, RootItem::ReadStatus read); 83 84 private: 85 void setupHeaderData(); 86 void setupIcons(); 87 88 static QIcon generateIconForScore(double score); 89 90 private: 91 MessagesModelCache* m_cache; 92 MessageHighlighter m_messageHighlighter; 93 QString m_customDateFormat; 94 RootItem* m_selectedItem; 95 QList<QString> m_headerData; 96 QList<QString> m_tooltipData; 97 QFont m_normalFont; 98 QFont m_boldFont; 99 QFont m_normalStrikedFont; 100 QFont m_boldStrikedFont; 101 QIcon m_favoriteIcon; 102 QIcon m_readIcon; 103 QIcon m_unreadIcon; 104 QIcon m_enclosuresIcon; 105 QList<QIcon> m_scoreIcons; 106 int m_itemHeight; 107 bool m_displayFeedIcons; 108 }; 109 110 Q_DECLARE_METATYPE(MessagesModel::MessageHighlighter) 111 112 #endif // MESSAGESMODEL_H 113