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 }