File indexing completed on 2026-08-09 12:02:25
0001 /* 0002 SPDX-FileCopyrightText: 2014 Martin Gräßlin <mgraesslin@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 #pragma once 0007 0008 #include <KDecoration2/DecorationButton> 0009 #include <KDecoration2/Private/DecorationBridge> 0010 0011 #include <QList> 0012 #include <QPointer> 0013 0014 class QQuickItem; 0015 0016 class KPluginFactory; 0017 0018 namespace KDecoration2 0019 { 0020 namespace Preview 0021 { 0022 0023 class PreviewClient; 0024 class PreviewItem; 0025 class PreviewSettings; 0026 0027 class PreviewBridge : public DecorationBridge 0028 { 0029 Q_OBJECT 0030 Q_PROPERTY(QString plugin READ plugin WRITE setPlugin NOTIFY pluginChanged) 0031 Q_PROPERTY(QString theme READ theme WRITE setTheme NOTIFY themeChanged) 0032 Q_PROPERTY(bool valid READ isValid NOTIFY validChanged) 0033 public: 0034 explicit PreviewBridge(QObject *parent = nullptr); 0035 ~PreviewBridge() override; 0036 std::unique_ptr<DecoratedClientPrivate> createClient(DecoratedClient *client, Decoration *decoration) override; 0037 std::unique_ptr<DecorationSettingsPrivate> settings(DecorationSettings *parent) override; 0038 0039 PreviewClient *lastCreatedClient() 0040 { 0041 return m_lastCreatedClient; 0042 } 0043 PreviewSettings *lastCreatedSettings() 0044 { 0045 return m_lastCreatedSettings; 0046 } 0047 0048 void registerPreviewItem(PreviewItem *item); 0049 void unregisterPreviewItem(PreviewItem *item); 0050 0051 void setPlugin(const QString &plugin); 0052 QString plugin() const; 0053 void setTheme(const QString &theme); 0054 QString theme() const; 0055 bool isValid() const; 0056 0057 KDecoration2::Decoration *createDecoration(QObject *parent = nullptr); 0058 KDecoration2::DecorationButton *createButton(KDecoration2::Decoration *decoration, KDecoration2::DecorationButtonType type, QObject *parent = nullptr); 0059 0060 public Q_SLOTS: 0061 void configure(QQuickItem *ctx); 0062 0063 Q_SIGNALS: 0064 void pluginChanged(); 0065 void themeChanged(); 0066 void validChanged(); 0067 0068 private: 0069 void createFactory(); 0070 void setValid(bool valid); 0071 PreviewClient *m_lastCreatedClient; 0072 PreviewSettings *m_lastCreatedSettings; 0073 QList<PreviewItem *> m_previewItems; 0074 QString m_plugin; 0075 QString m_theme; 0076 QPointer<KPluginFactory> m_factory; 0077 bool m_valid; 0078 }; 0079 0080 class BridgeItem : public QObject 0081 { 0082 Q_OBJECT 0083 Q_PROPERTY(QString plugin READ plugin WRITE setPlugin NOTIFY pluginChanged) 0084 Q_PROPERTY(QString theme READ theme WRITE setTheme NOTIFY themeChanged) 0085 Q_PROPERTY(bool valid READ isValid NOTIFY validChanged) 0086 Q_PROPERTY(KDecoration2::Preview::PreviewBridge *bridge READ bridge CONSTANT) 0087 0088 public: 0089 explicit BridgeItem(QObject *parent = nullptr); 0090 ~BridgeItem() override; 0091 0092 void setPlugin(const QString &plugin) 0093 { 0094 m_bridge->setPlugin(plugin); 0095 } 0096 QString plugin() const 0097 { 0098 return m_bridge->plugin(); 0099 } 0100 void setTheme(const QString &theme) 0101 { 0102 m_bridge->setTheme(theme); 0103 } 0104 QString theme() const 0105 { 0106 return m_bridge->theme(); 0107 } 0108 bool isValid() const 0109 { 0110 return m_bridge->isValid(); 0111 } 0112 0113 PreviewBridge *bridge() const 0114 { 0115 return m_bridge; 0116 } 0117 0118 Q_SIGNALS: 0119 void pluginChanged(); 0120 void themeChanged(); 0121 void validChanged(); 0122 0123 private: 0124 PreviewBridge *m_bridge; 0125 }; 0126 0127 } 0128 } 0129 0130 Q_DECLARE_METATYPE(KDecoration2::Preview::PreviewBridge *)