summaryrefslogtreecommitdiff
path: root/src/modinfodialogimages.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modinfodialogimages.cpp')
-rw-r--r--src/modinfodialogimages.cpp45
1 files changed, 39 insertions, 6 deletions
diff --git a/src/modinfodialogimages.cpp b/src/modinfodialogimages.cpp
index c5b04538..48b3bb3b 100644
--- a/src/modinfodialogimages.cpp
+++ b/src/modinfodialogimages.cpp
@@ -53,6 +53,8 @@ ImagesTab::ImagesTab(ModInfoDialogTabContext cx) :
ui->tabImagesSplitter->setStretchFactor(0, 0);
ui->tabImagesSplitter->setStretchFactor(1, 1);
+ ui->previewPluginButton->setEnabled(false);
+
ui->imagesThumbnails->setTab(this);
ui->imagesScrollerVBar->setTab(this);
@@ -65,6 +67,7 @@ ImagesTab::ImagesTab(ModInfoDialogTabContext cx) :
connect(ui->imagesExplore, &QAbstractButton::clicked, [&]{ onExplore(); });
connect(ui->imagesShowDDS, &QCheckBox::toggled, [&]{ onShowDDS(); });
+ connect(ui->previewPluginButton, &QAbstractButton::clicked, [&] { onPreviewButton(); });
ui->imagesShowDDS->setEnabled(m_ddsAvailable);
@@ -251,13 +254,34 @@ void ImagesTab::select(std::size_t i, Visibility v)
ui->imagesPath->setText(QDir::toNativeSeparators(f->path()));
ui->imagesExplore->setEnabled(true);
+ if (plugin().previewGenerator().previewSupported(QString::fromStdWString(std::filesystem::path(f->path().toStdWString()).extension().wstring()).remove(0,1)))
+ ui->previewPluginButton->setEnabled(true);
+ else
+ ui->previewPluginButton->setEnabled(false);
ui->imagesSize->setText(dimensionString(f->original().size()));
- m_image->setImage(f->original());
+ if (f->original().isNull()) {
+ m_image->clear();
+
+ QImage image(300, 100, QImage::Format_RGBA64);
+ QPainter paint;
+ paint.begin(&image);
+ paint.fillRect(0, 0, 300, 100, QBrush(QColor(0, 0, 0, 255)));
+ paint.setPen(m_theme.textColor);
+ paint.setFont(m_theme.font);
+ paint.drawImage(QPoint(150-16, 50-20-16), QImage(":/MO/gui/warning"));
+ const auto flags = Qt::AlignHCenter | Qt::AlignVCenter | Qt::TextWordWrap;
+ paint.drawText(0, 46, 300, 54, flags, "This image format is not supported by Qt, but the preview plugin may be able to display it. Use the button above.");
+ paint.end();
+
+ m_image->setImage(image);
+ } else
+ m_image->setImage(f->original());
ensureVisible(i, v);
} else {
ui->imagesPath->clear();
ui->imagesExplore->setEnabled(false);
+ ui->previewPluginButton->setEnabled(false);
ui->imagesSize->clear();
m_image->clear();
}
@@ -560,6 +584,11 @@ void ImagesTab::onShowDDS()
}
}
+void ImagesTab::onPreviewButton()
+{
+ core().previewFileWithAlternatives(parentWidget(), m_files.selectedFile()->path());
+}
+
void ImagesTab::onFilterChanged()
{
update();
@@ -958,13 +987,17 @@ void File::load(const Geometry& geo)
ensureOriginalLoaded();
if (m_failed) {
- return;
- }
+ QImage warning(":/MO/gui/warning");
+ const auto scaledSize = geo.scaledImageSize(warning.size());
- const auto scaledSize = geo.scaledImageSize(m_original.size());
+ m_thumbnail = warning.scaled(
+ scaledSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+ } else {
+ const auto scaledSize = geo.scaledImageSize(m_original.size());
- m_thumbnail = m_original.scaled(
- scaledSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+ m_thumbnail = m_original.scaled(
+ scaledSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+ }
}