Vuo  2.0.0
VuoModuleManager.hh
Go to the documentation of this file.
1 
10 #pragma once
11 
12 #include "VuoCompiler.hh"
13 class VuoType;
14 class VuoCompiler;
15 class VuoCompilerIssues;
16 class VuoCompilerModule;
17 class VuoCompilerType;
18 class VuoCodeWindow;
20 class VuoNodeLibrary;
21 
28 {
29 public:
30  typedef void (^CallbackType)(void);
31 
32  VuoModuleManager(VuoCompiler *compiler);
33  virtual ~VuoModuleManager(void);
34  void deleteWhenReady(void);
35  void setComposition(VuoEditorComposition *composition);
36  void setCodeWindow(VuoCodeWindow *codeWindow);
37  void setNodeLibrary(VuoNodeLibrary *nodeLibrary);
40  vector<string> getCompatibleTypecastClasses(VuoType *inType, VuoType *outType);
41  map<string, set<VuoCompilerType *> > getLoadedTypesForNodeSet(void);
42  void doNextTimeNodeClassIsLoaded(const string &nodeClassName, CallbackType callback);
43  void doEveryTimeNodeClassIsLoaded(const string &nodeClassName, CallbackType callback);
44  void cancelCallbackForNodeClass(const string &nodeClassName);
45  set<string> findInstancesOfNodeClass(const string &sourcePath);
46 
47  void loadedModules(const map<string, VuoCompilerModule *> &modulesAdded,
48  const map<string, pair<VuoCompilerModule *, VuoCompilerModule *> > &modulesModified,
49  const map<string, VuoCompilerModule *> &modulesRemoved, VuoCompilerIssues *issues);
50 
51 private:
52  void update(const vector<string> &nodeClassesToRemove, const vector<VuoCompilerNodeClass *> &nodeClassesToAdd, const vector<string> &typesToRemove, const vector<VuoCompilerType *> &typesToAdd, const vector<std::string> &librariesToRemove, const set<pair<VuoCompilerModule *, VuoCompilerModule *> > &modulesModified, VuoCompilerIssues *issues);
53  static bool isResponsibleForReportingErrors(VuoModuleManager *currManager, VuoCompilerIssues *errors, const vector<VuoCompilerNodeClass *> &nodeClassesToAdd);
54  void showErrorDialog(VuoCompilerIssues *errors);
55  void updateLoadedTypecastClasses(const vector<string> &nodeClassesToRemove, const vector<VuoCompilerNodeClass *> &nodeClassesToAdd, const vector<string> &typesToRemove, const vector<VuoCompilerType *> &typesToAdd);
56  void updateLoadedTypesByNodeSet(const vector<string> &typesToRemove, const vector<VuoCompilerType *> &typesToAdd);
57  string getPrimaryAffiliatedNodeSetForType(const string &typeName);
58 
59  VuoCompiler *compiler;
60  VuoEditorComposition *composition;
61  VuoCodeWindow *codeWindow;
62  VuoNodeLibrary *nodeLibrary;
63  map<pair<VuoType *, VuoType *>, vector<string> > loadedTypecastClasses;
64  map<string, set<VuoCompilerType *> > loadedTypesForNodeSet;
65  map<string, pair<CallbackType, bool> > callbackForNodeClass;
66  dispatch_group_t updateGroup;
67  static set<VuoModuleManager *> allModuleManagers;
68 };