ImagingTools Core SDK
CDocumentCollectionViewDelegateComp.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/QPointer>
7#include <QtCore/QThread>
8#include <QtCore/QDir>
9#include <QtWidgets/QDialog>
10
11// ACF includes
12#include <istd/CSystem.h>
13#include <imod/TSingleModelObserverBase.h>
14#include <icomp/CComponentBase.h>
15#include <ifile/IFilePersistence.h>
16#include <ifile/IFileMetaInfoProvider.h>
17#include <idoc/IDocumentManager.h>
18#include <iqtgui/IIconProvider.h>
19
20// ImtCore includes
21#include <imtgui/CObjectCollectionViewDelegate.h>
22#include <iprm/CParamsSet.h>
23#include <imtgui/COpenDocumentWorker.h>
24
25
26namespace imtgui
27{
28
29
37 public icomp::CComponentBase
38{
39 Q_OBJECT
40public:
41 typedef icomp::CComponentBase BaseClass;
43
44 I_BEGIN_COMPONENT(CDocumentCollectionViewDelegateComp);
45 I_REGISTER_INTERFACE(imtgui::ICollectionViewDelegate);
46 I_REGISTER_SUBELEMENT(CollectionPersistence);
47 I_REGISTER_SUBELEMENT_INTERFACE(CollectionPersistence, ifile::IFilePersistence, ExtractCollectionPersistence);
48 I_REGISTER_SUBELEMENT_INTERFACE(CollectionPersistence, ifile::IFileTypeInfo, ExtractCollectionPersistence);
49 I_ASSIGN(m_objectTypeIdAttrPtr, "ObjectTypeId", "Type-ID supported by this delegate", true, "ObjectTypeId");
50 I_ASSIGN(m_filePersistenceCompPtr, "FilePersistence", "Persistence for editable objects", true, "FilePersistence");
51 I_ASSIGN(m_objectImportPersistenceCompPtr, "ImportPersistence", "Persistence used for importing documents", false, "ImportPersistence");
52 I_ASSIGN(m_objectExportPersistenceCompPtr, "ExportPersistence", "Persistence used for exporting documents", false, "ExportPersistence");
53 I_ASSIGN(m_statusIconsProviderCompPtr, "StatusIcons", "Icons for delegate visual status", false, "StatusIcons");
54 I_ASSIGN(m_documentManagerCompPtr, "DocumentManager", "Document manager", true, "DocumentManager");
55 I_ASSIGN_TO(m_documentManagerModelCompPtr, m_documentManagerCompPtr, true);
56 I_ASSIGN(m_informationViewCompPtr, "InformationView", "Document summary information view", false, "InformationView");
57 I_ASSIGN(m_useCompressorAttrPtr, "UseCompressor", "If enable, use ZIP-compression for import/export of objects", true, true);
58 I_ASSIGN(m_editCommandLabelAttrPtr, "EditCommandLabel", "Label of the edit command", true, "Edit");
59 I_ASSIGN(m_editCommandDescriptionAttrPtr, "EditCommandDescription", "Description of the edit command", true, "Edit existing object");
60 I_END_COMPONENT;
61
63
64 // reimplemented (imtgui::ICollectionViewDelegate)
65 virtual QByteArray GetSupportedTypeId() const override;
66 virtual bool InitializeDelegate(
67 imtbase::IObjectCollection* collectionPtr,
68 iqtgui::IGuiObject* parentGuiPtr,
69 const iprm::IParamsSet* filterParamsPtr) override;
70 virtual QByteArray CreateNewObject(
71 const QByteArray& typeId,
72 const QString& objectName,
73 const QString& description,
74 const istd::IChangeable* defaultDataPtr = nullptr) const override;
75 virtual QByteArray ImportObject(const QByteArray& typeId, const QString& sourcePath = QString()) const override;
76 virtual bool ExportObject(const QByteArray& objectId, const QString& targetPath = QString()) const override;
77 virtual void RemoveObjects(const imtbase::ICollectionInfo::Ids& objectIds) const override;
78 virtual QString RenameObject(const QByteArray& objectId, const QString& newName) const override;
79 virtual void UpdateItemSelection(const imtbase::ICollectionInfo::Ids& selectedItems, const QByteArray& selectedTypeId) override;
80 virtual bool OpenDocumentEditor(const QByteArray& objectId, const QByteArray& viewTypeId = QByteArray()) const override;
81 virtual iqtgui::IGuiObject* GetInformationView() const override;
82
83protected:
84 virtual bool RenameObjectOnSave() const;
85
89 virtual QString CommentDocumentChanges(int revision) const;
90
95 class ObjectPersistenceProxy: virtual public ifile::IFilePersistence
96 {
97 public:
99
100 // reimplemented (ifile::IFilePersistence)
101 virtual bool IsOperationSupported(
102 const istd::IChangeable* dataObjectPtr,
103 const QString* filePathPtr = NULL,
104 int flags = -1,
105 bool beQuiet = true) const ;
106 virtual OperationState LoadFromFile(
107 istd::IChangeable& data,
108 const QString& filePath = QString(),
109 ibase::IProgressManager* progressManagerPtr = NULL) const;
110 virtual OperationState SaveToFile(
111 const istd::IChangeable& data,
112 const QString& filePath = QString(),
113 ibase::IProgressManager* progressManagerPtr = NULL) const;
114
115 // reimplemented (ifile::IFileTypeInfo)
116 virtual bool GetFileExtensions(QStringList& result, const istd::IChangeable* dataObjectPtr = NULL, int flags = -1, bool doAppend = false) const;
117 virtual QString GetTypeDescription(const QString* extensionPtr = NULL) const;
118
119 private:
120 void CreateBackup(const imtbase::IObjectCollection& collection, const QByteArray& objectId) const;
121
122 private:
124 };
125
126
127 class DocumentManagerObserver: public imod::TSingleModelObserverBase<idoc::IDocumentManager>
128 {
129 public:
130 DocumentManagerObserver(CDocumentCollectionViewDelegateComp& parent);
131
132 // reimplemented (imod::CSingleModelObserverBase)
133 virtual void OnUpdate(const istd::IChangeable::ChangeSet& changeSet);
134
135 private:
137 };
138
139protected:
140 // reimplemented (imtgui::CObjectCollectionViewDelegate)
141 virtual bool IsRestoreAllowed(const QByteArray& objectId) override;
142 virtual void AfterRestore(const QByteArray& objectId, bool isRestoreSuccessful) override;
143 virtual const ifile::IFileTypeInfo* FindFileInfo(const QByteArray& typeId, FileOperationType operationType) const;
144 virtual void SetupCommands() override;
145 virtual void SetupInsertCommand() override;
146 virtual bool IsBundlePersistenceSupported(ifile::IFileTypeInfo::QueryFlags flags) const override;
147
148 // reimplemented (ibase::TLocalizableWrap)
149 virtual void OnLanguageChanged() override;
150
151 // reimplemented (iqtgui::TDesignSchemaHandlerWrap)
152 virtual void OnDesignSchemaChanged(const QByteArray& themeId) override;
153
154 // reimplemented (icomp::CComponentBase)
155 virtual void OnComponentCreated() override;
156 virtual void OnComponentDestroyed() override;
157
158protected Q_SLOTS:
159 virtual void OnEdit();
160
161private:
162 template <class InterfaceType>
163 static InterfaceType* ExtractCollectionPersistence(CDocumentCollectionViewDelegateComp& component)
164 {
165 return &component.m_collectionPersistence;
166 }
167
168 void InitializeVisualStatus();
169
170protected:
171 typedef istd::TPointerVector<ICollectionViewDelegate::ObjectInfo> OpenedDocuments;
172 mutable OpenedDocuments m_openedDocuments;
173 mutable iprm::CParamsSet m_loadFilterParamSet;
174
178 I_REF(idoc::IDocumentManager, m_documentManagerCompPtr);
179 I_REF(imod::IModel, m_documentManagerModelCompPtr);
180
181private:
185 I_TEXTATTR(m_editCommandLabelAttrPtr);
186
190 I_TEXTATTR(m_editCommandDescriptionAttrPtr);
191
195 I_ATTR(QByteArray, m_objectTypeIdAttrPtr);
196
200 I_ATTR(bool, m_useCompressorAttrPtr);
201
205 I_REF(iqtgui::IIconProvider, m_statusIconsProviderCompPtr);
206
210 I_REF(ifile::IFilePersistence, m_filePersistenceCompPtr);
211
215 I_REF(ifile::IFilePersistence, m_objectImportPersistenceCompPtr);
216
220 I_REF(ifile::IFilePersistence, m_objectExportPersistenceCompPtr);
221
225 I_REF(iqtgui::IGuiObject, m_informationViewCompPtr);
226
227private:
228 idoc::MetaInfoPtr m_selectedMetaInfoPtr;
229
230 ObjectPersistenceProxy m_collectionPersistence;
231
232 DocumentManagerObserver m_documentManagerObserver;
233
234 QByteArray m_closedForRestoreId;
235
236private:
237 friend class COpenDocumentWorker;
238
239 void FinishOpenDocumentAsync(const OpenDocumentResult& result, QPointer<QObject> workerObj, QPointer<QDialog> progressDlg) const;
240};
241
242
243} // namespace imtgui
244
245
virtual QString CommentDocumentChanges(int revision) const