blob: 4f2ee78c4c3efc0e1f34d741293fefdb65b17ff6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
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));
}
|