File indexing completed on 2024-04-28 04:40:43
0001 /* 0002 * SPDX-FileCopyrightText: 2020 Carson Black <uhhadd@gmail.com> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "toolbar_private.h" 0008 0009 #include <KSharedConfig> 0010 #include <KConfigGroup> 0011 0012 #include <QJsonArray> 0013 #include <QJsonDocument> 0014 #include <QJsonObject> 0015 0016 int ToolbarPrivate::calculateDragIndex(QQuickItem *rowLayout, QQuickItem *draggee, qreal currentDragX) 0017 { 0018 QList<int> midpoints; 0019 for (const auto &item: rowLayout->childItems()) { 0020 if (item != draggee) { 0021 midpoints << (item->x() + (item->width() / 2)); 0022 } 0023 } 0024 for (int leftIndex = 0, rightIndex = 1; rightIndex < midpoints.length();) { 0025 if (midpoints[leftIndex] < currentDragX && currentDragX <= midpoints[rightIndex]) { 0026 return rightIndex; 0027 } 0028 leftIndex++; 0029 rightIndex++; 0030 } 0031 return [midpoints,currentDragX]() { 0032 if (currentDragX < midpoints.first()) { 0033 // we're to the left of the list 0034 return 0; 0035 } else { 0036 // we're to the right of the list 0037 return midpoints.length()-1; 0038 } 0039 }(); 0040 }; 0041 0042 QJsonArray ToolbarPrivate::recallToolbar(const QString &id) 0043 { 0044 auto config = KSharedConfig::openConfig(); 0045 auto group = config->group("org.kde.kije"); 0046 auto toolbarsGroup = group.group("toolbars"); 0047 return QJsonDocument::fromJson(toolbarsGroup.readEntry(id, QString("[]")).toLocal8Bit()).array(); 0048 } 0049 0050 const std::list<const char*> PROPERTIES = { 0051 "identifier", 0052 "shortcut" 0053 }; 0054 0055 static QJsonObject toJsonObject(QObject* obj) 0056 { 0057 QJsonObject ret; 0058 0059 for (auto prop : PROPERTIES) { 0060 ret[prop] = QJsonValue::fromVariant(obj->property(prop)); 0061 } 0062 0063 qDebug() << ret; 0064 0065 return ret; 0066 } 0067 0068 static void fromJsonObject(const QJsonObject& map, QObject* obj) 0069 { 0070 for (auto prop : PROPERTIES) { 0071 obj->setProperty(prop, map[prop]); 0072 } 0073 } 0074 0075 void ToolbarPrivate::setOn(QJsonObject from, QObject *on) 0076 { 0077 fromJsonObject(from, on); 0078 } 0079 0080 void ToolbarPrivate::serializeToolbar(const QString &id, QQmlListReference data) 0081 { 0082 auto config = KSharedConfig::openConfig(); 0083 auto group = config->group("org.kde.kije"); 0084 auto toolbarsGroup = group.group("toolbars"); 0085 QJsonArray list; 0086 for (int index = 0; index < data.count(); index++) { 0087 list << toJsonObject(data.at(index)); 0088 } 0089 toolbarsGroup.writeEntry(id, QJsonDocument(list).toJson()); 0090 toolbarsGroup.config()->sync(); 0091 } 0092 0093 void ToolbarPrivate::forgetToolbar(const QString &id) 0094 { 0095 auto config = KSharedConfig::openConfig(); 0096 auto group = config->group("org.kde.kije"); 0097 auto toolbarsGroup = group.group("toolbars"); 0098 toolbarsGroup.writeEntry(id, ""); 0099 toolbarsGroup.config()->sync(); 0100 } 0101 0102 void ToolbarPrivate::saveJSON(const QString& id, const QString& it) 0103 { 0104 auto config = KSharedConfig::openConfig(); 0105 auto group = config->group("org.kde.kije"); 0106 auto toolbarsGroup = group.group("windowstates"); 0107 toolbarsGroup.writeEntry(id, it); 0108 toolbarsGroup.config()->sync(); 0109 } 0110 0111 QString ToolbarPrivate::recallJSON(const QString& id) 0112 { 0113 auto config = KSharedConfig::openConfig(); 0114 auto group = config->group("org.kde.kije"); 0115 auto toolbarsGroup = group.group("windowstates"); 0116 0117 return toolbarsGroup.readEntry<QString>(id, QString("{}")); 0118 }