QtDebugger/include/resourceexplorer.h

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