File indexing completed on 2024-05-12 16:02:29

0001 /*
0002  *  SPDX-FileCopyrightText: 2020 Halla Rempt <halla@valdyas.org>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 #ifndef KISPREVIEWFILEDIALOG_H
0007 #define KISPREVIEWFILEDIALOG_H
0008 
0009 #include <QFileDialog>
0010 #include <QFileIconProvider>
0011 
0012 #include <kritawidgetutils_export.h>
0013 
0014 class QLabel;
0015 class QToolButton;
0016 
0017 class KisFileIconProvider : public QFileIconProvider
0018 {
0019 public:
0020 
0021     KisFileIconProvider(qreal devicePixelRatioF);
0022     QIcon icon(const QFileIconProvider::IconType type) const override;
0023     QIcon icon(const QFileInfo &fi) const override;
0024 private:
0025 
0026     qreal m_devicePixelRatioF;
0027 
0028 };
0029 
0030 class KRITAWIDGETUTILS_EXPORT KisAbstractFileIconCreator
0031 {
0032 public:
0033 
0034     KisAbstractFileIconCreator();
0035     virtual ~KisAbstractFileIconCreator();
0036 
0037     virtual bool createFileIcon(QString path, QIcon &icon, qreal devicePixelRatioF, QSize iconSize) = 0;
0038 
0039 };
0040 
0041 class KRITAWIDGETUTILS_EXPORT KisPreviewFileDialog : public QFileDialog
0042 {
0043     Q_OBJECT
0044 
0045 public:
0046     KisPreviewFileDialog(QWidget *parent = nullptr, const QString &caption = QString(), const QString &directory = QString(), const QString &filter = QString());
0047 
0048     // QFileDialog drops the icon provider when the model is created,
0049     // so we cannot set this before the options are set
0050     void resetIconProvider();
0051 
0052     static KisAbstractFileIconCreator *s_iconCreator;
0053 
0054 public Q_SLOTS:
0055 
0056     void onCurrentChanged(const QString &path);
0057     void previewToggled(bool showPreview);
0058 
0059 private:
0060 
0061     KisFileIconProvider *m_iconProvider {0};
0062     QLabel *m_preview {0};
0063     QToolButton *m_previewToggle {0};
0064 };
0065 
0066 #endif // KISPREVIEWFILEDIALOG_H