summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSilarn <jrim@rimpo.org>2019-10-19 02:35:33 -0500
committerSilarn <jrim@rimpo.org>2019-10-19 02:35:33 -0500
commit77a9c64fda9cb522aae35777df2b09e19441bab1 (patch)
tree7d1584c3206421e748f5ddc2957a166242158449
parentd255be54a05a3a7b6ddcfb90458f1537f6e831a1 (diff)
Add button in modinfo image preview to use preview plugin dialog
- Disabled if no compatible preview is found - Now renders an image for unsupported formats instructing the user
-rw-r--r--src/modinfodialog.ui7
-rw-r--r--src/modinfodialogimages.cpp45
-rw-r--r--src/modinfodialogimages.h3
3 files changed, 49 insertions, 6 deletions
diff --git a/src/modinfodialog.ui b/src/modinfodialog.ui
index ba2db799..13a245f1 100644
--- a/src/modinfodialog.ui
+++ b/src/modinfodialog.ui
@@ -268,6 +268,13 @@
<number>0</number>
</property>
<item>
+ <widget class="QPushButton" name="previewPluginButton">
+ <property name="text">
+ <string>Open with Preview Plugin</string>
+ </property>
+ </widget>
+ </item>
+ <item>
<widget class="QToolButton" name="imagesExplore">
<property name="text">
<string>Open in Explorer</string>
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);
+ }
}
diff --git a/src/modinfodialogimages.h b/src/modinfodialogimages.h
index 8d9b965b..5717b8b9 100644
--- a/src/modinfodialogimages.h
+++ b/src/modinfodialogimages.h
@@ -4,6 +4,8 @@
#include "modinfodialogtab.h"
#include "filterwidget.h"
#include <QScrollBar>
+#include "plugincontainer.h"
+#include "organizercore.h"
class ImagesTab;
@@ -359,6 +361,7 @@ private:
void showTooltip(QHelpEvent* e);
void onExplore();
void onShowDDS();
+ void onPreviewButton();
void onFilterChanged();
void select(std::size_t i, Visibility v=Visibility::Full);