10
+ − 1 #ifndef __gui__pages__anime_list_h
+ − 2 #define __gui__pages__anime_list_h
+ − 3 #include "core/anime.h"
+ − 4 #include <QAbstractListModel>
+ − 5 #include <QSortFilterProxyModel>
+ − 6 #include <QStyledItemDelegate>
+ − 7 #include <QTreeView>
+ − 8 #include <QWidget>
+ − 9 #include <vector>
+ − 10
64
+ − 11 class AnimeListPageDelegate : public QStyledItemDelegate {
63
+ − 12 Q_OBJECT
10
+ − 13
+ − 14 public:
64
+ − 15 explicit AnimeListPageDelegate(QObject* parent);
10
+ − 16
+ − 17 QWidget* createEditor(QWidget*, const QStyleOptionViewItem&, const QModelIndex&) const override;
+ − 18 void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override;
+ − 19 };
+ − 20
64
+ − 21 class AnimeListPageSortFilter : public QSortFilterProxyModel {
63
+ − 22 Q_OBJECT
10
+ − 23
+ − 24 public:
64
+ − 25 AnimeListPageSortFilter(QObject* parent = nullptr);
10
+ − 26
+ − 27 protected:
+ − 28 bool lessThan(const QModelIndex& l, const QModelIndex& r) const override;
+ − 29 };
+ − 30
64
+ − 31 class AnimeListPageModel : public QAbstractListModel {
63
+ − 32 Q_OBJECT
10
+ − 33
+ − 34 public:
+ − 35 enum columns {
+ − 36 AL_TITLE,
+ − 37 AL_PROGRESS,
+ − 38 AL_EPISODES,
+ − 39 AL_SCORE,
+ − 40 AL_AVG_SCORE,
+ − 41 AL_TYPE,
+ − 42 AL_SEASON,
+ − 43 AL_STARTED,
+ − 44 AL_COMPLETED,
+ − 45 AL_UPDATED,
+ − 46 AL_NOTES,
+ − 47
+ − 48 NB_COLUMNS
+ − 49 };
+ − 50
64
+ − 51 AnimeListPageModel(QWidget* parent, Anime::ListStatus _status);
+ − 52 ~AnimeListPageModel() override = default;
10
+ − 53 int rowCount(const QModelIndex& parent = QModelIndex()) const override;
+ − 54 int columnCount(const QModelIndex& parent = QModelIndex()) const override;
+ − 55 QVariant data(const QModelIndex& index, int role) const override;
+ − 56 QVariant headerData(const int section, const Qt::Orientation orientation, const int role) const override;
+ − 57 void UpdateAnime(int id);
+ − 58 void RefreshList();
+ − 59 Anime::Anime* GetAnimeFromIndex(QModelIndex index);
+ − 60
+ − 61 private:
+ − 62 Anime::ListStatus status;
+ − 63 std::vector<Anime::Anime> list;
+ − 64 };
+ − 65
+ − 66 /* todo: rename these to "page" or something more
+ − 67 sensible than "widget" */
64
+ − 68 class AnimeListPage : public QWidget {
63
+ − 69 Q_OBJECT
10
+ − 70
+ − 71 public:
64
+ − 72 AnimeListPage(QWidget* parent);
15
+ − 73 void Refresh();
10
+ − 74 void Reset();
+ − 75
+ − 76 protected:
+ − 77 void paintEvent(QPaintEvent*) override;
+ − 78 void InitStyle(QStyleOptionTabWidgetFrame* option) const;
+ − 79 void InitBasicStyle(QStyleOptionTabWidgetFrame* option) const;
+ − 80 void SetupLayout();
+ − 81 void showEvent(QShowEvent*) override;
+ − 82 void resizeEvent(QResizeEvent* e) override;
15
+ − 83 void RefreshList();
+ − 84 void RefreshTabs();
10
+ − 85
+ − 86 private slots:
+ − 87 void DisplayColumnHeaderMenu();
+ − 88 void DisplayListMenu();
+ − 89 void ItemDoubleClicked();
+ − 90 void SetColumnDefaults();
+ − 91 int VisibleColumnsCount() const;
+ − 92
+ − 93 private:
+ − 94 QTabBar* tab_bar;
+ − 95 QTreeView* tree_view;
+ − 96 QRect panelRect;
64
+ − 97 AnimeListPageSortFilter* sort_models[5];
10
+ − 98 };
9
+ − 99 #endif // __gui__pages__anime_list_h