summaryrefslogtreecommitdiff
path: root/src/modinfodialogimages.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/modinfodialogimages.h')
-rw-r--r--src/modinfodialogimages.h71
1 files changed, 63 insertions, 8 deletions
diff --git a/src/modinfodialogimages.h b/src/modinfodialogimages.h
index 6603660a..1c65d8bd 100644
--- a/src/modinfodialogimages.h
+++ b/src/modinfodialogimages.h
@@ -2,28 +2,62 @@
#define MODINFODIALOGIMAGES_H
#include "modinfodialogtab.h"
+#include <QScrollArea>
+
+class ImagesTab;
+
+class ImagesScrollArea : public QScrollArea
+{
+ Q_OBJECT;
+
+public:
+ using QScrollArea::QScrollArea;
+ void setTab(ImagesTab* tab);
+
+protected:
+ void resizeEvent(QResizeEvent* e) override;
+
+private:
+ ImagesTab* m_tab = nullptr;
+};
+
+
+class ImagesThumbnails : public QWidget
+{
+ Q_OBJECT;
+
+public:
+ using QWidget::QWidget;
+ void setTab(ImagesTab* tab);
+
+protected:
+ void paintEvent(QPaintEvent* e) override;
+ void mousePressEvent(QMouseEvent* e) override;
+
+private:
+ ImagesTab* m_tab = nullptr;
+};
+
class ScalableImage : public QWidget
{
Q_OBJECT;
public:
- ScalableImage(QImage image={});
+ ScalableImage(QString path={});
+ void setImage(const QString& path);
void setImage(QImage image);
- const QImage& image() const;
+ void clear();
bool hasHeightForWidth() const;
int heightForWidth(int w) const;
-signals:
- void clicked(const QImage& image);
-
protected:
void paintEvent(QPaintEvent* e) override;
- void mousePressEvent(QMouseEvent* e) override;
private:
+ QString m_path;
QImage m_original, m_scaled;
int m_border;
};
@@ -32,6 +66,8 @@ private:
class ImagesTab : public ModInfoDialogTab
{
Q_OBJECT;
+ friend class ImagesScrollArea;
+ friend class ImagesThumbnails;
public:
ImagesTab(
@@ -40,12 +76,31 @@ public:
void clear() override;
bool feedFile(const QString& rootPath, const QString& fullPath) override;
+ void update() override;
private:
+ struct File
+ {
+ QString path;
+ QImage original, thumbnail;
+ bool failed = false;
+
+ File(QString path)
+ : path(std::move(path))
+ {
+ }
+ };
+
ScalableImage* m_image;
+ std::vector<File> m_files;
+ int m_margins, m_padding, m_border;
+
+ void scrollAreaResized(const QSize& s);
+ void paintThumbnails(QPaintEvent* e);
+ void thumbnailsMouseEvent(QMouseEvent* e);
- bool add(const QString& fullPath);
- void onClicked(const QImage& image);
+ bool needsReload(const File& file, const QSize& thumbSize) const;
+ QSize scaledImageSize(const QSize& originalSize, const QSize& thumbSize) const;
};
#endif // MODINFODIALOGIMAGES_H