diff --git a/extras/Projucer/Source/Project Saving/jucer_ProjectSaver.h b/extras/Projucer/Source/Project Saving/jucer_ProjectSaver.h index bebe8c1034..f8513234ea 100644 --- a/extras/Projucer/Source/Project Saving/jucer_ProjectSaver.h +++ b/extras/Projucer/Source/Project Saving/jucer_ProjectSaver.h @@ -48,29 +48,32 @@ public: struct SaveThread : public ThreadWithProgressWindow { public: - SaveThread (ProjectSaver& ps, bool wait = false) + SaveThread (ProjectSaver& ps, bool wait, const String& exp) : ThreadWithProgressWindow ("Saving...", true, false), - saver (ps), result (Result::ok()), shouldWaitAfterSaving (wait) + saver (ps), result (Result::ok()), + shouldWaitAfterSaving (wait), + specifiedExporterToSave (exp) {} void run() override { setProgress (-1); - result = saver.save (false, shouldWaitAfterSaving); + result = saver.save (false, shouldWaitAfterSaving, specifiedExporterToSave); } ProjectSaver& saver; Result result; bool shouldWaitAfterSaving; + String specifiedExporterToSave; JUCE_DECLARE_NON_COPYABLE (SaveThread) }; - Result save (bool showProgressBox, bool waitAfterSaving) + Result save (bool showProgressBox, bool waitAfterSaving, const String& specifiedExporterToSave) { if (showProgressBox) { - SaveThread thread (*this, waitAfterSaving); + SaveThread thread (*this, waitAfterSaving, specifiedExporterToSave); thread.runThread(); return thread.result; } @@ -94,7 +97,7 @@ public: writeBinaryDataFiles(); writeAppHeader (modules); writeModuleCppWrappers (modules); - writeProjects (modules); + writeProjects (modules, specifiedExporterToSave); writeAppConfigFile (modules, appConfigUserContent); // (this is repeated in case the projects added anything to it) if (generatedCodeFolder.exists()) @@ -648,7 +651,7 @@ private: void writePluginCharacteristicsFile(); - void writeProjects (const OwnedArray& modules) + void writeProjects (const OwnedArray& modules, const String& specifiedExporterToSave) { ThreadPool threadPool; @@ -659,6 +662,9 @@ private: { for (Project::ExporterIterator exporter (project); exporter.next();) { + if (specifiedExporterToSave.isNotEmpty() && exporter->getName() != specifiedExporterToSave) + continue; + if (exporter->getTargetFolder().createDirectory()) { exporter->copyMainGroupFromProject(); diff --git a/extras/Projucer/Source/Project/jucer_ConfigTree_Exporter.h b/extras/Projucer/Source/Project/jucer_ConfigTree_Exporter.h index 5fafd875ac..dc2aeb3f8d 100644 --- a/extras/Projucer/Source/Project/jucer_ConfigTree_Exporter.h +++ b/extras/Projucer/Source/Project/jucer_ConfigTree_Exporter.h @@ -92,8 +92,9 @@ public: { PopupMenu menu; menu.addItem (1, "Add a new configuration", exporter->supportsUserDefinedConfigurations()); + menu.addItem (2, "Save this exporter"); menu.addSeparator(); - menu.addItem (2, "Delete this exporter"); + menu.addItem (3, "Delete this exporter"); launchPopupMenu (menu); } @@ -108,10 +109,19 @@ public: void handlePopupMenuResult (int resultCode) override { - if (resultCode == 2) - deleteAllSelectedItems(); - else if (resultCode == 1) + if (resultCode == 1) + { exporter->addNewConfiguration (nullptr); + } + else if (resultCode == 2) + { + const ScopedValueSetter valueSetter (project.specifiedExporterToSave, exporter->getName(), {}); + project.save (true, true); + } + else if (resultCode == 3) + { + deleteAllSelectedItems(); + } } var getDragSourceDescription() override @@ -243,14 +253,10 @@ public: void handlePopupMenuResult (int resultCode) override { - if (resultCode == 2) - { - deleteAllSelectedItems(); - } - else if (resultCode == 1) - { + if (resultCode == 1) exporter.addNewConfiguration (config); - } + else if (resultCode == 2) + deleteAllSelectedItems(); } var getDragSourceDescription() override diff --git a/extras/Projucer/Source/Project/jucer_Project.cpp b/extras/Projucer/Source/Project/jucer_Project.cpp index b7dce7d0ca..083e6a629b 100644 --- a/extras/Projucer/Source/Project/jucer_Project.cpp +++ b/extras/Projucer/Source/Project/jucer_Project.cpp @@ -383,7 +383,7 @@ Result Project::saveProject (const File& file, bool isCommandLineApp) const ScopedValueSetter vs (isSaving, true, false); ProjectSaver saver (*this, file); - return saver.save (! isCommandLineApp, shouldWaitAfterSaving); + return saver.save (! isCommandLineApp, shouldWaitAfterSaving, specifiedExporterToSave); } Result Project::saveResourcesOnly (const File& file) diff --git a/extras/Projucer/Source/Project/jucer_Project.h b/extras/Projucer/Source/Project/jucer_Project.h index 40f805f38f..9aab59f859 100644 --- a/extras/Projucer/Source/Project/jucer_Project.h +++ b/extras/Projucer/Source/Project/jucer_Project.h @@ -346,6 +346,7 @@ public: //============================================================================== bool shouldWaitAfterSaving = false; + String specifiedExporterToSave = {}; private: //============================================================================== diff --git a/extras/Projucer/Source/Project/jucer_ProjectContentComponent.cpp b/extras/Projucer/Source/Project/jucer_ProjectContentComponent.cpp index 38b064cd18..019fd7d892 100644 --- a/extras/Projucer/Source/Project/jucer_ProjectContentComponent.cpp +++ b/extras/Projucer/Source/Project/jucer_ProjectContentComponent.cpp @@ -546,6 +546,7 @@ bool ProjectContentComponent::setEditorComponent (Component* editor, { contentView = editor; currentDocument = doc; + fileNameLabel->setText (doc->getFile().getFileName(), dontSendNotification); fileNameLabel->setVisible (true); addAndMakeVisible (editor);