ImagingTools Core SDK
CDesignManagerComp.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 <ibase/TLocalizableWrap.h>
7#include <ibase/TRuntimeStatusHanderCompWrap.h>
8#include <icomp/CComponentBase.h>
9#include <imod/TModelWrap.h>
10#include <iprm/CSelectionParam.h>
11
12// ImtCore includes
13#include <imtstyle/CImtStyle.h>
14#include <imtstyle/IColorPaletteProvider.h>
15#include <imtstyle/IFontProvider.h>
16
17
18namespace imtstyle
19{
20
21
22class CDesignManagerComp:
23 public ibase::TRuntimeStatusHanderCompWrap<icomp::CComponentBase>,
24 public ibase::TLocalizableWrap<iprm::CSelectionParam>
25{
26public:
27 typedef ibase::TRuntimeStatusHanderCompWrap<icomp::CComponentBase> BaseClass;
28 typedef ibase::TLocalizableWrap<iprm::CSelectionParam> BaseClass2;
29
30 I_BEGIN_COMPONENT(CDesignManagerComp);
31 I_REGISTER_INTERFACE(iprm::ISelectionParam);
32 I_REGISTER_INTERFACE(iser::ISerializable);
33 I_REGISTER_SUBELEMENT(DesignList);
34 I_REGISTER_SUBELEMENT_INTERFACE(DesignList, iprm::IOptionsList, ExtractDesignList);
35 I_REGISTER_SUBELEMENT_INTERFACE(DesignList, imod::IModel, ExtractDesignList);
36 I_REGISTER_SUBELEMENT_INTERFACE(DesignList, istd::IChangeable, ExtractDesignList);
37 I_ASSIGN(m_paletteProviderCompPtr, "PaletteProvider", "Palette provider", false, "PaletteProvider");
38 I_ASSIGN_TO(m_fontProviderCompPtr, m_paletteProviderCompPtr, false);
39 I_ASSIGN(m_defaultThemeIndexAttrPtr, "DefaultThemeIndex", "Index of the default theme", true, -1);
40 I_END_COMPONENT;
41
42 CDesignManagerComp();
43 ~CDesignManagerComp();
44
45 // reimplemented (iprm::ISelectionParam)
46 virtual bool SetSelectedOptionIndex(int index) override;
47
48 // reimplemented (iser::ISerializable)
49 virtual bool Serialize(iser::IArchive& archive) override;
50
51protected:
52 // reimplemented (ibase::TRuntimeStatusHanderCompWrap)
53 virtual void OnSystemStarting() override;
54
55 // reimplemented (icomp::CComponentBase)
56 virtual void OnComponentCreated() override;
57 virtual void OnComponentDestroyed() override;
58
59 // reimplemented (ibase::TLocalizableWrap)
60 virtual void OnLanguageChanged() override;
61
62private:
63 bool ApplyDesignScheme(const QByteArray& themeId);
64
65 // static template methods for subelement access
66 template <class InterfaceType>
67 static InterfaceType* ExtractDesignList(CDesignManagerComp& component)
68 {
69 return &component.m_designs;
70 }
71
72private:
73 class DesignList: virtual public iprm::IOptionsList
74 {
75 public:
76 DesignList();
77
78 void SetParent(CDesignManagerComp* parentPtr);
79
80 void UpdateDesignList();
81
82 // reimplemented (iprm::IOptionsList)
83 virtual int GetOptionsFlags() const override;
84 virtual int GetOptionsCount() const override;
85 virtual QString GetOptionName(int index) const override;
86 virtual QString GetOptionDescription(int index) const override;
87 virtual QByteArray GetOptionId(int index) const override;
88 virtual bool IsOptionEnabled(int index) const override;
89
90 private:
91 struct DesignInfo
92 {
93 QByteArray id;
94 QString name;
95 QString description;
96 };
97
98 private:
99 QList<DesignInfo> m_designList;
100 CDesignManagerComp* m_parentPtr;
101 };
102
103private:
104 I_REF(iprm::ISelectionParam, m_slaveCompPtr);
105 I_REF(imtstyle::IColorPaletteProvider, m_paletteProviderCompPtr);
106 I_REF(imtstyle::IFontProvider, m_fontProviderCompPtr);
107 I_ATTR(int, m_defaultThemeIndexAttrPtr);
108
109 imod::TModelWrap<DesignList> m_designs;
110};
111
112
113} // namespace imtstyle
114
115