-
Notifications
You must be signed in to change notification settings - Fork 1
/
kcm.h
132 lines (106 loc) · 4.48 KB
/
kcm.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/********************************************************************
Copyright © 2019 Roman Gilg <subdiff@gmail.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************/
#pragma once
#include "output_model.h"
#include <KQuickManagedConfigModule>
namespace Disman
{
class ConfigOperation;
}
class ConfigHandler;
class OrientationSensor;
class OutputIdentifier;
class KCMKDisplay : public KQuickManagedConfigModule
{
Q_OBJECT
Q_PROPERTY(OutputModel* outputModel READ outputModel NOTIFY outputModelChanged)
Q_PROPERTY(bool backendReady READ backendReady NOTIFY backendReadyChanged)
Q_PROPERTY(bool screenNormalized READ screenNormalized NOTIFY screenNormalizedChanged)
Q_PROPERTY(bool perOutputScaling READ perOutputScaling NOTIFY perOutputScalingChanged)
Q_PROPERTY(bool adaptiveSyncSupported READ supports_adaptive_sync NOTIFY
supports_adaptive_sync_changed)
Q_PROPERTY(bool primaryOutputSupported READ primaryOutputSupported NOTIFY
primaryOutputSupportedChanged)
Q_PROPERTY(bool outputReplicationSupported READ outputReplicationSupported NOTIFY
outputReplicationSupportedChanged)
Q_PROPERTY(qreal globalScale READ globalScale WRITE setGlobalScale NOTIFY globalScaleChanged)
Q_PROPERTY(int outputRetention READ outputRetention WRITE setOutputRetention NOTIFY
outputRetentionChanged)
Q_PROPERTY(
bool autoRotationSupported READ autoRotationSupported NOTIFY autoRotationSupportedChanged)
Q_PROPERTY(bool orientationSensorAvailable READ orientationSensorAvailable NOTIFY
orientationSensorAvailableChanged)
Q_PROPERTY(bool tabletModeAvailable READ tabletModeAvailable NOTIFY tabletModeAvailableChanged)
public:
enum InvalidConfigReason {
NoEnabledOutputs,
ConfigHasGaps,
};
Q_ENUM(InvalidConfigReason)
KCMKDisplay(QObject* parent, const KPluginMetaData& data, const QVariantList& args);
~KCMKDisplay() override = default;
void load() override;
void save() override;
void defaults() override;
OutputModel* outputModel() const;
Q_INVOKABLE void identifyOutputs();
bool backendReady() const;
Q_INVOKABLE QSize normalizeScreen() const;
bool screenNormalized() const;
bool perOutputScaling() const;
bool primaryOutputSupported() const;
bool supports_adaptive_sync() const;
bool outputReplicationSupported() const;
qreal globalScale() const;
void setGlobalScale(qreal scale);
int outputRetention() const;
void setOutputRetention(int retention);
bool autoRotationSupported() const;
bool orientationSensorAvailable() const;
bool tabletModeAvailable() const;
Q_SIGNALS:
void backendReadyChanged();
void backendError();
void outputModelChanged();
void changed();
void screenNormalizedChanged();
void perOutputScalingChanged();
void supports_adaptive_sync_changed();
void primaryOutputSupportedChanged();
void outputReplicationSupportedChanged();
void globalScaleChanged();
void outputRetentionChanged();
void autoRotationSupportedChanged();
void orientationSensorAvailableChanged();
void tabletModeAvailableChanged();
void invalidConfig(InvalidConfigReason);
void errorOnSave();
void globalScaleWritten();
void outputConnect(bool connected);
private:
void setBackendReady(bool error);
void setScreenNormalized(bool normalized);
void fetchGlobalScale();
void writeGlobalScale();
void configReady(Disman::ConfigOperation* op);
void continueNeedsSaveCheck(bool needs);
std::unique_ptr<OutputIdentifier> m_outputIdentifier;
std::unique_ptr<ConfigHandler> m_config;
OrientationSensor* m_orientationSensor;
bool m_backendReady = false;
bool m_screenNormalized = true;
double m_globalScale = 1.;
double m_initialGlobalScale = 1.;
QTimer* m_loadCompressor;
};