File indexing completed on 2024-06-02 05:24:51
0001 /* -*- mode: c++; c-basic-offset:4 -*- 0002 utils/output.h 0003 0004 This file is part of Kleopatra, the KDE keymanager 0005 SPDX-FileCopyrightText: 2007 Klarälvdalens Datakonsult AB 0006 0007 SPDX-License-Identifier: GPL-2.0-or-later 0008 */ 0009 0010 #pragma once 0011 0012 #include <assuan.h> // for assuan_fd_t 0013 0014 #include <utils/pimpl_ptr.h> 0015 0016 #include <QString> 0017 #include <QStringList> 0018 0019 #include <memory> 0020 0021 class QIODevice; 0022 class QDir; 0023 class QWidget; 0024 0025 namespace Kleo 0026 { 0027 0028 class OverwritePolicy 0029 { 0030 public: 0031 enum Policy { 0032 Ask, 0033 Overwrite, 0034 Rename, 0035 Skip, 0036 Cancel, 0037 }; 0038 0039 enum Options { 0040 MultipleFiles = 1, 0041 }; 0042 0043 explicit OverwritePolicy(Policy initialPolicy); 0044 /// creates an interactive policy, i.e. with initial policy set to Ask 0045 OverwritePolicy(QWidget *parent, Options options); 0046 ~OverwritePolicy(); 0047 0048 Policy policy() const; 0049 void setPolicy(Policy); 0050 0051 /// returns the file name to write to or an empty string if overwriting was declined 0052 QString obtainOverwritePermission(const QString &fileName); 0053 0054 private: 0055 class Private; 0056 kdtools::pimpl_ptr<Private> d; 0057 }; 0058 0059 class Output 0060 { 0061 public: 0062 virtual ~Output(); 0063 0064 virtual void setLabel(const QString &label) = 0; 0065 virtual QString label() const = 0; 0066 virtual std::shared_ptr<QIODevice> ioDevice() const = 0; 0067 virtual QString errorString() const = 0; 0068 virtual bool isFinalized() const = 0; 0069 virtual void finalize() = 0; 0070 virtual void cancel() = 0; 0071 virtual bool binaryOpt() const = 0; 0072 virtual void setBinaryOpt(bool value) = 0; 0073 /** Whether or not the output failed. */ 0074 virtual bool failed() const 0075 { 0076 return false; 0077 } 0078 virtual QString fileName() const 0079 { 0080 return {}; 0081 } 0082 0083 static std::shared_ptr<Output> createFromFile(const QString &fileName, const std::shared_ptr<OverwritePolicy> &); 0084 static std::shared_ptr<Output> createFromFile(const QString &fileName, bool forceOverwrite); 0085 static std::shared_ptr<Output> createFromPipeDevice(assuan_fd_t fd, const QString &label); 0086 static std::shared_ptr<Output> createFromProcessStdIn(const QString &command); 0087 static std::shared_ptr<Output> createFromProcessStdIn(const QString &command, const QStringList &args); 0088 static std::shared_ptr<Output> createFromProcessStdIn(const QString &command, const QStringList &args, const QDir &workingDirectory); 0089 #ifndef QT_NO_CLIPBOARD 0090 static std::shared_ptr<Output> createFromClipboard(); 0091 #endif 0092 static std::shared_ptr<Output> createFromByteArray(QByteArray *data, const QString &label); 0093 }; 0094 }