70 lines
1.3 KiB
C++
70 lines
1.3 KiB
C++
#ifndef RESOURCEEXPLORER_H
|
|
#define RESOURCEEXPLORER_H
|
|
|
|
#include <QMainWindow>
|
|
|
|
#include <QString>
|
|
#include <QStringRef>
|
|
|
|
namespace Ui {
|
|
class ResourceExplorer;
|
|
}
|
|
|
|
class QTreeWidgetItem;
|
|
|
|
class ResourceExplorer : public QMainWindow {
|
|
Q_OBJECT
|
|
|
|
public:
|
|
explicit ResourceExplorer(QWidget *parent = nullptr);
|
|
~ResourceExplorer();
|
|
|
|
private slots:
|
|
void extractButtonPressed();
|
|
void itemSelected(QTreeWidgetItem*);
|
|
|
|
private:
|
|
struct MemoryMap {
|
|
const unsigned char* begin;
|
|
const unsigned char* end;
|
|
QString path;
|
|
};
|
|
|
|
enum ResourceFlags {
|
|
NoFlags = 0,
|
|
Compressed = 1,
|
|
Directory = 2
|
|
};
|
|
|
|
struct ResourceNode {
|
|
~ResourceNode();
|
|
|
|
QString name;
|
|
ResourceFlags flags;
|
|
uint32_t size;
|
|
const unsigned char* start;
|
|
uint16_t country;
|
|
uint16_t language;
|
|
uint64_t lastModTimeMS;
|
|
uint32_t hash;
|
|
std::vector<ResourceNode*> children;
|
|
|
|
bool isDir() const;
|
|
bool isCompressed() const;
|
|
uint64_t getByteSize() const;
|
|
};
|
|
|
|
using data = const unsigned char*;
|
|
|
|
void rebuild();
|
|
std::vector<MemoryMap> readMemoryMaps();
|
|
std::vector<ResourceExplorer::ResourceNode*> parseResource(int version, data library, data names, data data );
|
|
|
|
QTreeWidgetItem* resourceNodeToItem(ResourceNode* node, const QString& path );
|
|
static QString approxFileSize( uint64_t size );
|
|
|
|
Ui::ResourceExplorer *ui;
|
|
};
|
|
|
|
#endif // RESOURCEEXPLORER_H
|