1 /*
2     KWin - the KDE window manager
3     This file is part of the KDE project.
4 
5     SPDX-FileCopyrightText: 2009 Lucas Murray <lmurray@undefinedfire.com>
6     SPDX-FileCopyrightText: 2020 Cyril Rossi <cyril.rossi@enioka.com>
7 
8     SPDX-License-Identifier: GPL-2.0-or-later
9 */
10 
11 #ifndef __KWINSCREENEDGE_H__
12 #define __KWINSCREENEDGE_H__
13 
14 #include <QWidget>
15 
16 #include "kwinglobals.h"
17 
18 namespace KWin
19 {
20 
21 class Monitor;
22 
23 class KWinScreenEdge : public QWidget
24 {
25     Q_OBJECT
26 
27 public:
28     explicit KWinScreenEdge(QWidget *parent = nullptr);
29     ~KWinScreenEdge() override;
30 
31     void monitorHideEdge(ElectricBorder border, bool hidden);
32     void monitorEnableEdge(ElectricBorder border, bool enabled);
33 
34     void monitorAddItem(const QString &item);
35     void monitorItemSetEnabled(int index, bool enabled);
36 
37     QList<int> monitorCheckEffectHasEdge(int index) const;
38     int selectedEdgeItem(ElectricBorder border) const;
39 
40     void monitorChangeEdge(ElectricBorder border, int index);
41     void monitorChangeEdge(const QList<int> &borderList, int index);
42 
43     void monitorChangeDefaultEdge(ElectricBorder border, int index);
44     void monitorChangeDefaultEdge(const QList<int> &borderList, int index);
45 
46     // revert to reference settings and assess for saveNeeded and default changed
47     virtual void reload();
48     // reset to default settings and assess for saveNeeded and default changed
49     virtual void setDefaults();
50 
51 public Q_SLOTS:
52     void onChanged();
53     void createConnection();
54 
55 Q_SIGNALS:
56     void saveNeededChanged(bool isNeeded);
57     void defaultChanged(bool isDefault);
58 
59 private:
60     virtual Monitor *monitor() const = 0;
61     virtual bool isSaveNeeded() const;
62     virtual bool isDefault() const;
63 
64     // internal use, return Monitor::None if border equals ELECTRIC_COUNT or ElectricNone
65     static int electricBorderToMonitorEdge(ElectricBorder border);
66     static ElectricBorder monitorEdgeToElectricBorder(int edge);
67 
68 private:
69     QHash<ElectricBorder, int> m_reference; // reference settings
70     QHash<ElectricBorder, int> m_default; // default settings
71 };
72 
73 } // namespace
74 
75 #endif
76