File indexing completed on 2024-06-16 05:09:14

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 #include <qqmlregistration.h>
0016 
0017 class NotificationThumbnailer : public QObject, public QQmlParserStatus
0018 {
0019     Q_OBJECT
0020     QML_ELEMENT
0021     Q_INTERFACES(QQmlParserStatus)
0022 
0023     Q_PROPERTY(QUrl url READ url WRITE setUrl NOTIFY urlChanged)
0024     Q_PROPERTY(QSize size READ size WRITE setSize NOTIFY sizeChanged)
0025 
0026     Q_PROPERTY(bool busy READ busy NOTIFY busyChanged)
0027     Q_PROPERTY(bool hasPreview READ hasPreview NOTIFY pixmapChanged)
0028     Q_PROPERTY(QPixmap pixmap READ pixmap NOTIFY pixmapChanged)
0029     Q_PROPERTY(QSize pixmapSize READ pixmapSize NOTIFY pixmapChanged)
0030 
0031     Q_PROPERTY(QString iconName READ iconName NOTIFY iconNameChanged)
0032 
0033     Q_PROPERTY(bool menuVisible READ menuVisible NOTIFY menuVisibleChanged)
0034 
0035 public:
0036     explicit NotificationThumbnailer(QObject *parent = nullptr);
0037     ~NotificationThumbnailer() override;
0038 
0039     QUrl url() const;
0040     void setUrl(const QUrl &url);
0041 
0042     QSize size() const;
0043     void setSize(const QSize &size);
0044 
0045     bool busy() const;
0046     bool hasPreview() const;
0047     QPixmap pixmap() const;
0048     QSize pixmapSize() const;
0049 
0050     QString iconName() const;
0051 
0052     bool menuVisible() const;
0053 
0054     void classBegin() override;
0055     void componentComplete() override;
0056 
0057 Q_SIGNALS:
0058     void menuVisibleChanged();
0059 
0060     void urlChanged();
0061     void sizeChanged();
0062     void busyChanged();
0063     void pixmapChanged();
0064     void iconNameChanged();
0065 
0066 private:
0067     void generatePreview();
0068 
0069     bool m_inited = false;
0070 
0071     bool m_menuVisible = false;
0072 
0073     QUrl m_url;
0074     QSize m_size;
0075 
0076     bool m_busy = false;
0077 
0078     QPixmap m_pixmap;
0079 
0080     QString m_iconName;
0081 };