// Copyright (C) 2020 Jakub Melka // // This file is part of PdfForQt. // // PdfForQt is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // PdfForQt is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License // along with PDFForQt. If not, see . #ifndef PDFTOOLABSTRACTAPPLICATION_H #define PDFTOOLABSTRACTAPPLICATION_H #include "pdfoutputformatter.h" #include #include #include #include class QCommandLineParser; namespace pdftool { struct PDFToolTranslationContext { Q_DECLARE_TR_FUNCTIONS(PDFToolTranslationContext) }; struct PDFToolOptions { QString document; QString password; PDFOutputFormatter::Style outputStyle = PDFOutputFormatter::Style::Text; }; /// Base class for all applications class PDFToolAbstractApplication { public: explicit PDFToolAbstractApplication(bool isDefault = false); virtual ~PDFToolAbstractApplication() = default; enum ExitCodes { ExitSuccess = EXIT_SUCCESS }; enum StandardString { Command, ///< Command, by which is this application invoked Name, ///< Name of application Description ///< Description (what this application does) }; enum Option { ConsoleFormat = 0x0001, ///< Set format of console output (text, xml or html) }; Q_DECLARE_FLAGS(Options, Option) virtual QString getStandardString(StandardString standardString) const = 0; virtual int execute(const PDFToolOptions& options) = 0; virtual Options getOptionsFlags() const = 0; void initializeCommandLineParser(QCommandLineParser* parser) const; PDFToolOptions getOptions(QCommandLineParser* parser) const; }; /// This class stores information about all applications available. Application /// can be selected by command string. Also, default application is available. class PDFToolApplicationStorage { public: /// Returns application by command. If application for given command is not found, /// then nullptr is returned. /// \param command Command /// \returns Application for given command or nullptr static PDFToolAbstractApplication* getApplicationByCommand(const QString& command); /// Registers application to the application storage. If \p isDefault /// is set to true, application is registered as default application. /// \param application Apllication /// \param isDefault Is default application? static void registerApplication(PDFToolAbstractApplication* application, bool isDefault = false); /// Returns default application /// \returns Default application static PDFToolAbstractApplication* getDefaultApplication(); /// Returns a list of available applications static const std::vector& getApplications(); private: PDFToolApplicationStorage() = default; static PDFToolApplicationStorage* getInstance(); std::vector m_applications; PDFToolAbstractApplication* m_defaultApplication = nullptr; }; } // namespace pdftool #endif // PDFTOOLABSTRACTAPPLICATION_H