summaryrefslogtreecommitdiff
path: root/src/modinfodialogimages.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modinfodialogimages.cpp')
-rw-r--r--src/modinfodialogimages.cpp91
1 files changed, 91 insertions, 0 deletions
diff --git a/src/modinfodialogimages.cpp b/src/modinfodialogimages.cpp
new file mode 100644
index 00000000..4f2ee78c
--- /dev/null
+++ b/src/modinfodialogimages.cpp
@@ -0,0 +1,91 @@
+#include "modinfodialogimages.h"
+#include "ui_modinfodialog.h"
+
+ThumbnailButton::ThumbnailButton(const QString& fullPath, QImage original)
+ : m_original(std::move(original))
+{
+ const auto ratio = static_cast<double>(m_original.width()) / m_original.height();
+
+ QImage thumbnail;
+ if (ratio > 1.34) {
+ thumbnail = m_original.scaledToWidth(128);
+ } else {
+ thumbnail = m_original.scaledToHeight(96);
+ }
+
+ setIcon(QPixmap::fromImage(thumbnail));
+ setIconSize(QSize(thumbnail.width(), thumbnail.height()));
+
+ connect(this, &QPushButton::clicked, [&]{ emit open(m_original); });
+}
+
+const QImage& ThumbnailButton::image() const
+{
+ return m_original;
+}
+
+
+ImagesTab::ImagesTab(Ui::ModInfoDialog* ui)
+ : ui(ui)
+{
+}
+
+void ImagesTab::clear()
+{
+ ui->imageLabel->setPixmap({});
+
+ while (ui->imageThumbnails->count() > 0) {
+ auto* item = ui->imageThumbnails->takeAt(0);
+ delete item->widget();
+ delete item;
+ }
+}
+
+bool ImagesTab::feedFile(const QString& rootPath, const QString& fullPath)
+{
+ static constexpr const char* extensions[] = {
+ ".png", ".jpg"
+ };
+
+ for (const auto* e : extensions) {
+ if (fullPath.endsWith(e, Qt::CaseInsensitive)) {
+ add(fullPath);
+ return true;
+ }
+ }
+
+ return false;
+}
+
+void ImagesTab::add(const QString& fullPath)
+{
+ QImage image = QImage(fullPath);
+
+ if (image.isNull()) {
+ qWarning() << "ImagesTab: '" << fullPath << "' is not a valid image";
+ return;
+ }
+
+ auto* button = new ThumbnailButton(fullPath, std::move(image));
+
+ QObject::connect(
+ button, &ThumbnailButton::open,
+ [&](const QImage& image){ onOpen(image); });
+
+ ui->imageThumbnails->addWidget(button);
+}
+
+void ImagesTab::onOpen(const QImage& original)
+{
+ QImage image;
+
+ const auto ratio = static_cast<double>(original.width()) / original.height();
+
+ if (ratio > 1.34) {
+ image = original.scaledToWidth(ui->imageLabel->geometry().width());
+ } else {
+ image = original.scaledToHeight(ui->imageLabel->geometry().height());
+ }
+
+ ui->imageLabel->setPixmap(QPixmap::fromImage(image));
+}