1 /* 2 SPDX-FileCopyrightText: 2019 Michail Vourlakos <mvourlakos@gmail.com> 3 SPDX-License-Identifier: GPL-2.0-or-later 4 */ 5 6 #ifndef ABSTRACTLAYOUT_H 7 #define ABSTRACTLAYOUT_H 8 9 // Qt 10 #include <QObject> 11 12 // KDE 13 #include <KConfigGroup> 14 15 // Plasma 16 #include <Plasma> 17 18 namespace Plasma { 19 class Types; 20 } 21 22 namespace Latte { 23 namespace Layout { 24 Q_NAMESPACE 25 26 enum Type { 27 Abstract = 0, 28 Generic, 29 Central, 30 Shared 31 }; 32 Q_ENUM_NS(Type); 33 34 enum BackgroundStyle 35 { 36 ColorBackgroundStyle = 0, 37 PatternBackgroundStyle 38 }; 39 Q_ENUM_NS(BackgroundStyle); 40 41 } 42 } 43 44 namespace Latte { 45 namespace Layout { 46 47 const char MULTIPLELAYOUTSHIDDENNAME[] = ".multiple-layouts_hidden"; 48 49 class AbstractLayout : public QObject 50 { 51 Q_OBJECT 52 Q_PROPERTY(QString name READ name NOTIFY nameChanged) 53 54 Q_PROPERTY(bool preferredForShortcutsTouched READ preferredForShortcutsTouched WRITE setPreferredForShortcutsTouched NOTIFY preferredForShortcutsTouchedChanged) 55 56 Q_PROPERTY(int popUpMargin READ popUpMargin WRITE setPopUpMargin NOTIFY popUpMarginChanged) 57 58 Q_PROPERTY(QString icon READ icon NOTIFY iconChanged) 59 Q_PROPERTY(QString background READ background NOTIFY backgroundChanged) 60 Q_PROPERTY(QString textColor READ textColor NOTIFY textColorChanged) 61 62 Q_PROPERTY(QString schemeFile READ schemeFile WRITE setSchemeFile NOTIFY schemeFileChanged) 63 64 Q_PROPERTY(QStringList launchers READ launchers WRITE setLaunchers NOTIFY launchersChanged) 65 Q_PROPERTY(QString lastUsedActivity READ lastUsedActivity NOTIFY lastUsedActivityChanged) 66 67 public: 68 AbstractLayout(QObject *parent, QString layoutFile, QString assignedName = QString()); 69 ~AbstractLayout() override; 70 71 int version() const; 72 void setVersion(int ver); 73 74 bool preferredForShortcutsTouched() const; 75 void setPreferredForShortcutsTouched(bool touched); 76 77 int popUpMargin() const; 78 void setPopUpMargin(const int &margin); 79 80 QString lastUsedActivity() const; 81 void clearLastUsedActivity(); //!e.g. when we export a layout 82 83 QString name() const; 84 QString file() const; 85 86 virtual QString background() const; 87 88 QString color() const; 89 void setColor(QString color); 90 91 QString customBackground() const; 92 void setCustomBackground(const QString &background); 93 94 QString customTextColor() const; 95 void setCustomTextColor(const QString &customColor); 96 97 QString icon() const; 98 void setIcon(const QString &icon); 99 100 QString predefinedTextColor() const; 101 102 QString schemeFile() const; 103 void setSchemeFile(const QString &file); 104 105 virtual QString textColor() const; 106 void setTextColor(QString color); 107 108 BackgroundStyle backgroundStyle() const; 109 void setBackgroundStyle(const BackgroundStyle &style); 110 111 QStringList launchers() const; 112 void setLaunchers(QStringList launcherList); 113 114 virtual Type type() const; 115 116 void syncSettings(); 117 118 // STATIC 119 static QString defaultCustomTextColor(); 120 static QString defaultCustomBackground(); 121 static QString defaultTextColor(const QString &color); 122 static QString layoutName(const QString &fileName); 123 static QList<Plasma::Types::Location> combinedFreeEdges(const QList<Plasma::Types::Location> &edges1, 124 const QList<Plasma::Types::Location> &edges2); 125 126 signals: 127 void backgroundChanged(); 128 void backgroundStyleChanged(); 129 void customBackgroundChanged(); 130 void customTextColorChanged(); 131 void colorChanged(); 132 void fileChanged(); 133 void iconChanged(); 134 void lastUsedActivityChanged(); 135 void launchersChanged(); 136 void nameChanged(); 137 void popUpMarginChanged(); 138 void preferredForShortcutsTouchedChanged(); 139 void schemeFileChanged(); 140 void textColorChanged(); 141 void versionChanged(); 142 143 protected slots: 144 void loadConfig(); 145 void saveConfig(); 146 147 protected: 148 void init(); 149 void setName(QString name); 150 void setFile(QString file); 151 152 protected: 153 bool m_loadedCorrectly{false}; 154 bool m_preferredForShortcutsTouched{false}; 155 156 //if version doesn't exist it is and old layout file 157 int m_version{2}; 158 159 int m_popUpMargin{-1}; //default 160 161 QString m_customBackground; 162 QString m_customTextColor; 163 QString m_color; 164 QString m_lastUsedActivity; //the last used activity for this layout 165 QString m_icon; 166 QString m_schemeFile; 167 168 BackgroundStyle m_backgroundStyle{ColorBackgroundStyle}; 169 170 QString m_layoutFile; 171 QString m_layoutName; 172 173 QStringList m_launchers; 174 175 KConfigGroup m_layoutGroup; 176 177 }; 178 179 } 180 } 181 182 #endif 183