File indexing completed on 2024-06-23 05:14:05

0001 /*  dialogs/pivcardapplicationadministrationkeyinputdialog.cpp
0002 
0003     This file is part of Kleopatra, the KDE keymanager
0004     SPDX-FileCopyrightText: 2020 g10 Code GmbH
0005     SPDX-FileContributor: Ingo Klöcker <dev@ingo-kloecker.de>
0006 
0007     SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 
0010 #include "pivcardapplicationadministrationkeyinputdialog.h"
0011 
0012 #include <QDialogButtonBox>
0013 #include <QFontDatabase>
0014 #include <QLabel>
0015 #include <QLineEdit>
0016 #include <QPushButton>
0017 #include <QVBoxLayout>
0018 
0019 #include "kleopatra_debug.h"
0020 
0021 using namespace Kleo;
0022 using namespace Kleo::Dialogs;
0023 
0024 class PIVCardApplicationAdministrationKeyInputDialog::Private
0025 {
0026     friend class ::Kleo::Dialogs::PIVCardApplicationAdministrationKeyInputDialog;
0027 
0028 public:
0029     explicit Private(PIVCardApplicationAdministrationKeyInputDialog *qq);
0030 
0031     void checkAcceptable();
0032 
0033     PIVCardApplicationAdministrationKeyInputDialog *const q;
0034     QLabel *mLabel;
0035     QLineEdit *mHexEncodedAdminKeyEdit;
0036     QPushButton *mOkButton;
0037     QByteArray adminKey;
0038 };
0039 
0040 PIVCardApplicationAdministrationKeyInputDialog::Private::Private(PIVCardApplicationAdministrationKeyInputDialog *qq)
0041     : q(qq)
0042     , mLabel(new QLabel(qq))
0043     , mHexEncodedAdminKeyEdit(new QLineEdit(qq))
0044     , mOkButton(nullptr)
0045 {
0046     auto vBox = new QVBoxLayout(q);
0047 
0048     {
0049         mLabel->setWordWrap(true);
0050         vBox->addWidget(mLabel);
0051     }
0052 
0053     {
0054         const QFont fixedFont = QFontDatabase::systemFont(QFontDatabase::FixedFont);
0055         mHexEncodedAdminKeyEdit->setInputMask(QStringLiteral("HH:HH:HH:HH:HH:HH:HH:HH:HH:HH:HH:HH:HH:HH:HH:HH:HH:HH:HH:HH:HH:HH:HH:HH;_"));
0056         mHexEncodedAdminKeyEdit->setFont(fixedFont);
0057         mHexEncodedAdminKeyEdit->setMinimumWidth(QFontMetrics(fixedFont).horizontalAdvance(QStringLiteral("HH:")) * 24);
0058         connect(mHexEncodedAdminKeyEdit, &QLineEdit::textChanged, q, [this]() {
0059             checkAcceptable();
0060         });
0061 
0062         vBox->addWidget(mHexEncodedAdminKeyEdit);
0063     }
0064 
0065     auto bbox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, qq);
0066 
0067     mOkButton = bbox->button(QDialogButtonBox::Ok);
0068 
0069     mOkButton->setDefault(true);
0070     mOkButton->setShortcut(Qt::CTRL | Qt::Key_Return);
0071     connect(bbox, &QDialogButtonBox::rejected, q, [this]() {
0072         q->reject();
0073     });
0074     connect(bbox, &QDialogButtonBox::accepted, q, [this]() {
0075         q->accept();
0076     });
0077 
0078     vBox->addWidget(bbox);
0079 
0080     q->setMinimumWidth(400);
0081 
0082     checkAcceptable();
0083 }
0084 
0085 void PIVCardApplicationAdministrationKeyInputDialog::Private::checkAcceptable()
0086 {
0087     mOkButton->setEnabled(mHexEncodedAdminKeyEdit->hasAcceptableInput());
0088 }
0089 
0090 PIVCardApplicationAdministrationKeyInputDialog::PIVCardApplicationAdministrationKeyInputDialog(QWidget *parent)
0091     : QDialog(parent)
0092     , d(new Private(this))
0093 {
0094 }
0095 
0096 void PIVCardApplicationAdministrationKeyInputDialog::setLabelText(const QString &text)
0097 {
0098     d->mLabel->setText(text);
0099 }
0100 
0101 QString PIVCardApplicationAdministrationKeyInputDialog::labelText() const
0102 {
0103     return d->mLabel->text();
0104 }
0105 
0106 QByteArray PIVCardApplicationAdministrationKeyInputDialog::adminKey() const
0107 {
0108     return QByteArray::fromHex(d->mHexEncodedAdminKeyEdit->text().toUtf8());
0109 }
0110 
0111 #include "moc_pivcardapplicationadministrationkeyinputdialog.cpp"