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 }