ImagingTools Core SDK
CSelectionParamAdapterComp.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 CSelectionParamAdapterComp:
22 public icomp::CComponentBase,
23 public CSelectionAdapterBase,
24 virtual public iprm::ISelectionParam
25{
26public:
27 typedef icomp::CComponentBase BaseClass;
28
29 I_BEGIN_COMPONENT(CSelectionParamAdapterComp);
30 I_REGISTER_SUBELEMENT(Constraints);
31 I_REGISTER_SUBELEMENT_INTERFACE(Constraints, iprm::IOptionsList, ExtractConstraints);
32 I_REGISTER_SUBELEMENT_INTERFACE(Constraints, imod::IModel, ExtractConstraints);
33 I_REGISTER_SUBELEMENT_INTERFACE(Constraints, istd::IChangeable, ExtractConstraints);
34 I_REGISTER_INTERFACE(iprm::ISelectionParam);
35 I_REGISTER_INTERFACE(iser::ISerializable);
36 I_ASSIGN(m_selectionCompPtr, "Selection", "Source selection", true, "");
37 I_END_COMPONENT;
38
39 CSelectionParamAdapterComp();
40
41protected:
42 // reimplemented (iprm::ISelectionParam)
43 virtual const iprm::IOptionsList* GetSelectionConstraints() const override;
44 virtual int GetSelectedOptionIndex() const override;
45 virtual bool SetSelectedOptionIndex(int index) override;
46 virtual ISelectionParam* GetSubselection(int index) const override;
47
48 // reimplemented (CSelectionAdapterBase)
49 virtual void OnConstraintsChanged() override;
50 virtual void OnSelectionChanged() override;
51
52 // reimplemented (icomp::CComponentBase)
53 virtual void OnComponentCreated() override;
54 virtual void OnComponentDestroyed() override;
55
56 // reimplemented (iser::ISerializable)
57 virtual bool Serialize(iser::IArchive& archive) override;
58
59private:
60 class Constraints: virtual public iprm::IOptionsList
61 {
62 public:
63 Constraints();
64 void SetParent(CSelectionParamAdapterComp* parentPtr);
65
66 // reimplemented (iprm::IOptionsList)
67 virtual int GetOptionsFlags() const override;
68 virtual int GetOptionsCount() const override;
69 virtual QString GetOptionName(int index) const override;
70 virtual QString GetOptionDescription(int index) const override;
71 virtual QByteArray GetOptionId(int index) const override;
72 virtual bool IsOptionEnabled(int index) const override;
73
74 private:
75 CSelectionParamAdapterComp* m_parentPtr;
76 };
77
78 template< class InterfaceType>
79 static InterfaceType* ExtractConstraints(CSelectionParamAdapterComp& component)
80 {
81 return &component.m_constraints;
82 }
83
84private:
85 I_REF(ISelection, m_selectionCompPtr);
86
87 ISelection* m_selectionPtr;
88 const ICollectionInfo* m_selectionConstraintsPtr;
89
90 imod::TModelWrap<Constraints> m_constraints;
91};
92
93
94} // namespace imtbase
95
96