Mercurial > minori
comparison src/include/anime_list.h @ 7:07a9095eaeed
Update
Refactored some code, moved some around
| author | Paper <mrpapersonic@gmail.com> |
|---|---|
| date | Thu, 24 Aug 2023 23:11:38 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 6:1d82f6e04d7d | 7:07a9095eaeed |
|---|---|
| 1 #ifndef __anime_list_h | |
| 2 #define __anime_list_h | |
| 3 #include <vector> | |
| 4 #include <QStyledItemDelegate> | |
| 5 #include <QSortFilterProxyModel> | |
| 6 #include <QAbstractListModel> | |
| 7 #include <QTreeView> | |
| 8 #include <QWidget> | |
| 9 #include "anime.h" | |
| 10 #include "progress.h" | |
| 11 | |
| 12 class AnimeListWidgetDelegate : public QStyledItemDelegate { | |
| 13 Q_OBJECT | |
| 14 | |
| 15 public: | |
| 16 explicit AnimeListWidgetDelegate(QObject *parent); | |
| 17 | |
| 18 QWidget *createEditor(QWidget *, const QStyleOptionViewItem &, const QModelIndex &) const override; | |
| 19 void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; | |
| 20 | |
| 21 protected: | |
| 22 AnimeProgressBar progress_bar; | |
| 23 }; | |
| 24 | |
| 25 class AnimeListWidgetSortFilter : public QSortFilterProxyModel | |
| 26 { | |
| 27 Q_OBJECT | |
| 28 | |
| 29 public: | |
| 30 AnimeListWidgetSortFilter(QObject *parent = nullptr); | |
| 31 | |
| 32 protected: | |
| 33 bool lessThan(const QModelIndex &l, const QModelIndex &r) const override; | |
| 34 }; | |
| 35 | |
| 36 class AnimeListWidgetModel : public QAbstractListModel { | |
| 37 Q_OBJECT | |
| 38 | |
| 39 public: | |
| 40 enum columns { | |
| 41 AL_TITLE, | |
| 42 AL_PROGRESS, | |
| 43 AL_EPISODES, | |
| 44 AL_SCORE, | |
| 45 AL_AVG_SCORE, | |
| 46 AL_TYPE, | |
| 47 AL_SEASON, | |
| 48 AL_STARTED, | |
| 49 AL_COMPLETED, | |
| 50 AL_UPDATED, | |
| 51 AL_NOTES, | |
| 52 | |
| 53 NB_COLUMNS | |
| 54 }; | |
| 55 | |
| 56 AnimeListWidgetModel(QWidget* parent, AnimeList* alist); | |
| 57 ~AnimeListWidgetModel() override = default; | |
| 58 int rowCount(const QModelIndex& parent = QModelIndex()) const override; | |
| 59 int columnCount(const QModelIndex& parent = QModelIndex()) const override; | |
| 60 QVariant data(const QModelIndex& index, int role) const override; | |
| 61 QVariant headerData(const int section, const Qt::Orientation orientation, const int role) const override; | |
| 62 Anime* GetAnimeFromIndex(const QModelIndex& index); | |
| 63 void UpdateAnime(Anime& anime); | |
| 64 void Update(const AnimeList& new_list); | |
| 65 | |
| 66 private: | |
| 67 //void AddAnime(AnimeList& list); | |
| 68 AnimeList& list; | |
| 69 }; | |
| 70 | |
| 71 /* todo: rename these to "page" or something more | |
| 72 sensible than "widget" */ | |
| 73 class AnimeListWidget : public QWidget { | |
| 74 Q_OBJECT | |
| 75 | |
| 76 public: | |
| 77 AnimeListWidget(QWidget* parent); | |
| 78 void SyncAnimeList(); | |
| 79 void FreeAnimeList(); | |
| 80 int GetTotalAnimeAmount(); | |
| 81 int GetTotalEpisodeAmount(); | |
| 82 int GetTotalWatchedAmount(); | |
| 83 int GetTotalPlannedAmount(); | |
| 84 double GetAverageScore(); | |
| 85 double GetScoreDeviation(); | |
| 86 | |
| 87 protected: | |
| 88 void paintEvent(QPaintEvent*) override; | |
| 89 void InitStyle(QStyleOptionTabWidgetFrame *option) const; | |
| 90 void InitBasicStyle(QStyleOptionTabWidgetFrame *option) const; | |
| 91 void SetupLayout(); | |
| 92 void showEvent(QShowEvent*) override; | |
| 93 void resizeEvent(QResizeEvent* e) override; | |
| 94 | |
| 95 private slots: | |
| 96 void DisplayColumnHeaderMenu(); | |
| 97 void DisplayListMenu(); | |
| 98 void ItemDoubleClicked(); | |
| 99 void SetColumnDefaults(); | |
| 100 int VisibleColumnsCount() const; | |
| 101 | |
| 102 private: | |
| 103 QTabBar* tab_bar; | |
| 104 QTreeView* tree_view; | |
| 105 QRect panelRect; | |
| 106 std::vector<AnimeListWidgetSortFilter*> sort_models; | |
| 107 std::vector<AnimeList> anime_lists; | |
| 108 }; | |
| 109 #endif // __anime_list_h |
