From a8a1509db738cce1feca825eb5a91a0dcc860cb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Du=C5=A1an=20Poizl?= Date: Sun, 14 Jan 2024 14:32:01 +0100 Subject: [PATCH] Show error message in main window when image fail to load --- imagescrollareagl.cpp | 28 ++++++++++++++++++++++++---- imagescrollareagl.h | 1 + 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/imagescrollareagl.cpp b/imagescrollareagl.cpp index 52f0094..dc1b54e 100644 --- a/imagescrollareagl.cpp +++ b/imagescrollareagl.cpp @@ -90,14 +90,27 @@ ImageWidget::~ImageWidget() void ImageWidget::setImage(std::shared_ptr image, int index) { - if(image == nullptr)return; + m_currentImg = index; + + if(!image || !image->valid()) + { + m_imgWidth = 0; + m_imgHeight = 0; + m_error = tr("Failed to load image"); + m_rawImage.reset(); + update(); + return; + } + + m_error.clear(); makeCurrent(); m_rawImage = image; - m_rawImage->downscaleTo(m_maxTextureSize); + if((int)image->width() > m_maxTextureSize || (int)image->height() > m_maxTextureSize) + m_rawImage->resize(std::min(m_maxTextureSize, (int)image->width()), std::min(m_maxTextureSize, (int)image->height())); m_imgWidth = image->width(); m_imgHeight = image->height(); - m_currentImg = index; + if(!m_image)return; @@ -290,7 +303,7 @@ void ImageWidget::thumbnailLoaded(const Image *image) { makeCurrent(); const RawImage *raw = image->thumbnail(); - if(!raw)return; + if(!raw || !raw->valid())return; m_thumbnailTexture->setData(0, image->number(), QOpenGLTexture::RGBA, QOpenGLTexture::UInt16, raw->data(), m_transferOptions.get()); float a = raw->thumbAspect(); int sizes[3] = { std::max(1, a > 1.0f ? THUMB_SIZE : (int)(THUMB_SIZE * a)), std::max(1, a < 1.0f ? THUMB_SIZE : (int)(THUMB_SIZE / a)), image->number() }; @@ -375,6 +388,13 @@ void ImageWidget::paintGL() } } } + else if(!m_error.isEmpty()) + { + QPainter painter(this); + painter.setPen(Qt::red); + painter.setFont(QFont("Sans", 24, QFont::Bold)); + painter.drawText(0, 0, width(), height(), Qt::AlignCenter | Qt::AlignHCenter, m_error); + } else { debayer(); diff --git a/imagescrollareagl.h b/imagescrollareagl.h index e4a3bce..a48bcb2 100644 --- a/imagescrollareagl.h +++ b/imagescrollareagl.h @@ -69,6 +69,7 @@ class ImageWidget : public QOpenGLWidget QVector m_thumnails; Database *m_database = nullptr; QPointF m_lastPos; + QString m_error; public: explicit ImageWidget(Database *database, QWidget *parent = nullptr); ~ImageWidget() override;