ImagingTools Core SDK
CSelectionAdapterComp.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// ACF includes
6#include <icomp/CComponentBase.h>
7#include <imod/TModelWrap.h>
8#include <iprm/IOptionsList.h>
9#include <iprm/ISelectionParam.h>
10
11// ImtCore includes
12#include <imtbase/CSelectionAdapterBase.h>
13#include <imtbase/ICollectionInfo.h>
14#include <imtbase/ISelection.h>
15
16
17namespace imtbase
18{
19
20
21class CSelectionAdapterComp:
22 public icomp::CComponentBase,
23 public CSelectionAdapterBase,
24 virtual public ISelection
25{
26public:
27 typedef icomp::CComponentBase BaseClass;
28
29 I_BEGIN_COMPONENT(CSelectionAdapterComp);
30 I_REGISTER_SUBELEMENT(Constraints);
31 I_REGISTER_SUBELEMENT_INTERFACE(Constraints, ICollectionInfo, ExtractConstraints);
32 I_REGISTER_SUBELEMENT_INTERFACE(Constraints, imod::IModel, ExtractConstraints);
33 I_REGISTER_SUBELEMENT_INTERFACE(Constraints, istd::IChangeable, ExtractConstraints);
34 I_REGISTER_INTERFACE(ISelection);
35 I_REGISTER_INTERFACE(iser::ISerializable);
36 I_ASSIGN(m_selectionCompPtr, "SelectionParam", "Source selection param", false, "");
37 I_END_COMPONENT;
38
39 CSelectionAdapterComp();
40
41protected:
42 // reimplemented (ISelection)
43 virtual const ICollectionInfo* GetSelectionConstraints() const override;
44 virtual SelectionMode GetSelectionMode() const override;
45 virtual bool SetSelectionMode(SelectionMode mode) override;
46 virtual Ids GetSelectedIds() const override;
47 virtual bool SetSelectedIds(const Ids& selectedIds) override;
48
49 // reimplemented (CSelectionAdapterBase)
50 virtual void OnConstraintsChanged() override;
51 virtual void OnSelectionChanged() override;
52
53 // reimplemented (icomp::CComponentBase)
54 virtual void OnComponentCreated() override;
55 virtual void OnComponentDestroyed() override;
56
57 // reimplemented (iser::ISerializable)
58 virtual bool Serialize(iser::IArchive& archive) override;
59
60private:
61 int GetOptionIndex(const QByteArray& optionId) const;
62 QByteArray GetOptionId(int index) const;
63
64private:
65 class Constraints: virtual public ICollectionInfo
66 {
67 public:
68 Constraints();
69 void SetParent(CSelectionAdapterComp* parentPtr);
70
71 // reimplemented (ICollectionInfo)
72 virtual int GetElementsCount(
73 const iprm::IParamsSet* selectionParamPtr = nullptr,
74 ilog::IMessageConsumer* logPtr = nullptr) const override;
75 virtual Ids GetElementIds(
76 int offset = 0,
77 int count = -1,
78 const iprm::IParamsSet* selectionParamsPtr = nullptr,
79 ilog::IMessageConsumer* logPtr = nullptr) const override;
80 virtual bool GetSubsetInfo(
81 ICollectionInfo& subsetInfo,
82 int offset = 0,
83 int count = -1,
84 const iprm::IParamsSet* selectionParamsPtr = nullptr,
85 ilog::IMessageConsumer* logPtr = nullptr) const override;
86 virtual QVariant GetElementInfo(const Id& elementId, int infoType, ilog::IMessageConsumer* logPtr = nullptr) const override;
87 virtual idoc::MetaInfoPtr GetElementMetaInfo(const Id& elementId, ilog::IMessageConsumer* logPtr = nullptr) const override;
88 virtual bool SetElementName(const Id& elementId, const QString& name, ilog::IMessageConsumer* logPtr = nullptr) override;
89 virtual bool SetElementDescription(const Id& elementId, const QString& description, ilog::IMessageConsumer* logPtr = nullptr) override;
90 virtual bool SetElementEnabled(const Id& elementId, bool isEnabled = true, ilog::IMessageConsumer* logPtr = nullptr) override;
91
92 private:
93 CSelectionAdapterComp* m_parentPtr;
94 };
95
96 template< class InterfaceType>
97 static InterfaceType* ExtractConstraints(CSelectionAdapterComp& component)
98 {
99 return &component.m_constraints;
100 }
101
102private:
103 I_REF(iprm::ISelectionParam, m_selectionCompPtr);
104
105 iprm::ISelectionParam* m_selectionPtr;
106 const iprm::IOptionsList* m_selectionConstraintsPtr;
107
108 imod::TModelWrap<Constraints> m_constraints;
109};
110
111
112} // namespace imtbase
113
114