diff --git a/app/iwiviewer.cpp b/app/iwiviewer.cpp index 1fd2268..e4b9c3e 100644 --- a/app/iwiviewer.cpp +++ b/app/iwiviewer.cpp @@ -1,98 +1,98 @@ -#include "iwiviewer.h" -#include "enums.h" -#include "ui_iwiviewer.h" - -IWIViewer::IWIViewer(QWidget *parent) - : QWidget(parent) - , ui(new Ui::IWIViewer) -{ - ui->setupUi(this); -} - -IWIViewer::~IWIViewer() -{ - delete ui; -} - -void IWIViewer::SetIWIFile(std::shared_ptr aIWIFile) { - mIWIFile.swap(aIWIFile); - - ui->label_Title->setText(mIWIFile->fileStem + ".iwi"); - - // If you’re using Qt and want a QString: - QString magicStr = QString::fromLatin1(mIWIFile->header.Magic, 3); - ui->lineEdit_Magic->setText(magicStr); - - ui->spinBox_Version->setValue(mIWIFile->header.Version); - ui->spinBox_Depth->setValue(mIWIFile->info.Depth); - QString formatStr = ""; - switch (mIWIFile->info.Format) { - case IWI_FORMAT_ARGB32: - formatStr = "ARGB32"; - break; - case IWI_FORMAT_RGB24: - formatStr = "RGB24"; - break; - case IWI_FORMAT_GA16: - formatStr = "GA16"; - break; - case IWI_FORMAT_A8: - formatStr = "A8"; - break; - case IWI_FORMAT_DXT1: - formatStr = "DXT1"; - break; - case IWI_FORMAT_DXT3: - formatStr = "DXT3"; - break; - case IWI_FORMAT_DXT5: - formatStr = "DXT5"; - break; - } - ui->lineEdit_Format->setText(formatStr); - ui->spinBox_Height->setValue(mIWIFile->info.Height); - ui->spinBox_Width->setValue(mIWIFile->info.Width); - ui->spinBox_Usage->setValue(mIWIFile->info.Usage); - - ui->comboBox_Mipmap->clear(); - for (auto mipmap : mIWIFile->mipmaps) { - ui->comboBox_Mipmap->addItem(QString::number(mipmap.offset)); - } - - connect(ui->comboBox_Mipmap, &QComboBox::currentIndexChanged, this, &IWIViewer::MipmapIndexChanged); - - if (!mIWIFile->mipmaps.empty()) { - MipmapIndexChanged(0); - } -} - -void IWIViewer::MipmapIndexChanged(int aMipmapIndex) { - auto mipmaps = mIWIFile->mipmaps; - - if (aMipmapIndex == -1) { return; } - - auto mipmap = mipmaps[aMipmapIndex]; - ui->spinBox_MipmapSize->setValue(mipmap.size); - ui->spinBox_MipmapOffset->setValue(mipmap.offset); - - const unsigned char* imageData = reinterpret_cast(mipmap.data.constData()); - QImage image(reinterpret_cast(imageData), - mIWIFile->info.Width, mIWIFile->info.Height, - QImage::Format_RGBA8888); - - if (image.isNull()) { - qDebug() << "Error: QImage creation failed!"; - return; - } - - // Convert to QPixmap - QPixmap pixmap = QPixmap::fromImage(image); - if (pixmap.isNull()) { - qDebug() << "Error: QPixmap conversion failed!"; - return; - } - - // Scale and display - pixmap = pixmap.scaled(ui->label_Image->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation); - ui->label_Image->setPixmap(pixmap); -} +#include "iwiviewer.h" +#include "enums.h" +#include "ui_iwiviewer.h" + +IWIViewer::IWIViewer(QWidget *parent) + : QWidget(parent) + , ui(new Ui::IWIViewer) +{ + ui->setupUi(this); +} + +IWIViewer::~IWIViewer() +{ + delete ui; +} + +void IWIViewer::SetIWIFile(const IWIFile* aIWIFile) { + mIWIFile = aIWIFile; + + ui->label_Title->setText(mIWIFile->fileStem + ".iwi"); + + // If you’re using Qt and want a QString: + QString magicStr = QString::fromLatin1(mIWIFile->header.Magic, 3); + ui->lineEdit_Magic->setText(magicStr); + + ui->spinBox_Version->setValue(mIWIFile->header.Version); + ui->spinBox_Depth->setValue(mIWIFile->info.Depth); + QString formatStr = ""; + switch (mIWIFile->info.Format) { + case IWI_FORMAT_ARGB32: + formatStr = "ARGB32"; + break; + case IWI_FORMAT_RGB24: + formatStr = "RGB24"; + break; + case IWI_FORMAT_GA16: + formatStr = "GA16"; + break; + case IWI_FORMAT_A8: + formatStr = "A8"; + break; + case IWI_FORMAT_DXT1: + formatStr = "DXT1"; + break; + case IWI_FORMAT_DXT3: + formatStr = "DXT3"; + break; + case IWI_FORMAT_DXT5: + formatStr = "DXT5"; + break; + } + ui->lineEdit_Format->setText(formatStr); + ui->spinBox_Height->setValue(mIWIFile->info.Height); + ui->spinBox_Width->setValue(mIWIFile->info.Width); + ui->spinBox_Usage->setValue(mIWIFile->info.Usage); + + ui->comboBox_Mipmap->clear(); + for (auto mipmap : mIWIFile->mipmaps) { + ui->comboBox_Mipmap->addItem(QString::number(mipmap.offset)); + } + + connect(ui->comboBox_Mipmap, &QComboBox::currentIndexChanged, this, &IWIViewer::MipmapIndexChanged); + + if (!mIWIFile->mipmaps.empty()) { + MipmapIndexChanged(0); + } +} + +void IWIViewer::MipmapIndexChanged(int aMipmapIndex) { + auto mipmaps = mIWIFile->mipmaps; + + if (aMipmapIndex == -1) { return; } + + auto mipmap = mipmaps[aMipmapIndex]; + ui->spinBox_MipmapSize->setValue(mipmap.size); + ui->spinBox_MipmapOffset->setValue(mipmap.offset); + + const unsigned char* imageData = reinterpret_cast(mipmap.data.constData()); + QImage image(reinterpret_cast(imageData), + mIWIFile->info.Width, mIWIFile->info.Height, + QImage::Format_RGBA8888); + + if (image.isNull()) { + qDebug() << "Error: QImage creation failed!"; + return; + } + + // Convert to QPixmap + QPixmap pixmap = QPixmap::fromImage(image); + if (pixmap.isNull()) { + qDebug() << "Error: QPixmap conversion failed!"; + return; + } + + // Scale and display + pixmap = pixmap.scaled(ui->label_Image->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation); + ui->label_Image->setPixmap(pixmap); +}