view include/gui/pages/search.h @ 261:3ec7804abf17

include: make header guards more sane The C++ standard[1] says: Each identifier that contains a double underscore __ or begins with an underscore followed by an uppercase letter is reserved to the implementation for any use. [1]: https://timsong-cpp.github.io/cppwp/n4659/lex.name#3.1
author Paper <paper@paper.us.eu.org>
date Wed, 03 Apr 2024 20:04:28 -0400
parents 862d0d8619f6
children f31305b9f60a
line wrap: on
line source

#ifndef MINORI_GUI_PAGES_SEARCH_H_
#define MINORI_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 // MINORI_GUI_PAGES_SEARCH_H_