23 VuoSubcompositionMessageRouter::CompositionInfo::CompositionInfo(
void)
26 topLevelComposition = NULL;
27 supercomposition = NULL;
28 nodeIdentifierInSupercomposition =
"";
29 compositionIdentifier =
"";
35 VuoSubcompositionMessageRouter::CompositionInfo::CompositionInfo(
VuoEditorWindow *window)
37 this->window = window;
44 void VuoSubcompositionMessageRouter::CompositionInfo::reset(
void)
46 topLevelComposition = window->getComposition();
47 supercomposition = NULL;
48 nodeIdentifierInSupercomposition =
"";
64 compositionInfosMutex.lock();
65 compositionInfosMutex.unlock();
76 compositionInfosMutex.lock();
78 compositionInfos[window->
getComposition()] = CompositionInfo(window);
80 compositionInfosMutex.unlock();
88 compositionInfosMutex.lock();
90 map<VuoEditorComposition *, CompositionInfo> *cis[] = { &compositionInfos, &unlinkedCompositionInfos };
91 for (
int i = 0; i < 2; ++i)
94 if (curr != (*cis[i]).end())
95 (*cis[i]).erase(curr);
97 for (
auto &c : *cis[i])
102 compositionInfosMutex.unlock();
113 compositionInfosMutex.lock();
115 auto sub = compositionInfos.find(subcompositionInstance);
116 if (sub != compositionInfos.end())
118 auto super = compositionInfos.find(supercomposition);
119 if (super != compositionInfos.end())
121 sub->second.topLevelComposition = super->second.topLevelComposition;
122 sub->second.supercomposition = supercomposition;
129 compositionInfosMutex.unlock();
138 compositionInfosMutex.lock();
140 auto sub = compositionInfos.find(subcompositionInstance);
141 if (sub != compositionInfos.end())
142 compositionInfos[sub->first].reset();
144 sub = unlinkedCompositionInfos.find(subcompositionInstance);
145 if (sub != unlinkedCompositionInfos.end())
146 unlinkedCompositionInfos.erase(sub);
148 compositionInfosMutex.unlock();
156 const string &nodeIdentifier)
158 compositionInfosMutex.lock();
160 for (
auto &c : compositionInfos)
162 if (c.second.supercomposition == supercomposition && c.second.nodeIdentifierInSupercomposition == nodeIdentifier)
164 unlinkedCompositionInfos[c.first] = c.second;
169 compositionInfosMutex.unlock();
178 const string &nodeIdentifier)
180 compositionInfosMutex.lock();
182 for (map<VuoEditorComposition *, CompositionInfo>::iterator i = unlinkedCompositionInfos.begin(); i != unlinkedCompositionInfos.end(); ++i)
184 if (i->second.supercomposition == supercomposition && i->second.nodeIdentifierInSupercomposition == nodeIdentifier)
186 compositionInfos[i->first] = i->second;
187 unlinkedCompositionInfos.erase(i);
192 compositionInfosMutex.unlock();
202 compositionInfosMutex.lock();
204 string compositionIdentifier;
205 auto curr = compositionInfos.find(composition);
206 if (curr != compositionInfos.end())
207 compositionIdentifier = curr->second.compositionIdentifier;
209 compositionInfosMutex.unlock();
211 return compositionIdentifier;
221 CompositionCallbackWithIdentifier doForComposition)
223 compositionInfosMutex.lock_shared();
225 auto curr = compositionInfos.find(currComposition);
226 if (curr != compositionInfos.end())
227 doForComposition(curr->second.topLevelComposition, curr->second.compositionIdentifier);
229 compositionInfosMutex.unlock_shared();
239 string compositionIdentifier,
240 CompositionCallback doForComposition)
242 compositionInfosMutex.lock_shared();
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);
250 compositionInfosMutex.unlock_shared();
260 CompositionCallbackWithIdentifier doForComposition)
262 compositionInfosMutex.lock_shared();
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);
270 compositionInfosMutex.unlock_shared();
280 CompositionCallback doForComposition)
282 compositionInfosMutex.lock_shared();
284 for (
auto c : compositionInfos)
285 if (c.first != currComposition && c.first == c.second.topLevelComposition)
286 doForComposition(c.first);
288 compositionInfosMutex.unlock_shared();
297 CompositionCallbackWithPath doForComposition)
299 compositionInfosMutex.lock_shared();
301 auto curr = compositionInfos.find(currComposition);
302 if (curr != compositionInfos.end())
304 string compositionPath = curr->second.window->windowFilePath().toStdString();
306 doForComposition(currComposition, compositionPath);
309 compositionInfosMutex.unlock_shared();
319 CompositionCallbackWithPath doForComposition)
321 compositionInfosMutex.lock_shared();
323 for (
auto c : compositionInfos)
324 if (c.first != currComposition)
327 compositionInfosMutex.unlock_shared();