Mercurial > minori
annotate include/gui/pages/anime_list.h @ 269:3efac0541151
chore: merge
author | Paper <paper@paper.us.eu.org> |
---|---|
date | Fri, 12 Apr 2024 05:23:45 -0400 |
parents | 3ec7804abf17 |
children | f31305b9f60a |
rev | line source |
---|---|
261
3ec7804abf17
include: make header guards more sane
Paper <paper@paper.us.eu.org>
parents:
258
diff
changeset
|
1 #ifndef MINORI_GUI_PAGES_ANIME_LIST_H_ |
3ec7804abf17
include: make header guards more sane
Paper <paper@paper.us.eu.org>
parents:
258
diff
changeset
|
2 #define MINORI_GUI_PAGES_ANIME_LIST_H_ |
85 | 3 |
10 | 4 #include "core/anime.h" |
5 #include <QAbstractListModel> | |
6 #include <QSortFilterProxyModel> | |
7 #include <QStyledItemDelegate> | |
8 #include <QWidget> | |
9 #include <vector> | |
10 | |
85 | 11 class QTreeView; |
12 class QTabBar; | |
13 | |
95
8043152ef9d4
include: set classes as final where appropriate
Paper <mrpapersonic@gmail.com>
parents:
85
diff
changeset
|
14 class AnimeListPageSortFilter final : public QSortFilterProxyModel { |
258 | 15 Q_OBJECT |
10 | 16 |
258 | 17 public: |
18 AnimeListPageSortFilter(QObject* parent = nullptr); | |
10 | 19 |
258 | 20 protected: |
21 bool lessThan(const QModelIndex& l, const QModelIndex& r) const override; | |
10 | 22 }; |
23 | |
95
8043152ef9d4
include: set classes as final where appropriate
Paper <mrpapersonic@gmail.com>
parents:
85
diff
changeset
|
24 class AnimeListPageModel final : public QAbstractListModel { |
258 | 25 Q_OBJECT |
10 | 26 |
258 | 27 public: |
28 enum columns { | |
29 AL_TITLE, | |
30 AL_PROGRESS, | |
31 AL_EPISODES, | |
32 AL_SCORE, | |
33 AL_AVG_SCORE, | |
34 AL_TYPE, | |
35 AL_SEASON, | |
36 AL_STARTED, | |
37 AL_COMPLETED, | |
38 AL_UPDATED, | |
39 AL_NOTES, | |
10 | 40 |
258 | 41 NB_COLUMNS |
42 }; | |
10 | 43 |
258 | 44 AnimeListPageModel(QObject* parent, Anime::ListStatus _status); |
45 ~AnimeListPageModel() override = default; | |
46 int rowCount(const QModelIndex& parent = QModelIndex()) const override; | |
47 int columnCount(const QModelIndex& parent = QModelIndex()) const override; | |
48 QVariant data(const QModelIndex& index, int role) const override; | |
49 QVariant headerData(const int section, const Qt::Orientation orientation, const int role) const override; | |
50 void RefreshList(); | |
51 Anime::Anime* GetAnimeFromIndex(QModelIndex index); | |
10 | 52 |
258 | 53 private: |
54 Anime::ListStatus status; | |
55 std::vector<Anime::Anime> list; | |
10 | 56 }; |
57 | |
58 /* todo: rename these to "page" or something more | |
59 sensible than "widget" */ | |
95
8043152ef9d4
include: set classes as final where appropriate
Paper <mrpapersonic@gmail.com>
parents:
85
diff
changeset
|
60 class AnimeListPage final : public QWidget { |
258 | 61 Q_OBJECT |
10 | 62 |
258 | 63 public: |
64 AnimeListPage(QWidget* parent); | |
65 void Refresh(); | |
10 | 66 |
258 | 67 protected: |
68 void paintEvent(QPaintEvent*) override; | |
69 void InitStyle(QStyleOptionTabWidgetFrame* option) const; | |
70 void InitBasicStyle(QStyleOptionTabWidgetFrame* option) const; | |
71 void SetupLayout(); | |
72 void showEvent(QShowEvent*) override; | |
73 void resizeEvent(QResizeEvent* e) override; | |
74 void RefreshList(); | |
75 void RefreshTabs(); | |
76 void UpdateAnime(int id); | |
77 void RemoveAnime(int id); | |
10 | 78 |
258 | 79 private slots: |
80 void DisplayColumnHeaderMenu(); | |
81 void DisplayListMenu(); | |
82 void ItemDoubleClicked(); | |
83 void SetColumnDefaults(); | |
84 int VisibleColumnsCount() const; | |
10 | 85 |
258 | 86 private: |
87 QTabBar* tab_bar; | |
88 QTreeView* tree_view; | |
89 QRect panelRect; | |
90 std::array<AnimeListPageSortFilter*, 5> sort_models; | |
10 | 91 }; |
85 | 92 |
261
3ec7804abf17
include: make header guards more sane
Paper <paper@paper.us.eu.org>
parents:
258
diff
changeset
|
93 #endif // MINORI_GUI_PAGES_ANIME_LIST_H_ |