Mercurial > minori
diff src/include/anime.h @ 2:23d0d9319a00
Update
Also converted everything to LF from CRLF
author | Paper <mrpapersonic@gmail.com> |
---|---|
date | Sat, 12 Aug 2023 03:16:26 -0400 |
parents | 1ae666fdf9e2 |
children | 5af270662505 |
line wrap: on
line diff
--- a/src/include/anime.h Tue Aug 08 19:49:15 2023 -0400 +++ b/src/include/anime.h Sat Aug 12 03:16:26 2023 -0400 @@ -1,168 +1,175 @@ -#ifndef __anime_h -#define __anime_h -#include <vector> -#include <chrono> -#include <map> -#include "window.h" - -enum AnimeWatchingStatus { - CURRENT, - PLANNING, - COMPLETED, - DROPPED, - PAUSED, - REPEATING -}; - -enum AnimeAiringStatus { - FINISHED, - RELEASING, - NOT_YET_RELEASED, - CANCELLED, - HIATUS -}; - -enum AnimeFormat { - TV, - TV_SHORT, - MOVIE, - SPECIAL, - OVA, - ONA, - MUSIC, - MANGA, - NOVEL, - ONE_SHOT -}; - -enum AnimeSeason { - WINTER, - SPRING, - SUMMER, - FALL -}; - -class Anime { - public: - Anime(); - Anime(const Anime& a); - /* List-specific data */ - enum AnimeWatchingStatus status; - int progress; - int score; - std::chrono::year_month_day started; - std::chrono::year_month_day completed; - std::wstring notes; - - /* Useful information */ - int id; - std::wstring title; - int episodes; - enum AnimeAiringStatus airing; - std::chrono::year_month_day air_date; - std::vector<std::string> genres; - std::vector<std::string> producers; - enum AnimeFormat type; - enum AnimeSeason season; - int audience_score; - std::wstring synopsis; - int duration; -}; - -/* This is a simple wrapper on a vector that provides - methods to make it easier to search the list. */ -class AnimeList { - public: - AnimeList(); - AnimeList(const AnimeList& l); - ~AnimeList(); - void Add(Anime& anime); - void Insert(size_t pos, Anime& anime); - void Delete(size_t index); - void Clear(); - std::vector<Anime>::iterator begin() noexcept; - std::vector<Anime>::iterator end() noexcept; - std::vector<Anime>::const_iterator cbegin() noexcept; - std::vector<Anime>::const_iterator cend() noexcept; - size_t Size() const; - Anime* AnimeById(int id); - bool AnimeInList(int id); - Anime& operator[](size_t index); - const Anime& operator[](size_t index) const; - std::wstring name; - - private: - std::vector<Anime> anime_list; - std::map<int, Anime*> anime_id_to_anime; -}; - -class AnimeListWidgetModel : public QAbstractListModel { - Q_OBJECT - public: - enum columns { - AL_TITLE, - AL_PROGRESS, - 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; - //QVariant headerData(const int section, const Qt::Orientation orientation, const int role) const; - int rowCount(const QModelIndex& parent = QModelIndex()) const; - int columnCount(const QModelIndex& parent = QModelIndex()) const; - QVariant data(const QModelIndex& index, int role) const; - QVariant headerData(const int section, const Qt::Orientation orientation, const int role) const; - Anime* GetAnimeFromIndex(const QModelIndex& index); - void Update(); - - private: - //void AddAnime(AnimeList& list); - AnimeList& list; -}; - -class AnimeListWidget : public QTreeView { - Q_OBJECT - public: - AnimeListWidget(QWidget* parent, AnimeList* alist); - - private slots: - void DisplayColumnHeaderMenu(); - void DisplayListMenu(); - void ItemDoubleClicked(); - void SetColumnDefaults(); - int VisibleColumnsCount() const; - - private: - AnimeListWidgetModel* model = nullptr; -}; - -class AnimeListPage : public QTabWidget { - public: - AnimeListPage(QWidget* parent = nullptr); - void SyncAnimeList(); - void FreeAnimeList(); - int GetTotalAnimeAmount(); - int GetTotalEpisodeAmount(); - int GetTotalWatchedAmount(); - int GetTotalPlannedAmount(); - double GetAverageScore(); - double GetScoreDeviation(); - - private: - std::vector<AnimeList> anime_lists; -}; - -extern std::map<enum AnimeSeason, std::string> AnimeSeasonToStringMap; -extern std::map<enum AnimeFormat, std::string> AnimeFormatToStringMap; -extern std::map<enum AnimeWatchingStatus, std::string> AnimeWatchingToStringMap; -extern std::map<enum AnimeAiringStatus, std::string> AnimeAiringToStringMap; +#ifndef __anime_h +#define __anime_h +#include <vector> +#include <map> +#include "date.h" +#include "window.h" + +enum AnimeWatchingStatus { + CURRENT, + PLANNING, + COMPLETED, + DROPPED, + PAUSED, + REPEATING +}; + +enum AnimeAiringStatus { + FINISHED, + RELEASING, + NOT_YET_RELEASED, + CANCELLED, + HIATUS +}; + +enum AnimeFormat { + TV, + TV_SHORT, + MOVIE, + SPECIAL, + OVA, + ONA, + MUSIC, + MANGA, + NOVEL, + ONE_SHOT +}; + +enum AnimeSeason { + UNKNOWN, + WINTER, + SPRING, + SUMMER, + FALL +}; + +class Anime { + public: + Anime(); + Anime(const Anime& a); + /* List-specific data */ + enum AnimeWatchingStatus status; + int progress; + int score; + Date started; + Date completed; + int updated; /* this should be 64-bit */ + std::wstring notes; + + /* Useful information */ + int id; + struct { + std::wstring romaji; + std::wstring english; + std::wstring native; + } title; + int episodes; + enum AnimeAiringStatus airing; + Date air_date; + std::vector<std::string> genres; + std::vector<std::string> producers; + enum AnimeFormat type; + enum AnimeSeason season; + int audience_score; + std::wstring synopsis; + int duration; +}; + +/* This is a simple wrapper on a vector that provides + methods to make it easier to search the list. */ +class AnimeList { + public: + AnimeList(); + AnimeList(const AnimeList& l); + ~AnimeList(); + void Add(Anime& anime); + void Insert(size_t pos, Anime& anime); + void Delete(size_t index); + void Clear(); + std::vector<Anime>::iterator begin() noexcept; + std::vector<Anime>::iterator end() noexcept; + std::vector<Anime>::const_iterator cbegin() noexcept; + std::vector<Anime>::const_iterator cend() noexcept; + size_t Size() const; + Anime* AnimeById(int id); + int GetAnimeIndex(Anime& anime) const; + bool AnimeInList(int id); + Anime& operator[](size_t index); + const Anime& operator[](size_t index) const; + std::wstring name; + + private: + std::vector<Anime> anime_list; + std::map<int, Anime*> anime_id_to_anime; +}; + +class AnimeListWidgetModel : public QAbstractListModel { + Q_OBJECT + public: + enum columns { + AL_TITLE, + AL_PROGRESS, + 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; + //QVariant headerData(const int section, const Qt::Orientation orientation, const int role) const; + int rowCount(const QModelIndex& parent = QModelIndex()) const; + int columnCount(const QModelIndex& parent = QModelIndex()) const; + QVariant data(const QModelIndex& index, int role) const; + QVariant headerData(const int section, const Qt::Orientation orientation, const int role) const; + Anime* GetAnimeFromIndex(const QModelIndex& index); + void UpdateAnime(Anime& anime); + + private: + //void AddAnime(AnimeList& list); + AnimeList& list; +}; + +class AnimeListWidget : public QTreeView { + Q_OBJECT + public: + AnimeListWidget(QWidget* parent, AnimeList* alist); + + private slots: + void DisplayColumnHeaderMenu(); + void DisplayListMenu(); + void ItemDoubleClicked(); + void SetColumnDefaults(); + int VisibleColumnsCount() const; + + private: + AnimeListWidgetModel* model = nullptr; +}; + +class AnimeListPage : public QTabWidget { + public: + AnimeListPage(QWidget* parent = nullptr); + void SyncAnimeList(); + void FreeAnimeList(); + int GetTotalAnimeAmount(); + int GetTotalEpisodeAmount(); + int GetTotalWatchedAmount(); + int GetTotalPlannedAmount(); + double GetAverageScore(); + double GetScoreDeviation(); + + private: + std::vector<AnimeList> anime_lists; +}; + +extern std::map<enum AnimeSeason, std::string> AnimeSeasonToStringMap; +extern std::map<enum AnimeFormat, std::string> AnimeFormatToStringMap; +extern std::map<enum AnimeWatchingStatus, std::string> AnimeWatchingToStringMap; +extern std::map<enum AnimeAiringStatus, std::string> AnimeAiringToStringMap; #endif // __anime_h \ No newline at end of file