Mercurial > minori
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/include/anime_list.h Thu Aug 24 23:11:38 2023 -0400 @@ -0,0 +1,109 @@ +#ifndef __anime_list_h +#define __anime_list_h +#include <vector> +#include <QStyledItemDelegate> +#include <QSortFilterProxyModel> +#include <QAbstractListModel> +#include <QTreeView> +#include <QWidget> +#include "anime.h" +#include "progress.h" + +class AnimeListWidgetDelegate : public QStyledItemDelegate { + Q_OBJECT + + public: + explicit AnimeListWidgetDelegate(QObject *parent); + + QWidget *createEditor(QWidget *, const QStyleOptionViewItem &, const QModelIndex &) const override; + void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; + + protected: + AnimeProgressBar progress_bar; +}; + +class AnimeListWidgetSortFilter : public QSortFilterProxyModel +{ + Q_OBJECT + + public: + AnimeListWidgetSortFilter(QObject *parent = nullptr); + + protected: + bool lessThan(const QModelIndex &l, const QModelIndex &r) const override; +}; + +class AnimeListWidgetModel : public QAbstractListModel { + Q_OBJECT + + public: + enum columns { + AL_TITLE, + AL_PROGRESS, + AL_EPISODES, + AL_SCORE, + AL_AVG_SCORE, + AL_TYPE, + AL_SEASON, + AL_STARTED, + AL_COMPLETED, + AL_UPDATED, + AL_NOTES, + + NB_COLUMNS + }; + + AnimeListWidgetModel(QWidget* parent, AnimeList* alist); + ~AnimeListWidgetModel() override = default; + int rowCount(const QModelIndex& parent = QModelIndex()) const override; + int columnCount(const QModelIndex& parent = QModelIndex()) const override; + QVariant data(const QModelIndex& index, int role) const override; + QVariant headerData(const int section, const Qt::Orientation orientation, const int role) const override; + Anime* GetAnimeFromIndex(const QModelIndex& index); + void UpdateAnime(Anime& anime); + void Update(const AnimeList& new_list); + + private: + //void AddAnime(AnimeList& list); + AnimeList& list; +}; + +/* todo: rename these to "page" or something more + sensible than "widget" */ +class AnimeListWidget : public QWidget { + Q_OBJECT + + public: + AnimeListWidget(QWidget* parent); + void SyncAnimeList(); + void FreeAnimeList(); + int GetTotalAnimeAmount(); + int GetTotalEpisodeAmount(); + int GetTotalWatchedAmount(); + int GetTotalPlannedAmount(); + double GetAverageScore(); + double GetScoreDeviation(); + + protected: + void paintEvent(QPaintEvent*) override; + void InitStyle(QStyleOptionTabWidgetFrame *option) const; + void InitBasicStyle(QStyleOptionTabWidgetFrame *option) const; + void SetupLayout(); + void showEvent(QShowEvent*) override; + void resizeEvent(QResizeEvent* e) override; + + private slots: + void DisplayColumnHeaderMenu(); + void DisplayListMenu(); + void ItemDoubleClicked(); + void SetColumnDefaults(); + int VisibleColumnsCount() const; + + private: + QTabBar* tab_bar; + QTreeView* tree_view; + QRect panelRect; + std::vector<AnimeListWidgetSortFilter*> sort_models; + std::vector<AnimeList> anime_lists; +}; +#endif // __anime_list_h \ No newline at end of file