|
2 | 2 |
|
3 | 3 | #include <algorithm> |
4 | 4 |
|
5 | | -#include <QHash> |
6 | | -#include <QVariant> |
7 | | - |
8 | 5 | #include <dspxmodel/private/SpliceHelper_p.h> |
| 6 | +#include <dspxmodel/private/BasicModelStrategyEntity_p.h> |
9 | 7 |
|
10 | 8 | namespace dspx { |
11 | 9 |
|
12 | | - class BasicModelStrategyEntity : public QObject { |
13 | | - Q_OBJECT |
14 | | - public: |
15 | | - using QObject::QObject; |
16 | | - |
17 | | - ModelStrategy::Entity type{}; |
18 | | - }; |
19 | | - |
20 | | - class BasicModelStrategyItemEntity : public BasicModelStrategyEntity { |
21 | | - Q_OBJECT |
22 | | - public: |
23 | | - using BasicModelStrategyEntity::BasicModelStrategyEntity; |
24 | | - |
25 | | - QHash<ModelStrategy::Property, QVariant> properties; |
26 | | - QHash<ModelStrategy::Relationship, BasicModelStrategyEntity *> associatedSubEntities; |
27 | | - }; |
28 | | - |
29 | | - class BasicModelStrategySequenceContainerEntity : public BasicModelStrategyEntity { |
30 | | - Q_OBJECT |
31 | | - public: |
32 | | - using BasicModelStrategyEntity::BasicModelStrategyEntity; |
33 | | - |
34 | | - QSet<BasicModelStrategyEntity *> sequence; |
35 | | - }; |
36 | | - |
37 | | - class BasicModelStrategyListContainerEntity : public BasicModelStrategyEntity { |
38 | | - Q_OBJECT |
39 | | - public: |
40 | | - using BasicModelStrategyEntity::BasicModelStrategyEntity; |
41 | | - |
42 | | - QList<BasicModelStrategyEntity *> list; |
43 | | - }; |
44 | | - |
45 | | - class BasicModelStrategyMapContainerEntity : public BasicModelStrategyEntity { |
46 | | - Q_OBJECT |
47 | | - public: |
48 | | - using BasicModelStrategyEntity::BasicModelStrategyEntity; |
49 | | - |
50 | | - QHash<QString, BasicModelStrategyEntity *> map; |
51 | | - }; |
52 | | - |
53 | | - class BasicModelStrategyDataArrayEntity : public BasicModelStrategyEntity { |
54 | | - Q_OBJECT |
55 | | - public: |
56 | | - using BasicModelStrategyEntity::BasicModelStrategyEntity; |
57 | | - |
58 | | - QVariantList data; |
59 | | - }; |
60 | | - |
61 | | - static BasicModelStrategyEntity *createByType(ModelStrategy::Entity type, QObject *parent) { |
62 | | - BasicModelStrategyEntity *obj; |
63 | | - switch (type) { |
64 | | - case ModelStrategy::EI_AudioClip: |
65 | | - case ModelStrategy::EI_Global: |
66 | | - case ModelStrategy::EI_Label: |
67 | | - case ModelStrategy::EI_Note: |
68 | | - case ModelStrategy::EI_Param: |
69 | | - case ModelStrategy::EI_ParamCurveAnchor: |
70 | | - case ModelStrategy::EI_ParamCurveFree: |
71 | | - case ModelStrategy::EI_ParamCurveAnchorNode: |
72 | | - case ModelStrategy::EI_Phoneme: |
73 | | - case ModelStrategy::EI_SingingClip: |
74 | | - case ModelStrategy::EI_Source: |
75 | | - case ModelStrategy::EI_Tempo: |
76 | | - case ModelStrategy::EI_TimeSignature: |
77 | | - case ModelStrategy::EI_Track: |
78 | | - case ModelStrategy::EI_WorkspaceInfo: |
79 | | - obj = new BasicModelStrategyItemEntity(parent); |
80 | | - obj->type = type; |
81 | | - break; |
82 | | - case ModelStrategy::ES_Clips: |
83 | | - case ModelStrategy::ES_Labels: |
84 | | - case ModelStrategy::ES_Notes: |
85 | | - case ModelStrategy::ES_ParamCurveAnchorNodes: |
86 | | - case ModelStrategy::ES_ParamCurves: |
87 | | - case ModelStrategy::ES_Tempos: |
88 | | - case ModelStrategy::ES_TimeSignatures: |
89 | | - obj = new BasicModelStrategySequenceContainerEntity(parent); |
90 | | - obj->type = type; |
91 | | - break; |
92 | | - case ModelStrategy::EL_Phonemes: |
93 | | - case ModelStrategy::EL_Tracks: |
94 | | - obj = new BasicModelStrategyListContainerEntity(parent); |
95 | | - obj->type = type; |
96 | | - break; |
97 | | - case ModelStrategy::ED_ParamCurveFreeValues: |
98 | | - case ModelStrategy::ED_VibratoPoints: |
99 | | - obj = new BasicModelStrategyDataArrayEntity(parent); |
100 | | - obj->type = type; |
101 | | - break; |
102 | | - case ModelStrategy::EM_Params: |
103 | | - case ModelStrategy::EM_Sources: |
104 | | - case ModelStrategy::EM_Workspace: |
105 | | - obj = new BasicModelStrategyMapContainerEntity(parent); |
106 | | - obj->type = type; |
107 | | - break; |
108 | | - default: |
109 | | - Q_UNREACHABLE(); |
110 | | - } |
111 | | - return obj; |
112 | | - } |
113 | | - |
114 | | - template <class T> |
115 | | - T *handleCast(Handle entity) { |
116 | | - auto obj = qobject_cast<T *>(reinterpret_cast<BasicModelStrategyEntity *>(entity.d)); |
117 | | - Q_ASSERT(obj); |
118 | | - return obj; |
119 | | - } |
120 | | - |
121 | 10 | BasicModelStrategy::BasicModelStrategy(QObject *parent) : ModelStrategy(parent) { |
122 | 11 | } |
123 | 12 |
|
124 | 13 | BasicModelStrategy::~BasicModelStrategy() = default; |
125 | 14 |
|
126 | 15 | Handle BasicModelStrategy::createEntity(Entity entityType) { |
127 | | - auto object = createByType(entityType, this); |
| 16 | + auto object = BasicModelStrategyEntity::createByType(entityType, this); |
128 | 17 | Handle entity{reinterpret_cast<quintptr>(object)}; |
129 | 18 | Q_EMIT createEntityNotified(entity, entityType); |
130 | 19 | return entity; |
@@ -300,13 +189,11 @@ namespace dspx { |
300 | 189 | auto subObject = object->associatedSubEntities.value(relationship); |
301 | 190 | if (!subObject) { |
302 | 191 | Entity subObjectType = getAssociatedSubEntityTypeFromEntityTypeAndRelationship(object->type, relationship); |
303 | | - subObject = createByType(subObjectType, object); |
| 192 | + subObject = BasicModelStrategyEntity::createByType(subObjectType, object); |
304 | 193 | object->associatedSubEntities.insert(relationship, subObject); |
305 | 194 | } |
306 | 195 | Handle subEntity{reinterpret_cast<quintptr>(subObject)}; |
307 | 196 | return subEntity; |
308 | 197 | } |
309 | 198 |
|
310 | 199 | } |
311 | | - |
312 | | -#include "BasicModelStrategy.moc" |
0 commit comments