Warning, file /graphics/glaxnimate/src/gui/settings/document_templates.hpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002  * SPDX-FileCopyrightText: 2019-2023 Mattia Basaglia <dev@dragon.best>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 #pragma once
0008 
0009 #include <set>
0010 
0011 #include "model/document.hpp"
0012 
0013 class QAction;
0014 
0015 namespace glaxnimate::gui::settings {
0016 
0017 class DocumentTemplate
0018 {
0019     Q_GADGET
0020 
0021 public:
0022 #if QT_VERSION_MAJOR >= 6
0023     DocumentTemplate() { throw "Qt dumb"; }
0024     DocumentTemplate(const DocumentTemplate&) { throw "Qt dumb"; }
0025     DocumentTemplate& operator=(const DocumentTemplate&) { throw "Qt dumb"; }
0026     DocumentTemplate(DocumentTemplate&&) = default;
0027     DocumentTemplate& operator=(DocumentTemplate&&) = default;
0028 #endif
0029 
0030     DocumentTemplate(const QString& filename, bool* loaded);
0031 
0032     QSize size() const;
0033 
0034     model::FrameTime duration() const;
0035 
0036     QString name() const;
0037 
0038     QString long_name() const;
0039 
0040     float fps() const;
0041 
0042     std::unique_ptr<model::Document> create(bool* ok) const;
0043 
0044     bool operator<(const DocumentTemplate& oth) const;
0045 
0046     static KLocalizedString name_template(model::Composition* comp);
0047 
0048     QString aspect_ratio() const;
0049     static QString aspect_ratio(const QSize& size);
0050 
0051     model::Composition* main_comp() const;
0052 
0053 private:
0054     QString filename;
0055     std::unique_ptr<model::Document> document;
0056 
0057     std::unique_ptr<model::Document> load(bool* ok) const;
0058 };
0059 
0060 class DocumentTemplates : public QObject
0061 {
0062     Q_OBJECT
0063 
0064 public:
0065     const std::vector<DocumentTemplate>& templates() const;
0066 
0067     void load();
0068 
0069     bool save_as_template(model::Document* document);
0070 
0071     static DocumentTemplates& instance();
0072 
0073     QAction* create_action(const DocumentTemplate& templ, QObject *parent = nullptr);
0074 
0075 Q_SIGNALS:
0076     void loaded(const std::vector<DocumentTemplate>& templates);
0077     void create_from(const DocumentTemplate& templ);
0078 
0079 private:
0080     DocumentTemplates();
0081 
0082     std::vector<DocumentTemplate> templates_;
0083     std::set<QString> names;
0084 
0085 };
0086 
0087 } // namespace glaxnimate::gui::settings
0088