File indexing completed on 2025-04-20 13:26:08
0001 /* 0002 * Copyright 2017 Smith AR <audoban@openmailbox.org> 0003 * Michail Vourlakos <mvourlakos@gmail.com> 0004 * 0005 * This file is part of Latte-Dock 0006 * 0007 * Latte-Dock is free software; you can redistribute it and/or 0008 * modify it under the terms of the GNU General Public License as 0009 * published by the Free Software Foundation; either version 2 of 0010 * the License, or (at your option) any later version. 0011 * 0012 * Latte-Dock is distributed in the hope that it will be useful, 0013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0015 * GNU General Public License for more details. 0016 * 0017 * You should have received a copy of the GNU General Public License 0018 * along with this program. If not, see <http://www.gnu.org/licenses/>. 0019 */ 0020 0021 #ifndef UNIVERSALSETTINGS_H 0022 #define UNIVERSALSETTINGS_H 0023 0024 // local 0025 #include "../lattecorona.h" 0026 #include "../liblatte2/types.h" 0027 0028 // Qt 0029 #include <QObject> 0030 #include <QAbstractItemModel> 0031 #include <QHash> 0032 #include <QPair> 0033 #include <QPointer> 0034 #include <QQmlListProperty> 0035 #include <QScreen> 0036 0037 // KDE 0038 #include <KConfigGroup> 0039 #include <KSharedConfig> 0040 0041 namespace Latte { 0042 namespace Layouts { 0043 class Manager; 0044 } 0045 } 0046 0047 namespace Latte { 0048 //width_scale, height_scale 0049 typedef QPair<float, float> ScreenScales; 0050 0051 //! This class holds all the settings that are universally available 0052 //! independent of layouts 0053 class UniversalSettings : public QObject 0054 { 0055 Q_OBJECT 0056 Q_PROPERTY(bool autostart READ autostart WRITE setAutostart NOTIFY autostartChanged) 0057 Q_PROPERTY(bool badges3DStyle READ badges3DStyle WRITE setBadges3DStyle NOTIFY badges3DStyleChanged) 0058 Q_PROPERTY(bool colorsScriptIsPresent READ colorsScriptIsPresent NOTIFY colorsScriptIsPresentChanged) 0059 Q_PROPERTY(bool showInfoWindow READ showInfoWindow WRITE setShowInfoWindow NOTIFY showInfoWindowChanged) 0060 0061 Q_PROPERTY(QString currentLayoutName READ currentLayoutName WRITE setCurrentLayoutName NOTIFY currentLayoutNameChanged) 0062 0063 Q_PROPERTY(QStringList launchers READ launchers WRITE setLaunchers NOTIFY launchersChanged) 0064 0065 Q_PROPERTY(Latte::Types::MouseSensitivity mouseSensitivity READ mouseSensitivity WRITE setMouseSensitivity NOTIFY mouseSensitivityChanged) 0066 0067 Q_PROPERTY(QQmlListProperty<QScreen> screens READ screens) 0068 0069 public: 0070 UniversalSettings(KSharedConfig::Ptr config, QObject *parent = nullptr); 0071 ~UniversalSettings() override; 0072 0073 void load(); 0074 0075 bool autostart() const; 0076 void setAutostart(bool state); 0077 0078 bool badges3DStyle() const; 0079 void setBadges3DStyle(bool enable); 0080 0081 bool canDisableBorders() const; 0082 void setCanDisableBorders(bool enable); 0083 0084 bool colorsScriptIsPresent() const; 0085 0086 bool kwin_metaForwardedToLatte() const; 0087 void kwin_forwardMetaToLatte(bool forward); 0088 0089 bool kwin_borderlessMaximizedWindowsEnabled() const; 0090 void kwin_setDisabledMaximizedBorders(bool disable); 0091 0092 bool metaPressAndHoldEnabled() const; 0093 void setMetaPressAndHoldEnabled(bool enabled); 0094 0095 bool showInfoWindow() const; 0096 void setShowInfoWindow(bool show); 0097 0098 int version() const; 0099 void setVersion(int ver); 0100 0101 int screenTrackerInterval() const; 0102 void setScreenTrackerInterval(int duration); 0103 0104 QString currentLayoutName() const; 0105 void setCurrentLayoutName(QString layoutName); 0106 0107 QString lastNonAssignedLayoutName() const; 0108 void setLastNonAssignedLayoutName(QString layoutName); 0109 0110 QSize downloadWindowSize() const; 0111 void setDownloadWindowSize(QSize size); 0112 0113 QSize layoutsWindowSize() const; 0114 void setLayoutsWindowSize(QSize size); 0115 0116 QStringList layoutsColumnWidths() const; 0117 void setLayoutsColumnWidths(QStringList widths); 0118 0119 QStringList launchers() const; 0120 void setLaunchers(QStringList launcherList); 0121 0122 Types::MouseSensitivity mouseSensitivity() const; 0123 void setMouseSensitivity(Types::MouseSensitivity sensitivity); 0124 0125 QQmlListProperty<QScreen> screens(); 0126 static int countScreens(QQmlListProperty<QScreen> *property); //! is needed by screens() 0127 static QScreen *atScreens(QQmlListProperty<QScreen> *property, int index); //! is needed by screens() 0128 0129 public slots: 0130 Q_INVOKABLE QString splitterIconPath(); 0131 Q_INVOKABLE QString trademarkIconPath(); 0132 0133 Q_INVOKABLE float screenWidthScale(QString screenName) const; 0134 Q_INVOKABLE float screenHeightScale(QString screenName) const; 0135 Q_INVOKABLE void setScreenScales(QString screenName, float widthScale, float heightScale); 0136 0137 signals: 0138 void autostartChanged(); 0139 void badges3DStyleChanged(); 0140 void canDisableBordersChanged(); 0141 void colorsScriptIsPresentChanged(); 0142 void currentLayoutNameChanged(); 0143 void downloadWindowSizeChanged(); 0144 void lastNonAssignedLayoutNameChanged(); 0145 void layoutsColumnWidthsChanged(); 0146 void layoutsWindowSizeChanged(); 0147 void launchersChanged(); 0148 void layoutsMemoryUsageChanged(); 0149 void metaPressAndHoldEnabledChanged(); 0150 void mouseSensitivityChanged(); 0151 void screensCountChanged(); 0152 void screenScalesChanged(); 0153 void screenTrackerIntervalChanged(); 0154 void showInfoWindowChanged(); 0155 void versionChanged(); 0156 0157 private slots: 0158 void loadConfig(); 0159 void loadScalesConfig(); 0160 void saveConfig(); 0161 void saveScalesConfig(); 0162 0163 void recoverKWinOptions(); 0164 void updateColorsScriptIsPresent(); 0165 void trackedFileChanged(const QString &file); 0166 0167 private: 0168 void cleanupSettings(); 0169 0170 void setColorsScriptIsPresent(bool present); 0171 0172 Types::LayoutsMemoryUsage layoutsMemoryUsage() const; 0173 void setLayoutsMemoryUsage(Types::LayoutsMemoryUsage layoutsMemoryUsage); 0174 0175 private: 0176 bool m_badges3DStyle{false}; 0177 bool m_canDisableBorders{false}; 0178 bool m_colorsScriptIsPresent{false}; 0179 bool m_metaPressAndHoldEnabled{true}; 0180 bool m_showInfoWindow{true}; 0181 0182 //!kwinrc tracking 0183 bool m_kwinMetaForwardedToLatte{false}; 0184 bool m_kwinBorderlessMaximizedWindows{false}; 0185 0186 //when there isnt a version it is an old universal file 0187 int m_version{1}; 0188 0189 int m_screenTrackerInterval{2500}; 0190 0191 QString m_currentLayoutName; 0192 QString m_lastNonAssignedLayoutName; 0193 QSize m_downloadWindowSize{800, 550}; 0194 QSize m_layoutsWindowSize{700, 450}; 0195 0196 QStringList m_layoutsColumnWidths; 0197 QStringList m_launchers; 0198 0199 Types::LayoutsMemoryUsage m_memoryUsage; 0200 Types::MouseSensitivity m_mouseSensitivity{Types::HighSensitivity}; 0201 0202 //! ScreenName, <width_scale, height_scale> 0203 QHash<QString, ScreenScales> m_screenScales; 0204 0205 QPointer<Latte::Corona> m_corona; 0206 0207 KConfigGroup m_screenScalesGroup; 0208 KConfigGroup m_universalGroup; 0209 KSharedConfig::Ptr m_config; 0210 0211 friend class Layouts::Manager; 0212 friend class Latte::Corona; 0213 }; 0214 0215 } 0216 0217 #endif //UNIVERSALSETTINGS_H