diff options
Diffstat (limited to '')
-rw-r--r-- | src/ui/keypair_details/KeyPairSubkeyTab.cpp | 143 |
1 files changed, 142 insertions, 1 deletions
diff --git a/src/ui/keypair_details/KeyPairSubkeyTab.cpp b/src/ui/keypair_details/KeyPairSubkeyTab.cpp index 2f2a49cf..a67c119e 100644 --- a/src/ui/keypair_details/KeyPairSubkeyTab.cpp +++ b/src/ui/keypair_details/KeyPairSubkeyTab.cpp @@ -24,14 +24,72 @@ #include "ui/keypair_details/KeyPairSubkeyTab.h" -KeyPairSubkeyTab::KeyPairSubkeyTab(GpgME::GpgContext *ctx, const GpgKey &key, QWidget *parent) : mCtx(ctx), key(key), QWidget(parent) { +KeyPairSubkeyTab::KeyPairSubkeyTab(GpgME::GpgContext *ctx, const GpgKey &key, QWidget *parent) : mCtx(ctx), mKey(key), QWidget(parent) { + creatSubkeyList(); + + listBox = new QGroupBox("Subkey List"); + detailBox = new QGroupBox("Detail of Selected Subkey"); + + auto uidButtonsLayout = new QGridLayout(); + + auto addSubkeyButton = new QPushButton(tr("Add New Subkey")); + if(!mKey.is_private_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); + + 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); + + keyidVarLabel = new QLabel(); + keySizeVarLabel = new QLabel(); + expireVarLabel = new QLabel(); + algorithmVarLabel = new QLabel(); + createdVarLabel = new QLabel(); + usageVarLabel = 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); + + listBox->setLayout(subkeyListLayout); + detailBox->setLayout(subkeyDetailLayout); + + baseLayout->addWidget(listBox); + baseLayout->addWidget(detailBox); + + connect(addSubkeyButton, SIGNAL(clicked(bool)), this, SLOT(slotAddSubkey())); + connect(mCtx, SIGNAL(signalKeyInfoChanged()), this, SLOT(slotRefreshSubkeyList())); + connect(subkeyList, SIGNAL(itemSelectionChanged()), this, SLOT(slotRefreshSubkeyDetail())); + + setLayout(baseLayout); setAttribute(Qt::WA_DeleteOnClose, true); + slotRefreshSubkeyList(); + } void KeyPairSubkeyTab::creatSubkeyList() { subkeyList = new QTableWidget(this); + subkeyList->setColumnCount(5); subkeyList->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); subkeyList->verticalHeader()->hide(); @@ -52,3 +110,86 @@ void KeyPairSubkeyTab::creatSubkeyList() { subkeyList->setHorizontalHeaderLabels(labels); subkeyList->horizontalHeader()->setStretchLastSection(true); } + +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.toString()); + 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(); +} + +void KeyPairSubkeyTab::slotRefreshSubkeyDetail() { + + int row = 0; + + for(int i = 0 ; i < subkeyList->rowCount(); i++) { + if(subkeyList->item(row, 0)->isSelected()) break; + row++; + } + + auto key = buffered_subkeys[row]; + + keyidVarLabel->setText(key->id); + keySizeVarLabel->setText(QString::number(key->length)); + expireVarLabel->setText(key->expires.toString()); + 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); +} |