ImagingTools Core SDK
CObjectCollectionViewDelegate.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 <QtWidgets/QMenu>
7
8// ACF includes
9#include <istd/TDelPtr.h>
10#include <imod/TModelWrap.h>
11#include <ibase/TLocalizableWrap.h>
12#include <ifile/IFileTypeInfo.h>
13#include <iqtgui/IGuiObject.h>
14#include <iqtgui/TDesignSchemaHandlerWrap.h>
15#include <iqtgui/TMakeIconProviderCompWrap.h>
16#include <iqtgui/CHierarchicalCommand.h>
17
18// ImtCore includes
19#include <imtbase/CCollectionInfo.h>
20#include <imtgui/ICollectionViewDelegate.h>
21
22
23namespace imtgui
24{
25
26
32 public QObject,
33 public iqtgui::TMakeIconProviderCompWrap<
34 ibase::TLocalizableWrap<ICollectionViewDelegate>>
35{
36 Q_OBJECT
37public:
38 typedef iqtgui::TMakeIconProviderCompWrap<
39 ibase::TLocalizableWrap<ICollectionViewDelegate>> BaseClass;
40
41 enum CommandGroup
42 {
43 CG_EDIT = 2050
44 };
45
46 enum CommandIdentifier
47 {
48 CI_EDIT = BaseClass::CI_USER,
49 CI_INSERT,
50 CI_DUPLICATE,
51 CI_REMOVE,
52 CI_RENAME,
53 CI_EDIT_DESCRIPTION,
54 CI_IMPORT,
55 CI_EXPORT,
56 CI_RESTORE,
57 CG_DOCUMENT_MANAGER,
58 CI_USER = BaseClass::CI_USER + 100
59 };
60
63
64 // reimplemented (ICollectionViewDelegate)
65 virtual bool InitializeDelegate(
66 imtbase::IObjectCollection* collectionPtr,
67 iqtgui::IGuiObject* parentGuiPtr,
68 const iprm::IParamsSet* filterParamsPtr) override;
69 virtual const iqtgui::IVisualStatus& GetDocumentTypeStatus() const override;
70 virtual QByteArray GetSupportedTypeId() const override;
71 virtual QAbstractItemDelegate* GetColumnItemDelegate(const QByteArray& columnId) const override;
72 virtual void OnColumnItemDelegateEditFinished(const QByteArray& objectId, const QByteArray& columnId, const QVariant& newValue) const override;
73 virtual bool IsEditorEnabled(const QByteArray& columnId) const override;
74 virtual void UpdateItemSelection(const imtbase::ICollectionInfo::Ids& selectedItems, const QByteArray& selectedTypeId) override;
75 virtual QByteArray CreateNewObject(
76 const QByteArray& typeId,
77 const QString& objectName,
78 const QString& description,
79 const istd::IChangeable* defaultDataPtr = nullptr) const override;
80 virtual QByteArray ImportObject(const QByteArray& typeId, const QString& sourcePath = QString()) const override;
81 virtual bool ExportObject(const QByteArray& objectId, const QString& targetPath = QString()) const override;
82 virtual void RemoveObjects(const imtbase::ICollectionInfo::Ids& objectIds) const override;
83 virtual bool UpdateObject(const QByteArray& objectId, const istd::IChangeable& contents) const override;
84 virtual QString RenameObject(const QByteArray& objectId, const QString& newName) const override;
85 virtual const imtbase::ICollectionInfo& GetSummaryInformationTypes() const override;
86 virtual bool GetSummaryInformation(
87 const QByteArray& objectId,
88 const QVector<QByteArray>& fieldIds,
89 ObjectMetaInfo& objectMetaInfo) const override;
90 virtual HeaderInfo GetSummaryInformationHeaderInfo(const QByteArray& informationId) const override;
91 virtual bool OpenDocumentEditor(const QByteArray& objectId, const QByteArray& viewTypeId = QByteArray()) const override;
92 virtual iqtgui::IGuiObject* GetInformationView() const override;
93 virtual bool IsCommandSupported(int commandId) const override;
94 virtual void SetupContextMenu(QMenu& menu) const override;
95
96 // reimplemented (ibase::ICommandsProvider)
97 virtual const ibase::IHierarchicalCommand* GetCommands() const override;
98
99 static QString s_dateTimeFormat;
100
101protected:
102 enum FileOperationType
103 {
104 FOT_EXPORT,
105 FOT_IMPORT
106 };
107
108 bool IsNameUnique(const QString& name, const QStringList& existingNames) const;
109 QString GetUniqueName(const QString& name) const;
110
111 virtual void SetupSummaryInformation();
112 virtual void SetupCommands();
113 virtual void SetupInsertCommand();
114 virtual void OnDuplicateObject(const QByteArray& sourceObjectId, const QByteArray& destinationObjectId);
115 virtual void OnImportObject(const QByteArray& objectId);
116 virtual bool IsRestoreAllowed(const QByteArray& objectId);
117 virtual void BeforeRestore(const QByteArray& objectId);
118 virtual void AfterRestore(const QByteArray& objectId, bool isRestoreSuccessful);
119 virtual QByteArray FindTypeIdFromFile(const QString& filePath) const;
120 virtual const ifile::IFileTypeInfo* FindFileInfo(const QByteArray& typeId, FileOperationType operationType) const;
121 virtual QString CreateFileImportFilter(bool useBundle) const;
122 virtual QString CreateFileExportFilter(const QByteArray& objectId, bool useBundle) const;
123 virtual bool IsBundlePersistenceSupported(ifile::IFileTypeInfo::QueryFlags flags) const;
124
125 // reimplemented (ibase::TLocalizableWrap)
126 virtual void OnLanguageChanged() override;
127
128 // reimplemented (iqtgui::TDesignSchemaHandlerWrap)
129 virtual void OnDesignSchemaChanged(const QByteArray& themeId) override;
130
131protected:
132 class VisualStatus: virtual public iqtgui::IVisualStatus
133 {
134 public:
135 void SetStatusIcon(const QIcon &statusIcon);
136 void SetStatusText(const QString &statusText);
137
138 // reimplemented (IVisualStatus)
139 virtual QIcon GetStatusIcon() const override;
140 virtual QString GetStatusText() const override;
141
142 private:
143 QIcon m_statusIcon;
144 QString m_statusText;
145 };
146
147protected Q_SLOTS:
148 virtual void OnInsert();
149 virtual void OnDuplicate();
150 virtual void OnRemove();
151 virtual void OnAddMenuOptionClicked(QAction* action);
152 virtual void OnImport();
153 virtual void OnExport();
154 virtual void OnRestore();
155 virtual void OnRename(bool checked);
156 virtual void OnEditDescription(bool checked);
157 virtual void OnEdit(bool checked);
158
159protected:
160 // commands
161 iqtgui::CHierarchicalCommand m_rootCommands;
162
163 iqtgui::CHierarchicalCommand m_editCommands;
164 iqtgui::CHierarchicalCommand m_editContentsCommand;
165 iqtgui::CHierarchicalCommand m_insertCommand;
166 iqtgui::CHierarchicalCommand m_duplicateCommand;
167 iqtgui::CHierarchicalCommand m_removeCommand;
168 iqtgui::CHierarchicalCommand m_importCommand;
169 iqtgui::CHierarchicalCommand m_exportCommand;
170 iqtgui::CHierarchicalCommand m_restoreCommand;
171
172 istd::TDelPtr<QMenu> m_insertNewDocumentMenuPtr;
173
174 imtbase::IObjectCollection* m_collectionPtr;
175 iqtgui::IGuiObject* m_parentGuiPtr;
176 const iprm::IParamsSet* m_filterParamsPtr;
177 imtbase::ICollectionInfo::Ids m_selectedItemIds;
178 QByteArray m_selectedTypeId;
179
180 imtbase::CCollectionInfo m_summaryInformationTypes;
181 QMap<QByteArray, HeaderInfo> m_summaryInformationHeaders;
182
183 imod::TModelWrap<VisualStatus> m_visualStatus;
184
185 QString m_exportFilePath;
186};
187
188
189} // namespace imtgui
190
191