File indexing completed on 2024-05-12 17:08:48

0001 /*
0002     SPDX-FileCopyrightText: 2016 Kai Uwe Broulik <kde@privat.broulik.de>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include <QObject>
0010 #include <QQmlParserStatus>
0011 
0012 #include <QPixmap>
0013 #include <QSize>
0014 #include <QUrl>
0015 
0016 class Thumbnailer : public QObject, public QQmlParserStatus
0017 {
0018     Q_OBJECT
0019     Q_INTERFACES(QQmlParserStatus)
0020 
0021     Q_PROPERTY(QUrl url READ url WRITE setUrl NOTIFY urlChanged)
0022     Q_PROPERTY(QSize size READ size WRITE setSize NOTIFY sizeChanged)
0023 
0024     Q_PROPERTY(bool busy READ busy NOTIFY busyChanged)
0025     Q_PROPERTY(bool hasPreview READ hasPreview NOTIFY pixmapChanged)
0026     Q_PROPERTY(QPixmap pixmap READ pixmap NOTIFY pixmapChanged)
0027     Q_PROPERTY(QSize pixmapSize READ pixmapSize NOTIFY pixmapChanged)
0028 
0029     Q_PROPERTY(QString iconName READ iconName NOTIFY iconNameChanged)
0030 
0031     Q_PROPERTY(bool menuVisible READ menuVisible NOTIFY menuVisibleChanged)
0032 
0033 public:
0034     explicit Thumbnailer(QObject *parent = nullptr);
0035     ~Thumbnailer() override;
0036 
0037     QUrl url() const;
0038     void setUrl(const QUrl &url);
0039 
0040     QSize size() const;
0041     void setSize(const QSize &size);
0042 
0043     bool busy() const;
0044     bool hasPreview() const;
0045     QPixmap pixmap() const;
0046     QSize pixmapSize() const;
0047 
0048     QString iconName() const;
0049 
0050     bool menuVisible() const;
0051 
0052     void classBegin() override;
0053     void componentComplete() override;
0054 
0055 Q_SIGNALS:
0056     void menuVisibleChanged();
0057 
0058     void urlChanged();
0059     void sizeChanged();
0060     void busyChanged();
0061     void pixmapChanged();
0062     void iconNameChanged();
0063 
0064 private:
0065     void generatePreview();
0066 
0067     bool m_inited = false;
0068 
0069     bool m_menuVisible = false;
0070 
0071     QUrl m_url;
0072     QSize m_size;
0073 
0074     bool m_busy = false;
0075 
0076     QPixmap m_pixmap;
0077 
0078     QString m_iconName;
0079 };