/* ============================================================================== This file is part of the JUCE library. Copyright (c) 2017 - ROLI Ltd. JUCE is an open source library subject to commercial or open-source licensing. By using JUCE, you agree to the terms of both the JUCE 5 End-User License Agreement and JUCE 5 Privacy Policy (both updated and effective as of the 27th April 2017). End User License Agreement: www.juce.com/juce-5-licence Privacy Policy: www.juce.com/juce-5-privacy-policy Or: You may also use this code under the terms of the GPL v3 (see www.gnu.org/licenses). JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE DISCLAIMED. ============================================================================== */ #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, bool isProjectSettings); //============================================================================== void showUTF8ToolWindow(); void showSVGPathDataToolWindow(); void showAboutWindow(); void showApplicationUsageDataAgreementPopup(); void dismissApplicationUsageDataAgreementPopup(); void showPathsWindow(); void showEditorColourSchemeWindow(); void updateAllBuildTabs(); LatestVersionChecker* createVersionChecker() const; //============================================================================== void licenseStateChanged (const LicenseState&) override; void doLogout(); bool isPaidOrGPL() const { return licenseController == nullptr || licenseController->getState().isPaidOrGPL(); } //============================================================================== void selectEditorColourSchemeWithName (const String& schemeName); static bool isEditorColourSchemeADefaultScheme (const StringArray& schemes, int editorColourSchemeIndex); static int getEditorColourSchemeForGUIColourScheme (const StringArray& schemes, int guiColourSchemeIndex); //============================================================================== ProjucerLookAndFeel lookAndFeel; ScopedPointer settings; ScopedPointer icons; struct MainMenuModel; ScopedPointer menuModel; MainWindowList mainWindowList; OpenDocumentManager openDocumentManager; ScopedPointer commandManager; ScopedPointer utf8Window, svgPathWindow, aboutWindow, applicationUsageDataWindow, pathsWindow, editorColourSchemeWindow; 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(); //============================================================================== void setColourScheme (int index, bool saveSetting); void setEditorColourScheme (int index, bool saveSetting); void updateEditorColourSchemeIfNeeded(); int selectedColourSchemeIndex; int selectedEditorColourSchemeIndex; int numEditorColourSchemes; };