Loading...
Searching...
No Matches
DocumentManager.hpp
1#pragma once
2#include <score/tools/Version.hpp>
3
4#include <core/document/DocumentBuilder.hpp>
5
6#include <ossia/detail/json_fwd.hpp>
7
8#include <QObject>
9#include <QString>
10
11#include <score_lib_base_export.h>
12
13#include <vector>
14#include <verdigris>
15class QRecentFilesMenu;
16namespace score
17{
18class Document;
19struct ApplicationContext;
20class View;
21struct RestorableDocument;
22} // namespace score
23
24namespace score
25{
26
28{
29public:
30 const std::vector<Document*>& documents() const { return m_documents; }
31
32 std::vector<Document*>& documents() { return m_documents; }
33
34 Document* currentDocument() const { return m_currentDocument; }
35
36 void setCurrentDocument(Document* d) { m_currentDocument = d; }
37
38protected:
39 std::vector<Document*> m_documents;
40 Document* m_currentDocument{};
41};
42
46class SCORE_LIB_BASE_EXPORT DocumentManager
47 : public QObject
48 , public DocumentList
49{
50 W_OBJECT(DocumentManager)
51public:
52 DocumentManager(score::View* view, QObject* parentPresenter);
53
54 void init(const score::GUIApplicationContext& ctx);
55
57
58 auto recentFiles() const { return m_recentFiles; }
59
60 // Document management
61 Document* setupDocument(const score::GUIApplicationContext& ctx, score::Document* doc);
62
63 template <typename... Args>
64 Document* newDocument(const score::GUIApplicationContext& ctx, Args&&... args)
65 {
66 prepareNewDocument(ctx);
67 return setupDocument(ctx, m_builder.newDocument(ctx, std::forward<Args>(args)...));
68 }
69
70 template <typename... Args>
71 Document* loadDocument(const score::GUIApplicationContext& ctx, Args&&... args)
72 {
73 closeVirginDocument(ctx);
74 prepareNewDocument(ctx);
75 return setupDocument(ctx, m_builder.loadDocument(ctx, std::forward<Args>(args)...));
76 }
77
78 template <typename... Args>
79 void restoreDocument(const score::GUIApplicationContext& ctx, Args&&... args)
80 {
81 prepareNewDocument(ctx);
82 setupDocument(ctx, m_builder.restoreDocument(ctx, std::forward<Args>(args)...));
83 }
84
85 // Restore documents after a crash
86 void restoreDocuments(const score::GUIApplicationContext& ctx);
87
88 void setCurrentDocument(const score::GUIApplicationContext& ctx, Document* doc);
89
90 // Returns true if the document was closed.
91 bool closeDocument(const score::GUIApplicationContext& ctx, Document&);
92 void forceCloseDocument(const score::GUIApplicationContext& ctx, Document&);
93
94 // Methods to save and load
95 bool saveDocument(Document&);
96 bool saveDocumentAs(Document&);
97 bool saveDocumentAs(Document&, const QString& path);
98
99 bool saveStack();
100 Document* loadStack(const score::GUIApplicationContext& ctx);
101 Document* loadStack(const score::GUIApplicationContext& ctx, const QString&);
102
103 Document* loadFile(const score::GUIApplicationContext& ctx);
104 Document* loadFile(const score::GUIApplicationContext& ctx, const QString& filename);
105
106 bool closeAllDocuments(const score::GUIApplicationContext& ctx);
107
108 bool preparingNewDocument() const;
109
114 static bool
115 checkAndUpdateJson(rapidjson::Value&, const score::GUIApplicationContext& ctx);
116
117public:
118 void documentChanged(score::Document* arg_1)
119 E_SIGNAL(SCORE_LIB_BASE_EXPORT, documentChanged, arg_1)
120
121private:
122 void closeVirginDocument(const score::GUIApplicationContext& ctx);
123 void prepareNewDocument(const score::GUIApplicationContext& ctx);
124
125 static bool updateJson(
126 rapidjson::Value& object, score::Version json_ver, score::Version score_ver);
127
128 void saveRecentFilesState();
129
130 score::View* m_view{};
131
132 DocumentBuilder m_builder;
133
134 QPointer<QRecentFilesMenu> m_recentFiles{};
135
136 bool m_preparingNewDocument{};
137};
138
139SCORE_LIB_BASE_EXPORT
140Id<score::DocumentModel> getStrongId(const std::vector<score::Document*>& v);
141
142}
The id_base_t class.
Definition Identifier.hpp:59
Methods to set-up documents.
Definition DocumentBuilder.hpp:27
The Document class is the central part of the software.
Definition Document.hpp:51
Owns the documents.
Definition DocumentManager.hpp:49
Represents the version of a plug-in.
Definition Version.hpp:13
The main display of the application.
Definition lib/core/view/Window.hpp:41
Base toolkit upon which the software is built.
Definition Application.cpp:97
Definition DocumentManager.hpp:28
Specializes ApplicationContext with the QMainWindow.
Definition GUIApplicationContext.hpp:15