/* * Deskflow -- mouse and keyboard sharing utility * SPDX-FileCopyrightText: (C) 2025 Chris Rizzitello * SPDX-FileCopyrightText: (C) 2012 Symless Ltd. * SPDX-FileCopyrightText: (C) 2008 Volker Lanz * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception */ #pragma once #include "ScreenConfig.h" #include "common/QSettingsProxy.h" #include #include #include #include #include class QSettings; class QTextStream; class ScreenSettingsDialog; class Screen : public ScreenConfig { friend class ScreenSettingsDialog; friend class ScreenSetupModel; friend class ScreenSetupView; friend QDataStream &operator<<(QDataStream &outStream, const Screen &screen) { return outStream << screen.name() << screen.switchCornerSize() << screen.aliases() << screen.modifiers() << screen.switchCorners() << screen.fixes() << screen.isServer(); } friend QDataStream &operator>>(QDataStream &inStream, Screen &screen) { return inStream >> screen.m_Name >> screen.m_SwitchCornerSize >> screen.m_Aliases >> screen.m_Modifiers >> screen.m_SwitchCorners >> screen.m_Fixes >> screen.m_isServer; } public: explicit Screen(const QString &name = QString()); [[nodiscard]] const QPixmap &pixmap() const { return m_Pixmap; } [[nodiscard]] const QString &name() const { return m_Name; } [[nodiscard]] const QStringList &aliases() const { return m_Aliases; } [[nodiscard]] bool isNull() const { return m_Name.isEmpty(); } [[nodiscard]] int modifier(int m) const { return m_Modifiers[m] == static_cast(ScreenConfig::Modifier::DefaultMod) ? m : m_Modifiers[m]; } [[nodiscard]] const QList &modifiers() const { return m_Modifiers; } [[nodiscard]] bool switchCorner(int c) const { return m_SwitchCorners[c]; } [[nodiscard]] const QList &switchCorners() const { return m_SwitchCorners; } [[nodiscard]] int switchCornerSize() const { return m_SwitchCornerSize; } [[nodiscard]] bool fix(const Fix f) const { return m_Fixes[static_cast(f)]; } [[nodiscard]] const QList &fixes() const { return m_Fixes; } void loadSettings(QSettingsProxy &settings); void saveSettings(QSettingsProxy &settings) const; [[nodiscard]] QString screensSection() const; [[nodiscard]] QString aliasesSection() const; [[nodiscard]] bool swapped() const { return m_Swapped; } void setName(const QString &name) { m_Name = name; } [[nodiscard]] bool isServer() const { return m_isServer; } void markAsServer() { m_isServer = true; } bool operator==(const Screen &screen) const; protected: QStringList &aliases() { return m_Aliases; } void setModifier(const Modifier m, const int n) { m_Modifiers[static_cast(m)] = n; } QList &modifiers() { return m_Modifiers; } void addAlias(const QString &alias) { m_Aliases.append(alias); } void setSwitchCorner(const SwitchCorner c, const bool on) { m_SwitchCorners[static_cast(c)] = on; } QList &switchCorners() { return m_SwitchCorners; } void setSwitchCornerSize(const int val) { m_SwitchCornerSize = val; } void setFix(const Fix f, const bool on) { m_Fixes[static_cast(f)] = on; } QList &fixes() { return m_Fixes; } void setSwapped(const bool on) { m_Swapped = on; } private: QPixmap m_Pixmap = QIcon::fromTheme("video-display").pixmap(QSize(96, 96)); QString m_Name = {}; QStringList m_Aliases = {}; QList m_Modifiers = {0, 1, 2, 3, 4, 5}; QList m_SwitchCorners = {false, false, false, false}; int m_SwitchCornerSize = 0; QList m_Fixes{false, false, false, false}; bool m_Swapped = false; bool m_isServer = false; };