1 /* This file is part of Spectacle, the KDE screenshot utility 2 * SPDX-FileCopyrightText: 2015 Boudhayan Gupta <bgupta@kde.org> 3 * SPDX-License-Identifier: LGPL-2.0-or-later 4 */ 5 6 #pragma once 7 8 #include <SpectacleCommon.h> 9 10 #include <KLocalizedString> 11 #include <QDateTime> 12 #include <QIODevice> 13 #include <QMap> 14 #include <QObject> 15 #include <QPixmap> 16 #include <QPrinter> 17 #include <QUrl> 18 19 class QTemporaryDir; 20 21 class ExportManager : public QObject 22 { 23 Q_OBJECT 24 25 // singleton-ize the class 26 27 public: 28 static ExportManager *instance(); 29 30 private: 31 explicit ExportManager(QObject *parent = nullptr); 32 ~ExportManager() override; 33 34 ExportManager(ExportManager const &) = delete; 35 void operator=(ExportManager const &) = delete; 36 37 // now the usual stuff 38 39 public: 40 QString defaultSaveLocation() const; 41 bool isFileExists(const QUrl &url) const; 42 bool isImageSavedNotInTemp() const; 43 void setPixmap(const QPixmap &pixmap); 44 QPixmap pixmap() const; 45 void updatePixmapTimestamp(); 46 void setTimestamp(const QDateTime ×tamp); 47 QString windowTitle() const; 48 Spectacle::CaptureMode captureMode() const; 49 void setCaptureMode(Spectacle::CaptureMode theCaptureMode); 50 QString formatFilename(const QString &nameTemplate); 51 52 static const QMap<QString, KLocalizedString> filenamePlaceholders; 53 54 Q_SIGNALS: 55 56 void errorMessage(const QString &str); 57 void imageSaved(const QUrl &savedAt); 58 void imageCopied(); 59 void imageLocationCopied(const QUrl &savedAt); 60 void imageSavedAndCopied(const QUrl &savedAt); 61 void forceNotify(const QUrl &savedAt); 62 63 public Q_SLOTS: 64 65 QUrl getAutosaveFilename(); 66 QUrl tempSave(); 67 68 void setWindowTitle(const QString &windowTitle); 69 void doSave(const QUrl &url = QUrl(), bool notify = false); 70 bool doSaveAs(QWidget *parentWindow = nullptr, bool notify = false); 71 void doSaveAndCopy(const QUrl &url = QUrl()); 72 void doCopyToClipboard(bool notify = false); 73 void doCopyLocationToClipboard(bool notify = false); 74 void doPrint(QPrinter *printer); 75 76 private: 77 QString truncatedFilename(const QString &filename); 78 QString makeAutosaveFilename(); 79 using FileNameAlreadyUsedCheck = bool (ExportManager::*)(const QUrl &) const; 80 QString autoIncrementFilename(const QString &baseName, const QString &extension, FileNameAlreadyUsedCheck isFileNameUsed); 81 QString makeSaveMimetype(const QUrl &url); 82 bool writeImage(QIODevice *device, const QByteArray &format); 83 bool save(const QUrl &url); 84 bool localSave(const QUrl &url, const QString &mimetype); 85 bool remoteSave(const QUrl &url, const QString &mimetype); 86 bool isTempFileAlreadyUsed(const QUrl &url) const; 87 88 bool mImageSavedNotInTemp; 89 QPixmap mSavePixmap; 90 QDateTime mPixmapTimestamp; 91 QUrl mTempFile; 92 QTemporaryDir *mTempDir = nullptr; 93 QList<QUrl> mUsedTempFileNames; 94 QString mWindowTitle; 95 Spectacle::CaptureMode mCaptureMode{Spectacle::CaptureMode::AllScreens}; 96 }; 97