KWin
Loading...
Searching...
No Matches
monitor.h
Go to the documentation of this file.
1/*
2 KWin - the KDE window manager
3 This file is part of the KDE project.
4
5 SPDX-FileCopyrightText: 2008 Lubos Lunak <l.lunak@suse.cz>
6 SPDX-FileCopyrightText: 2009 Lucas Murray <lmurray@undefinedfire.com>
7
8 SPDX-License-Identifier: GPL-2.0-or-later
9*/
10
11#pragma once
12
13#include "screenpreviewwidget.h"
14
15#include <QActionGroup>
16#include <QGraphicsItem>
17#include <QList>
18#include <array>
19#include <memory>
20
21class QAction;
22class QGraphicsView;
23class QGraphicsScene;
24class QMenu;
25
26namespace KSvg
27{
28class FrameSvg;
29}
30
31namespace KWin
32{
33
35{
36 Q_OBJECT
37public:
38 explicit Monitor(QWidget *parent);
40
41 void setEdgeEnabled(int edge, bool enabled);
42 void setEdgeHidden(int edge, bool set);
43 bool edgeHidden(int edge) const;
44 void clear();
45 void addEdgeItem(int edge, const QString &item);
46 void setEdgeItemEnabled(int edge, int index, bool enabled);
47 bool edgeItemEnabled(int edge, int index) const;
48 void selectEdgeItem(int edge, int index);
49 int selectedEdgeItem(int edge) const;
50
62Q_SIGNALS:
63 void changed();
64 void edgeSelectionChanged(int edge, int index);
65
66protected:
67 void resizeEvent(QResizeEvent *e) override;
68 bool event(QEvent *event) override;
69
70private:
71 class Corner;
72 void popup(Corner *c, QPoint pos);
73 void flip(Corner *c, QPoint pos);
74 void checkSize();
75 std::unique_ptr<QGraphicsScene> m_scene;
76 std::unique_ptr<QGraphicsView> m_view;
77 std::array<std::unique_ptr<Corner>, 8> m_items;
78 std::array<bool, 8> m_hidden;
79 std::array<std::unique_ptr<QMenu>, 8> m_popups;
80 std::array<QList<QAction *>, 8> m_popupActions;
81 std::array<std::unique_ptr<QActionGroup>, 8> m_actionGroups;
82};
83
84class Monitor::Corner : public QGraphicsRectItem
85{
86public:
87 Corner(Monitor *m);
88 ~Corner() override;
89 void setActive(bool active);
90 bool active() const;
91
92protected:
93 void contextMenuEvent(QGraphicsSceneContextMenuEvent *e) override;
94 void mousePressEvent(QGraphicsSceneMouseEvent *e) override;
95 void hoverEnterEvent(QGraphicsSceneHoverEvent *e) override;
96 void hoverLeaveEvent(QGraphicsSceneHoverEvent *e) override;
97 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override;
98
99private:
100 Monitor *const m_monitor;
101 const std::unique_ptr<KSvg::FrameSvg> m_button;
102 bool m_active = false;
103 bool m_hover = false;
104};
105
106} // namespace
bool active() const
Definition monitor.cpp:282
void mousePressEvent(QGraphicsSceneMouseEvent *e) override
Definition monitor.cpp:227
void contextMenuEvent(QGraphicsSceneContextMenuEvent *e) override
Definition monitor.cpp:222
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget=nullptr) override
Definition monitor.cpp:232
void hoverEnterEvent(QGraphicsSceneHoverEvent *e) override
Definition monitor.cpp:264
void setActive(bool active)
Definition monitor.cpp:276
void hoverLeaveEvent(QGraphicsSceneHoverEvent *e) override
Definition monitor.cpp:270
bool edgeHidden(int edge) const
Definition monitor.cpp:128
int selectedEdgeItem(int edge) const
Definition monitor.cpp:166
void selectEdgeItem(int edge, int index)
Definition monitor.cpp:156
bool edgeItemEnabled(int edge, int index) const
Definition monitor.cpp:151
void clear()
Definition monitor.cpp:65
void addEdgeItem(int edge, const QString &item)
Definition monitor.cpp:133
void setEdgeEnabled(int edge, bool enabled)
Definition monitor.cpp:111
bool event(QEvent *event) override
Definition monitor.cpp:81
void resizeEvent(QResizeEvent *e) override
Definition monitor.cpp:75
void setEdgeHidden(int edge, bool set)
Definition monitor.cpp:118
void setEdgeItemEnabled(int edge, int index, bool enabled)
Definition monitor.cpp:146
void edgeSelectionChanged(int edge, int index)
Monitor(QWidget *parent)
Definition monitor.cpp:38
Definition monitor.h:27