Warning, /pim/kidentitymanagement/src/quick/qml/CryptographyEditorCard.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2023 Claudio Cambra <claudio.cambra@kde.org> 0002 // SPDX-License-Identifier: LGPL-2.0-or-later 0003 0004 import QtQuick 2.15 0005 import QtQuick.Controls 2.15 as QQC2 0006 import QtQuick.Layouts 1.15 0007 0008 import org.kde.kirigami 2.19 as Kirigami 0009 import org.kde.kirigamiaddons.formcard 1.0 as FormCard 0010 import org.kde.kidentitymanagement 1.0 0011 0012 FormCard.FormCard { 0013 id: root 0014 0015 // Since Identity is not a QObject and its properties do not emit signals, 0016 // we use these convenience functions to update the values of each interactive 0017 // component of this card when editing happens 0018 0019 function _index(model, keyUse) { 0020 return cryptographyEditorBackend.indexForIdentity(model, identity, keyUse).row 0021 } 0022 0023 function _updateComboIndices() { 0024 combinedPgpModeCheckBox.updateChecked(); 0025 combinedSmimeModeCheckBox.updateChecked(); 0026 0027 pgpSigningOrCombinedDelegate.updateIndex(); 0028 pgpEncryptionDelegate.updateIndex(); 0029 smimeSigningOrCombinedDelegate.updateIndex(); 0030 smimeEncryptionDelegate.updateIndex(); 0031 } 0032 0033 required property var identity 0034 onIdentityChanged: _updateComboIndices() 0035 required property var cryptographyEditorBackend 0036 0037 Component.onCompleted: _updateComboIndices() 0038 0039 FormCard.FormComboBoxDelegate { 0040 id: pgpSigningOrCombinedDelegate 0041 0042 function updateIndex() { 0043 currentIndex = root._index(cryptographyEditorBackend.openPgpKeyListModel, KeyUseTypes.KeySigningUse); 0044 } 0045 0046 readonly property bool combinedMode: combinedPgpModeCheckBox.checked 0047 0048 text: combinedMode ? i18ndc("libkpimidentities6", "@label", "OpenPGP key") : i18ndc("libkpimidentities6", "@label", "OpenPGP signing key") 0049 model: cryptographyEditorBackend.openPgpKeyListModel 0050 textRole: "display" 0051 valueRole: "keyByteArray" 0052 onActivated: { 0053 root.identity.pgpSigningKey = currentValue; 0054 0055 if (combinedMode) { 0056 root.identity.pgpEncryptionKey = currentValue; 0057 pgpEncryptionDelegate.updateIndex(); 0058 } 0059 } 0060 } 0061 0062 FormCard.FormDelegateSeparator { 0063 above: combinedPgpModeCheckBox; below: pgpSigningOrCombinedDelegate 0064 } 0065 0066 FormCard.FormCheckDelegate { 0067 id: combinedPgpModeCheckBox 0068 0069 function updateChecked() { 0070 const pgpEncryptionKey = root.cryptographyEditorBackend.stringFromKeyByteArray(root.identity.pgpEncryptionKey); 0071 const pgpSigningKey = root.cryptographyEditorBackend.stringFromKeyByteArray(root.identity.pgpSigningKey); 0072 checked = pgpEncryptionKey === pgpSigningKey; 0073 } 0074 0075 text: i18ndc("libkpimidentities6", "@label", "Use same OpenPGP key for encryption and signing") 0076 onClicked: { 0077 if (!checked) { 0078 return; 0079 } 0080 0081 const pgpEncryptionKey = root.cryptographyEditorBackend.stringFromKeyByteArray(root.identity.pgpEncryptionKey); 0082 const pgpSigningKey = root.cryptographyEditorBackend.stringFromKeyByteArray(root.identity.pgpSigningKey); 0083 0084 // Use the signing key as this is represented by the top combo box 0085 if (pgpEncryptionKey !== pgpSigningKey) { 0086 root.identity.pgpEncryptionKey = root.identity.pgpSigningKey; 0087 } 0088 } 0089 } 0090 0091 FormCard.FormDelegateSeparator { 0092 below: combinedPgpModeCheckBox 0093 above: pgpEncryptionDelegate 0094 visible: pgpEncryptionDelegate.visible 0095 } 0096 0097 FormCard.FormComboBoxDelegate { 0098 id: pgpEncryptionDelegate 0099 0100 function updateIndex() { 0101 currentIndex = root._index(cryptographyEditorBackend.openPgpKeyListModel, KeyUseTypes.KeyEncryptionUse); 0102 } 0103 0104 text: i18ndc("libkpimidentities6", "@label", "OpenPGP encryption key") 0105 model: cryptographyEditorBackend.openPgpKeyListModel 0106 textRole: "display" 0107 valueRole: "keyByteArray" 0108 onActivated: root.identity.pgpEncryptionKey = currentValue 0109 visible: !combinedPgpModeCheckBox.checked 0110 } 0111 0112 FormCard.FormDelegateSeparator { 0113 above: smimeSigningOrCombinedDelegate 0114 below: pgpEncryptionDelegate.visible ? pgpEncryptionDelegate : combinedPgpModeCheckBox 0115 } 0116 0117 FormCard.FormComboBoxDelegate { 0118 id: smimeSigningOrCombinedDelegate 0119 0120 function updateIndex() { 0121 currentIndex = root._index(cryptographyEditorBackend.smimeKeyListModel, KeyUseTypes.KeySigningUse); 0122 } 0123 0124 property bool combinedMode: combinedSmimeModeCheckBox.checked 0125 0126 text: i18ndc("libkpimidentities6", "@label", "S/MIME signing key") 0127 model: cryptographyEditorBackend.smimeKeyListModel 0128 textRole: "display" 0129 valueRole: "keyByteArray" 0130 onActivated: { 0131 root.identity.smimeSigningKey = currentValue; 0132 0133 if (combinedMode) { 0134 root.identity.smimeEncryptionKey = currentValue; 0135 smimeEncryptionDelegate.updateIndex(); 0136 } 0137 } 0138 } 0139 0140 FormCard.FormDelegateSeparator { above: combinedSmimeModeCheckBox; below: smimeSigningOrCombinedDelegate } 0141 0142 FormCard.FormCheckDelegate { 0143 id: combinedSmimeModeCheckBox 0144 0145 function updateChecked() { 0146 const smimeEncryptionKey = root.cryptographyEditorBackend.stringFromKeyByteArray(root.identity.smimeEncryptionKey); 0147 const smimeSigningKey = root.cryptographyEditorBackend.stringFromKeyByteArray(root.identity.smimeSigningKey); 0148 checked = smimeEncryptionKey === smimeSigningKey; 0149 } 0150 0151 text: i18ndc("libkpimidentities6", "@label", "Use same S/MIME key for encryption and signing") 0152 onClicked: { 0153 if (!checked) { 0154 return; 0155 } 0156 0157 const smimeEncryptionKey = root.cryptographyEditorBackend.stringFromKeyByteArray(root.identity.smimeEncryptionKey); 0158 const smimeSigningKey = root.cryptographyEditorBackend.stringFromKeyByteArray(root.identity.smimeSigningKey); 0159 0160 // Use the signing key as this is represented by the top combo box 0161 if (smimeEncryptionKey !== smimeSigningKey) { 0162 root.identity.smimeEncryptionKey = root.identity.smimeSigningKey; 0163 } 0164 } 0165 } 0166 0167 FormCard.FormDelegateSeparator { 0168 above: smimeEncryptionDelegate 0169 below: combinedSmimeModeCheckBox 0170 visible: !combinedSmimeModeCheckBox.checked 0171 } 0172 0173 FormCard.FormComboBoxDelegate { 0174 id: smimeEncryptionDelegate 0175 0176 function updateIndex() { 0177 currentIndex = root._index(cryptographyEditorBackend.smimeKeyListModel, KeyUseTypes.KeyEncryptionUse); 0178 } 0179 0180 text: i18ndc("libkpimidentities6", "@label", "S/MIME encryption key") 0181 model: cryptographyEditorBackend.smimeKeyListModel 0182 textRole: "display" 0183 valueRole: "keyByteArray" 0184 onActivated: root.identity.smimeEncryptionKey = currentValue 0185 visible: !combinedSmimeModeCheckBox.checked 0186 } 0187 }