XPlor/tools/compro/mainwindow.cpp
2025-06-04 22:34:49 -04:00

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");
}
}