67 lines
1.8 KiB
C++
67 lines
1.8 KiB
C++
#include "mainwindow.h"
|
|
#include "ui_mainwindow.h"
|
|
|
|
#include "compression.h"
|
|
|
|
MainWindow::MainWindow(QWidget *parent)
|
|
: QMainWindow(parent)
|
|
, ui(new Ui::MainWindow)
|
|
{
|
|
ui->setupUi(this);
|
|
|
|
connect(ui->plainTextEdit_Input, &QPlainTextEdit::textChanged, this, &MainWindow::InputChanged);
|
|
}
|
|
|
|
MainWindow::~MainWindow()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
void MainWindow::InputChanged()
|
|
{
|
|
QString input = ui->plainTextEdit_Input->toPlainText();
|
|
if (input.isEmpty()) {
|
|
qDebug() << "Input data was empty!";
|
|
return;
|
|
}
|
|
|
|
QByteArray inputData = QByteArray::fromHex(input.remove(' ').toUtf8());
|
|
if (inputData.isEmpty()) {
|
|
qDebug() << "Failed to parse valid HEX data!";
|
|
return;
|
|
}
|
|
|
|
bool flagOk;
|
|
int flag = QString("0x%1").arg(ui->spinBox_Flags->value()).toInt(&flagOk, 16);
|
|
if (!flagOk)
|
|
{
|
|
qDebug() << "Failed to parse flag!";
|
|
return;
|
|
}
|
|
|
|
bool windowSizeOk;
|
|
int windowSize = QString("0x%1").arg(ui->spinBox_WindowSize->value()).toInt(&windowSizeOk, 16);
|
|
if (!windowSizeOk)
|
|
{
|
|
qDebug() << "Failed to parse window size!";
|
|
return;
|
|
}
|
|
|
|
bool partSizeOk;
|
|
int partitionSize = QString("0x%1").arg(ui->spinBox_PartitionSize->value()).toInt(&partSizeOk, 16);
|
|
if (!partSizeOk)
|
|
{
|
|
qDebug() << "Failed to parse partition size!";
|
|
return;
|
|
}
|
|
|
|
try {
|
|
QByteArray output = Compression::DecompressXMem(inputData, flag, windowSize, partitionSize);
|
|
ui->plainTextEdit_Output->setPlainText(output.toHex(' ').toUpper());
|
|
} catch (const std::exception &e) {
|
|
ui->plainTextEdit_Output->setPlainText(QString("Decompression failed: %1").arg(e.what()));
|
|
} catch (...) {
|
|
ui->plainTextEdit_Output->setPlainText("Decompression failed: Unknown error");
|
|
}
|
|
}
|