deskflow/src/lib/gui/config/Screen.h

170 lines
3.9 KiB
C
Raw Normal View History

2012-06-10 16:50:54 +00:00
/*
* Deskflow -- mouse and keyboard sharing utility
* SPDX-FileCopyrightText: (C) 2025 Chris Rizzitello <sithlord48@gmail.com>
* SPDX-FileCopyrightText: (C) 2012 Symless Ltd.
* SPDX-FileCopyrightText: (C) 2008 Volker Lanz <vl@fidra.de>
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
2012-06-10 16:50:54 +00:00
*/
Implement safer memory use, improve dev env, fixed GUI bugs (#7407) * Improve dev script for daemon * Ignore `.user` files created by Qt * Add `FORCE_DESKTOP_PROCESS` option * Catch errors related to getting profile dir * Disable IPC entirely if forced desktop * Use in-class init for AppConfig members * Refactor config to use safer memory management * Improve launch config to make OS-specific debugger usage clearer * Re-enable MainWindowTests on Windows, further refactor for memory safety, fixed some include orders * Remove dead singleton code * Swap order of tests * Use HTTPs for URLs * Fixed compile errors for `SYNERGY_ENABLE_LICENSING` compile path * Restore exec function call * Remove extra link in cancel dialog * Fixed broken link on activation cancel UI * Close dialog if activated * Fixed macOS enum ref to kCurrentProcess * Improve wording on cancel activation dialog * WIP - Test timeout (compile error) * Finished timeout logic (with smart pointer) * Include string_view * Switch to thread from jthread (maybe not supported by macOS compiler?) * Improve comment * Disable test on Windows * Add TODO related to jthread on macOS * Refactor settings and paths on Windows * Launch in desktop mode on Windows * Remove arg quote wraps which break desktop mode * Fixed qFatal on Linux * Remove test value * Follow original `AppConfig` accessor convention * Disable service checkbox if not Windows * Simplify TLS control enable logic * Update command and Git ignore * Fixed code style * Fixed include consistency * Fixed includes in validator * Fixed lint errors * Update ChangeLog * Use smart pointer for core process * Remove unneccesary default operators * Don't halt on stderr
2024-07-22 16:48:02 +00:00
#pragma once
2012-06-10 16:50:54 +00:00
Implement safer memory use, improve dev env, fixed GUI bugs (#7407) * Improve dev script for daemon * Ignore `.user` files created by Qt * Add `FORCE_DESKTOP_PROCESS` option * Catch errors related to getting profile dir * Disable IPC entirely if forced desktop * Use in-class init for AppConfig members * Refactor config to use safer memory management * Improve launch config to make OS-specific debugger usage clearer * Re-enable MainWindowTests on Windows, further refactor for memory safety, fixed some include orders * Remove dead singleton code * Swap order of tests * Use HTTPs for URLs * Fixed compile errors for `SYNERGY_ENABLE_LICENSING` compile path * Restore exec function call * Remove extra link in cancel dialog * Fixed broken link on activation cancel UI * Close dialog if activated * Fixed macOS enum ref to kCurrentProcess * Improve wording on cancel activation dialog * WIP - Test timeout (compile error) * Finished timeout logic (with smart pointer) * Include string_view * Switch to thread from jthread (maybe not supported by macOS compiler?) * Improve comment * Disable test on Windows * Add TODO related to jthread on macOS * Refactor settings and paths on Windows * Launch in desktop mode on Windows * Remove arg quote wraps which break desktop mode * Fixed qFatal on Linux * Remove test value * Follow original `AppConfig` accessor convention * Disable service checkbox if not Windows * Simplify TLS control enable logic * Update command and Git ignore * Fixed code style * Fixed include consistency * Fixed includes in validator * Fixed lint errors * Update ChangeLog * Use smart pointer for core process * Remove unneccesary default operators * Don't halt on stderr
2024-07-22 16:48:02 +00:00
#include "ScreenConfig.h"
2012-06-10 16:50:54 +00:00
#include "common/QSettingsProxy.h"
#include <QIcon>
#include <QList>
2012-06-10 16:50:54 +00:00
#include <QPixmap>
#include <QString>
#include <QStringList>
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<int>(ScreenConfig::Modifier::DefaultMod) ? m : m_Modifiers[m];
}
[[nodiscard]] const QList<int> &modifiers() const
{
return m_Modifiers;
}
[[nodiscard]] bool switchCorner(int c) const
{
return m_SwitchCorners[c];
}
[[nodiscard]] const QList<bool> &switchCorners() const
{
return m_SwitchCorners;
}
[[nodiscard]] int switchCornerSize() const
{
return m_SwitchCornerSize;
}
2025-05-08 10:55:40 +00:00
[[nodiscard]] bool fix(const Fix f) const
{
2025-05-08 10:55:40 +00:00
return m_Fixes[static_cast<int8_t>(f)];
}
[[nodiscard]] const QList<bool> &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;
}
2025-05-08 10:55:40 +00:00
void setModifier(const Modifier m, const int n)
{
m_Modifiers[static_cast<int8_t>(m)] = n;
}
QList<int> &modifiers()
{
return m_Modifiers;
}
void addAlias(const QString &alias)
{
m_Aliases.append(alias);
}
2025-05-08 10:55:40 +00:00
void setSwitchCorner(const SwitchCorner c, const bool on)
{
m_SwitchCorners[static_cast<int8_t>(c)] = on;
}
QList<bool> &switchCorners()
{
return m_SwitchCorners;
}
2025-05-08 10:55:40 +00:00
void setSwitchCornerSize(const int val)
{
m_SwitchCornerSize = val;
}
2025-05-08 10:55:40 +00:00
void setFix(const Fix f, const bool on)
{
m_Fixes[static_cast<int8_t>(f)] = on;
}
QList<bool> &fixes()
{
return m_Fixes;
}
2025-05-08 10:55:40 +00:00
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<int> m_Modifiers = {0, 1, 2, 3, 4, 5, 6};
QList<bool> m_SwitchCorners = {false, false, false, false};
int m_SwitchCornerSize = 0;
QList<bool> m_Fixes{false, false, false, false};
bool m_Swapped = false;
bool m_isServer = false;
2012-06-10 16:50:54 +00:00
};