ImagingTools Core SDK
IDocumentManager.h
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ImtCore-Commercial
2#pragma once
3
4
5// Qt includes
6#include <QtCore/QUrl>
7
8// ACF includes
9#include <idoc/IUndoManager.h>
10#include <iser/ISerializable.h>
11#include <imod/IObserver.h>
12
13
14namespace imtdoc
15{
16
17
18class IDocumentManager : virtual public iser::ISerializable
19{
20public:
21 enum ChangeFlags
22 {
23 CF_NEW_DOCUMENT_CREATED = 170000,
24 CF_DOCUMENT_OPENED,
25 CF_DOCUMENT_RENAMED,
26 CF_DOCUMENT_CHANGED,
27 CF_DOCUMENT_UNDO_CHANGED,
28 CF_DOCUMENT_SAVED,
29 CF_DOCUMENT_SAVED_AS,
30 CF_DOCUMENT_CLOSED,
31 CF_DOCUMENT_DATA_LOADED
32 };
33
34 enum OperationStatus
35 {
36 OS_OK = 0,
37 OS_INVALID_USER_ID,
38 OS_INVALID_DOCUMENT_ID,
39 OS_INVALID_DOCUMENT_DATA,
40 OS_FAILED
41 };
42
43 struct DocumentInfo
44 {
45 QByteArray typeId;
46 QUrl url;
47 QString name;
48 bool isDirty = false;
49 bool hasNameProvider = false;
50 bool isLoading = false;
51 };
52
53 struct DocumentListItem : public DocumentInfo
54 {
55 QByteArray documentId;
56 };
57 typedef QList<DocumentListItem> DocumentList;
58
59 struct DocumentNotification : public DocumentListItem
60 {
61 QByteArray userId;
62 };
63 typedef std::shared_ptr<DocumentNotification> DocumentNotificationPtr;
64
65 struct DocumentUndoRedoNotification
66 {
67 QByteArray userId;
68 QByteArray documentId;
69 bool isDirty = false;
70 int availableUndoSteps = 0;
71 int availableRedoSteps = 0;
72 QStringList undoLevelDescriptions;
73 QStringList redoLevelDescriptions;
74 };
75
76 struct DocumentClosedNotification
77 {
78 QByteArray userId;
79 QByteArray documentId;
80 };
81
82 static const QByteArray CN_NEW_DOCUMENT_CREATED;
83 typedef DocumentNotification NewDocumentCreatedInfo;
84
85 static const QByteArray CN_DOCUMENT_OPENED;
86 typedef DocumentNotification DocumentOpenedInfo;
87
88 static const QByteArray CN_DOCUMENT_RENAMED;
89 typedef DocumentNotification DocumentRenamedInfo;
90
91 static const QByteArray CN_DOCUMENT_CHANGED;
92 typedef DocumentNotification DocumentChangedInfo;
93
94 static const QByteArray CN_DOCUMENT_UNDO_CHANGED;
95 typedef DocumentUndoRedoNotification DocumentUndoRedoChangedInfo;
96
97 static const QByteArray CN_DOCUMENT_SAVED;
98 typedef DocumentNotification DocumentSavedInfo;
99
100 static const QByteArray CN_DOCUMENT_SAVED_AS;
101 typedef DocumentNotification DocumentSavedAsInfo;
102
103 static const QByteArray CN_DOCUMENT_CLOSED;
104 typedef DocumentClosedNotification DocumentClosedInfo;
105
106 static const QByteArray CN_DOCUMENT_DATA_LOADED;
107 typedef DocumentNotification DocumentDataLoadedInfo;
108
112 virtual DocumentList GetOpenedDocumentList(const QByteArray& userId) const = 0;
113
118 virtual QByteArray CreateNewDocument(const QByteArray& userId, const QByteArray& documentTypeId) = 0;
119
130 virtual QByteArray OpenDocument(const QByteArray& userId, const QUrl& url) = 0;
131
135 virtual OperationStatus GetDocumentName(const QByteArray& userId, const QByteArray& documentId, QString& documentName) const = 0;
136
140 virtual OperationStatus SetDocumentName(const QByteArray& userId, const QByteArray& documentId, const QString& documentName) = 0;
141
145 virtual const istd::IChangeable* GetDocumentPtr(const QByteArray& userId, const QByteArray& documentId) const = 0;
146
150 virtual OperationStatus GetDocumentData(const QByteArray & userId, const QByteArray & documentId, istd::IChangeableSharedPtr& documentPtr) const = 0;
151
155 virtual OperationStatus SetDocumentData(const QByteArray& userId, const QByteArray& documentId, const istd::IChangeable& document) = 0;
156
160 virtual OperationStatus SaveDocument(
161 const QByteArray& userId,
162 const QByteArray& documentId,
163 const QString& documentName = QString(),
164 QString* errorMessage = nullptr) = 0;
165
169 virtual OperationStatus CloseDocument(const QByteArray& userId, const QByteArray& documentId) = 0;
170
174 virtual OperationStatus GetDocumentUndoManager(
175 const QByteArray& userId, const QByteArray& documentId, idoc::IUndoManager*& undoManagerPtr) const = 0;
176
180 virtual OperationStatus RegisterDocumentObserver(const QByteArray& userId, const QByteArray& documentId, imod::IObserver& observer) = 0;
181
185 virtual OperationStatus UnregisterDocumentObserver(const QByteArray& userId, const QByteArray& documentId, imod::IObserver& observer) = 0;
186};
187
188
189} // namespace imtdoc
190
191
192Q_DECLARE_METATYPE(imtdoc::IDocumentManager::DocumentNotification);
193Q_DECLARE_METATYPE(imtdoc::IDocumentManager::DocumentUndoRedoNotification);
194Q_DECLARE_METATYPE(imtdoc::IDocumentManager::DocumentClosedNotification);