ImagingTools Core SDK
CFeatureDependencyEditorBase.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/QTreeWidget>
7
8// ACF includes
9#include <imod/TSingleModelObserverBase.h>
10#include <istd/IPolymorphic.h>
11
12// ImtCore includes
13#include <imtbase/IObjectCollection.h>
14#include <imtlic/IFeatureInfoProvider.h>
15
16
17namespace imtlicgui
18{
19
20
25class CFeatureDependencyEditorBase: virtual public istd::IPolymorphic
26{
27public:
29
30protected:
31 typedef QMap<QByteArray, QByteArrayList> DependencyMap;
32
33 void OnFeaturePackageCollectionUpdate();
34 void EnumerateMissingDependencies();
35 void UpdateFeatureTree();
36 void UpdateFeatureTreeCheckStates();
37 QTreeWidgetItem* GetItem(const QByteArray& itemId);
38 void BuildDependencyMap(const imtbase::IObjectCollection& packageCollection);
39 bool HasDependency(const DependencyMap& dependencyMap, const QByteArray& fromFeatureId, const QByteArray& toFeatureId);
40
41 virtual void UpdateFeaturePackageModel() = 0;
42 virtual void FeatureTreeItemChanged() = 0;
43
44 void on_FeatureTree_itemChanged(QTreeWidgetItem *item, int column);
45
46protected:
47 enum DataRole
48 {
49 DR_ITEM_ID = Qt::UserRole,
50 DR_ITEM_TYPE
51 };
52
53 enum ItemType
54 {
55 IT_PACKAGE = 0,
56 IT_FEATURE
57 };
58
59 class FeaturePackageCollectionObserver: public imod::TSingleModelObserverBase<imtbase::IObjectCollection>
60 {
61 public:
62 FeaturePackageCollectionObserver();
63
64 void SetParent(CFeatureDependencyEditorBase* m_parentPtr);
65
66 // reimplemented (imod::CSingleModelObserverBase)
67 virtual void OnUpdate(const istd::IChangeable::ChangeSet& changeSet) override;
68 private:
70 };
71
72 struct FeatureDescription
73 {
74 QByteArray id;
75 QString name;
76 QString description;
77 };
78
79 typedef QList<FeatureDescription> FeatureDescriptionList;
80
81protected:
82 QTreeWidget* m_treeWidgetPtr;
83
84 bool m_isGuiModelInitialized;
85 bool m_isCollectionRepresentationInitialized;
86
87 FeaturePackageCollectionObserver m_packageCollectionObserver;
88
89 // Selected package related members
90 FeatureDescriptionList m_features;
91 DependencyMap m_dependencies;
92 QByteArrayList m_missingDependencies;
93
94 // Selected feature related members
95 QByteArray m_selectedFeatureId;
96
97 // Feature package collection related members
98 QMap<QByteArray, QString> m_packageNameMap;
99 QMap<QByteArray, FeatureDescriptionList> m_packageFeatureMap;
100 DependencyMap m_packageDependenciyMap;
101};
102
103
104} // namespace imtlicgui
105
106