Vuo 2.4.4
Loading...
Searching...
No Matches
VuoSubcompositionMessageRouter.cc
Go to the documentation of this file.
1
10#include "VuoFileUtilities.hh"
11#include "VuoStringUtilities.hh"
12#include "VuoCompiler.hh"
14#include "VuoCompilerNode.hh"
16#include "VuoEditorWindow.hh"
17
19
23VuoSubcompositionMessageRouter::CompositionInfo::CompositionInfo(void)
24{
25 window = NULL;
26 topLevelComposition = NULL;
27 supercomposition = NULL;
28 nodeIdentifierInSupercomposition = "";
29 compositionIdentifier = "";
30}
31
35VuoSubcompositionMessageRouter::CompositionInfo::CompositionInfo(VuoEditorWindow *window)
36{
37 this->window = window;
38 reset();
39}
40
44void VuoSubcompositionMessageRouter::CompositionInfo::reset(void)
45{
46 topLevelComposition = window->getComposition();
47 supercomposition = NULL;
48 nodeIdentifierInSupercomposition = "";
50}
51
58
63{
64 compositionInfosMutex.lock();
65 compositionInfosMutex.unlock();
66}
67
75{
76 compositionInfosMutex.lock();
77
78 compositionInfos[window->getComposition()] = CompositionInfo(window);
79
80 compositionInfosMutex.unlock();
81}
82
87{
88 compositionInfosMutex.lock();
89
90 map<VuoEditorComposition *, CompositionInfo> *cis[] = { &compositionInfos, &unlinkedCompositionInfos };
91 for (int i = 0; i < 2; ++i)
92 {
93 auto curr = (*cis[i]).find(window->getComposition());
94 if (curr != (*cis[i]).end())
95 (*cis[i]).erase(curr);
96
97 for (auto &c : *cis[i])
98 if (c.second.topLevelComposition == window->getComposition())
99 c.second.reset();
100 }
101
102 compositionInfosMutex.unlock();
103}
104
110 VuoEditorComposition *supercomposition,
111 VuoRendererNode *nodeInSupercomposition)
112{
113 compositionInfosMutex.lock();
114
115 auto sub = compositionInfos.find(subcompositionInstance);
116 if (sub != compositionInfos.end())
117 {
118 auto super = compositionInfos.find(supercomposition);
119 if (super != compositionInfos.end())
120 {
121 sub->second.topLevelComposition = super->second.topLevelComposition;
122 sub->second.supercomposition = supercomposition;
123 sub->second.nodeIdentifierInSupercomposition = nodeInSupercomposition->getBase()->getCompiler()->getIdentifier();
124 sub->second.compositionIdentifier = VuoStringUtilities::buildCompositionIdentifier(super->second.compositionIdentifier,
125 nodeInSupercomposition->getBase()->getCompiler()->getIdentifier());
126 }
127 }
128
129 compositionInfosMutex.unlock();
130}
131
137{
138 compositionInfosMutex.lock();
139
140 auto sub = compositionInfos.find(subcompositionInstance);
141 if (sub != compositionInfos.end())
142 compositionInfos[sub->first].reset();
143
144 sub = unlinkedCompositionInfos.find(subcompositionInstance);
145 if (sub != unlinkedCompositionInfos.end())
146 unlinkedCompositionInfos.erase(sub);
147
148 compositionInfosMutex.unlock();
149}
150
156 const string &nodeIdentifier)
157{
158 compositionInfosMutex.lock();
159
160 for (auto &c : compositionInfos)
161 {
162 if (c.second.supercomposition == supercomposition && c.second.nodeIdentifierInSupercomposition == nodeIdentifier)
163 {
164 unlinkedCompositionInfos[c.first] = c.second;
165 c.second.reset();
166 }
167 }
168
169 compositionInfosMutex.unlock();
170}
171
178 const string &nodeIdentifier)
179{
180 compositionInfosMutex.lock();
181
182 for (map<VuoEditorComposition *, CompositionInfo>::iterator i = unlinkedCompositionInfos.begin(); i != unlinkedCompositionInfos.end(); ++i)
183 {
184 if (i->second.supercomposition == supercomposition && i->second.nodeIdentifierInSupercomposition == nodeIdentifier)
185 {
186 compositionInfos[i->first] = i->second;
187 unlinkedCompositionInfos.erase(i);
188 break;
189 }
190 }
191
192 compositionInfosMutex.unlock();
193}
194
201{
202 compositionInfosMutex.lock();
203
204 string compositionIdentifier;
205 auto curr = compositionInfos.find(composition);
206 if (curr != compositionInfos.end())
207 compositionIdentifier = curr->second.compositionIdentifier;
208
209 compositionInfosMutex.unlock();
210
211 return compositionIdentifier;
212}
213
221 CompositionCallbackWithIdentifier doForComposition)
222{
223 compositionInfosMutex.lock_shared();
224
225 auto curr = compositionInfos.find(currComposition);
226 if (curr != compositionInfos.end())
227 doForComposition(curr->second.topLevelComposition, curr->second.compositionIdentifier);
228
229 compositionInfosMutex.unlock_shared();
230}
231
239 string compositionIdentifier,
240 CompositionCallback doForComposition)
241{
242 compositionInfosMutex.lock_shared();
243
244 auto curr = compositionInfos.find(currComposition);
245 if (curr != compositionInfos.end())
246 for (auto c : compositionInfos)
247 if (c.second.topLevelComposition == curr->second.topLevelComposition && c.second.compositionIdentifier == compositionIdentifier)
248 doForComposition(c.first);
249
250 compositionInfosMutex.unlock_shared();
251}
252
260 CompositionCallbackWithIdentifier doForComposition)
261{
262 compositionInfosMutex.lock_shared();
263
264 auto curr = compositionInfos.find(currComposition);
265 if (curr != compositionInfos.end())
266 for (auto c : compositionInfos)
267 if (c.second.topLevelComposition == curr->second.topLevelComposition)
268 doForComposition(c.first, c.second.compositionIdentifier);
269
270 compositionInfosMutex.unlock_shared();
271}
272
280 CompositionCallback doForComposition)
281{
282 compositionInfosMutex.lock_shared();
283
284 for (auto c : compositionInfos)
285 if (c.first != currComposition && c.first == c.second.topLevelComposition)
286 doForComposition(c.first);
287
288 compositionInfosMutex.unlock_shared();
289}
290
297 CompositionCallbackWithPath doForComposition)
298{
299 compositionInfosMutex.lock_shared();
300
301 auto curr = compositionInfos.find(currComposition);
302 if (curr != compositionInfos.end())
303 {
304 string compositionPath = curr->second.window->windowFilePath().toStdString();
305 if (VuoFileUtilities::isInstalledAsModule(compositionPath))
306 doForComposition(currComposition, compositionPath);
307 }
308
309 compositionInfosMutex.unlock_shared();
310}
311
319 CompositionCallbackWithPath doForComposition)
320{
321 compositionInfosMutex.lock_shared();
322
323 for (auto c : compositionInfos)
324 if (c.first != currComposition)
325 applyIfInstalledAsSubcomposition(c.first, doForComposition);
326
327 compositionInfosMutex.unlock_shared();
328}