diff --git a/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_Android.h b/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_Android.h index b2cd952dd7..8650fc161b 100644 --- a/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_Android.h +++ b/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_Android.h @@ -64,6 +64,7 @@ public: } //============================================================================== + bool canLaunchProject() override { return false; } bool launchProject() override { return false; } bool isAndroid() const override { return true; } bool usesMMFiles() const override { return false; } diff --git a/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_CodeBlocks.h b/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_CodeBlocks.h index 3f35767f26..35e0748c4b 100644 --- a/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_CodeBlocks.h +++ b/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_CodeBlocks.h @@ -47,6 +47,7 @@ public: } //============================================================================== + bool canLaunchProject() override { return false; } bool launchProject() override { return false; } bool isCodeBlocks() const override { return true; } bool isWindows() const override { return true; } diff --git a/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_MSVC.h b/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_MSVC.h index 66ded6d0cf..c72c52c7af 100644 --- a/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_MSVC.h +++ b/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_MSVC.h @@ -50,6 +50,15 @@ public: #endif } + bool canLaunchProject() override + { + #if JUCE_WINDOWS + return true; + #else + return false; + #endif + } + void createExporterProperties (PropertyListBuilder&) override { } diff --git a/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_Make.h b/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_Make.h index 5d294bc0d1..a48869e578 100644 --- a/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_Make.h +++ b/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_Make.h @@ -48,10 +48,11 @@ public: } //============================================================================== - bool launchProject() override { return false; } - bool usesMMFiles() const override { return false; } - bool isLinux() const override { return true; } - bool canCopeWithDuplicateFiles() override { return false; } + bool canLaunchProject() override { return false; } + bool launchProject() override { return false; } + bool usesMMFiles() const override { return false; } + bool isLinux() const override { return true; } + bool canCopeWithDuplicateFiles() override { return false; } void createExporterProperties (PropertyListBuilder&) override { diff --git a/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_XCode.h b/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_XCode.h index d49061bd2d..92b9ece756 100644 --- a/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_XCode.h +++ b/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_XCode.h @@ -125,6 +125,15 @@ public: #endif } + bool canLaunchProject() override + { + #if JUCE_MAC + return true; + #else + return false; + #endif + } + //============================================================================== void create (const OwnedArray&) const override { diff --git a/extras/Introjucer/Source/Project Saving/jucer_ProjectExporter.h b/extras/Introjucer/Source/Project Saving/jucer_ProjectExporter.h index ab55855f48..38e9846fc6 100644 --- a/extras/Introjucer/Source/Project Saving/jucer_ProjectExporter.h +++ b/extras/Introjucer/Source/Project Saving/jucer_ProjectExporter.h @@ -49,6 +49,7 @@ public: //============================================================================= virtual bool usesMMFiles() const = 0; virtual void createExporterProperties (PropertyListBuilder&) = 0; + virtual bool canLaunchProject() = 0; virtual bool launchProject() = 0; virtual void create (const OwnedArray&) const = 0; // may throw a SaveError virtual bool shouldFileBeCompiledByDefault (const RelativePath& path) const; diff --git a/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.cpp b/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.cpp index ca500be4e2..4184630bfd 100644 --- a/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.cpp +++ b/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.cpp @@ -491,13 +491,51 @@ void ProjectContentComponent::closeProject() mw->closeCurrentProject(); } +StringArray ProjectContentComponent::getExportersWhichCanLaunch() const +{ + StringArray s; + + for (Project::ExporterIterator exporter (*project); exporter.next();) + if (exporter->canLaunchProject()) + s.add (exporter->getName()); + + return s; +} + +void ProjectContentComponent::openInIDE (const String& exporterName) +{ + if (project != nullptr) + for (Project::ExporterIterator exporter (*project); exporter.next();) + if (exporter->getName() == exporterName && exporter->launchProject()) + break; +} + +static void openIDEMenuCallback (int result, ProjectContentComponent* comp) +{ + if (comp != nullptr && result > 0) + comp->openInIDE (comp->getExportersWhichCanLaunch() [result - 1]); +} + void ProjectContentComponent::openInIDE() { if (project != nullptr) { - for (Project::ExporterIterator exporter (*project); exporter.next();) - if (exporter->launchProject()) - break; + StringArray possibleExporters = getExportersWhichCanLaunch(); + + if (possibleExporters.size() > 1) + { + PopupMenu menu; + + for (int i = 0; i < possibleExporters.size(); ++i) + menu.addItem (i + 1, possibleExporters[i]); + + menu.showMenuAsync (PopupMenu::Options(), + ModalCallbackFunction::forComponent (openIDEMenuCallback, this)); + } + else + { + openInIDE (possibleExporters[0]); + } } } diff --git a/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.h b/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.h index d1bdf948ff..6edbf6c2b4 100644 --- a/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.h +++ b/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.h @@ -71,6 +71,7 @@ public: bool saveProject(); void closeProject(); void openInIDE(); + void openInIDE (const String& exporterName); void deleteSelectedTreeItems(); @@ -83,6 +84,8 @@ public: void showBubbleMessage (const Rectangle& pos, const String& text); + StringArray getExportersWhichCanLaunch() const; + //============================================================================== ApplicationCommandTarget* getNextCommandTarget() override; void getAllCommands (Array & commands) override; diff --git a/extras/JuceDemo/JuceLibraryCode/AppConfig.h b/extras/JuceDemo/JuceLibraryCode/AppConfig.h index d463994a9d..8d45ce5251 100644 --- a/extras/JuceDemo/JuceLibraryCode/AppConfig.h +++ b/extras/JuceDemo/JuceLibraryCode/AppConfig.h @@ -125,6 +125,10 @@ //#define JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES #endif +#ifndef JUCE_INCLUDE_ZLIB_CODE + //#define JUCE_INCLUDE_ZLIB_CODE +#endif + //============================================================================== // juce_graphics flags: