Mercurial > minori
diff include/gui/pages/anime_list.h @ 9:5c0397762b53
INCOMPLETE: megacommit :)
author | Paper <mrpapersonic@gmail.com> |
---|---|
date | Sun, 10 Sep 2023 03:59:16 -0400 |
parents | src/include/anime_list.h@07a9095eaeed |
children | 4b198a111713 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/include/gui/pages/anime_list.h Sun Sep 10 03:59:16 2023 -0400 @@ -0,0 +1,92 @@ +#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, + AL_ID, /* Note: This is only used in Qt::UserRole to make my life easier */ + + NB_COLUMNS + }; + + AnimeListWidgetModel(QWidget* parent); + ~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); +}; + +/* todo: rename these to "page" or something more + sensible than "widget" */ +class AnimeListWidget : public QWidget { + Q_OBJECT + + public: + AnimeListWidget(QWidget* parent); + void UpdateAnimeList(); + 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; + + 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 \ No newline at end of file