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