ImagingTools Core SDK
COrderedObjectCollectionProxy.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/QVector>
7#include <QtCore/QSet>
8
9// ACF includes
10#include <istd/TOptInterfacePtr.h>
11#include <imod/CModelUpdateBridge.h>
12
13// ImtCore includes
14#include <imtbase/IOrderedObjectCollection.h>
15
16
17namespace imtbase
18{
19
20
40{
41public:
43
49 explicit COrderedObjectCollectionProxy(IObjectCollection* collectionPtr, bool takeOwnership = false);
50 COrderedObjectCollectionProxy(IObjectCollectionUniquePtr&& collectionPtr);
51 COrderedObjectCollectionProxy(const istd::TOptInterfacePtr<IObjectCollection>& collectionPtr);
52
54
55 void SetCollection(IObjectCollection* collectionPtr, bool takeOwnership = false);
56 void SetCollection(IObjectCollectionUniquePtr&& collectionPtr);
57 void SetCollection(const istd::TOptInterfacePtr<IObjectCollection>& collectionPtr);
58
59 // reimplemented (IOrderedObjectCollection)
60 virtual bool SetItemOrder(const Id& itemId, int position) override;
61 virtual int GetItemOrder(const Id& itemId) const override;
62 virtual bool SetItemsOrder(const Ids& orderedIds) override;
63 virtual Ids GetOrderedItemIds() const override;
64 virtual bool ResetItemOrder() override;
65
66 // reimplemented (imtbase::IObjectCollection)
67 virtual IHierarchicalStructure* GetCollectionStructure() const override;
68 virtual const IRevisionController* GetRevisionController() const override;
69 virtual const ICollectionDataController* GetDataController() const override;
70 virtual int GetOperationFlags(const QByteArray& objectId = QByteArray()) const override;
71 virtual Id InsertNewObject(
72 const QByteArray& typeId,
73 const QString& name,
74 const QString& description,
75 const istd::IChangeable* defaultValuePtr = nullptr,
76 const Id& proposedElementId = Id(),
77 const idoc::IDocumentMetaInfo* dataMetaInfoPtr = nullptr,
78 const idoc::IDocumentMetaInfo* elementMetaInfoPtr = nullptr,
79 const IOperationContext* operationContextPtr = nullptr) override;
80 virtual bool RemoveElements(const Ids& elementIds, const IOperationContext* operationContextPtr = nullptr) override;
81 virtual bool RemoveElementSet(
82 const iprm::IParamsSet* selectionParamsPtr = nullptr,
83 const IOperationContext* operationContextPtr = nullptr) override;
84 virtual bool RestoreObjects(
85 const Ids& objectIds,
86 const IOperationContext* operationContextPtr = nullptr) override;
87 virtual bool RestoreObjectSet(
88 const iprm::IParamsSet* selectionParamsPtr = nullptr,
89 const IOperationContext* operationContextPtr = nullptr) override;
90 virtual const istd::IChangeable* GetObjectPtr(const Id& objectId) const override;
91 virtual bool GetObjectData(const Id& objectId, DataPtr& dataPtr, const iprm::IParamsSet* dataConfigurationPtr = nullptr) const override;
92 virtual bool SetObjectData(
93 const Id& objectId,
94 const istd::IChangeable& object,
95 CompatibilityMode mode = CM_WITHOUT_REFS,
96 const IOperationContext* operationContextPtr = nullptr) override;
97 virtual IObjectCollectionUniquePtr CreateSubCollection(
98 int offset = 0,
99 int count = -1,
100 const iprm::IParamsSet* selectionParamsPtr = nullptr) const override;
101 virtual IObjectCollectionIterator* CreateObjectCollectionIterator(
102 const QByteArray& objectId = QByteArray(),
103 int offset = 0,
104 int count = -1,
105 const iprm::IParamsSet* selectionParamsPtr = nullptr) const override;
106
107 // reimplemented (IObjectCollectionInfo)
108 virtual const iprm::IOptionsList* GetObjectTypesInfo() const override;
109 virtual Id GetObjectTypeId(const Id& objectId) const override;
110 virtual idoc::MetaInfoPtr GetDataMetaInfo(const Id& objectId) const override;
111
112 // reimplemented (ICollectionInfo)
113 virtual int GetElementsCount(
114 const iprm::IParamsSet* selectionParamPtr = nullptr,
115 ilog::IMessageConsumer* logPtr = nullptr) const override;
116 virtual Ids GetElementIds(
117 int offset = 0,
118 int count = -1,
119 const iprm::IParamsSet* selectionParamsPtr = nullptr,
120 ilog::IMessageConsumer* logPtr = nullptr) const override;
121 virtual bool GetSubsetInfo(
122 ICollectionInfo& subsetInfo,
123 int offset = 0,
124 int count = -1,
125 const iprm::IParamsSet* selectionParamsPtr = nullptr,
126 ilog::IMessageConsumer* logPtr = nullptr) const override;
127 virtual QVariant GetElementInfo(const Id& elementId, int infoType, ilog::IMessageConsumer* logPtr = nullptr) const override;
128 virtual idoc::MetaInfoPtr GetElementMetaInfo(const Id& elementId, ilog::IMessageConsumer* logPtr = nullptr) const override;
129 virtual bool SetElementName(const Id& elementId, const QString& name, ilog::IMessageConsumer* logPtr = nullptr) override;
130 virtual bool SetElementDescription(const Id& elementId, const QString& description, ilog::IMessageConsumer* logPtr = nullptr) override;
131 virtual bool SetElementEnabled(const Id& elementId, bool isEnabled = true, ilog::IMessageConsumer* logPtr = nullptr) override;
132
133 // reimplemented (iser::ISerializable)
134 virtual bool Serialize(iser::IArchive& archive) override;
135
136 // reimplemented (istd::IChangeable)
137 virtual int GetSupportedOperations() const override;
138 virtual bool CopyFrom(const IChangeable& object, CompatibilityMode mode = CM_WITHOUT_REFS) override;
139 virtual bool IsEqual(const IChangeable& object) const override;
140 virtual istd::IChangeableUniquePtr CloneMe(CompatibilityMode mode = CM_WITHOUT_REFS) const override;
141 virtual bool ResetData(CompatibilityMode mode = CM_WITHOUT_REFS) override;
142
143private:
147 Ids GetCollectionElementIds() const;
148
153 void SynchronizeOrder() const;
154
158 Ids ApplyCustomOrder(const Ids& ids) const;
159
163 void CopyOrderingState(const COrderedObjectCollectionProxy& other);
164
168 void AttachCollectionObserver();
169
170private:
171 istd::TOptInterfacePtr<IObjectCollection> m_collectionPtr; // Managed or unmanaged pointer to the aggregated collection
172 imod::CModelUpdateBridge m_updateBridge; // Bridge for forwarding change notifications from aggregated collection to proxy observers
173 mutable QVector<QByteArray> m_customOrder; // Stores the custom order of item IDs when m_hasCustomOrder is true
174 mutable bool m_hasCustomOrder; // Flag indicating whether a custom order is currently active
175};
176
177
178} // namespace imtbase
COrderedObjectCollectionProxy(IObjectCollection *collectionPtr, bool takeOwnership=false)