1 /*
2     SPDX-FileCopyrightText: 2014 Martin Gräßlin <mgraesslin@kde.org>
3 
4     SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
5 */
6 #ifndef KDECOARTIONS_PREVIEW_CLIENT_H
7 #define KDECOARTIONS_PREVIEW_CLIENT_H
8 
9 #include "../../../decorations/decorationpalette.h"
10 
11 #include <KDecoration2/Private/DecoratedClientPrivate>
12 #include <QObject>
13 #include <QPalette>
14 
15 class QAbstractItemModel;
16 
17 namespace KDecoration2
18 {
19 namespace Preview
20 {
21 class PreviewClient : public QObject, public ApplicationMenuEnabledDecoratedClientPrivate
22 {
23     Q_OBJECT
24     Q_PROPERTY(KDecoration2::Decoration *decoration READ decoration CONSTANT)
25     Q_PROPERTY(QString caption READ caption WRITE setCaption NOTIFY captionChanged)
26     Q_PROPERTY(QIcon icon READ icon WRITE setIcon NOTIFY iconChanged)
27     Q_PROPERTY(QString iconName READ iconName WRITE setIconName NOTIFY iconNameChanged)
28     Q_PROPERTY(bool active READ isActive WRITE setActive NOTIFY activeChanged)
29     Q_PROPERTY(bool closeable READ isCloseable WRITE setCloseable NOTIFY closeableChanged)
30     Q_PROPERTY(bool keepAbove READ isKeepAbove WRITE setKeepAbove NOTIFY keepAboveChanged)
31     Q_PROPERTY(bool keepBelow READ isKeepBelow WRITE setKeepBelow NOTIFY keepBelowChanged)
32     Q_PROPERTY(bool maximizable READ isMaximizeable WRITE setMaximizable NOTIFY maximizableChanged)
33     Q_PROPERTY(bool maximized READ isMaximized NOTIFY maximizedChanged)
34     Q_PROPERTY(bool maximizedVertically READ isMaximizedVertically WRITE setMaximizedVertically NOTIFY maximizedVerticallyChanged)
35     Q_PROPERTY(bool maximizedHorizontally READ isMaximizedHorizontally WRITE setMaximizedHorizontally NOTIFY maximizedHorizontallyChanged)
36     Q_PROPERTY(bool minimizable READ isMinimizeable WRITE setMinimizable NOTIFY minimizableChanged)
37     Q_PROPERTY(bool modal READ isModal WRITE setModal NOTIFY modalChanged)
38     Q_PROPERTY(bool movable READ isMoveable WRITE setMovable NOTIFY movableChanged)
39     Q_PROPERTY(int desktop READ desktop WRITE setDesktop NOTIFY desktopChanged)
40     Q_PROPERTY(bool onAllDesktops READ isOnAllDesktops NOTIFY onAllDesktopsChanged)
41     Q_PROPERTY(bool resizable READ isResizeable WRITE setResizable NOTIFY resizableChanged)
42     Q_PROPERTY(bool shadeable READ isShadeable WRITE setShadeable NOTIFY shadeableChanged)
43     Q_PROPERTY(bool shaded READ isShaded WRITE setShaded NOTIFY shadedChanged)
44     Q_PROPERTY(bool providesContextHelp READ providesContextHelp WRITE setProvidesContextHelp NOTIFY providesContextHelpChanged)
45     Q_PROPERTY(int width READ width WRITE setWidth NOTIFY widthChanged)
46     Q_PROPERTY(int height READ height WRITE setHeight NOTIFY heightChanged)
47     Q_PROPERTY(bool bordersTopEdge    READ bordersTopEdge    WRITE setBordersTopEdge    NOTIFY bordersTopEdgeChanged)
48     Q_PROPERTY(bool bordersLeftEdge   READ bordersLeftEdge   WRITE setBordersLeftEdge   NOTIFY bordersLeftEdgeChanged)
49     Q_PROPERTY(bool bordersRightEdge  READ bordersRightEdge  WRITE setBordersRightEdge  NOTIFY bordersRightEdgeChanged)
50     Q_PROPERTY(bool bordersBottomEdge READ bordersBottomEdge WRITE setBordersBottomEdge NOTIFY bordersBottomEdgeChanged)
51 public:
52     explicit PreviewClient(DecoratedClient *client, Decoration *decoration);
53     ~PreviewClient() override;
54 
55     QString caption() const override;
56     WId decorationId() const override;
57     WId windowId() const override;
58     int desktop() const override;
59     QIcon icon() const override;
60     bool isActive() const override;
61     bool isCloseable() const override;
62     bool isKeepAbove() const override;
63     bool isKeepBelow() const override;
64     bool isMaximizeable() const override;
65     bool isMaximized() const override;
66     bool isMaximizedVertically() const override;
67     bool isMaximizedHorizontally() const override;
68     bool isMinimizeable() const override;
69     bool isModal() const override;
70     bool isMoveable() const override;
71     bool isOnAllDesktops() const override;
72     bool isResizeable() const override;
73     bool isShadeable() const override;
74     bool isShaded() const override;
75     bool providesContextHelp() const override;
76 
77     int width() const override;
78     int height() const override;
79     QSize size() const override;
80     QPalette palette() const override;
81     QColor color(ColorGroup group, ColorRole role) const override;
82     Qt::Edges adjacentScreenEdges() const override;
83 
84     bool hasApplicationMenu() const override;
85     bool isApplicationMenuActive() const override;
86 
87     void requestShowToolTip(const QString &text) override;
88     void requestHideToolTip() override;
89     void requestClose() override;
90     void requestContextHelp() override;
91     void requestToggleMaximization(Qt::MouseButtons buttons) override;
92     void requestMinimize() override;
93     void requestToggleKeepAbove() override;
94     void requestToggleKeepBelow() override;
95     void requestToggleShade() override;
96     void requestShowWindowMenu(const QRect &rect) override;
97     void requestShowApplicationMenu(const QRect &rect, int actionId) override;
98     void requestToggleOnAllDesktops() override;
99 
100     void showApplicationMenu(int actionId) override;
101 
102     void setCaption(const QString &caption);
103     void setActive(bool active);
104     void setCloseable(bool closeable);
105     void setMaximizable(bool maximizable);
106     void setKeepBelow(bool keepBelow);
107     void setKeepAbove(bool keepAbove);
108     void setMaximizedHorizontally(bool maximized);
109     void setMaximizedVertically(bool maximized);
110     void setMinimizable(bool minimizable);
111     void setModal(bool modal);
112     void setMovable(bool movable);
113     void setResizable(bool resizable);
114     void setShadeable(bool shadeable);
115     void setShaded(bool shaded);
116     void setProvidesContextHelp(bool contextHelp);
117     void setDesktop(int desktop);
118 
119     void setWidth(int width);
120     void setHeight(int height);
121 
122     QString iconName() const;
123     void setIconName(const QString &icon);
124     void setIcon(const QIcon &icon);
125 
126     bool bordersTopEdge() const;
127     bool bordersLeftEdge() const;
128     bool bordersRightEdge() const;
129     bool bordersBottomEdge() const;
130 
131     void setBordersTopEdge(bool enabled);
132     void setBordersLeftEdge(bool enabled);
133     void setBordersRightEdge(bool enabled);
134     void setBordersBottomEdge(bool enabled);
135 
136 Q_SIGNALS:
137     void captionChanged(const QString &);
138     void iconChanged(const QIcon &);
139     void iconNameChanged(const QString &);
140     void activeChanged(bool);
141     void closeableChanged(bool);
142     void keepAboveChanged(bool);
143     void keepBelowChanged(bool);
144     void maximizableChanged(bool);
145     void maximizedChanged(bool);
146     void maximizedVerticallyChanged(bool);
147     void maximizedHorizontallyChanged(bool);
148     void minimizableChanged(bool);
149     void modalChanged(bool);
150     void movableChanged(bool);
151     void onAllDesktopsChanged(bool);
152     void resizableChanged(bool);
153     void shadeableChanged(bool);
154     void shadedChanged(bool);
155     void providesContextHelpChanged(bool);
156     void desktopChanged(int);
157     void widthChanged(int);
158     void heightChanged(int);
159     void paletteChanged(const QPalette&);
160     void bordersTopEdgeChanged(bool);
161     void bordersLeftEdgeChanged(bool);
162     void bordersRightEdgeChanged(bool);
163     void bordersBottomEdgeChanged(bool);
164 
165     void showWindowMenuRequested();
166     void showApplicationMenuRequested();
167     void minimizeRequested();
168     void closeRequested();
169 
170 private:
171     QString m_caption;
172     QIcon m_icon;
173     QString m_iconName;
174     KWin::Decoration::DecorationPalette m_palette;
175     bool m_active;
176     bool m_closeable;
177     bool m_keepBelow;
178     bool m_keepAbove;
179     bool m_maximizable;
180     bool m_maximizedHorizontally;
181     bool m_maximizedVertically;
182     bool m_minimizable;
183     bool m_modal;
184     bool m_movable;
185     bool m_resizable;
186     bool m_shadeable;
187     bool m_shaded;
188     bool m_providesContextHelp;
189     int m_desktop;
190     int m_width;
191     int m_height;
192     bool m_bordersTopEdge;
193     bool m_bordersLeftEdge;
194     bool m_bordersRightEdge;
195     bool m_bordersBottomEdge;
196 };
197 
198 } // namespace Preview
199 } // namespace KDecoration2
200 
201 #endif
202