File indexing completed on 2024-05-05 17:43:12

0001 /*
0002  *   SPDX-FileCopyrightText: 2017 Ivan Cukic <ivan.cukic (at) kde.org>
0003  *
0004  *   SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005  */
0006 
0007 #include "dialogdsl.h"
0008 
0009 #include <QVBoxLayout>
0010 
0011 namespace DialogDsl
0012 {
0013 Key::Key(const QByteArray &key, const QString &translation)
0014     : QByteArray(key)
0015     , m_translation(translation)
0016 {
0017 }
0018 
0019 QString Key::translation() const
0020 {
0021     return m_translation;
0022 }
0023 
0024 DialogModule::DialogModule(bool valid)
0025     : m_isValid(valid)
0026 {
0027 }
0028 
0029 void DialogModule::setIsValid(bool valid)
0030 {
0031     if (valid == m_isValid)
0032         return;
0033 
0034     m_isValid = valid;
0035 
0036     Q_EMIT isValidChanged(valid);
0037 }
0038 
0039 bool DialogModule::shouldBeShown() const
0040 {
0041     return true;
0042 }
0043 
0044 void DialogModule::aboutToBeShown()
0045 {
0046 }
0047 
0048 void DialogModule::aboutToBeHidden()
0049 {
0050 }
0051 
0052 bool DialogModule::isValid() const
0053 {
0054     return m_isValid;
0055 }
0056 
0057 void DialogModule::init(const PlasmaVault::Vault::Payload &payload)
0058 {
0059     Q_UNUSED(payload);
0060 }
0061 
0062 CompoundDialogModule::CompoundDialogModule(const step &children)
0063     : DialogDsl::DialogModule(false)
0064 {
0065     auto layout = new QVBoxLayout(this);
0066     setLayout(layout);
0067 
0068     for (const auto &childFactory : children) {
0069         auto child = childFactory();
0070         child->setParent(this);
0071         child->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred));
0072         m_children << child;
0073 
0074         if (!child->isValid()) {
0075             m_invalidChildren << child;
0076         }
0077 
0078         connect(child, &DialogModule::isValidChanged, this, [this, child](bool valid) {
0079             if (valid) {
0080                 m_invalidChildren.remove(child);
0081             } else {
0082                 m_invalidChildren << child;
0083             }
0084 
0085             setIsValid(m_invalidChildren.isEmpty());
0086         });
0087 
0088         connect(child, &DialogModule::requestCancellation, this, &DialogModule::requestCancellation);
0089 
0090         layout->addWidget(child);
0091     }
0092 
0093     setIsValid(m_invalidChildren.isEmpty());
0094 
0095     auto spacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Expanding);
0096     layout->addSpacerItem(spacer);
0097 }
0098 
0099 PlasmaVault::Vault::Payload CompoundDialogModule::fields() const
0100 {
0101     PlasmaVault::Vault::Payload result;
0102 
0103     for (const auto &child : m_children) {
0104         result.insert(child->fields());
0105     }
0106 
0107     return result;
0108 }
0109 
0110 void CompoundDialogModule::init(const PlasmaVault::Vault::Payload &payload)
0111 {
0112     for (const auto &child : m_children) {
0113         child->init(payload);
0114     }
0115 }
0116 
0117 } // namespace DialogDsl