diff options
Diffstat (limited to 'src/modinfodialogimages.cpp')
| -rw-r--r-- | src/modinfodialogimages.cpp | 45 |
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); + } } |
