Browse Source

Projucer: Ensure that save error messages are shown when using the "Save Project and Open in IDE" command

v6.1.6
ed 3 years ago
parent
commit
77b816b042
4 changed files with 40 additions and 70 deletions
  1. +19
    -21
      extras/Projucer/Source/Project/UI/jucer_HeaderComponent.cpp
  2. +18
    -3
      extras/Projucer/Source/Project/UI/jucer_ProjectContentComponent.cpp
  3. +2
    -40
      extras/Projucer/Source/Project/jucer_Project.cpp
  4. +1
    -6
      extras/Projucer/Source/Project/jucer_Project.h

+ 19
- 21
extras/Projucer/Source/Project/UI/jucer_HeaderComponent.cpp View File

@@ -226,31 +226,29 @@ void HeaderComponent::initialiseButtons()
saveAndOpenInIDEButton.setIconInset (7);
saveAndOpenInIDEButton.onClick = [this]
{
if (project != nullptr)
if (project == nullptr)
return;
if (! project->isSaveAndExportDisabled())
{
if (project->isSaveAndExportDisabled())
{
auto setWarningVisible = [this] (const Identifier& identifier)
{
auto child = project->getProjectMessages().getChildWithName (ProjectMessages::Ids::warning)
.getChildWithName (identifier);
projectContentComponent->openInSelectedIDE (true);
return;
}
auto setWarningVisible = [this] (const Identifier& identifier)
{
auto child = project->getProjectMessages().getChildWithName (ProjectMessages::Ids::warning)
.getChildWithName (identifier);
if (child.isValid())
child.setProperty (ProjectMessages::Ids::isVisible, true, nullptr);
};
if (child.isValid())
child.setProperty (ProjectMessages::Ids::isVisible, true, nullptr);
};
if (project->hasIncompatibleLicenseTypeAndSplashScreenSetting())
setWarningVisible (ProjectMessages::Ids::incompatibleLicense);
if (project->hasIncompatibleLicenseTypeAndSplashScreenSetting())
setWarningVisible (ProjectMessages::Ids::incompatibleLicense);
if (project->isFileModificationCheckPending())
setWarningVisible (ProjectMessages::Ids::jucerFileModified);
}
else
{
if (auto exporter = getSelectedExporter())
project->openProjectInIDE (*exporter, true, nullptr);
}
}
if (project->isFileModificationCheckPending())
setWarningVisible (ProjectMessages::Ids::jucerFileModified);
};
updateExporterButton();


+ 18
- 3
extras/Projucer/Source/Project/UI/jucer_ProjectContentComponent.cpp View File

@@ -496,9 +496,24 @@ StringArray ProjectContentComponent::getExportersWhichCanLaunch() const
void ProjectContentComponent::openInSelectedIDE (bool saveFirst)
{
if (project != nullptr)
if (auto selectedExporter = headerComponent.getSelectedExporter())
project->openProjectInIDE (*selectedExporter, saveFirst, nullptr);
if (project == nullptr)
return;
if (auto selectedExporter = headerComponent.getSelectedExporter())
{
if (saveFirst)
{
SafePointer<ProjectContentComponent> safeThis { this };
project->saveAsync (true, true, [safeThis] (Project::SaveResult r)
{
if (safeThis != nullptr && r == Project::SaveResult::savedOk)
safeThis->openInSelectedIDE (false);
});
return;
}
project->openProjectInIDE (*selectedExporter);
}
}
void ProjectContentComponent::showNewExporterMenu()


+ 2
- 40
extras/Projucer/Source/Project/jucer_Project.cpp View File

@@ -740,7 +740,7 @@ void Project::saveProject (Async async,
});
}
void Project::openProjectInIDE (ProjectExporter& exporterToOpen, bool saveFirst, std::function<void (Result)> onCompletion)
void Project::openProjectInIDE (ProjectExporter& exporterToOpen)
{
for (ExporterIterator exporter (*this); exporter.next();)
{
@@ -749,51 +749,13 @@ void Project::openProjectInIDE (ProjectExporter& exporterToOpen, bool saveFirst,
if (isTemporaryProject())
{
saveAndMoveTemporaryProject (true);
if (onCompletion != nullptr)
onCompletion (Result::ok());
return;
}
if (saveFirst)
{
struct Callback
{
void operator() (Result saveResult) noexcept
{
if (! saveResult.wasOk())
{
if (onCompletion != nullptr)
onCompletion (saveResult);
return;
}
// Workaround for a bug where Xcode thinks the project is invalid if opened immediately
// after writing
auto exporterCopy = exporter;
Timer::callAfterDelay (exporter->isXcode() ? 1000 : 0, [exporterCopy]
{
exporterCopy->launchProject();
});
}
std::shared_ptr<ProjectExporter> exporter;
std::function<void (Result)> onCompletion;
};
saveProject (Async::yes, nullptr, Callback { std::move (exporter.exporter), onCompletion });
return;
}
exporter->launchProject();
break;
return;
}
}
if (onCompletion != nullptr)
onCompletion (Result::ok());
}
Result Project::saveResourcesOnly()


+ 1
- 6
extras/Projucer/Source/Project/jucer_Project.h View File

@@ -132,7 +132,7 @@ public:
void saveProject (Async, ProjectExporter* exporterToSave, std::function<void (Result)> onCompletion);
Result saveResourcesOnly();
void openProjectInIDE (ProjectExporter& exporterToOpen, bool saveFirst, std::function<void (Result)> onCompletion);
void openProjectInIDE (ProjectExporter& exporterToOpen);
File getLastDocumentOpened() override;
void setLastDocumentOpened (const File& file) override;
@@ -614,11 +614,6 @@ private:
void updateCLionWarning (bool showWarning);
void updateModuleNotFoundWarning (bool showWarning);
void openProjectInIDEImpl (ExporterIterator exporter,
String exporterToOpen,
bool saveFirst,
std::function<void (Result)> onCompletion);
ValueTree projectMessages { ProjectMessages::Ids::projectMessages, {},
{ { ProjectMessages::Ids::notification, {} }, { ProjectMessages::Ids::warning, {} } } };
std::map<Identifier, std::vector<ProjectMessages::MessageAction>> messageActions;


Loading…
Cancel
Save