File indexing completed on 2024-04-28 15:51:59
0001 /* 0002 SPDX-FileCopyrightText: 2018 Chinmoy Ranjan Pradhan <chinmoyrp65@gmail.com> 0003 SPDX-FileCopyrightText: 2023 g10 Code GmbH 0004 SPDX-FileContributor: Sune Stolborg Vuorela <sune@vuorela.dk> 0005 0006 SPDX-License-Identifier: GPL-2.0-or-later 0007 */ 0008 0009 #ifndef OKULAR_SIGNATUREPARTUTILS_H 0010 #define OKULAR_SIGNATUREPARTUTILS_H 0011 0012 #include <QDialog> 0013 #include <QFileInfo> 0014 #include <QStyledItemDelegate> 0015 #include <memory> 0016 #include <optional> 0017 0018 #include "gui/signatureguiutils.h" 0019 #include <KLocalizedString> 0020 0021 class PageView; 0022 class Ui_SelectCertificateDialog; 0023 0024 namespace SignaturePartUtils 0025 { 0026 struct SigningInformation { 0027 std::unique_ptr<Okular::CertificateInfo> certificate; 0028 QString certificatePassword; 0029 QString documentPassword; 0030 QString reason; 0031 QString location; 0032 QString backgroundImagePath; 0033 }; 0034 0035 enum class SigningInformationOption { None = 0x0, BackgroundImage = 0x1 }; 0036 Q_DECLARE_FLAGS(SigningInformationOptions, SigningInformationOption); 0037 Q_DECLARE_OPERATORS_FOR_FLAGS(SigningInformationOptions); 0038 0039 /** Retrieves signing information for this operation 0040 \return nullopt on failure, otherwise information 0041 */ 0042 std::optional<SigningInformation> getCertificateAndPasswordForSigning(PageView *pageView, Okular::Document *doc, SigningInformationOptions opts); 0043 0044 QString getFileNameForNewSignedFile(PageView *pageView, Okular::Document *doc); 0045 0046 inline QString getSuggestedFileNameForSignedFile(const QString &orig, const QString &suffix) 0047 { 0048 QFileInfo info(orig); 0049 QString baseName; 0050 if (info.suffix() == suffix) { 0051 // we are in a basic plain situation with foo.pdf, or maybe foo-1.2.3.pdf 0052 baseName = info.completeBaseName(); 0053 } else if (auto completeBaseName = info.completeBaseName(); completeBaseName.endsWith(suffix)) { 0054 // This could be a case of e.g. pdf.gz; we don't really write those 0055 // so chop it off. 0056 info = QFileInfo(completeBaseName); 0057 baseName = info.completeBaseName(); 0058 } else { 0059 // Unsure what's going on here; maybe a pdf file with a weird or no extension. 0060 baseName = info.completeBaseName(); 0061 } 0062 0063 return i18nc("Used when suggesting a new name for a digitally signed file. %1 is the old file name and %2 it's extension", "%1_signed.%2", baseName, suffix); 0064 } 0065 void signUnsignedSignature(const Okular::FormFieldSignature *form, PageView *pageView, Okular::Document *doc); 0066 0067 class KeyDelegate : public QStyledItemDelegate 0068 { 0069 Q_OBJECT 0070 public: 0071 using QStyledItemDelegate::QStyledItemDelegate; 0072 void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const final; 0073 QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const final; 0074 bool showIcon = false; 0075 }; 0076 0077 class SelectCertificateDialog : public QDialog 0078 { 0079 Q_OBJECT 0080 public: 0081 std::unique_ptr<Ui_SelectCertificateDialog> ui; 0082 ~SelectCertificateDialog() override; 0083 0084 explicit SelectCertificateDialog(QWidget *parent); 0085 }; 0086 } 0087 0088 #endif