From 72fdf4563b3066924d01549b7f81e957ebdaa0d6 Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Wed, 25 Mar 2020 01:30:30 +0200 Subject: [PATCH] improve AbstractLayout background infrastructure --the new infrastructure can remember settings between CustomBackgroundStyle and ColorStyle in order to help the user to not have to reassign values when changing backgrounds, between predefined colors style and custom one. --- app/layout/abstractlayout.cpp | 163 +++++++++++------- app/layout/abstractlayout.h | 28 ++- .../controllers/layoutscontroller.cpp | 4 +- app/settings/models/layoutsmodel.cpp | 2 +- .../package/contents/ui/editmode/Visual.qml | 2 +- liblatte2/types.h | 7 + 6 files changed, 137 insertions(+), 69 deletions(-) diff --git a/app/layout/abstractlayout.cpp b/app/layout/abstractlayout.cpp index 07f4719c0..79eb198de 100644 --- a/app/layout/abstractlayout.cpp +++ b/app/layout/abstractlayout.cpp @@ -58,12 +58,20 @@ AbstractLayout::~AbstractLayout() void AbstractLayout::init() { - connect(this, &AbstractLayout::backgroundChanged, this, &AbstractLayout::saveConfig); + connect(this, &AbstractLayout::backgroundStyleChanged, this, &AbstractLayout::backgroundChanged); + connect(this, &AbstractLayout::backgroundStyleChanged, this, &AbstractLayout::textColorChanged); + connect(this, &AbstractLayout::customBackgroundChanged, this, &AbstractLayout::backgroundChanged); + connect(this, &AbstractLayout::customTextColorChanged, this, &AbstractLayout::textColorChanged); + connect(this, &AbstractLayout::colorChanged, this, &AbstractLayout::backgroundChanged); connect(this, &AbstractLayout::colorChanged, this, &AbstractLayout::textColorChanged); + + connect(this, &AbstractLayout::customBackgroundChanged, this, &AbstractLayout::saveConfig); + connect(this, &AbstractLayout::customTextColorChanged, this, &AbstractLayout::saveConfig); + connect(this, &AbstractLayout::colorChanged, this, &AbstractLayout::saveConfig); + connect(this, &AbstractLayout::lastUsedActivityChanged, this, &AbstractLayout::saveConfig); connect(this, &AbstractLayout::launchersChanged, this, &AbstractLayout::saveConfig); connect(this, &AbstractLayout::preferredForShortcutsTouchedChanged, this, &AbstractLayout::saveConfig); - connect(this, &AbstractLayout::textColorChanged, this, &AbstractLayout::saveConfig); connect(this, &AbstractLayout::versionChanged, this, &AbstractLayout::saveConfig); } @@ -101,29 +109,53 @@ void AbstractLayout::setPreferredForShortcutsTouched(bool touched) QString AbstractLayout::background() const { - return m_background; + if (m_backgroundStyle == Types::ColorStyle) { + return m_color; + } else { + return m_customBackground; + } } -void AbstractLayout::setBackground(QString path) +QString AbstractLayout::textColor() const { - if (path == m_background) { - return; + if (m_backgroundStyle == Types::ColorStyle) { + return predefinedTextColor(); + } else { + return m_customTextColor; } +} + +Types::BackgroundStyle AbstractLayout::backgroundStyle() const +{ + return m_backgroundStyle; +} - if (!path.isEmpty() && !QFileInfo(path).exists()) { +void AbstractLayout::setBackgroundStyle(const Types::BackgroundStyle &style) +{ + if (m_backgroundStyle == style) { return; } - m_background = path; + m_backgroundStyle = style; + emit backgroundStyleChanged(); +} - //! initialize the text color also - if (path.isEmpty()) { - setTextColor(QString()); - } - emit backgroundChanged(); +QString AbstractLayout::customBackground() const +{ + return m_customBackground; } +void AbstractLayout::setCustomBackground(const QString &background) +{ + if (m_customBackground == background) { + return; + } + + m_customBackground = background; + + emit customBackgroundChanged(); +} QString AbstractLayout::file() const { @@ -190,53 +222,57 @@ void AbstractLayout::clearLastUsedActivity() emit lastUsedActivityChanged(); } -QString AbstractLayout::textColor() const +QString AbstractLayout::predefinedTextColor() const { //! the user is in default layout theme - if (m_background.isEmpty()) { - if (m_color == "blue") { - return "#D7E3FF"; - } else if (m_color == "brown") { - return "#F1DECB"; - } else if (m_color == "darkgrey") { - return "#ECECEC"; - } else if (m_color == "gold") { - return "#7C3636"; - } else if (m_color == "green") { - return "#4D7549"; - } else if (m_color == "lightskyblue") { - return "#0C2A43"; - } else if (m_color == "orange") { - return "#6F3902"; - } else if (m_color == "pink") { - return "#743C46"; - } else if (m_color == "purple") { - return "#ECD9FF"; - } else if (m_color == "red") { - return "#F3E4E4"; - } else if (m_color == "wheat") { - return "#6A4E25"; - } else { - return "#FCFCFC"; - } + + if (m_color == "blue") { + return "#D7E3FF"; + } else if (m_color == "brown") { + return "#F1DECB"; + } else if (m_color == "darkgrey") { + return "#ECECEC"; + } else if (m_color == "gold") { + return "#7C3636"; + } else if (m_color == "green") { + return "#4D7549"; + } else if (m_color == "lightskyblue") { + return "#0C2A43"; + } else if (m_color == "orange") { + return "#6F3902"; + } else if (m_color == "pink") { + return "#743C46"; + } else if (m_color == "purple") { + return "#ECD9FF"; + } else if (m_color == "red") { + return "#F3E4E4"; + } else if (m_color == "wheat") { + return "#6A4E25"; + } else { + return "#FCFCFC"; } +} - return "#" + m_textColor; +QString AbstractLayout::customTextColor() const +{ + return m_customTextColor; } -void AbstractLayout::setTextColor(QString color) +void AbstractLayout::setCustomTextColor(const QString &customColor) { + QString cuColor = customColor; + //! remove # if someone is trying to set it this way - if (color.startsWith("#")) { - color.remove(0, 1); + if (cuColor.startsWith("#")) { + cuColor.remove(0, 1); } - if (m_textColor == color) { + if (m_customTextColor == cuColor) { return; } - m_textColor = color; - emit textColorChanged(); + m_customTextColor = cuColor; + emit customTextColorChanged(); } QStringList AbstractLayout::launchers() const @@ -288,23 +324,29 @@ QString AbstractLayout::layoutName(const QString &fileName) void AbstractLayout::loadConfig() { m_version = m_layoutGroup.readEntry("version", 2); - m_color = m_layoutGroup.readEntry("color", QString("blue")); - m_textColor = m_layoutGroup.readEntry("textColor", QString("fcfcfc")); m_launchers = m_layoutGroup.readEntry("launchers", QStringList()); m_lastUsedActivity = m_layoutGroup.readEntry("lastUsedActivity", QString()); m_preferredForShortcutsTouched = m_layoutGroup.readEntry("preferredForShortcutsTouched", false); - QString back = m_layoutGroup.readEntry("background", ""); + m_color = m_layoutGroup.readEntry("color", QString("blue")); + m_backgroundStyle = static_cast(m_layoutGroup.readEntry("backgroundStyle", (int)Types::ColorStyle)); - if (!back.isEmpty()) { - if (QFileInfo(back).exists()) { - m_background = back; - } else { - m_layoutGroup.writeEntry("background", QString()); - } - } + QString deprecatedTextColor = m_layoutGroup.readEntry("textColor", QString("fcfcfc")); + QString deprecatedBackground = m_layoutGroup.readEntry("background", QString()); + + if (deprecatedBackground.startsWith("/")) { + m_customBackground = deprecatedBackground; + m_customTextColor = deprecatedTextColor; + setBackgroundStyle(Types::CustomBackgroundStyle); - // emit activitiesChanged();*/ + m_layoutGroup.writeEntry("background", QString()); + m_layoutGroup.writeEntry("textColor", QString()); + + saveConfig(); + } else { + m_customBackground = m_layoutGroup.readEntry("customBackground", QString("")); + m_customTextColor = m_layoutGroup.readEntry("customTextColor", QString("fcfcfc")); + } } void AbstractLayout::saveConfig() @@ -313,9 +355,10 @@ void AbstractLayout::saveConfig() m_layoutGroup.writeEntry("version", m_version); m_layoutGroup.writeEntry("color", m_color); m_layoutGroup.writeEntry("launchers", m_launchers); - m_layoutGroup.writeEntry("background", m_background); + m_layoutGroup.writeEntry("backgroundStyle", (int)m_backgroundStyle); + m_layoutGroup.writeEntry("customBackground", m_customBackground); + m_layoutGroup.writeEntry("customTextColor", m_customTextColor); m_layoutGroup.writeEntry("lastUsedActivity", m_lastUsedActivity); - m_layoutGroup.writeEntry("textColor", m_textColor); m_layoutGroup.writeEntry("preferredForShortcutsTouched", m_preferredForShortcutsTouched); m_layoutGroup.sync(); diff --git a/app/layout/abstractlayout.h b/app/layout/abstractlayout.h index 1c5aa2d68..bac705231 100644 --- a/app/layout/abstractlayout.h +++ b/app/layout/abstractlayout.h @@ -20,6 +20,9 @@ #ifndef ABSTRACTLAYOUT_H #define ABSTRACTLAYOUT_H +// local +#include "../../liblatte2/types.h" + // Qt #include @@ -59,11 +62,10 @@ class AbstractLayout : public QObject Q_PROPERTY(bool preferredForShortcutsTouched READ preferredForShortcutsTouched WRITE setPreferredForShortcutsTouched NOTIFY preferredForShortcutsTouchedChanged) Q_PROPERTY(QString background READ background NOTIFY backgroundChanged) - Q_PROPERTY(QString color READ color WRITE setColor NOTIFY colorChanged) - Q_PROPERTY(QString lastUsedActivity READ lastUsedActivity NOTIFY lastUsedActivityChanged) Q_PROPERTY(QString textColor READ textColor NOTIFY textColorChanged) Q_PROPERTY(QStringList launchers READ launchers WRITE setLaunchers NOTIFY launchersChanged) + Q_PROPERTY(QString lastUsedActivity READ lastUsedActivity NOTIFY lastUsedActivityChanged) public: AbstractLayout(QObject *parent, QString layoutFile, QString assignedName = QString()); @@ -84,14 +86,24 @@ public: QString file() const; QString background() const; - void setBackground(QString path); QString color() const; void setColor(QString color); + QString customBackground() const; + void setCustomBackground(const QString &background); + + QString customTextColor() const; + void setCustomTextColor(const QString &customColor); + + QString predefinedTextColor() const; + QString textColor() const; void setTextColor(QString color); + Types::BackgroundStyle backgroundStyle() const; + void setBackgroundStyle(const Types::BackgroundStyle &style); + QStringList launchers() const; void setLaunchers(QStringList launcherList); @@ -104,6 +116,9 @@ public: signals: void backgroundChanged(); + void backgroundStyleChanged(); + void customBackgroundChanged(); + void customTextColorChanged(); void colorChanged(); void fileChanged(); void lastUsedActivityChanged(); @@ -129,11 +144,13 @@ protected: //if version doesn't exist it is and old layout file int m_version{2}; - QString m_background; + QString m_customBackground; + QString m_customTextColor; QString m_color; QString m_lastUsedActivity; //the last used activity for this layout - QString m_textColor; + + Types::BackgroundStyle m_backgroundStyle{Types::ColorStyle}; QString m_layoutFile; QString m_layoutName; @@ -141,6 +158,7 @@ protected: QStringList m_launchers; KConfigGroup m_layoutGroup; + }; } diff --git a/app/settings/controllers/layoutscontroller.cpp b/app/settings/controllers/layoutscontroller.cpp index b13cb2c98..28ab69981 100644 --- a/app/settings/controllers/layoutscontroller.cpp +++ b/app/settings/controllers/layoutscontroller.cpp @@ -692,7 +692,7 @@ void Layouts::save() generic->unlock(); } - if (iLayoutCurrentData.color.startsWith("/")) { + /* if (iLayoutCurrentData.color.startsWith("/")) { //it is image file in such case if (iLayoutCurrentData.color != generic->background()) { generic->setBackground(iLayoutCurrentData.color); @@ -707,7 +707,7 @@ void Layouts::save() generic->setBackground(QString()); generic->setTextColor(QString()); } - } + }*/ //! update only the Central-specific layout parts CentralLayout *centralActive = isOriginalLayout ? m_handler->corona()->layoutsManager()->synchronizer()->centralLayout(iLayoutOriginalData.name) : nullptr; diff --git a/app/settings/models/layoutsmodel.cpp b/app/settings/models/layoutsmodel.cpp index 110707c3f..dff962ba7 100644 --- a/app/settings/models/layoutsmodel.cpp +++ b/app/settings/models/layoutsmodel.cpp @@ -439,7 +439,7 @@ QVariant Layouts::data(const QModelIndex &index, int role) const } if (role == Qt::UserRole) { - return m_layoutsTable[row].background.isEmpty() ? m_layoutsTable[row].color : m_layoutsTable[row].background; + return m_layoutsTable[row].background; } break; case NAMECOLUMN: diff --git a/containment/package/contents/ui/editmode/Visual.qml b/containment/package/contents/ui/editmode/Visual.qml index 8310bc041..ebccc0cbb 100644 --- a/containment/package/contents/ui/editmode/Visual.qml +++ b/containment/package/contents/ui/editmode/Visual.qml @@ -128,7 +128,7 @@ Item{ opacity: 0 fillMode: Image.Tile - source: hasBackground ? latteView.layout.background : "../../icons/"+editVisual.layoutColor+"print.jpg" + source: hasBackground ? latteView.layout.background : "../../icons/"+latteView.layout.background+"print.jpg" readonly property bool hasBackground: (latteView && latteView.layout && latteView.layout.background.startsWith("/")) ? true : false diff --git a/liblatte2/types.h b/liblatte2/types.h index d8ffe09af..440792a62 100644 --- a/liblatte2/types.h +++ b/liblatte2/types.h @@ -251,6 +251,13 @@ public: Installed = 4 }; Q_ENUM(ImportExportState); + + enum BackgroundStyle + { + ColorStyle = 0, + CustomBackgroundStyle + }; + Q_ENUM(BackgroundStyle); }; }//end of namespace