Mercurial > minori
view include/gui/pages/anime_list.h @ 24:b949a56b51dd
ci/win32: install xz
why isn't this listed in the dependencies?? lol
author | Paper <mrpapersonic@gmail.com> |
---|---|
date | Tue, 19 Sep 2023 23:55:30 -0400 |
parents | cde8f67a7c7d |
children | 3d2decf093bb |
line wrap: on
line source
#ifndef __gui__pages__anime_list_h #define __gui__pages__anime_list_h #include "core/anime.h" #include <QAbstractListModel> #include <QSortFilterProxyModel> #include <QStyledItemDelegate> #include <QTreeView> #include <QWidget> #include <vector> 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; }; 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, Anime::ListStatus _status); ~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; void UpdateAnime(int id); void RefreshList(); Anime::Anime* GetAnimeFromIndex(QModelIndex index); private: Anime::ListStatus status; std::vector<Anime::Anime> list; }; /* todo: rename these to "page" or something more sensible than "widget" */ class AnimeListWidget : public QWidget { Q_OBJECT public: AnimeListWidget(QWidget* parent); void Refresh(); void Reset(); 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; void RefreshList(); void RefreshTabs(); private slots: void DisplayColumnHeaderMenu(); void DisplayListMenu(); void ItemDoubleClicked(); void SetColumnDefaults(); int VisibleColumnsCount() const; private: QTabBar* tab_bar; QTreeView* tree_view; QRect panelRect; AnimeListWidgetSortFilter* sort_models[5]; }; #endif // __gui__pages__anime_list_h