File indexing completed on 2024-04-28 05:31:32

0001 /*
0002  * SPDX-FileCopyrightText: 2021 Arjen Hiemstra <ahiemstra@heimr.nl>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.0-or-later
0005  */
0006 
0007 #include "FaceLoader.h"
0008 
0009 using namespace KSysGuard;
0010 
0011 class Q_DECL_HIDDEN FaceLoader::Private
0012 {
0013 public:
0014     Private(FaceLoader *qq)
0015         : q(qq)
0016     {
0017     }
0018     void setupController();
0019 
0020     FaceLoader *q;
0021 
0022     SensorFaceController *parentController = nullptr;
0023     SensorFaceController *controller = nullptr;
0024 
0025     QString groupName;
0026 
0027     bool complete = false;
0028 
0029     QJsonArray sensors;
0030     QString faceId;
0031     QVariantMap colors;
0032     QVariantMap labels;
0033     bool readOnly = true;
0034     bool showTitle = false;
0035 };
0036 
0037 FaceLoader::FaceLoader(QObject *parent)
0038     : QObject(parent)
0039     , d(new Private{this})
0040 {
0041 }
0042 
0043 FaceLoader::~FaceLoader() = default;
0044 
0045 SensorFaceController *FaceLoader::parentController() const
0046 {
0047     return d->parentController;
0048 }
0049 
0050 void FaceLoader::setParentController(SensorFaceController *newParentController)
0051 {
0052     if (newParentController == d->parentController) {
0053         return;
0054     }
0055 
0056     if (d->parentController) {
0057         d->parentController->disconnect(this);
0058     }
0059 
0060     if (d->controller) {
0061         d->controller->deleteLater();
0062     }
0063 
0064     d->parentController = newParentController;
0065 
0066     d->setupController();
0067 
0068     Q_EMIT parentControllerChanged();
0069 }
0070 
0071 QString FaceLoader::faceId() const
0072 {
0073     return d->faceId;
0074 }
0075 
0076 void FaceLoader::setFaceId(const QString &newFaceId)
0077 {
0078     if (newFaceId == d->faceId) {
0079         return;
0080     }
0081 
0082     d->faceId = newFaceId;
0083     if (d->controller) {
0084         d->controller->setFaceId(d->faceId);
0085     }
0086 
0087     Q_EMIT faceIdChanged();
0088 }
0089 
0090 QString FaceLoader::groupName() const
0091 {
0092     return d->groupName;
0093 }
0094 
0095 void FaceLoader::setGroupName(const QString &newGroupName)
0096 {
0097     if (newGroupName == d->groupName) {
0098         return;
0099     }
0100 
0101     d->groupName = newGroupName;
0102 
0103     d->setupController();
0104 
0105     Q_EMIT groupNameChanged();
0106 }
0107 
0108 QJsonArray FaceLoader::sensors() const
0109 {
0110     return d->sensors;
0111 }
0112 
0113 void FaceLoader::setSensors(const QJsonArray &newSensors)
0114 {
0115     if (newSensors == d->sensors) {
0116         return;
0117     }
0118 
0119     d->sensors = newSensors;
0120 
0121     if (d->controller) {
0122         d->controller->setHighPrioritySensorIds(d->sensors);
0123     }
0124 
0125     Q_EMIT sensorsChanged();
0126 }
0127 
0128 QVariantMap FaceLoader::colors() const
0129 {
0130     return d->colors;
0131 }
0132 
0133 void FaceLoader::setColors(const QVariantMap &newColors)
0134 {
0135     if (newColors == d->colors) {
0136         return;
0137     }
0138 
0139     d->colors = newColors;
0140     if (d->controller) {
0141         d->controller->setSensorColors(d->colors);
0142     }
0143     Q_EMIT colorsChanged();
0144 }
0145 
0146 QVariantMap FaceLoader::labels() const
0147 {
0148     return d->labels;
0149 }
0150 
0151 void FaceLoader::setLabels(const QVariantMap &newLabels)
0152 {
0153     if (newLabels == d->labels) {
0154         return;
0155     }
0156 
0157     d->labels = newLabels;
0158     if (d->controller) {
0159         d->controller->setSensorLabels(d->labels);
0160     }
0161     Q_EMIT labelsChanged();
0162 }
0163 
0164 bool FaceLoader::readOnly() const
0165 {
0166     return d->readOnly;
0167 }
0168 
0169 void FaceLoader::setReadOnly(bool newReadOnly)
0170 {
0171     if (newReadOnly == d->readOnly) {
0172         return;
0173     }
0174 
0175     d->readOnly = newReadOnly;
0176     if (d->controller) {
0177         d->controller->setShouldSync(!d->readOnly);
0178     }
0179     Q_EMIT readOnlyChanged();
0180 }
0181 
0182 SensorFaceController *FaceLoader::controller() const
0183 {
0184     return d->controller;
0185 }
0186 
0187 void FaceLoader::reload()
0188 {
0189     d->controller->reloadFaceConfiguration();
0190 }
0191 
0192 void FaceLoader::classBegin()
0193 {
0194 }
0195 
0196 void FaceLoader::componentComplete()
0197 {
0198     d->complete = true;
0199     d->setupController();
0200 }
0201 
0202 void FaceLoader::Private::setupController()
0203 {
0204     if (!parentController || groupName.isEmpty() || !complete) {
0205         return;
0206     }
0207 
0208     auto configGroup = parentController->configGroup().group(groupName);
0209     controller = new SensorFaceController(configGroup, qmlEngine(q));
0210     controller->setShouldSync(readOnly);
0211     controller->setHighPrioritySensorIds(sensors);
0212     controller->setSensorColors(colors);
0213     controller->setSensorLabels(labels);
0214     controller->setShowTitle(showTitle);
0215     controller->setFaceId(faceId);
0216 
0217     Q_EMIT q->controllerChanged();
0218 }