6#include <QtCore/QPointer>
7#include <QtCore/QThread>
9#include <QtWidgets/QDialog>
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>
21#include <imtgui/CObjectCollectionViewDelegate.h>
22#include <iprm/CParamsSet.h>
23#include <imtgui/COpenDocumentWorker.h>
37 public icomp::CComponentBase
41 typedef icomp::CComponentBase BaseClass;
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");
65 virtual QByteArray GetSupportedTypeId()
const override;
66 virtual bool InitializeDelegate(
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;
84 virtual bool RenameObjectOnSave()
const;
101 virtual bool IsOperationSupported(
102 const istd::IChangeable* dataObjectPtr,
103 const QString* filePathPtr = NULL,
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;
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;
127 class DocumentManagerObserver:
public imod::TSingleModelObserverBase<idoc::IDocumentManager>
133 virtual void OnUpdate(
const istd::IChangeable::ChangeSet& changeSet);
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;
149 virtual void OnLanguageChanged()
override;
152 virtual void OnDesignSchemaChanged(
const QByteArray& themeId)
override;
155 virtual void OnComponentCreated()
override;
156 virtual void OnComponentDestroyed()
override;
159 virtual void OnEdit();
162 template <
class InterfaceType>
165 return &component.m_collectionPersistence;
168 void InitializeVisualStatus();
171 typedef istd::TPointerVector<ICollectionViewDelegate::ObjectInfo> OpenedDocuments;
172 mutable OpenedDocuments m_openedDocuments;
173 mutable iprm::CParamsSet m_loadFilterParamSet;
178 I_REF(idoc::IDocumentManager, m_documentManagerCompPtr);
179 I_REF(imod::IModel, m_documentManagerModelCompPtr);
185 I_TEXTATTR(m_editCommandLabelAttrPtr);
190 I_TEXTATTR(m_editCommandDescriptionAttrPtr);
195 I_ATTR(QByteArray, m_objectTypeIdAttrPtr);
200 I_ATTR(
bool, m_useCompressorAttrPtr);
205 I_REF(iqtgui::IIconProvider, m_statusIconsProviderCompPtr);
210 I_REF(ifile::IFilePersistence, m_filePersistenceCompPtr);
215 I_REF(ifile::IFilePersistence, m_objectImportPersistenceCompPtr);
220 I_REF(ifile::IFilePersistence, m_objectExportPersistenceCompPtr);
225 I_REF(iqtgui::IGuiObject, m_informationViewCompPtr);
228 idoc::MetaInfoPtr m_selectedMetaInfoPtr;
230 ObjectPersistenceProxy m_collectionPersistence;
232 DocumentManagerObserver m_documentManagerObserver;
234 QByteArray m_closedForRestoreId;
237 friend class COpenDocumentWorker;
239 void FinishOpenDocumentAsync(
const OpenDocumentResult& result, QPointer<QObject> workerObj, QPointer<QDialog> progressDlg)
const;
virtual QString CommentDocumentChanges(int revision) const