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"