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 *)