quake-tools/source/quam/archive.h

98 lines
1.9 KiB
C
Raw Normal View History

2019-10-03 12:17:16 -07:00
#pragma once
#include "common.h"
2019-10-04 10:37:34 -07:00
#include <QAbstractItemModel>
2019-10-03 12:17:16 -07:00
#include <QByteArray>
2019-10-04 10:37:34 -07:00
#include <QObject>
struct ArcDir;
2019-10-03 12:17:16 -07:00
namespace Arc {
Q_NAMESPACE
enum Column {
ColumnSize,
ColumnName,
ColumnMax,
};
Q_ENUM_NS(Column)
enum FileType {
FileNormal,
FileLabel,
FilePalette = 64,
FileTexture,
FilePicture,
FileSound,
FileMipTexture,
};
Q_ENUM_NS(FileType)
2019-10-04 10:37:34 -07:00
enum ArchiveType {
ArcNone,
ArcPack,
ArcWad2,
};
Q_ENUM_NS(ArchiveType)
2019-10-03 12:17:16 -07:00
Arc::FileType getFileType(int n);
2019-10-04 10:37:34 -07:00
Arc::ArchiveType getArchiveType(std::istream &st) noexcept;
ArcDir readArchive(std::istream &st);
2019-10-03 12:17:16 -07:00
}
struct ArcNode;
struct ArcDir : public std::vector<ArcNode> {
using std::vector<ArcNode>::vector;
2019-10-03 14:06:05 -07:00
ArcDir::iterator findNode(std::string const &name);
2019-10-03 12:17:16 -07:00
};
Q_DECLARE_METATYPE(ArcDir)
struct ArcFile : public QByteArray {
using QByteArray::QByteArray;
};
Q_DECLARE_METATYPE(ArcFile)
struct ArcNode : public std::variant<ArcDir, ArcFile> {
using super_type = std::variant<ArcDir, ArcFile>;
ArcNode() = default;
2019-10-03 14:06:05 -07:00
ArcNode(ArcDir &&f, std::string &&n, Arc::FileType t = Arc::FileNormal);
ArcNode(ArcFile &&f, std::string &&n, Arc::FileType t = Arc::FileNormal);
2019-10-03 12:17:16 -07:00
ArcNode(ArcNode const &) = default;
ArcNode(ArcNode &&) = default;
std::string name;
Arc::FileType type;
};
Q_DECLARE_METATYPE(ArcNode)
2019-10-04 10:37:34 -07:00
class ArcModel : public QAbstractItemModel {
Q_OBJECT
public:
explicit ArcModel(ArcDir const *root, QObject *parent);
~ArcModel();
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 &) const override;
int rowCount(QModelIndex const &) const override;
int columnCount(QModelIndex const &) const override;
private:
ArcDir const *const m_root;
};
2019-10-03 12:17:16 -07:00
// EOF