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

0001 /* -*- mode: c++; c-basic-offset:4 -*-
0002     newcertificatewizard/newcertificatewizard.cpp
0003 
0004     This file is part of Kleopatra, the KDE keymanager
0005     SPDX-FileCopyrightText: 2008 Klarälvdalens Datakonsult AB
0006 
0007     SPDX-FileCopyrightText: 2016, 2017 Bundesamt für Sicherheit in der Informationstechnik
0008     SPDX-FileContributor: Intevation GmbH
0009 
0010     SPDX-License-Identifier: GPL-2.0-or-later
0011 */
0012 
0013 #include <config-kleopatra.h>
0014 
0015 #include "newcertificatewizard.h"
0016 
0017 #include "enterdetailspage_p.h"
0018 #include "keycreationpage_p.h"
0019 #include "resultpage_p.h"
0020 
0021 #include <KLocalizedString>
0022 
0023 #include <QDir>
0024 #include <QTemporaryDir>
0025 
0026 using namespace Kleo;
0027 using namespace Kleo::NewCertificateUi;
0028 using namespace GpgME;
0029 
0030 class NewCertificateWizard::Private
0031 {
0032     friend class ::Kleo::NewCertificateWizard;
0033     NewCertificateWizard *const q;
0034 
0035 public:
0036     explicit Private(NewCertificateWizard *qq)
0037         : q(qq)
0038         , tmp(QDir::temp().absoluteFilePath(QStringLiteral("kleo-")))
0039         , ui(q)
0040     {
0041         q->setWindowTitle(i18nc("@title:window", "Key Pair Creation Wizard"));
0042     }
0043 
0044 private:
0045     GpgME::Protocol protocol = GpgME::UnknownProtocol;
0046     QTemporaryDir tmp;
0047     struct Ui {
0048         EnterDetailsPage enterDetailsPage;
0049         KeyCreationPage keyCreationPage;
0050         ResultPage resultPage;
0051 
0052         explicit Ui(NewCertificateWizard *q)
0053             : enterDetailsPage(q)
0054             , keyCreationPage(q)
0055             , resultPage(q)
0056         {
0057             KDAB_SET_OBJECT_NAME(enterDetailsPage);
0058             KDAB_SET_OBJECT_NAME(keyCreationPage);
0059             KDAB_SET_OBJECT_NAME(resultPage);
0060 
0061             q->setOptions(NoBackButtonOnStartPage | DisabledBackButtonOnLastPage);
0062 
0063             q->setPage(EnterDetailsPageId, &enterDetailsPage);
0064             q->setPage(KeyCreationPageId, &keyCreationPage);
0065             q->setPage(ResultPageId, &resultPage);
0066         }
0067 
0068     } ui;
0069 };
0070 
0071 NewCertificateWizard::NewCertificateWizard(QWidget *p)
0072     : QWizard(p)
0073     , d(new Private(this))
0074 {
0075 }
0076 
0077 NewCertificateWizard::~NewCertificateWizard()
0078 {
0079 }
0080 
0081 void NewCertificateWizard::showEvent(QShowEvent *event)
0082 {
0083     // set WA_KeyboardFocusChange attribute to force visual focus of the
0084     // focussed button when the wizard is shown (required for Breeze style
0085     // and some other styles)
0086     window()->setAttribute(Qt::WA_KeyboardFocusChange);
0087     QWizard::showEvent(event);
0088 }
0089 
0090 void NewCertificateWizard::setProtocol(Protocol proto)
0091 {
0092     d->protocol = proto;
0093 }
0094 
0095 Protocol NewCertificateWizard::protocol() const
0096 {
0097     return d->protocol;
0098 }
0099 
0100 void NewCertificateWizard::restartAtEnterDetailsPage()
0101 {
0102     restart();
0103     while (currentId() != NewCertificateWizard::EnterDetailsPageId) {
0104         next();
0105     }
0106 }
0107 
0108 QDir NewCertificateWizard::tmpDir() const
0109 {
0110     return QDir(d->tmp.path());
0111 }
0112 
0113 #include "moc_newcertificatewizard.cpp"