quake-tools/source/quam/pak.h

84 lines
1.7 KiB
C
Raw Normal View History

2019-09-27 00:09:09 -07:00
#pragma once
2019-09-28 22:29:31 -07:00
#include <QAbstractItemModel>
#include <QSortFilterProxyModel>
namespace Pak {
Q_NAMESPACE
enum class Column {
Size,
Name,
};
Q_ENUM_NS(Column)
}
2019-09-27 23:09:51 -07:00
struct PakNode;
2019-09-28 22:29:31 -07:00
struct PakDir : public std::vector<PakNode> {
using std::vector<PakNode>::vector;
2019-09-27 23:09:51 -07:00
};
2019-09-28 01:17:55 -07:00
Q_DECLARE_METATYPE(PakDir)
2019-09-27 23:09:51 -07:00
struct PakFile : public QByteArray {
using QByteArray::QByteArray;
};
2019-09-28 01:17:55 -07:00
Q_DECLARE_METATYPE(PakFile)
2019-09-27 23:09:51 -07:00
struct PakNode : public std::variant<PakDir, PakFile> {
2019-09-28 22:29:31 -07:00
PakNode() = default;
template<typename T>
constexpr PakNode(T &&t, std::string &&n) :
variant(std::move(t)),
name(std::move(n)) {
}
PakNode(PakNode const &) = default;
PakNode(PakNode &&) = default;
std::string name;
2019-09-27 00:09:09 -07:00
};
2019-09-28 01:17:55 -07:00
Q_DECLARE_METATYPE(PakNode)
2019-09-27 00:09:09 -07:00
class PakDirRoot : public QObject, public PakDir {
Q_OBJECT
public:
explicit PakDirRoot(PakDir &&root, QObject *parent);
virtual ~PakDirRoot();
};
2019-09-28 22:29:31 -07:00
class PakDirModel : public QAbstractItemModel {
Q_OBJECT
public:
explicit PakDirModel(PakDir const *root, QObject *parent);
virtual ~PakDirModel();
QVariant data(QModelIndex const &index, int role) const override;
Qt::ItemFlags flags(QModelIndex const &index) const override;
QVariant headerData(int section, Qt::Orientation orientation, int role)
const override;
QModelIndex index(int row, int col, QModelIndex const &parent)
const override;
QModelIndex parent(QModelIndex const &index) const override;
int rowCount(QModelIndex const &parent) const override;
int columnCount(QModelIndex const &parent) const override;
private:
PakDir const *const m_root;
};
class PakDirModelSorter : public QSortFilterProxyModel {
Q_OBJECT
public:
using QSortFilterProxyModel::QSortFilterProxyModel;
virtual ~PakDirModelSorter();
};
2019-09-27 23:09:51 -07:00
PakDir readPak(std::istream &st);
2019-09-27 00:09:09 -07:00
// EOF