File indexing completed on 2026-08-09 14:49:15

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 "../../../decorations/decorationpalette.h"
0009 
0010 #include <KDecoration2/Private/DecoratedClientPrivate>
0011 #include <QObject>
0012 #include <QPalette>
0013 
0014 class QAbstractItemModel;
0015 
0016 namespace KDecoration2
0017 {
0018 namespace Preview
0019 {
0020 class PreviewClient : public QObject, public ApplicationMenuEnabledDecoratedClientPrivate
0021 {
0022     Q_OBJECT
0023     Q_PROPERTY(KDecoration2::Decoration *decoration READ decoration CONSTANT)
0024     Q_PROPERTY(QString caption READ caption WRITE setCaption NOTIFY captionChanged)
0025     Q_PROPERTY(QIcon icon READ icon WRITE setIcon NOTIFY iconChanged)
0026     Q_PROPERTY(QString iconName READ iconName WRITE setIconName NOTIFY iconNameChanged)
0027     Q_PROPERTY(bool active READ isActive WRITE setActive NOTIFY activeChanged)
0028     Q_PROPERTY(bool closeable READ isCloseable WRITE setCloseable NOTIFY closeableChanged)
0029     Q_PROPERTY(bool keepAbove READ isKeepAbove WRITE setKeepAbove NOTIFY keepAboveChanged)
0030     Q_PROPERTY(bool keepBelow READ isKeepBelow WRITE setKeepBelow NOTIFY keepBelowChanged)
0031     Q_PROPERTY(bool maximizable READ isMaximizeable WRITE setMaximizable NOTIFY maximizableChanged)
0032     Q_PROPERTY(bool maximized READ isMaximized NOTIFY maximizedChanged)
0033     Q_PROPERTY(bool maximizedVertically READ isMaximizedVertically WRITE setMaximizedVertically NOTIFY maximizedVerticallyChanged)
0034     Q_PROPERTY(bool maximizedHorizontally READ isMaximizedHorizontally WRITE setMaximizedHorizontally NOTIFY maximizedHorizontallyChanged)
0035     Q_PROPERTY(bool minimizable READ isMinimizeable WRITE setMinimizable NOTIFY minimizableChanged)
0036     Q_PROPERTY(bool modal READ isModal WRITE setModal NOTIFY modalChanged)
0037     Q_PROPERTY(bool movable READ isMoveable WRITE setMovable NOTIFY movableChanged)
0038     Q_PROPERTY(int desktop READ desktop WRITE setDesktop NOTIFY desktopChanged)
0039     Q_PROPERTY(bool onAllDesktops READ isOnAllDesktops NOTIFY onAllDesktopsChanged)
0040     Q_PROPERTY(bool resizable READ isResizeable WRITE setResizable NOTIFY resizableChanged)
0041     Q_PROPERTY(bool shadeable READ isShadeable WRITE setShadeable NOTIFY shadeableChanged)
0042     Q_PROPERTY(bool shaded READ isShaded WRITE setShaded NOTIFY shadedChanged)
0043     Q_PROPERTY(bool providesContextHelp READ providesContextHelp WRITE setProvidesContextHelp NOTIFY providesContextHelpChanged)
0044     Q_PROPERTY(int width READ width WRITE setWidth NOTIFY widthChanged)
0045     Q_PROPERTY(int height READ height WRITE setHeight NOTIFY heightChanged)
0046     Q_PROPERTY(bool bordersTopEdge READ bordersTopEdge WRITE setBordersTopEdge NOTIFY bordersTopEdgeChanged)
0047     Q_PROPERTY(bool bordersLeftEdge READ bordersLeftEdge WRITE setBordersLeftEdge NOTIFY bordersLeftEdgeChanged)
0048     Q_PROPERTY(bool bordersRightEdge READ bordersRightEdge WRITE setBordersRightEdge NOTIFY bordersRightEdgeChanged)
0049     Q_PROPERTY(bool bordersBottomEdge READ bordersBottomEdge WRITE setBordersBottomEdge NOTIFY bordersBottomEdgeChanged)
0050 public:
0051     explicit PreviewClient(DecoratedClient *client, Decoration *decoration);
0052     ~PreviewClient() override;
0053 
0054     QString caption() const override;
0055     WId decorationId() const override;
0056     WId windowId() const override;
0057     int desktop() const override;
0058     QIcon icon() const override;
0059     bool isActive() const override;
0060     bool isCloseable() const override;
0061     bool isKeepAbove() const override;
0062     bool isKeepBelow() const override;
0063     bool isMaximizeable() const override;
0064     bool isMaximized() const override;
0065     bool isMaximizedVertically() const override;
0066     bool isMaximizedHorizontally() const override;
0067     bool isMinimizeable() const override;
0068     bool isModal() const override;
0069     bool isMoveable() const override;
0070     bool isOnAllDesktops() const override;
0071     bool isResizeable() const override;
0072     bool isShadeable() const override;
0073     bool isShaded() const override;
0074     bool providesContextHelp() const override;
0075 
0076     int width() const override;
0077     int height() const override;
0078     QSize size() const override;
0079     QPalette palette() const override;
0080     QColor color(ColorGroup group, ColorRole role) const override;
0081     Qt::Edges adjacentScreenEdges() const override;
0082     QString windowClass() const override;
0083 
0084     bool hasApplicationMenu() const override;
0085     bool isApplicationMenuActive() const override;
0086 
0087     void requestShowToolTip(const QString &text) override;
0088     void requestHideToolTip() override;
0089     void requestClose() override;
0090     void requestContextHelp() override;
0091     void requestToggleMaximization(Qt::MouseButtons buttons) override;
0092     void requestMinimize() override;
0093     void requestToggleKeepAbove() override;
0094     void requestToggleKeepBelow() override;
0095     void requestToggleShade() override;
0096     void requestShowWindowMenu(const QRect &rect) override;
0097     void requestShowApplicationMenu(const QRect &rect, int actionId) override;
0098     void requestToggleOnAllDesktops() override;
0099 
0100     void showApplicationMenu(int actionId) override;
0101 
0102     void setCaption(const QString &caption);
0103     void setActive(bool active);
0104     void setCloseable(bool closeable);
0105     void setMaximizable(bool maximizable);
0106     void setKeepBelow(bool keepBelow);
0107     void setKeepAbove(bool keepAbove);
0108     void setMaximizedHorizontally(bool maximized);
0109     void setMaximizedVertically(bool maximized);
0110     void setMinimizable(bool minimizable);
0111     void setModal(bool modal);
0112     void setMovable(bool movable);
0113     void setResizable(bool resizable);
0114     void setShadeable(bool shadeable);
0115     void setShaded(bool shaded);
0116     void setProvidesContextHelp(bool contextHelp);
0117     void setDesktop(int desktop);
0118 
0119     void setWidth(int width);
0120     void setHeight(int height);
0121 
0122     QString iconName() const;
0123     void setIconName(const QString &icon);
0124     void setIcon(const QIcon &icon);
0125 
0126     bool bordersTopEdge() const;
0127     bool bordersLeftEdge() const;
0128     bool bordersRightEdge() const;
0129     bool bordersBottomEdge() const;
0130 
0131     void setBordersTopEdge(bool enabled);
0132     void setBordersLeftEdge(bool enabled);
0133     void setBordersRightEdge(bool enabled);
0134     void setBordersBottomEdge(bool enabled);
0135 
0136 Q_SIGNALS:
0137     void captionChanged(const QString &);
0138     void iconChanged(const QIcon &);
0139     void iconNameChanged(const QString &);
0140     void activeChanged(bool);
0141     void closeableChanged(bool);
0142     void keepAboveChanged(bool);
0143     void keepBelowChanged(bool);
0144     void maximizableChanged(bool);
0145     void maximizedChanged(bool);
0146     void maximizedVerticallyChanged(bool);
0147     void maximizedHorizontallyChanged(bool);
0148     void minimizableChanged(bool);
0149     void modalChanged(bool);
0150     void movableChanged(bool);
0151     void onAllDesktopsChanged(bool);
0152     void resizableChanged(bool);
0153     void shadeableChanged(bool);
0154     void shadedChanged(bool);
0155     void providesContextHelpChanged(bool);
0156     void desktopChanged(int);
0157     void widthChanged(int);
0158     void heightChanged(int);
0159     void paletteChanged(const QPalette &);
0160     void bordersTopEdgeChanged(bool);
0161     void bordersLeftEdgeChanged(bool);
0162     void bordersRightEdgeChanged(bool);
0163     void bordersBottomEdgeChanged(bool);
0164 
0165     void showWindowMenuRequested();
0166     void showApplicationMenuRequested();
0167     void minimizeRequested();
0168     void closeRequested();
0169 
0170 private:
0171     QString m_caption;
0172     QIcon m_icon;
0173     QString m_iconName;
0174     KWin::Decoration::DecorationPalette m_palette;
0175     bool m_active;
0176     bool m_closeable;
0177     bool m_keepBelow;
0178     bool m_keepAbove;
0179     bool m_maximizable;
0180     bool m_maximizedHorizontally;
0181     bool m_maximizedVertically;
0182     bool m_minimizable;
0183     bool m_modal;
0184     bool m_movable;
0185     bool m_resizable;
0186     bool m_shadeable;
0187     bool m_shaded;
0188     bool m_providesContextHelp;
0189     int m_desktop;
0190     int m_width;
0191     int m_height;
0192     bool m_bordersTopEdge;
0193     bool m_bordersLeftEdge;
0194     bool m_bordersRightEdge;
0195     bool m_bordersBottomEdge;
0196 };
0197 
0198 } // namespace Preview
0199 } // namespace KDecoration2