Vuo  2.1.0
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);
105  void showGridToggled();
106  void canvasOpacityChanged();
107  void applicationWillHide();
108  void applicationDidUnhide();
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  QNetworkAccessManager *networkManager;
195  VuoEditor::subscriptionLevel userSubscriptionLevel;
196  VuoEditorAboutBox *aboutBox;
197  QSettings* settings;
198  VuoCompiler *compiler;
199  VuoModuleManager *moduleManager;
200  VuoSubcompositionMessageRouter *subcompositionRouter;
201  map<VuoProtocol *, VuoCompilerDriver *> builtInDriverForProtocol;
202  dispatch_queue_t builtInDriversQueue;
203  bool checkForUpdateOnStartup;
204 
205  // Global node library settings
206  VuoNodeLibrary::nodeLibraryDisplayMode nodeLibraryDisplayMode;
207  bool nodeLibraryCurrentlyVisible;
208  bool nodeLibraryCurrentlyDocked;
209  bool settingsContainedNodeLibraryFloatingPosition;
210  QPoint nodeLibraryFloatingPosition;
211  int nodeLibraryWidth;
212  int nodeLibraryHeight;
213  int nodeDocumentationPanelHeight;
214  bool previousVisibleNodeLibraryStateWasDocked;
215  VuoNodeLibrary *currentFloatingNodeLibrary; // The current floating node library, which may or may not be the top-level (application-owned) library.
216 
217  // Global subcomposition settings
218  QString subcompositionPrefix;
219 
220  // Global code window settings
221  bool shaderDocumentationVisible;
222 
223  // Global movie export settings
224  int movieExportWidth;
225  int movieExportHeight;
226  double movieExportTime;
227  double movieExportDuration;
228  double movieExportFramerate;
229  int movieExportSpatialSupersample;
230  int movieExportTemporalSupersample;
231  float movieExportShutterAngle;
232  QString movieExportImageFormat;
233  double movieExportQuality;
234 
235  // Global view settings
236  int canvasOpacity;
237 
238  QMenuBar *menuBar;
239  QMenu *menuFile;
240  QMenu *menuNewCompositionWithTemplate;
241  VuoRecentFileMenu *menuOpenRecent;
242  VuoExampleMenu *menuOpenExample;
243  QMenu *menuWindow;
244  QMenu *menuView;
245  QMenu *menuHelp;
246  QMenu *dockContextMenu;
247  void enableMenuItems(QMenu *menu, bool enable);
248  QString assignUntitledDocumentIdentifier(void);
249  int yScreenSpaceShortage;
250  VuoEditorWindow * createEditorWindow(QString filename="", bool existingComposition=false, VuoProtocol *activeProtocol=NULL);
251  VuoEditorWindow * createEditorWindow(QString documentIdentifier, QString filename, const string &compositionAsString, VuoProtocol *activeProtocol=NULL, string nodeClassToHighlight="");
252  string getFilterTextForTemplate(string templateID);
253  void closeUnmodifiedUntitledComposition();
254  void initializeBuiltInDrivers();
255  void initializeTopLevelNodeLibrary(VuoCompiler *nodeLibraryCompiler,
256  VuoNodeLibrary::nodeLibraryDisplayMode nodeLibraryDisplayMode,
257  bool setFloatingPosition,
258  QPoint floatingPosition=QPoint(),
259  int nodeLibraryWidth=-1,
260  int nodeLibraryHeight=-1);
261  VuoNodeLibrary::nodeLibraryState getGlobalNodeLibraryStateForAttributes(bool visible, bool docked);
262  void updateGlobalNodeLibraryState(bool visible, bool docked);
263  void designateNewFloatingNodeLibrary(VuoNodeLibrary *library);
264  void enableGlobalStateConformanceToLibrary(VuoNodeLibrary *library);
265  void disableGlobalStateConformanceToLibrary(VuoNodeLibrary *library);
266  void updateDockedNodeLibraryModules(void);
267  void setNewManagerForNodeLibrary(VuoNodeLibrary *library, VuoModuleManager *manager);
268  void updateCanvasOpacityTo(int opacity);
269  void applyStoredMovieExportSettings();
270  void generateAllNodeSetHtmlDocumentation(string directory);
271  void reportBrokenModules();
272  void moveFileToTrash(QString filePath);
273  dispatch_queue_t documentationQueue;
274  VuoNodeLibrary *ownedNodeLibrary; // The top-level (application-owned) node library, which may at times function as the floating node library.
275  QAction *showNodeLibraryAction;
276  map<QString, VuoEditorWindow *> documentIdentifierAssigned;
277  vector<string> closedFiles;
278  map<string, string> resourceDirectoryForNodeSet;
279  vector<QString> queuedCompositionsToOpen;
280  bool uiInitialized;
281  bool reportAbsenceOfUpdates;
282 
283  QString qtFindTranslation(const QLocale &locale, const QString &filename, const QString &prefix, const QString &directory, const QString &suffix);
284  void loadTranslations();
285 
286  QList<QMainWindow *> windowsRemainingAfterQuitRequested;
287  void reallyQuit();
288 
289 #ifdef VUO_PRO
290 #include "pro/VuoEditor_Pro.hh"
291 #endif
292 };