Vuo  2.3.2
VuoEditor.hh
Go to the documentation of this file.
1 
10 #pragma once
11 
12 #include "VuoHeap.h"
13 #include "VuoNodeLibrary.hh"
14 
15 class VuoCompiler;
16 class VuoCompilerDriver;
17 class VuoEditorAboutBox;
18 class VuoEditorWelcome;
19 class VuoEditorWindow;
20 class VuoExampleMenu;
21 class VuoModuleManager;
22 class VuoNodeSet;
23 class VuoProtocol;
24 class VuoRecentFileMenu;
26 
30 class VuoEditor : public QApplication
31 {
32  Q_OBJECT
33 public:
36  {
37  CommunityUser,
38  ProSubscriber
39  };
40  Q_ENUMS(subscriptionLevel)
41 
42  explicit VuoEditor(int &argc, char *argv[]);
43  ~VuoEditor();
44  Q_INVOKABLE void processQueuedCompositionsToOpen();
45  Q_INVOKABLE void reevaluateWelcomePrecedence();
46  static void setDocumentationGenerationDirectory(string dir);
48  static string removeVuoLinks(string markdownText);
49  string getUserName();
50  string getStoredUserProfileURL();
51  QString getSubcompositionPrefix();
53  map<QString, QString> getUberExampleCompositions();
54  map<QString, QString> getExampleCompositionsForProtocol(VuoProtocol *protocol);
55  static QString getURLForExampleComposition(QString compositionName, QString nodeSetName);
56  static QString getVuoManualURL();
57  static QString getClipboardText();
60  void highlightNewNodeClassInAllLibraries(string nodeClassName);
61  void updateSubcompositionPrefix(QString prefix);
62  void updateGlobalShaderDocumentationVisibility(bool isVisible);
64  void getGlobalMovieExportSettings(int &width, int &height, double &time, double &duration, double &framerate, int &spatialSupersample, int &temporalSupersample, float &shutterAngle, QString &imageFormat, double &quality);
65  static QString generateHtmlDocumentationStyles(bool forBrowser=true, bool isDark=false);
66  string getResourceDirectoryForNodeSet(string nodeSetName);
67  void setResourceDirectoryForNodeSet(string nodeSetName, string directory);
68  void generateMainHtmlPageForNodeSet(VuoNodeSet *nodeSet, string saveFileName, bool publishInternalVuoLinks);
69  void generateNodeClassHtmlPagesForNodeSet(VuoNodeSet *nodeSet, string saveDir, bool publishInternalVuoLinks);
72  dispatch_queue_t getDocumentationQueue();
74  void registerOpenDocument(QMainWindow *window);
75  VuoEditorWindow * newCompositionWithContent(string content, string compositionDir="");
76  QMainWindow * openFileWithName(QString filename, bool addToRecentFileMenu=true);
78  void populateNewShaderMenu(QMenu *m);
79  void populateCanvasTransparencyMenu(QMenu *m);
80  void populateWindowMenu(QMenu *m, QMainWindow *currentWindow);
81  void populateHelpMenu(QMenu *m);
84  QAction *snapToGridAction;
85  bool isInterfaceDark(void);
86  int getCanvasOpacity(void);
87  Q_INVOKABLE QStringList recentFiles();
88  QActionGroup *canvasTransparencyOptions;
92  static const QString vuoHelpBookScheme;
93  static const QString vuoNodeSetDocumentationScheme;
94  static const QString vuoNodeDocumentationScheme;
95  static const QString vuoExampleCompositionScheme;
97  static const QString vuoCompositionFileExtension;
98  static const QString vuoNodeClassFileExtension;
99  static const QString vuoTutorialURL;
100 
101 signals:
102  void globalNodeLibraryStateChanged(VuoNodeLibrary::nodeLibraryState newState, VuoNodeLibrary *floater, bool previousFloaterDestroyed);
103  void activeApplicationStateChanged(bool active);
104  void darkInterfaceToggled(bool isDark);
109 
110 public slots:
111  void about(void);
112  void newComposition(void);
113  void newCompositionWithProtocol(void);
114  void newCompositionWithTemplate(void);
115  void openUrl(const QString &url);
116  void openFile(void);
117  void openExampleComposition(QString filename, VuoNodeSet *nodeSet, string nodeClassToHighlight);
118  void showNodeLibrary(void);
119  void addFileToAllOpenRecentFileMenus(QString filePath);
120  void addFileToRecentlyClosedList(QString filePath);
124  void showNodeSetDocumentationFromUrl(const QUrl &url);
125  void showNodeDocumentationFromUrl(const QUrl &url);
126  void openFileFromSenderData();
129  void openExampleCompositionFromUrl(const QUrl &url);
130  void openMostRecentFile();
131  void openRandomExample();
132 
133  void quitCleanly();
134  void continueQuit(QMainWindow *window);
135  void cancelQuit();
136 
137  Q_INVOKABLE void openHelpBook();
138 
139 private slots:
140  void openHelpBookPageFromUrl(const QUrl &url);
141  void updateUI();
142  void conformToGlobalNodeLibraryVisibility(VuoNodeLibrary::nodeLibraryState visibility, VuoNodeLibrary *floater);
143  void showGridLinesToggled(bool show);
144  void showGridPointsToggled(bool show);
145  void updateSnapToGrid(bool snap);
146  void updateColor(bool isDark);
147  void updateCanvasOpacity(QAction *setOpacityAction);
148  void updateGlobalMovieExportSettings(int width, int height, double time, double duration, double framerate, int spatialSupersample, int temporalSupersample, float shutterAngle, QString imageFormat, double quality);
149  void updateNodeLibraryDisplayMode(bool humanReadable);
150  void updateGlobalNodeLibraryFloatingPosition(QPoint newPos);
151  void updateGlobalNodeLibraryWidth(int newWidth);
152  void updateGlobalNodeLibraryHeight(int newHeight);
153  void updateGlobalNodeDocumentationPanelHeight(int newSize);
154  void updateGlobalNodeLibraryVisibilityState(bool visible);
155  void updateGlobalNodeLibraryDockedState(bool floating);
156  void updateFloatingNodeLibraryModules();
157  void assignTopLevelLibraryAsReplacementFloater();
158 
159 protected:
160  bool event(QEvent * e) VuoWarnUnusedResult;
161 
162 private:
163  friend class TestVuoEditor;
164 
165  static const QString recentFileListSettingsKey;
166  static const QString subcompositionPrefixSettingsKey;
167  static const QString nodeLibraryDisplayModeSettingsKey;
168  static const QString nodeLibraryVisibilityStateSettingsKey;
169  static const QString nodeLibraryDockingStateSettingsKey;
170  static const QString nodeLibraryFloatingPositionSettingsKey;
171  static const QString nodeLibraryWidthSettingsKey;
172  static const QString nodeLibraryHeightSettingsKey;
173  static const QString nodeDocumentationPanelHeightSettingsKey;
174  static const QString shaderDocumentationVisibilitySettingsKey;
175  static const QString gridTypeSettingsKey;
176  static const QString gridOpacitySettingsKey;
177  static const qreal defaultGridOpacity;
178  static const QString snapToGridSettingsKey;
179  static const QString darkInterfaceSettingsKey;
180  static const QString canvasOpacitySettingsKey;
181  static const QString movieExportWidthSettingsKey;
182  static const QString movieExportHeightSettingsKey;
183  static const QString movieExportTimeSettingsKey;
184  static const QString movieExportDurationSettingsKey;
185  static const QString movieExportFramerateSettingsKey;
186  static const QString movieExportSpatialSupersampleSettingsKey;
187  static const QString movieExportTemporalSupersampleSettingsKey;
188  static const QString movieExportShutterAngleSettingsKey;
189  static const QString movieExportImageFormatSettingsKey;
190  static const QString movieExportQualitySettingsKey;
191 
192  static string documentationGenerationDirectory;
193 
194  mutex constructor;
195 
196  QNetworkAccessManager *networkManager;
197  VuoEditor::subscriptionLevel userSubscriptionLevel;
198  VuoEditorAboutBox *aboutBox;
199  QSettings* settings;
200  VuoCompiler *compiler;
201  dispatch_queue_t compilerQueue;
202  VuoModuleManager *moduleManager;
203  VuoSubcompositionMessageRouter *subcompositionRouter;
204  map<VuoProtocol *, VuoCompilerDriver *> builtInDriverForProtocol;
205  dispatch_queue_t builtInDriversQueue;
206  bool checkForUpdateOnStartup;
207 
208  // Global node library settings
209  VuoNodeLibrary::nodeLibraryDisplayMode nodeLibraryDisplayMode;
210  bool nodeLibraryCurrentlyVisible;
211  bool nodeLibraryCurrentlyDocked;
212  bool settingsContainedNodeLibraryFloatingPosition;
213  QPoint nodeLibraryFloatingPosition;
214  int nodeLibraryWidth;
215  int nodeLibraryHeight;
216  int nodeDocumentationPanelHeight;
217  bool previousVisibleNodeLibraryStateWasDocked;
218  VuoNodeLibrary *currentFloatingNodeLibrary; // The current floating node library, which may or may not be the top-level (application-owned) library.
219 
220  // Global subcomposition settings
221  QString subcompositionPrefix;
222 
223  // Global code window settings
224  bool shaderDocumentationVisible;
225 
226  // Global movie export settings
227  int movieExportWidth;
228  int movieExportHeight;
229  double movieExportTime;
230  double movieExportDuration;
231  double movieExportFramerate;
232  int movieExportSpatialSupersample;
233  int movieExportTemporalSupersample;
234  float movieExportShutterAngle;
235  QString movieExportImageFormat;
236  double movieExportQuality;
237 
238  // Global view settings
239  int canvasOpacity;
240 
241  QMenuBar *menuBar;
242  QMenu *menuFile;
243  QMenu *menuNewCompositionWithTemplate;
244  VuoRecentFileMenu *menuOpenRecent;
245  VuoExampleMenu *menuOpenExample;
246  QMenu *menuWindow;
247  QMenu *menuView;
248  QMenu *menuHelp;
249  QMenu *dockContextMenu;
250  void enableMenuItems(QMenu *menu, bool enable);
251  QString assignUntitledDocumentIdentifier(void);
252  int yScreenSpaceShortage;
253  VuoEditorWindow * createEditorWindow(QString filename="", bool existingComposition=false, VuoProtocol *activeProtocol=NULL);
254  VuoEditorWindow * createEditorWindow(QString documentIdentifier, QString filename, const string &compositionAsString, VuoProtocol *activeProtocol=NULL, string nodeClassToHighlight="");
255  string getFilterTextForTemplate(string templateID);
256  void closeUnmodifiedUntitledComposition();
257  void initializeBuiltInDrivers();
258  void initializeTopLevelNodeLibrary(VuoCompiler *nodeLibraryCompiler,
259  VuoNodeLibrary::nodeLibraryDisplayMode nodeLibraryDisplayMode,
260  bool setFloatingPosition,
261  QPoint floatingPosition=QPoint(),
262  int nodeLibraryWidth=-1,
263  int nodeLibraryHeight=-1);
264  VuoNodeLibrary::nodeLibraryState getGlobalNodeLibraryStateForAttributes(bool visible, bool docked);
265  void updateGlobalNodeLibraryState(bool visible, bool docked);
266  void designateNewFloatingNodeLibrary(VuoNodeLibrary *library);
267  void enableGlobalStateConformanceToLibrary(VuoNodeLibrary *library);
268  void disableGlobalStateConformanceToLibrary(VuoNodeLibrary *library);
269  void updateDockedNodeLibraryModules(void);
270  void setNewManagerForNodeLibrary(VuoNodeLibrary *library, VuoModuleManager *manager);
271  void updateCanvasOpacityTo(int opacity);
272  void applyStoredMovieExportSettings();
273  void generateAllNodeSetHtmlDocumentation(string directory);
274  void reportBrokenModules();
275  void moveFileToTrash(QString filePath);
276  dispatch_queue_t documentationQueue;
277  VuoNodeLibrary *ownedNodeLibrary; // The top-level (application-owned) node library, which may at times function as the floating node library.
278  QAction *showNodeLibraryAction;
279  map<QString, VuoEditorWindow *> documentIdentifierAssigned;
280  vector<string> closedFiles;
281  map<string, string> resourceDirectoryForNodeSet;
282  vector<QString> queuedCompositionsToOpen;
283  bool uiInitialized;
284  bool reportAbsenceOfUpdates;
285 
286  QString qtFindTranslation(const QLocale &locale, const QString &filename, const QString &prefix, const QString &directory, const QString &suffix);
287  void loadTranslations();
288 
289  QList<QMainWindow *> windowsRemainingAfterQuitRequested;
290  void reallyQuit();
291 
292 #ifdef VUO_PRO
293 #include "pro/VuoEditor_Pro.hh"
294 #endif
295 };