/* ============================================================================== 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. ============================================================================== */ #pragma once #include "jucer_MainWindow.h" #include "../Project/jucer_Module.h" #include "jucer_AutoUpdater.h" #include "../Code Editor/jucer_SourceCodeEditor.h" #include "../Utility/jucer_ProjucerLookAndFeel.h" #include "../Licenses/jucer_LicenseController.h" struct ChildProcessCache; //============================================================================== class ProjucerApplication : public JUCEApplication, private AsyncUpdater, private LicenseController::StateChangedCallback { 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 showAboutWindow(); void showLoginWindow(); void updateAllBuildTabs(); LatestVersionChecker* createVersionChecker() const; //============================================================================== void licenseStateChanged (const LicenseState&) override; void doLogout(); //============================================================================== ProjucerLookAndFeel lookAndFeel; ScopedPointer settings; ScopedPointer icons; struct MainMenuModel; ScopedPointer menuModel; MainWindowList mainWindowList; OpenDocumentManager openDocumentManager; ScopedPointer commandManager; ScopedPointer appearanceEditorWindow, globalPreferencesWindow, utf8Window, svgPathWindow, aboutWindow; ScopedPointer logger; bool isRunningCommandLine; ScopedPointer childProcessCache; ScopedPointer licenseController; private: void* server = nullptr; ScopedPointer versionChecker; TooltipWindow tooltipWindow; void loginOrLogout(); bool checkEULA(); bool currentEULAHasBeenAcceptedPreviously() const; String getEULAChecksumProperty() const; void setCurrentEULAAccepted (bool hasBeenAccepted) const; void handleAsyncUpdate() override; void initCommandManager(); };