diff options
author | Saturneric <[email protected]> | 2021-10-02 14:08:50 +0000 |
---|---|---|
committer | Saturneric <[email protected]> | 2021-10-02 14:16:27 +0000 |
commit | 3c65d087eeee687ac01af2e80f3dd538f9a2c230 (patch) | |
tree | 1e860dc6343c1897e2224a002f2ca44c574381b3 /src/ui/keypair_details/KeyPairSubkeyTab.cpp | |
parent | The basic functions of the core pass the test. (diff) | |
download | GpgFrontend-3c65d087eeee687ac01af2e80f3dd538f9a2c230.tar.gz GpgFrontend-3c65d087eeee687ac01af2e80f3dd538f9a2c230.zip |
UI Framework Modified.
Diffstat (limited to 'src/ui/keypair_details/KeyPairSubkeyTab.cpp')
-rw-r--r-- | src/ui/keypair_details/KeyPairSubkeyTab.cpp | 436 |
1 files changed, 227 insertions, 209 deletions
diff --git a/src/ui/keypair_details/KeyPairSubkeyTab.cpp b/src/ui/keypair_details/KeyPairSubkeyTab.cpp index e2714303..84d9f558 100644 --- a/src/ui/keypair_details/KeyPairSubkeyTab.cpp +++ b/src/ui/keypair_details/KeyPairSubkeyTab.cpp @@ -23,244 +23,262 @@ */ #include "ui/keypair_details/KeyPairSubkeyTab.h" - -KeyPairSubkeyTab::KeyPairSubkeyTab(GpgFrontend::GpgContext *ctx, const GpgKey &key, QWidget *parent) : mCtx(ctx), mKey(key), QWidget(parent) { - - createSubkeyList(); - createSubkeyOperaMenu(); - - listBox = new QGroupBox("Subkey List"); - detailBox = new QGroupBox("Detail of Selected Subkey"); - - auto uidButtonsLayout = new QGridLayout(); - - auto addSubkeyButton = new QPushButton(tr("Generate A New Subkey")); - if(!mKey.is_private_key || !mKey.has_master_key) { - addSubkeyButton->setDisabled(true); - setHidden(addSubkeyButton); - } - - uidButtonsLayout->addWidget(addSubkeyButton, 0, 1); - - auto *baseLayout = new QVBoxLayout(); - - auto subkeyListLayout = new QGridLayout(); - subkeyListLayout->addWidget(subkeyList, 0, 0); - subkeyListLayout->addLayout(uidButtonsLayout, 1, 0); - subkeyListLayout->setContentsMargins(0, 10, 0, 0); - - auto *subkeyDetailLayout = new QGridLayout(); - - subkeyDetailLayout->addWidget(new QLabel(tr("Key ID: ")), 0, 0); - subkeyDetailLayout->addWidget(new QLabel(tr("Algorithm: ")), 1, 0); - subkeyDetailLayout->addWidget(new QLabel(tr("Key Size:")), 2, 0); - subkeyDetailLayout->addWidget(new QLabel(tr("Usage: ")), 3, 0); - subkeyDetailLayout->addWidget(new QLabel(tr("Expires On ")), 4, 0); - subkeyDetailLayout->addWidget(new QLabel(tr("Last Update: ")), 5, 0); - subkeyDetailLayout->addWidget(new QLabel(tr("Existence: ")), 6, 0); - subkeyDetailLayout->addWidget(new QLabel(tr("Fingerprint: ")), 7, 0); - - - keyidVarLabel = new QLabel(); - keySizeVarLabel = new QLabel(); - expireVarLabel = new QLabel(); - algorithmVarLabel = new QLabel(); - createdVarLabel = new QLabel(); - usageVarLabel = new QLabel(); - masterKeyExistVarLabel = new QLabel(); - fingerPrintVarLabel = new QLabel(); - - subkeyDetailLayout->addWidget(keyidVarLabel, 0, 1); - subkeyDetailLayout->addWidget(keySizeVarLabel, 2, 1); - subkeyDetailLayout->addWidget(expireVarLabel, 4, 1); - subkeyDetailLayout->addWidget(algorithmVarLabel, 1, 1); - subkeyDetailLayout->addWidget(createdVarLabel, 5, 1); - subkeyDetailLayout->addWidget(usageVarLabel, 3, 1); - subkeyDetailLayout->addWidget(masterKeyExistVarLabel, 6, 1); - subkeyDetailLayout->addWidget(fingerPrintVarLabel, 7, 1); - - listBox->setLayout(subkeyListLayout); - listBox->setContentsMargins(0, 5, 0, 0); - detailBox->setLayout(subkeyDetailLayout); - - baseLayout->addWidget(listBox); - baseLayout->addWidget(detailBox); - baseLayout->addStretch(); - - connect(addSubkeyButton, SIGNAL(clicked(bool)), this, SLOT(slotAddSubkey())); - connect(mCtx, SIGNAL(signalKeyInfoChanged()), this, SLOT(slotRefreshSubkeyList())); - connect(subkeyList, SIGNAL(itemSelectionChanged()), this, SLOT(slotRefreshSubkeyDetail())); - - baseLayout->setContentsMargins(0, 0, 0, 0); - - setLayout(baseLayout); - setAttribute(Qt::WA_DeleteOnClose, true); - - slotRefreshSubkeyList(); - +#include "gpg/function/GpgKeyGetter.h" + +namespace GpgFrontend::UI { + +KeyPairSubkeyTab::KeyPairSubkeyTab(const std::string& key_id, QWidget* parent) + : mKey(std::move(GpgKeyGetter::GetInstance().GetKey(key_id))), + QWidget(parent) { + createSubkeyList(); + createSubkeyOperaMenu(); + + listBox = new QGroupBox("Subkey List"); + detailBox = new QGroupBox("Detail of Selected Subkey"); + + auto uidButtonsLayout = new QGridLayout(); + + auto addSubkeyButton = new QPushButton(tr("Generate A New Subkey")); + if (!mKey.is_private_key() || !mKey.has_master_key()) { + addSubkeyButton->setDisabled(true); + setHidden(addSubkeyButton); + } + + uidButtonsLayout->addWidget(addSubkeyButton, 0, 1); + + auto* baseLayout = new QVBoxLayout(); + + auto subkeyListLayout = new QGridLayout(); + subkeyListLayout->addWidget(subkeyList, 0, 0); + subkeyListLayout->addLayout(uidButtonsLayout, 1, 0); + subkeyListLayout->setContentsMargins(0, 10, 0, 0); + + auto* subkeyDetailLayout = new QGridLayout(); + + subkeyDetailLayout->addWidget(new QLabel(tr("Key ID: ")), 0, 0); + subkeyDetailLayout->addWidget(new QLabel(tr("Algorithm: ")), 1, 0); + subkeyDetailLayout->addWidget(new QLabel(tr("Key Size:")), 2, 0); + subkeyDetailLayout->addWidget(new QLabel(tr("Usage: ")), 3, 0); + subkeyDetailLayout->addWidget(new QLabel(tr("Expires On ")), 4, 0); + subkeyDetailLayout->addWidget(new QLabel(tr("Last Update: ")), 5, 0); + subkeyDetailLayout->addWidget(new QLabel(tr("Existence: ")), 6, 0); + subkeyDetailLayout->addWidget(new QLabel(tr("Fingerprint: ")), 7, 0); + + keyidVarLabel = new QLabel(); + keySizeVarLabel = new QLabel(); + expireVarLabel = new QLabel(); + algorithmVarLabel = new QLabel(); + createdVarLabel = new QLabel(); + usageVarLabel = new QLabel(); + masterKeyExistVarLabel = new QLabel(); + fingerPrintVarLabel = new QLabel(); + + subkeyDetailLayout->addWidget(keyidVarLabel, 0, 1); + subkeyDetailLayout->addWidget(keySizeVarLabel, 2, 1); + subkeyDetailLayout->addWidget(expireVarLabel, 4, 1); + subkeyDetailLayout->addWidget(algorithmVarLabel, 1, 1); + subkeyDetailLayout->addWidget(createdVarLabel, 5, 1); + subkeyDetailLayout->addWidget(usageVarLabel, 3, 1); + subkeyDetailLayout->addWidget(masterKeyExistVarLabel, 6, 1); + subkeyDetailLayout->addWidget(fingerPrintVarLabel, 7, 1); + + listBox->setLayout(subkeyListLayout); + listBox->setContentsMargins(0, 5, 0, 0); + detailBox->setLayout(subkeyDetailLayout); + + baseLayout->addWidget(listBox); + baseLayout->addWidget(detailBox); + baseLayout->addStretch(); + + connect(addSubkeyButton, SIGNAL(clicked(bool)), this, SLOT(slotAddSubkey())); + connect(subkeyList, SIGNAL(itemSelectionChanged()), this, + SLOT(slotRefreshSubkeyDetail())); + + baseLayout->setContentsMargins(0, 0, 0, 0); + + setLayout(baseLayout); + setAttribute(Qt::WA_DeleteOnClose, true); + + slotRefreshSubkeyList(); } void KeyPairSubkeyTab::createSubkeyList() { - subkeyList = new QTableWidget(this); + subkeyList = new QTableWidget(this); - subkeyList->setColumnCount(5); - subkeyList->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); - subkeyList->verticalHeader()->hide(); - subkeyList->setShowGrid(false); - subkeyList->setSelectionBehavior(QAbstractItemView::SelectRows); + subkeyList->setColumnCount(5); + subkeyList->horizontalHeader()->setSectionResizeMode( + QHeaderView::ResizeToContents); + subkeyList->verticalHeader()->hide(); + subkeyList->setShowGrid(false); + subkeyList->setSelectionBehavior(QAbstractItemView::SelectRows); - // tableitems not editable - subkeyList->setEditTriggers(QAbstractItemView::NoEditTriggers); + // tableitems not editable + subkeyList->setEditTriggers(QAbstractItemView::NoEditTriggers); - // no focus (rectangle around tableitems) - // may be it should focus on whole row - subkeyList->setFocusPolicy(Qt::NoFocus); - subkeyList->setAlternatingRowColors(true); + // no focus (rectangle around tableitems) + // may be it should focus on whole row + subkeyList->setFocusPolicy(Qt::NoFocus); + subkeyList->setAlternatingRowColors(true); - QStringList labels; - labels << tr("Subkey ID") << tr("Key Size") << tr("Algo") << tr("Create Date") << tr("Expire Date"); + QStringList labels; + labels << tr("Subkey ID") << tr("Key Size") << tr("Algo") << tr("Create Date") + << tr("Expire Date"); - subkeyList->setHorizontalHeaderLabels(labels); - subkeyList->horizontalHeader()->setStretchLastSection(false); + subkeyList->setHorizontalHeaderLabels(labels); + subkeyList->horizontalHeader()->setStretchLastSection(false); } void KeyPairSubkeyTab::slotRefreshSubkeyList() { - int row = 0; - - subkeyList->setSelectionMode(QAbstractItemView::SingleSelection); - - this->buffered_subkeys.clear(); - - for(const auto &subkeys : mKey.subKeys) { - if(subkeys.disabled || subkeys.revoked) - continue; - this->buffered_subkeys.push_back(&subkeys); - } - - subkeyList->setRowCount(buffered_subkeys.size()); - - for(const auto& subkeys : buffered_subkeys) { - - auto *tmp0 = new QTableWidgetItem(subkeys->id); - tmp0->setTextAlignment(Qt::AlignCenter); - subkeyList->setItem(row, 0, tmp0); - - auto *tmp1 = new QTableWidgetItem(QString::number(subkeys->length)); - tmp1->setTextAlignment(Qt::AlignCenter); - subkeyList->setItem(row, 1, tmp1); - - auto *tmp2 = new QTableWidgetItem(subkeys->pubkey_algo); - tmp2->setTextAlignment(Qt::AlignCenter); - subkeyList->setItem(row, 2, tmp2); - - auto *tmp3= new QTableWidgetItem(subkeys->timestamp.toString()); - tmp3->setTextAlignment(Qt::AlignCenter); - subkeyList->setItem(row, 3, tmp3); - - auto *tmp4= new QTableWidgetItem(subkeys->expires.toTime_t() == 0 ? tr("Never Expire") : subkeys->expires.toString()); - tmp4->setTextAlignment(Qt::AlignCenter); - subkeyList->setItem(row, 4, tmp4); - - row++; - } - - if(subkeyList->rowCount() > 0) { - subkeyList->selectRow(0); - } + int row = 0; + + subkeyList->setSelectionMode(QAbstractItemView::SingleSelection); + + this->buffered_subkeys.clear(); + auto sub_keys = mKey.subKeys(); + for (auto& sub_key : *sub_keys) { + if (sub_key.disabled() || sub_key.revoked()) + continue; + this->buffered_subkeys.push_back(std::move(sub_key)); + } + + subkeyList->setRowCount(buffered_subkeys.size()); + + for (const auto& subkeys : buffered_subkeys) { + auto* tmp0 = new QTableWidgetItem(QString::fromStdString(subkeys.id())); + tmp0->setTextAlignment(Qt::AlignCenter); + subkeyList->setItem(row, 0, tmp0); + + auto* tmp1 = new QTableWidgetItem(QString::number(subkeys.length())); + tmp1->setTextAlignment(Qt::AlignCenter); + subkeyList->setItem(row, 1, tmp1); + + auto* tmp2 = + new QTableWidgetItem(QString::fromStdString(subkeys.pubkey_algo())); + tmp2->setTextAlignment(Qt::AlignCenter); + subkeyList->setItem(row, 2, tmp2); + + auto* tmp3 = new QTableWidgetItem( + QString::fromStdString(to_iso_string(subkeys.timestamp()))); + tmp3->setTextAlignment(Qt::AlignCenter); + subkeyList->setItem(row, 3, tmp3); + + auto* tmp4 = new QTableWidgetItem( + boost::posix_time::to_time_t( + boost::posix_time::ptime(subkeys.expires())) == 0 + ? tr("Never Expire") + : QString::fromStdString(to_iso_string(subkeys.expires()))); + tmp4->setTextAlignment(Qt::AlignCenter); + subkeyList->setItem(row, 4, tmp4); + + row++; + } + + if (subkeyList->rowCount() > 0) { + subkeyList->selectRow(0); + } } void KeyPairSubkeyTab::slotAddSubkey() { - auto dialog = new SubkeyGenerateDialog(mCtx, mKey, this); - dialog->show(); + auto dialog = new SubkeyGenerateDialog(mKey, this); + dialog->show(); } void KeyPairSubkeyTab::slotRefreshSubkeyDetail() { - - auto key = getSelectedSubkey(); - - keyidVarLabel->setText(key->id); - keySizeVarLabel->setText(QString::number(key->length)); - - expireVarLabel->setText(key->expires.toTime_t() == 0 ? tr("Never Expires") : key->expires.toString()); - if(key->expires.toTime_t() != 0 && key->expires < QDateTime::currentDateTime()) { - auto paletteExpired = expireVarLabel->palette(); - paletteExpired.setColor(expireVarLabel->foregroundRole(), Qt::red); - expireVarLabel->setPalette(paletteExpired); - } else { - auto paletteValid = expireVarLabel->palette(); - paletteValid.setColor(expireVarLabel->foregroundRole(), Qt::darkGreen); - expireVarLabel->setPalette(paletteValid); - } - - algorithmVarLabel->setText(key->pubkey_algo); - createdVarLabel->setText(key->timestamp.toString()); - - QString usage; - QTextStream usage_steam(&usage); - - if(key->can_certify) - usage_steam << "Cert "; - if(key->can_encrypt) - usage_steam << "Encr "; - if(key->can_sign) - usage_steam << "Sign "; - if(key->can_authenticate) - usage_steam << "Auth "; - - usageVarLabel->setText(usage); - - // Show the situation that master key not exists. - masterKeyExistVarLabel->setText(key->secret ? "Exists" : "Not Exists"); - if(!key->secret){ - auto paletteExpired = masterKeyExistVarLabel->palette(); - paletteExpired.setColor(masterKeyExistVarLabel->foregroundRole(), Qt::red); - masterKeyExistVarLabel->setPalette(paletteExpired); - } else { - auto paletteValid = masterKeyExistVarLabel->palette(); - paletteValid.setColor(masterKeyExistVarLabel->foregroundRole(), Qt::darkGreen); - masterKeyExistVarLabel->setPalette(paletteValid); - } - - fingerPrintVarLabel->setText(key->fpr); + auto& subkey = getSelectedSubkey(); + + keyidVarLabel->setText(QString::fromStdString(subkey.id())); + keySizeVarLabel->setText(QString::number(subkey.length())); + + time_t subkey_time_t = + boost::posix_time::to_time_t(boost::posix_time::ptime(subkey.expires())); + + expireVarLabel->setText( + subkey_time_t == 0 + ? tr("Never Expires") + : QString::fromStdString(to_iso_string(subkey.expires()))); + if (subkey_time_t != 0 && + subkey.expires() < boost::posix_time::second_clock::local_time().date()) { + auto paletteExpired = expireVarLabel->palette(); + paletteExpired.setColor(expireVarLabel->foregroundRole(), Qt::red); + expireVarLabel->setPalette(paletteExpired); + } else { + auto paletteValid = expireVarLabel->palette(); + paletteValid.setColor(expireVarLabel->foregroundRole(), Qt::darkGreen); + expireVarLabel->setPalette(paletteValid); + } + + algorithmVarLabel->setText(QString::fromStdString(subkey.pubkey_algo())); + createdVarLabel->setText( + QString::fromStdString(to_iso_string(subkey.timestamp()))); + + QString usage; + QTextStream usage_steam(&usage); + + if (subkey.can_certify()) + usage_steam << "Cert "; + if (subkey.can_encrypt()) + usage_steam << "Encr "; + if (subkey.can_sign()) + usage_steam << "Sign "; + if (subkey.can_authenticate()) + usage_steam << "Auth "; + + usageVarLabel->setText(usage); + + // Show the situation that master key not exists. + masterKeyExistVarLabel->setText(subkey.secret() ? "Exists" : "Not Exists"); + if (!subkey.secret()) { + auto paletteExpired = masterKeyExistVarLabel->palette(); + paletteExpired.setColor(masterKeyExistVarLabel->foregroundRole(), Qt::red); + masterKeyExistVarLabel->setPalette(paletteExpired); + } else { + auto paletteValid = masterKeyExistVarLabel->palette(); + paletteValid.setColor(masterKeyExistVarLabel->foregroundRole(), + Qt::darkGreen); + masterKeyExistVarLabel->setPalette(paletteValid); + } + + fingerPrintVarLabel->setText(QString::fromStdString(subkey.fpr())); } void KeyPairSubkeyTab::createSubkeyOperaMenu() { - subkeyOperaMenu = new QMenu(this); - // auto *revokeSubkeyAct = new QAction(tr("Revoke Subkey")); - auto *editSubkeyAct = new QAction(tr("Edit Expire Date")); - connect(editSubkeyAct, SIGNAL(triggered(bool)), this, SLOT(slotEditSubkey())); + subkeyOperaMenu = new QMenu(this); + // auto *revokeSubkeyAct = new QAction(tr("Revoke Subkey")); + auto* editSubkeyAct = new QAction(tr("Edit Expire Date")); + connect(editSubkeyAct, SIGNAL(triggered(bool)), this, SLOT(slotEditSubkey())); - // subkeyOperaMenu->addAction(revokeSubkeyAct); - subkeyOperaMenu->addAction(editSubkeyAct); + // subkeyOperaMenu->addAction(revokeSubkeyAct); + subkeyOperaMenu->addAction(editSubkeyAct); } void KeyPairSubkeyTab::slotEditSubkey() { - qDebug() << "Slot Edit Subkry"; - auto *subkey = getSelectedSubkey(); - if(subkey == buffered_subkeys[0]) { - subkey = nullptr; - } - auto dialog = new KeySetExpireDateDialog(mCtx, mKey, subkey, this); - dialog->show(); + qDebug() << "Slot Edit Subkry"; + auto subkey_id = std::make_unique<std::string>(getSelectedSubkey().id()); + if (*subkey_id == buffered_subkeys[0].id()) { + subkey_id = nullptr; + } + auto dialog = new KeySetExpireDateDialog(mKey, subkey_id, this); + dialog->show(); } -void KeyPairSubkeyTab::slotRevokeSubkey() { - -} +void KeyPairSubkeyTab::slotRevokeSubkey() {} -void KeyPairSubkeyTab::contextMenuEvent(QContextMenuEvent *event) { - if (!subkeyList->selectedItems().isEmpty()) { - subkeyOperaMenu->exec(event->globalPos()); - } +void KeyPairSubkeyTab::contextMenuEvent(QContextMenuEvent* event) { + if (!subkeyList->selectedItems().isEmpty()) { + subkeyOperaMenu->exec(event->globalPos()); + } } -const GpgSubKey *KeyPairSubkeyTab::getSelectedSubkey() { - int row = 0; +const GpgSubKey& KeyPairSubkeyTab::getSelectedSubkey() { + int row = 0; - for(int i = 0 ; i < subkeyList->rowCount(); i++) { - if(subkeyList->item(row, 0)->isSelected()) break; - row++; - } + for (int i = 0; i < subkeyList->rowCount(); i++) { + if (subkeyList->item(row, 0)->isSelected()) + break; + row++; + } - return buffered_subkeys[row]; + return buffered_subkeys[row]; } + +} // namespace GpgFrontend::UI |