view include/gui/pages/search.h @ 258:862d0d8619f6

*: HUUUGE changes animia has been renamed to animone, so instead of thinking of a health condition, you think of a beautiful flower :) I've also edited some of the code for animone, but I have no idea if it even works or not because I don't have a mac or windows machine lying around. whoops! ... anyway, all of the changes divergent from Anisthesia are now licensed under BSD. it's possible that I could even rewrite most of the code to where I don't even have to keep the MIT license, but that's thinking too far into the future I've been slacking off on implementing the anime seasons page, mostly out of laziness. I think I'd have to create another db file specifically for the seasons anyway, this code is being pushed *primarily* because the hard drive it's on is failing! yay :)
author Paper <paper@paper.us.eu.org>
date Mon, 01 Apr 2024 02:43:44 -0400
parents c130f47f6f48
children 3ec7804abf17
line wrap: on
line source

#ifndef __gui__pages__search_h
#define __gui__pages__search_h

#include "core/anime.h"

#include <QAbstractListModel>
#include <QFrame>
#include <QItemSelection>
#include <QSortFilterProxyModel>

class QTreeView;

class SearchPageListSortFilter final : public QSortFilterProxyModel {
	Q_OBJECT

public:
	SearchPageListSortFilter(QObject* parent = nullptr);

protected:
	bool lessThan(const QModelIndex& l, const QModelIndex& r) const override;
};

class SearchPageListModel final : public QAbstractListModel {
	Q_OBJECT

public:
	enum columns {
		SR_TITLE,
		SR_TYPE,
		SR_EPISODES,
		SR_SCORE,
		SR_SEASON,

		NB_COLUMNS
	};

	SearchPageListModel(QObject* parent);
	~SearchPageListModel() 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;
	Qt::ItemFlags flags(const QModelIndex& index) const override;

	void ParseSearch(const std::vector<int>& ids);
	Anime::Anime* GetAnimeFromIndex(const QModelIndex& index) const;

private:
	std::vector<int> ids;
};

class SearchPage final : public QFrame {
	Q_OBJECT

public:
	SearchPage(QWidget* parent = nullptr);
	void Search(const std::string& search);
	void DisplayListMenu();
	void ItemDoubleClicked();

private:
	SearchPageListModel* model = nullptr;
	SearchPageListSortFilter* sort_model = nullptr;
	QTreeView* treeview = nullptr;
};
#endif // __gui__pages__search_h