File indexing completed on 2024-05-05 17:34:27
0001 /* 0002 SPDX-FileCopyrightText: 2019 Roman Gilg <subdiff@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 #ifndef COMMON_CONTROL_H 0007 #define COMMON_CONTROL_H 0008 0009 #include <kscreen/output.h> 0010 #include <kscreen/types.h> 0011 0012 #include <QObject> 0013 #include <QVariantMap> 0014 #include <QVector> 0015 0016 class KDirWatch; 0017 0018 class Control : public QObject 0019 { 0020 Q_OBJECT 0021 public: 0022 enum class OutputRetention { 0023 Undefined = -1, 0024 Global = 0, 0025 Individual = 1, 0026 }; 0027 Q_ENUM(OutputRetention) 0028 0029 explicit Control(QObject *parent = nullptr); 0030 0031 ~Control() override = default; 0032 0033 virtual bool writeFile(); 0034 virtual void activateWatcher(); 0035 0036 Q_SIGNALS: 0037 void changed(); 0038 0039 protected: 0040 virtual QString dirPath() const; 0041 virtual QString filePath() const = 0; 0042 QString filePathFromHash(const QString &hash) const; 0043 void readFile(); 0044 QVariantMap &info(); 0045 const QVariantMap &constInfo() const; 0046 KDirWatch *watcher() const; 0047 0048 static OutputRetention convertVariantToOutputRetention(QVariant variant); 0049 0050 private: 0051 static QString s_dirName; 0052 QVariantMap m_info; 0053 KDirWatch *m_watcher = nullptr; 0054 }; 0055 0056 class ControlOutput; 0057 0058 class ControlConfig : public Control 0059 { 0060 Q_OBJECT 0061 public: 0062 explicit ControlConfig(KScreen::ConfigPtr config, QObject *parent = nullptr); 0063 0064 OutputRetention getOutputRetention(const KScreen::OutputPtr &output) const; 0065 OutputRetention getOutputRetention(const QString &outputId, const QString &outputName) const; 0066 void setOutputRetention(const KScreen::OutputPtr &output, OutputRetention value); 0067 void setOutputRetention(const QString &outputId, const QString &outputName, OutputRetention value); 0068 0069 qreal getScale(const KScreen::OutputPtr &output) const; 0070 void setScale(const KScreen::OutputPtr &output, qreal value); 0071 0072 bool getAutoRotate(const KScreen::OutputPtr &output) const; 0073 void setAutoRotate(const KScreen::OutputPtr &output, bool value); 0074 0075 bool getAutoRotateOnlyInTabletMode(const KScreen::OutputPtr &output) const; 0076 void setAutoRotateOnlyInTabletMode(const KScreen::OutputPtr &output, bool value); 0077 0078 KScreen::OutputPtr getReplicationSource(const KScreen::OutputPtr &output) const; 0079 void setReplicationSource(const KScreen::OutputPtr &output, const KScreen::OutputPtr &source); 0080 0081 uint32_t getOverscan(const KScreen::OutputPtr &output) const; 0082 void setOverscan(const KScreen::OutputPtr &output, const uint32_t value); 0083 0084 KScreen::Output::VrrPolicy getVrrPolicy(const KScreen::OutputPtr &output) const; 0085 void setVrrPolicy(const KScreen::OutputPtr &output, const KScreen::Output::VrrPolicy value); 0086 0087 KScreen::Output::RgbRange getRgbRange(const KScreen::OutputPtr &output) const; 0088 void setRgbRange(const KScreen::OutputPtr &output, const KScreen::Output::RgbRange value); 0089 0090 QString dirPath() const override; 0091 QString filePath() const override; 0092 0093 bool writeFile() override; 0094 void activateWatcher() override; 0095 0096 private: 0097 QVariantList getOutputs() const; 0098 void setOutputs(QVariantList outputsInfo); 0099 bool infoIsOutput(const QVariantMap &info, const QString &outputId, const QString &outputName) const; 0100 ControlOutput *getOutputControl(const QString &outputId, const QString &outputName) const; 0101 0102 template<typename T, typename F> 0103 T get(const KScreen::OutputPtr &output, const QString &name, F globalRetentionFunc, T defaultValue) const; 0104 template<typename T, typename F, typename V> 0105 void set(const KScreen::OutputPtr &output, const QString &name, F globalRetentionFunc, V value); 0106 0107 KScreen::ConfigPtr m_config; 0108 QStringList m_duplicateOutputIds; 0109 QVector<ControlOutput *> m_outputsControls; 0110 }; 0111 0112 class ControlOutput : public Control 0113 { 0114 Q_OBJECT 0115 public: 0116 explicit ControlOutput(KScreen::OutputPtr output, QObject *parent = nullptr); 0117 0118 QString id() const; 0119 QString name() const; 0120 0121 // TODO: scale auto value 0122 0123 qreal getScale() const; 0124 void setScale(qreal value); 0125 0126 bool getAutoRotate() const; 0127 void setAutoRotate(bool value); 0128 0129 bool getAutoRotateOnlyInTabletMode() const; 0130 void setAutoRotateOnlyInTabletMode(bool value); 0131 0132 uint32_t overscan() const; 0133 void setOverscan(uint32_t value); 0134 0135 KScreen::Output::VrrPolicy vrrPolicy() const; 0136 void setVrrPolicy(KScreen::Output::VrrPolicy value); 0137 0138 KScreen::Output::RgbRange rgbRange() const; 0139 void setRgbRange(KScreen::Output::RgbRange value); 0140 0141 QString dirPath() const override; 0142 QString filePath() const override; 0143 0144 private: 0145 KScreen::OutputPtr m_output; 0146 }; 0147 0148 #endif