#ifndef RESOURCEEXPLORER_H #define RESOURCEEXPLORER_H #include #include #include 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 children; bool isDir() const; bool isCompressed() const; }; using data = const unsigned char*; void rebuild(); std::vector readMemoryMaps(); std::vector 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