|
| 1 | +#ifndef CDUMP_H |
| 2 | +#define CDUMP_H |
| 3 | + |
| 4 | +// Qx Includes |
| 5 | +#include <qx/io/qx-ioopreport.h> |
| 6 | + |
| 7 | +// Project Includes |
| 8 | +#include "command.h" |
| 9 | + |
| 10 | +class KTex; |
| 11 | + |
| 12 | +class QX_ERROR_TYPE(CDumpError, "CDumpError", 1214) |
| 13 | +{ |
| 14 | + friend class CDump; |
| 15 | +//-Class Enums------------------------------------------------------------- |
| 16 | +public: |
| 17 | + enum Type |
| 18 | + { |
| 19 | + NoError, |
| 20 | + InvalidInput, |
| 21 | + CantReadTex, |
| 22 | + TexEmpty, |
| 23 | + CantMakeDir |
| 24 | + }; |
| 25 | + |
| 26 | +//-Class Variables------------------------------------------------------------- |
| 27 | +private: |
| 28 | + static inline const QHash<Type, QString> ERR_STRINGS{ |
| 29 | + {NoError, u""_s}, |
| 30 | + {InvalidInput, u"The provided input TEX path is invalid."_s}, |
| 31 | + {CantReadTex, u"Failed to read TEX."_s}, |
| 32 | + {TexEmpty, u"The TEX contained no mip-maps."_s}, |
| 33 | + {CantMakeDir, u"Failed to create output directory."_s} |
| 34 | + }; |
| 35 | + |
| 36 | +//-Instance Variables------------------------------------------------------------- |
| 37 | +private: |
| 38 | + Type mType; |
| 39 | + QString mSpecific; |
| 40 | + QString mDetails; |
| 41 | + |
| 42 | +//-Constructor------------------------------------------------------------- |
| 43 | +private: |
| 44 | + CDumpError(Type t = NoError, const QString& s = {}, const QString& d = {}); |
| 45 | + |
| 46 | +//-Instance Functions------------------------------------------------------------- |
| 47 | +public: |
| 48 | + bool isValid() const; |
| 49 | + Type type() const; |
| 50 | + QString specific() const; |
| 51 | + |
| 52 | +private: |
| 53 | + Qx::Severity deriveSeverity() const override; |
| 54 | + quint32 deriveValue() const override; |
| 55 | + QString derivePrimary() const override; |
| 56 | + QString deriveSecondary() const override; |
| 57 | + QString deriveDetails() const override; |
| 58 | +}; |
| 59 | + |
| 60 | +class CDump : public Command |
| 61 | +{ |
| 62 | +//-Class Variables------------------------------------------------------------------------------------------------------ |
| 63 | +private: |
| 64 | + // Messages |
| 65 | + static inline const QString MSG_READ_TEX = u"Reading TEX..."_s; |
| 66 | + static inline const QString MSG_TEX_INFO = u"TEX Info:\n%1"_s; |
| 67 | + static inline const QString MSG_EXTRACT_IMAGE = u"Extracting primary TEX image..."_s; |
| 68 | + |
| 69 | + // Command line option strings |
| 70 | + static inline const QString CL_OPT_INPUT_S_NAME = u"i"_s; |
| 71 | + static inline const QString CL_OPT_INPUT_L_NAME = u"input"_s; |
| 72 | + static inline const QString CL_OPT_INPUT_DESC = u"TEX to dump."_s; |
| 73 | + |
| 74 | + static inline const QString CL_OPT_OUTPUT_S_NAME = u"o"_s; |
| 75 | + static inline const QString CL_OPT_OUTPUT_L_NAME = u"output"_s; |
| 76 | + static inline const QString CL_OPT_OUTPUT_DESC = u"Path to a directory for the resultant data. Defaults to the basename of the input."_s; |
| 77 | + |
| 78 | +protected: |
| 79 | + // Messages |
| 80 | + static inline const QString MSG_INPUT_VALIDATION = u"Validating input..."_s; |
| 81 | + static inline const QString MSG_SUCCESS = u"Successfully dumped TEX"_s; |
| 82 | + |
| 83 | + // Output |
| 84 | + static inline const QString META_OUTPUT_TEMPLATE = u"%1-meta.json"_s; |
| 85 | + static inline const QString DATA_OUTPUT_TEMPLATE = u"%1-data.bin"_s; |
| 86 | + |
| 87 | + // Command line options |
| 88 | + static inline const QCommandLineOption CL_OPTION_INPUT{{CL_OPT_INPUT_S_NAME, CL_OPT_INPUT_L_NAME}, CL_OPT_INPUT_DESC, u"input"_s}; // Takes value |
| 89 | + static inline const QCommandLineOption CL_OPTION_OUTPUT{{CL_OPT_OUTPUT_S_NAME, CL_OPT_OUTPUT_L_NAME}, CL_OPT_OUTPUT_DESC, u"output"_s}; // Takes value |
| 90 | + static inline const QList<const QCommandLineOption*> CL_OPTIONS_SPECIFIC{&CL_OPTION_INPUT, &CL_OPTION_OUTPUT}; |
| 91 | + static inline const QSet<const QCommandLineOption*> CL_OPTIONS_REQUIRED{&CL_OPTION_INPUT}; |
| 92 | + |
| 93 | +public: |
| 94 | + // Meta |
| 95 | + static inline const QString NAME = u"dump"_s; |
| 96 | + static inline const QString DESCRIPTION = u"Dumps all image data of a TEX without converting it."_s; |
| 97 | + |
| 98 | +//-Constructor---------------------------------------------------------------------------------------------------------- |
| 99 | +public: |
| 100 | + CDump(Stex& coreRef); |
| 101 | + |
| 102 | +//-Destructor---------------------------------------------------------------------------------------------------------- |
| 103 | +public: |
| 104 | + virtual ~CDump() = default; |
| 105 | + |
| 106 | +//-Instance Functions------------------------------------------------------------------------------------------------------ |
| 107 | +private: |
| 108 | + QList<const QCommandLineOption*> options() const override; |
| 109 | + QSet<const QCommandLineOption*> requiredOptions() const override; |
| 110 | + QString name() const override; |
| 111 | + |
| 112 | + Qx::IoOpReport readTex(KTex& tex, const QString& path) const; |
| 113 | + |
| 114 | +public: |
| 115 | + Qx::Error perform() override; |
| 116 | +}; |
| 117 | +REGISTER_COMMAND(CDump::NAME, CDump, CDump::DESCRIPTION); |
| 118 | + |
| 119 | +#endif // CDUMP_H |
0 commit comments