QtDebugger/include/resourceexplorer.h

70 lines
1.3 KiB
C
Raw Normal View History

2023-01-08 22:13:26 +01:00
#ifndef RESOURCEEXPLORER_H
#define RESOURCEEXPLORER_H
#include <QMainWindow>
2023-01-11 22:35:19 +01:00
#include <QString>
#include <QStringRef>
2023-01-08 22:13:26 +01:00
namespace Ui {
class ResourceExplorer;
}
2023-01-12 18:11:29 +01:00
class QTreeWidgetItem;
2023-01-08 22:13:26 +01:00
class ResourceExplorer : public QMainWindow {
Q_OBJECT
public:
explicit ResourceExplorer(QWidget *parent = nullptr);
~ResourceExplorer();
2023-01-12 19:11:22 +01:00
private slots:
void extractButtonPressed();
void itemSelected(QTreeWidgetItem*);
2023-01-08 22:13:26 +01:00
private:
2023-01-11 22:35:19 +01:00
struct MemoryMap {
const unsigned char* begin;
const unsigned char* end;
QString path;
};
enum ResourceFlags {
NoFlags = 0,
Compressed = 1,
Directory = 2
};
struct ResourceNode {
2023-01-12 18:11:29 +01:00
~ResourceNode();
2023-01-11 22:35:19 +01:00
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;
2023-01-12 18:11:29 +01:00
bool isDir() const;
2023-01-12 19:11:22 +01:00
bool isCompressed() const;
uint64_t getByteSize() const;
2023-01-11 22:35:19 +01:00
};
using data = const unsigned char*;
void rebuild();
std::vector<MemoryMap> readMemoryMaps();
std::vector<ResourceExplorer::ResourceNode*> parseResource(int version, data library, data names, data data );
2023-01-12 18:11:29 +01:00
QTreeWidgetItem* resourceNodeToItem(ResourceNode* node, const QString& path );
static QString approxFileSize( uint64_t size );
2023-01-11 22:35:19 +01:00
2023-01-08 22:13:26 +01:00
Ui::ResourceExplorer *ui;
};
#endif // RESOURCEEXPLORER_H