File indexing completed on 2024-05-19 05:37:27
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 0118 0119 #include "moc_dialogdsl.cpp"