diff options
author | Saturneric <[email protected]> | 2021-05-27 19:51:18 +0000 |
---|---|---|
committer | Saturneric <[email protected]> | 2021-05-27 19:51:18 +0000 |
commit | ad4c0c1e140de2ffdd2f803a643bdfe4c0fb07bc (patch) | |
tree | f01ad3ec20f85a17d433502e169eab99f2719b92 | |
parent | Fix the wrong use of the signing key interface. (diff) | |
download | GpgFrontend-ad4c0c1e140de2ffdd2f803a643bdfe4c0fb07bc.tar.gz GpgFrontend-ad4c0c1e140de2ffdd2f803a643bdfe4c0fb07bc.zip |
Adjust part of the text of the UI interface of the UID operation tab.
Write an interface to increase UID.
Write logic to adapt and increase UID.
Adjust the UI of KeygenDialog.
Delete the Close button of KeyDetailTab and its logic.
Adjust the KeyDetailTab fingerprint and its copy button UI.
Fix the problem of refreshing the order of the KeyPairUIDTab list.
Signed-off-by: Saturneric <[email protected]>
Diffstat (limited to '')
-rw-r--r-- | include/gpg/GpgContext.h | 2 | ||||
-rw-r--r-- | include/ui/KeygenDialog.h | 8 | ||||
-rw-r--r-- | include/ui/keypair_details/KeyNewUIDDialog.h | 46 | ||||
-rw-r--r-- | include/ui/keypair_details/KeyPairDetailTab.h | 1 | ||||
-rw-r--r-- | include/ui/keypair_details/KeyPairUIDTab.h | 5 | ||||
-rw-r--r-- | src/gpg/GpgContext.cpp | 14 | ||||
-rw-r--r-- | src/ui/KeygenDialog.cpp | 112 | ||||
-rw-r--r-- | src/ui/keypair_details/KeyNewUIDDialog.cpp | 82 | ||||
-rw-r--r-- | src/ui/keypair_details/KeyPairDetailTab.cpp | 33 | ||||
-rw-r--r-- | src/ui/keypair_details/KeyPairUIDTab.cpp | 72 |
10 files changed, 263 insertions, 112 deletions
diff --git a/include/gpg/GpgContext.h b/include/gpg/GpgContext.h index 21099b63..ff4a9d20 100644 --- a/include/gpg/GpgContext.h +++ b/include/gpg/GpgContext.h @@ -114,6 +114,8 @@ namespace GpgME { bool sign(QStringList *uidList, const QByteArray &inBuffer, QByteArray *outBuffer, bool detached = false); + bool addUID(const GpgKey &key, const UID &uid); + /** * @details If text contains PGP-message, put a linebreak before the message, * so that gpgme can decrypt correctly diff --git a/include/ui/KeygenDialog.h b/include/ui/KeygenDialog.h index bcc2deb9..b1feaa4a 100644 --- a/include/ui/KeygenDialog.h +++ b/include/ui/KeygenDialog.h @@ -48,12 +48,14 @@ private: QGroupBox *create_key_usage_group_box(); + QGroupBox *create_basic_info_group_box(); + QRegularExpression re_email{ R"((?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\]))"}; GpgME::GpgContext *mCtx; /** The current gpg context */ - __attribute__((unused)) KeyGenThread *keyGenThread{}; /** Thread for key generation */ - __attribute__((unused)) QStringList errorMessages; /** List of errors occuring when checking entries of lineedits */ + KeyGenThread *kg{}; /** Thread for key generation */ + QStringList errorMessages; /** List of errors occuring when checking entries of lineedits */ GenKeyInfo genKeyInfo{}; QDialogButtonBox *buttonBox; /** Box for standardbuttons */ @@ -72,8 +74,6 @@ private: // ENCR, SIGN, CERT, AUTH std::vector<QCheckBox *> keyUsageCheckBoxes; - KeyGenThread *kg = nullptr; - void generateKeyDialog(); diff --git a/include/ui/keypair_details/KeyNewUIDDialog.h b/include/ui/keypair_details/KeyNewUIDDialog.h new file mode 100644 index 00000000..b6e56a0d --- /dev/null +++ b/include/ui/keypair_details/KeyNewUIDDialog.h @@ -0,0 +1,46 @@ +// +// Created by eric on 2021/5/28. +// + +#ifndef GPGFRONTEND_KEYNEWUIDDIALOG_H +#define GPGFRONTEND_KEYNEWUIDDIALOG_H + +#include "GpgFrontend.h" + +#include "gpg/GpgContext.h" + +class KeyNewUIDDialog : public QDialog { +Q_OBJECT + +public: + + KeyNewUIDDialog(GpgME::GpgContext *ctx, const GpgKey &key ,QWidget *parent = nullptr); + + +private slots: + + void slotCreateNewUID(); + +private: + + GpgME::GpgContext *mCtx; + const GpgKey &mKey; + + QLineEdit *name{}; + QLineEdit *email{}; + QLineEdit *comment{}; + + QPushButton *createButton{}; + + QStringList errorMessages; + QLabel *errorLabel{}; + + QRegularExpression re_email{ + R"((?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\]))"}; + + bool check_email_address(const QString &str); + +}; + + +#endif //GPGFRONTEND_KEYNEWUIDDIALOG_H diff --git a/include/ui/keypair_details/KeyPairDetailTab.h b/include/ui/keypair_details/KeyPairDetailTab.h index 61de4c06..21355f8f 100644 --- a/include/ui/keypair_details/KeyPairDetailTab.h +++ b/include/ui/keypair_details/KeyPairDetailTab.h @@ -40,7 +40,6 @@ private: QGroupBox *keyBox; /** Groupbox containing key information */ QGroupBox *fingerprintBox; /** Groupbox containing fingerprint information */ QGroupBox *additionalUidBox; /** Groupbox containing information about additional uids */ - QDialogButtonBox *buttonBox; /** Box containing the close button */ QLabel *nameVarLabel; /** Label containng the keys name */ QLabel *emailVarLabel; /** Label containng the keys email */ diff --git a/include/ui/keypair_details/KeyPairUIDTab.h b/include/ui/keypair_details/KeyPairUIDTab.h index 0db02e5e..70e657cd 100644 --- a/include/ui/keypair_details/KeyPairUIDTab.h +++ b/include/ui/keypair_details/KeyPairUIDTab.h @@ -29,6 +29,7 @@ #include "gpg/GpgContext.h" #include "KeyUIDSignDialog.h" +#include "KeyNewUIDDialog.h" class KeyPairUIDTab : public QWidget { Q_OBJECT @@ -65,6 +66,10 @@ private slots: void slotAddSign(); + void slotAddUID(); + + static void slotAddUIDResult(int result); + }; diff --git a/src/gpg/GpgContext.cpp b/src/gpg/GpgContext.cpp index 17347a57..b72eda73 100644 --- a/src/gpg/GpgContext.cpp +++ b/src/gpg/GpgContext.cpp @@ -968,6 +968,20 @@ namespace GpgME { } } + bool GpgContext::addUID(const GpgKey &key, const UID &uid) { + QString userid = QString("%1 (%3) <%2>").arg(uid.name, uid.email, uid.comment); + auto gpgmeError = gpgme_op_adduid(mCtx, key.key_refer, userid.toUtf8().constData(), 0); + if(gpgmeError == GPG_ERR_NO_ERROR) { + emit signalKeyUpdated(key.id); + return true; + } + else { + checkErr(gpgmeError); + return false; + } + + } + } diff --git a/src/ui/KeygenDialog.cpp b/src/ui/KeygenDialog.cpp index ef07dc14..d930fffe 100644 --- a/src/ui/KeygenDialog.cpp +++ b/src/ui/KeygenDialog.cpp @@ -26,6 +26,7 @@ KeyGenDialog::KeyGenDialog(GpgME::GpgContext *ctx, QWidget *parent) : QDialog(parent), mCtx(ctx) { + buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); this->setWindowTitle(tr("Generate Key")); @@ -37,57 +38,8 @@ void KeyGenDialog::generateKeyDialog() { keyUsageGroupBox = create_key_usage_group_box(); - errorLabel = new QLabel(tr("")); - nameEdit = new QLineEdit(this); - emailEdit = new QLineEdit(this); - commentEdit = new QLineEdit(this); - keySizeSpinBox = new QSpinBox(this); - keyTypeComboBox = new QComboBox(this); - - for(auto &algo : GenKeyInfo::SupportedKeyAlgo) { - keyTypeComboBox->addItem(algo); - } - if(!GenKeyInfo::SupportedKeyAlgo.isEmpty()) { - keyTypeComboBox->setCurrentIndex(0); - } - - QDateTime maxDateTime = QDateTime::currentDateTime().addYears(2); - - dateEdit = new QDateTimeEdit(maxDateTime, this); - dateEdit->setMinimumDateTime(QDateTime::currentDateTime()); - dateEdit->setMaximumDateTime(maxDateTime); - dateEdit->setDisplayFormat("dd/MM/yyyy hh:mm:ss"); - dateEdit->setCalendarPopup(true); - dateEdit->setEnabled(true); - - expireCheckBox = new QCheckBox(this); - expireCheckBox->setCheckState(Qt::Unchecked); - - noPassPhraseCheckBox = new QCheckBox(this); - noPassPhraseCheckBox->setCheckState(Qt::Unchecked); - - auto *vbox1 = new QGridLayout; - - vbox1->addWidget(new QLabel(tr("Name:")), 0, 0); - vbox1->addWidget(new QLabel(tr("Email Address:")), 1, 0); - vbox1->addWidget(new QLabel(tr("Comment:")), 2, 0); - vbox1->addWidget(new QLabel(tr("Expiration Date:")), 3, 0); - vbox1->addWidget(new QLabel(tr("Never Expire")), 3, 3); - vbox1->addWidget(new QLabel(tr("KeySize (in Bit):")), 4, 0); - vbox1->addWidget(new QLabel(tr("Key Type:")), 5, 0); - vbox1->addWidget(new QLabel(tr("Non Pass Phrase")), 6, 0); - - vbox1->addWidget(nameEdit, 0, 1, 1, 3); - vbox1->addWidget(emailEdit, 1, 1, 1, 3); - vbox1->addWidget(commentEdit, 2, 1, 1, 3); - vbox1->addWidget(dateEdit, 3, 1); - vbox1->addWidget(expireCheckBox, 3, 2); - vbox1->addWidget(keySizeSpinBox, 4, 1); - vbox1->addWidget(keyTypeComboBox, 5, 1); - vbox1->addWidget(noPassPhraseCheckBox, 6, 1); - auto *groupGrid = new QGridLayout(this); - groupGrid->addLayout(vbox1, 0, 0); + groupGrid->addWidget(create_basic_info_group_box(), 0, 0); groupGrid->addWidget(keyUsageGroupBox, 1, 0); auto *nameList = new QWidget(this); @@ -131,7 +83,7 @@ void KeyGenDialog::slotKeyGenAccept() { * create the string for key generation */ - genKeyInfo.setUserid(QString("%1 <%2>").arg(nameEdit->text(), emailEdit->text())); + genKeyInfo.setUserid(QString("%1 (%3) <%2>").arg(nameEdit->text(), emailEdit->text(), commentEdit->text())); genKeyInfo.setKeySize(keySizeSpinBox->value()); @@ -362,3 +314,61 @@ void KeyGenDialog::slotKeyGenResult(bool success) { else QMessageBox::critical(nullptr, tr("Failure"), tr("An error occurred during key generation.")); } + +QGroupBox *KeyGenDialog::create_basic_info_group_box() { + + errorLabel = new QLabel(tr("")); + nameEdit = new QLineEdit(this); + emailEdit = new QLineEdit(this); + commentEdit = new QLineEdit(this); + keySizeSpinBox = new QSpinBox(this); + keyTypeComboBox = new QComboBox(this); + + for(auto &algo : GenKeyInfo::SupportedKeyAlgo) { + keyTypeComboBox->addItem(algo); + } + if(!GenKeyInfo::SupportedKeyAlgo.isEmpty()) { + keyTypeComboBox->setCurrentIndex(0); + } + + QDateTime maxDateTime = QDateTime::currentDateTime().addYears(2); + + dateEdit = new QDateTimeEdit(maxDateTime, this); + dateEdit->setMinimumDateTime(QDateTime::currentDateTime()); + dateEdit->setMaximumDateTime(maxDateTime); + dateEdit->setDisplayFormat("dd/MM/yyyy hh:mm:ss"); + dateEdit->setCalendarPopup(true); + dateEdit->setEnabled(true); + + expireCheckBox = new QCheckBox(this); + expireCheckBox->setCheckState(Qt::Unchecked); + + noPassPhraseCheckBox = new QCheckBox(this); + noPassPhraseCheckBox->setCheckState(Qt::Unchecked); + + auto *vbox1 = new QGridLayout; + + vbox1->addWidget(new QLabel(tr("Name:")), 0, 0); + vbox1->addWidget(new QLabel(tr("Email Address:")), 1, 0); + vbox1->addWidget(new QLabel(tr("Comment:")), 2, 0); + vbox1->addWidget(new QLabel(tr("Expiration Date:")), 3, 0); + vbox1->addWidget(new QLabel(tr("Never Expire")), 3, 3); + vbox1->addWidget(new QLabel(tr("KeySize (in Bit):")), 4, 0); + vbox1->addWidget(new QLabel(tr("Key Type:")), 5, 0); + vbox1->addWidget(new QLabel(tr("Non Pass Phrase")), 6, 0); + + vbox1->addWidget(nameEdit, 0, 1, 1, 3); + vbox1->addWidget(emailEdit, 1, 1, 1, 3); + vbox1->addWidget(commentEdit, 2, 1, 1, 3); + vbox1->addWidget(dateEdit, 3, 1); + vbox1->addWidget(expireCheckBox, 3, 2); + vbox1->addWidget(keySizeSpinBox, 4, 1); + vbox1->addWidget(keyTypeComboBox, 5, 1); + vbox1->addWidget(noPassPhraseCheckBox, 6, 1); + + auto basicInfoGroupBox = new QGroupBox(); + basicInfoGroupBox->setLayout(vbox1); + basicInfoGroupBox->setTitle(tr("Basic Information")); + + return basicInfoGroupBox; +} diff --git a/src/ui/keypair_details/KeyNewUIDDialog.cpp b/src/ui/keypair_details/KeyNewUIDDialog.cpp new file mode 100644 index 00000000..9a70b102 --- /dev/null +++ b/src/ui/keypair_details/KeyNewUIDDialog.cpp @@ -0,0 +1,82 @@ +// +// Created by eric on 2021/5/28. +// + +#include "ui/keypair_details/KeyNewUIDDialog.h" + +KeyNewUIDDialog::KeyNewUIDDialog(GpgME::GpgContext *ctx, const GpgKey &key, QWidget *parent) : + mCtx(ctx), mKey(key), QDialog(parent) { + + name = new QLineEdit(); + name->setMinimumWidth(240); + email = new QLineEdit(); + email->setMinimumWidth(240); + comment = new QLineEdit(); + comment->setMinimumWidth(240); + createButton = new QPushButton("Create"); + errorLabel = new QLabel(); + + auto gridLayout = new QGridLayout(); + gridLayout->addWidget(new QLabel(tr("Name")), 0, 0); + gridLayout->addWidget(new QLabel(tr("Email")), 1, 0); + gridLayout->addWidget(new QLabel(tr("Comment")), 2, 0); + + + gridLayout->addWidget(name, 0 ,1); + gridLayout->addWidget(email, 1 ,1); + gridLayout->addWidget(comment, 2 ,1); + + gridLayout->addWidget(createButton, 3, 0, 1, 2); + gridLayout->addWidget(errorLabel, 4, 0, 1, 2); + + connect(createButton, SIGNAL(clicked(bool)), this, SLOT(slotCreateNewUID())); + + this->setLayout(gridLayout); + this->setWindowTitle(tr("Create New UID")); + this->setAttribute(Qt::WA_DeleteOnClose, true); + this->setModal(true); +} + +void KeyNewUIDDialog::slotCreateNewUID() { + + QString errorString = ""; + + /** + * check for errors in keygen dialog input + */ + if ((name->text()).size() < 5) { + errorString.append(tr(" Name must contain at least five characters. \n")); + } if(email->text().isEmpty() || !check_email_address(email->text())) { + errorString.append(tr(" Please give a email address. \n")); + } + + if (errorString.isEmpty()) { + UID uid; + uid.name = name->text(); + uid.email = email->text(); + uid.comment = comment->text(); + + if(mCtx->addUID(mKey, uid)) { + emit finished(1); + + } else { + emit finished(0); + } + + } else { + /** + * create error message + */ + errorLabel->setAutoFillBackground(true); + QPalette error = errorLabel->palette(); + error.setColor(QPalette::Background, "#ff8080"); + errorLabel->setPalette(error); + errorLabel->setText(errorString); + + this->show(); + } +} + +bool KeyNewUIDDialog::check_email_address(const QString &str) { + return re_email.match(str).hasMatch(); +} diff --git a/src/ui/keypair_details/KeyPairDetailTab.cpp b/src/ui/keypair_details/KeyPairDetailTab.cpp index 366abf27..873b478c 100644 --- a/src/ui/keypair_details/KeyPairDetailTab.cpp +++ b/src/ui/keypair_details/KeyPairDetailTab.cpp @@ -13,8 +13,6 @@ KeyPairDetailTab::KeyPairDetailTab(GpgME::GpgContext *ctx, const GpgKey &key, QW keyBox = new QGroupBox(tr("Key details")); fingerprintBox = new QGroupBox(tr("Fingerprint")); additionalUidBox = new QGroupBox(tr("Additional Uids")); - buttonBox = new QDialogButtonBox(QDialogButtonBox::Close); - connect(buttonBox, SIGNAL(rejected()), this, SLOT(close())); nameVarLabel = new QLabel(key.name); nameVarLabel->setTextInteractionFlags(Qt::TextSelectableByMouse); @@ -90,38 +88,21 @@ KeyPairDetailTab::KeyPairDetailTab(GpgME::GpgContext *ctx, const GpgKey &key, QW fingerPrintVarLabel = new QLabel(beautifyFingerprint(key.fpr)); fingerPrintVarLabel->setTextInteractionFlags(Qt::TextSelectableByMouse); - fingerPrintVarLabel->setStyleSheet("margin-left: 20; margin-right: 20;"); + fingerPrintVarLabel->setStyleSheet("margin-left: 5; margin-right: 5;"); auto *hboxFP = new QHBoxLayout(); hboxFP->addWidget(fingerPrintVarLabel); - QIcon ico(":button_copy.png"); - QPushButton copyFingerprintButton(QIcon(ico.pixmap(12, 12)), ""); - //copyFingerprintButton.setStyleSheet("QPushButton {border: 0px; } QPushButton:Pressed {} "); - copyFingerprintButton.setFlat(true); - copyFingerprintButton.setToolTip(tr("copy fingerprint to clipboard")); - connect(©FingerprintButton, SIGNAL(clicked()), this, SLOT(slotCopyFingerprint())); + auto *copyFingerprintButton = new QPushButton(tr("Copy")); + copyFingerprintButton->setFlat(true); + copyFingerprintButton->setToolTip(tr("copy fingerprint to clipboard")); + connect(copyFingerprintButton, SIGNAL(clicked()), this, SLOT(slotCopyFingerprint())); - hboxFP->addWidget(©FingerprintButton); + hboxFP->addWidget(copyFingerprintButton); fingerprintBox->setLayout(hboxFP); mvbox->addWidget(fingerprintBox); - // If key has more than primary uid, also show the other uids -// gpgme_user_id_t addUserIds = key->uids->next; -// if (addUserIds != nullptr) { -// auto *vboxUID = new QVBoxLayout(); -// while (addUserIds != nullptr) { -// addUserIdsVarLabel = new QLabel( -// QString::fromUtf8(addUserIds->name) + QString(" <") + addUserIds->email + ">"); -// addUserIdsVarLabel->setTextInteractionFlags(Qt::TextSelectableByMouse); -// vboxUID->addWidget(addUserIdsVarLabel); -// addUserIds = addUserIds->next; -// } -// additionalUidBox->setLayout(vboxUID); -// mvbox->addWidget(additionalUidBox); -// } - if (key.is_private_key) { auto *privKeyBox = new QGroupBox(tr("Private Key")); auto *vboxPK = new QVBoxLayout(); @@ -157,8 +138,6 @@ KeyPairDetailTab::KeyPairDetailTab(GpgME::GpgContext *ctx, const GpgKey &key, QW mvbox->addLayout(expBox); } - mvbox->addWidget(buttonBox); - setAttribute(Qt::WA_DeleteOnClose, true); setLayout(mvbox); } diff --git a/src/ui/keypair_details/KeyPairUIDTab.cpp b/src/ui/keypair_details/KeyPairUIDTab.cpp index ce4256b8..82d27262 100644 --- a/src/ui/keypair_details/KeyPairUIDTab.cpp +++ b/src/ui/keypair_details/KeyPairUIDTab.cpp @@ -15,42 +15,35 @@ KeyPairUIDTab::KeyPairUIDTab(GpgME::GpgContext *ctx, const GpgKey &key, QWidget auto uidButtonsLayout = new QGridLayout(); auto addUIDButton = new QPushButton(tr("New UID")); - auto manageUIDButton = new QPushButton(tr("Manage UID")); + auto manageUIDButton = new QPushButton(tr("UID Management")); manageUIDButton->setMenu(manageUIDMenu); uidButtonsLayout->addWidget(addUIDButton, 0, 1); uidButtonsLayout->addWidget(manageUIDButton, 0, 2); - -// auto sigButtonsLayout = new QGridLayout(); -// auto manageSigButton = new QPushButton(tr("Manage Signature")); -// -// sigButtonsLayout->addWidget(addSigButton, 0, 1); -// sigButtonsLayout->addWidget(manageSigButton, 0, 2); - auto gridLayout = new QGridLayout(); gridLayout->addWidget(uidList, 0, 0); gridLayout->addLayout(uidButtonsLayout, 1, 0); gridLayout->addWidget(sigList, 2, 0); -// gridLayout->addLayout(sigButtonsLayout, 3, 0); setLayout(gridLayout); + connect(addUIDButton, SIGNAL(clicked(bool)), this, SLOT(slotAddUID())); + connect(mCtx, SIGNAL(signalKeyInfoChanged()), this, SLOT(slotRefreshUIDList())); - connect(mCtx, SIGNAL(signalKeyInfoChanged()), this, SLOT(slotRefreshSigList())); connect(uidList, SIGNAL(itemSelectionChanged()), this, SLOT(slotRefreshSigList())); slotRefreshUIDList(); - slotRefreshSigList(); setAttribute(Qt::WA_DeleteOnClose, true); } void KeyPairUIDTab::createUIDList() { + uidList = new QTableWidget(this); - uidList->setColumnCount(3); + uidList->setColumnCount(4); uidList->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); uidList->verticalHeader()->hide(); uidList->setShowGrid(false); @@ -66,14 +59,15 @@ void KeyPairUIDTab::createUIDList() { uidList->setAlternatingRowColors(true); QStringList labels; - labels << tr("Operate") << tr("Name") << tr("Email") << tr("Comment"); + labels << tr("Select") << tr("Name") << tr("Email") << tr("Comment"); uidList->setHorizontalHeaderLabels(labels); uidList->horizontalHeader()->setStretchLastSection(true); } void KeyPairUIDTab::createSignList() { + sigList = new QTableWidget(this); - sigList->setColumnCount(4); + sigList->setColumnCount(5); sigList->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); sigList->verticalHeader()->hide(); sigList->setShowGrid(false); @@ -88,7 +82,7 @@ void KeyPairUIDTab::createSignList() { sigList->setAlternatingRowColors(true); QStringList labels; - labels << tr("Type") << tr("Pubkey Id") << tr("Create Time") << tr("Valid Time"); + labels << tr("Type") << tr("Name") << tr("Email") << tr("Create Time") << tr("Valid Time"); sigList->setHorizontalHeaderLabels(labels); sigList->horizontalHeader()->setStretchLastSection(true); @@ -98,7 +92,6 @@ void KeyPairUIDTab::slotRefreshUIDList() { int row = 0; - uidList->clearContents(); uidList->setRowCount(mKey.uids.size()); uidList->setSelectionMode(QAbstractItemView::SingleSelection); @@ -121,39 +114,41 @@ void KeyPairUIDTab::slotRefreshUIDList() { row++; } + slotRefreshSigList(); } void KeyPairUIDTab::slotRefreshSigList() { - sigList->clearContents(); - - int row = 0; + int uidRow = 0, sigRow = 0; for(const auto& uid : mKey.uids) { // Only Show Selected UID's Signatures - if(!uidList->item(row, 0)->isSelected()) + if(!uidList->item(uidRow++, 0)->isSelected()) { continue; + } sigList->setRowCount(uid.signatures.size()); for(const auto &sig : uid.signatures) { auto *tmp0 = new QTableWidgetItem(sig.pubkey_algo); - sigList->setItem(row, 0, tmp0); + sigList->setItem(sigRow, 0, tmp0); + + auto *tmp2 = new QTableWidgetItem(sig.name); + sigList->setItem(sigRow, 1, tmp2); - auto *tmp2 = new QTableWidgetItem(sig.uid); - sigList->setItem(row, 1, tmp2); + auto *tmp3 = new QTableWidgetItem(sig.email); + sigList->setItem(sigRow, 2, tmp3); - auto *tmp3 = new QTableWidgetItem(sig.create_time.toString()); - sigList->setItem(row, 2, tmp3); + auto *tmp4 = new QTableWidgetItem(sig.create_time.toString()); + sigList->setItem(sigRow, 3, tmp4); - auto *tmp4 = new QTableWidgetItem(sig.expire_time.toString()); - sigList->setItem(row, 3, tmp4); + auto *tmp5 = new QTableWidgetItem(sig.expire_time.toString()); + sigList->setItem(sigRow, 4, tmp5); - row++; + sigRow++; } break; - } } @@ -194,3 +189,22 @@ void KeyPairUIDTab::createManageUIDMenu() { manageUIDMenu->addAction(signUIDAct); } + +void KeyPairUIDTab::slotAddUID() { + auto keyNewUIDDialog = new KeyNewUIDDialog(mCtx, mKey, this); + connect(keyNewUIDDialog, SIGNAL(finished(int)), this, SLOT(slotAddUIDResult(int))); + connect(keyNewUIDDialog, SIGNAL(finished(int)), keyNewUIDDialog, SLOT(deleteLater())); + keyNewUIDDialog->show(); +} + +void KeyPairUIDTab::slotAddUIDResult(int result) { + if(result) { + QMessageBox::information(nullptr, + tr("Successful Operation"), + tr("Successfully added a new UID.")); + } else { + QMessageBox::critical(nullptr, + tr("Operation Failed"), + tr("An error occurred during the operation.")); + } +} |