/* ============================================================================== This file is part of the JUCE library. Copyright (c) 2015 - ROLI Ltd. Permission is granted to use this software under the terms of either: a) the GPL v2 (or any later version) b) the Affero GPL v3 Details of these licenses can be found at: www.gnu.org/licenses JUCE is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ------------------------------------------------------------------------------ To release a closed-source product which uses JUCE, commercial licenses are available: visit www.juce.com for more information. ============================================================================== */ #ifndef JUCER_APPLICATION_H_INCLUDED #define JUCER_APPLICATION_H_INCLUDED #include "jucer_MainWindow.h" #include "../Project/jucer_Module.h" #include "jucer_AutoUpdater.h" #include "../Code Editor/jucer_SourceCodeEditor.h" #include "../Utility/jucer_ProjucerLookAndFeel.h" struct ChildProcessCache; //============================================================================== class ProjucerApplication : public JUCEApplication, private Timer, private AsyncUpdater { public: ProjucerApplication(); static ProjucerApplication& getApp(); static ApplicationCommandManager& getCommandManager(); //============================================================================== void initialise (const String& commandLine) override; void initialiseBasics(); bool initialiseLogger (const char* filePrefix); void initialiseWindows (const String& commandLine); void shutdown() override; void systemRequestedQuit() override; void deleteLogger(); //============================================================================== const String getApplicationName() override { return "Projucer"; } const String getApplicationVersion() override { return ProjectInfo::versionString; } String getVersionDescription() const; bool moreThanOneInstanceAllowed() override { return true; } // this is handled manually in initialise() void anotherInstanceStarted (const String& commandLine) override; //============================================================================== MenuBarModel* getMenuModel(); StringArray getMenuNames(); void createMenu (PopupMenu&, const String& menuName); void createFileMenu (PopupMenu&); void createEditMenu (PopupMenu&); void createViewMenu (PopupMenu&); void createBuildMenu (PopupMenu&); void createColourSchemeItems (PopupMenu&); void createWindowMenu (PopupMenu&); void createToolsMenu (PopupMenu&); void createExtraAppleMenuItems (PopupMenu&); void handleMainMenuCommand (int menuItemID); //============================================================================== void getAllCommands (Array&) override; void getCommandInfo (CommandID commandID, ApplicationCommandInfo&) override; bool perform (const InvocationInfo&) override; //============================================================================== void createNewProject(); void updateNewlyOpenedProject (Project&); void askUserToOpenFile(); bool openFile (const File&); bool closeAllDocuments (bool askUserToSave); bool closeAllMainWindows(); PropertiesFile::Options getPropertyFileOptionsFor (const String& filename); //============================================================================== void showUTF8ToolWindow(); void showSVGPathDataToolWindow(); void addLiveBuildConfigItem (Project&, TreeViewItem&); void showLoginForm(); void hideLoginForm(); void updateAllBuildTabs(); LatestVersionChecker* createVersionChecker() const; //============================================================================== ProjucerLookAndFeel lookAndFeel; ScopedPointer settings; ScopedPointer icons; struct MainMenuModel; ScopedPointer menuModel; MainWindowList mainWindowList; OpenDocumentManager openDocumentManager; ScopedPointer commandManager; ScopedPointer appearanceEditorWindow, globalPreferencesWindow, utf8Window, svgPathWindow; ScopedPointer logger; bool isRunningCommandLine; ScopedPointer childProcessCache; private: void* server = nullptr; Component* loginForm = nullptr; ScopedPointer versionChecker; void loginOrLogout(); bool checkEULA(); bool currentEULAHasBeenAcceptedPreviously() const; String getEULAChecksumProperty() const; void setCurrentEULAAccepted (bool hasBeenAccepted) const; void showLoginFormAsyncIfNotTriedRecently(); void timerCallback() override; void handleAsyncUpdate() override; void initCommandManager(); }; #endif // JUCER_APPLICATION_H_INCLUDED