1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-02-06 04:00:08 +00:00

Projucer: Fixed a crash when creating new projects without using global paths and hide UI elements correctly when closing projects

This commit is contained in:
ed 2020-04-22 10:19:47 +01:00
parent faed5b237b
commit 6ce02ad35f
6 changed files with 27 additions and 37 deletions

View file

@ -254,24 +254,18 @@ void MainWindow::moveProject (File newProjectFileToOpen, OpenInIDE openInIDE)
void MainWindow::setProject (std::unique_ptr<Project> newProject)
{
if (newProject == nullptr)
{
getProjectContentComponent()->setProject (nullptr);
projectNameValue.referTo ({});
currentProject = std::move (newProject);
currentProject.reset();
}
else
{
currentProject = std::move (newProject);
projectNameValue.referTo (currentProject != nullptr ? currentProject->getProjectValue (Ids::name) : Value());
if (auto* peer = getPeer())
peer->setRepresentedFile (currentProject != nullptr ? currentProject->getFile() : File());
if (currentProject != nullptr)
createProjectContentCompIfNeeded();
getProjectContentComponent()->setProject (currentProject.get());
projectNameValue.referTo (currentProject->getProjectValue (Ids::name));
if (auto* peer = getPeer())
peer->setRepresentedFile (currentProject->getFile());
}
if (auto* content = getProjectContentComponent())
content->setProject (currentProject.get());
ProjucerApplication::getCommandManager().commandStatusChanged();
}

View file

@ -217,7 +217,7 @@ private:
}
if (auto* pcc = findParentComponentOfClass<ProjectContentComponent>())
pcc->rebuildProjectTabs();
pcc->rebuildProjectUI();
}
}

View file

@ -175,10 +175,7 @@ void ProjectContentComponent::setProject (Project* newProject)
deleteProjectTabs();
project = newProject;
if (project != nullptr)
rebuildProjectTabs();
projectMessagesComponent.setProject (newProject);
rebuildProjectUI();
}
}
@ -238,7 +235,7 @@ void ProjectContentComponent::deleteProjectTabs()
sidebarTabs.clearTabs();
}
void ProjectContentComponent::rebuildProjectTabs()
void ProjectContentComponent::rebuildProjectUI()
{
deleteProjectTabs();
@ -280,13 +277,18 @@ void ProjectContentComponent::rebuildProjectTabs()
headerComponent.setVisible (true);
headerComponent.setCurrentProject (project);
projectMessagesComponent.setVisible (true);
}
else
{
sidebarTabs.setVisible (false);
headerComponent.setVisible (false);
projectMessagesComponent.setVisible (false);
}
projectMessagesComponent.setProject (project);
resized();
}
@ -1203,7 +1205,7 @@ void ProjectContentComponent::refreshTabsIfBuildStatusChanged()
&& isLiveBuildEnabled
&& (sidebarTabs.getNumTabs() < 2 || isBuildEnabled() != isBuildTabEnabled()))
{
rebuildProjectTabs();
rebuildProjectUI();
}
}
@ -1315,7 +1317,7 @@ void ProjectContentComponent::liveBuildEnablementChanged (bool isEnabled)
if (! isLiveBuildEnabled)
killChildProcess();
rebuildProjectTabs();
rebuildProjectUI();
headerComponent.liveBuildEnablementChanged (isLiveBuildEnabled);
}

View file

@ -94,7 +94,7 @@ public:
void updateMissingFileStatuses();
void createProjectTabs();
void deleteProjectTabs();
void rebuildProjectTabs();
void rebuildProjectUI();
void refreshTabsIfBuildStatusChanged();
void toggleWarnings();
void showNextError();

View file

@ -631,9 +631,8 @@ Result Project::loadDocument (const File& file)
compileEngineSettings.reset (new CompileEngineSettings (projectRoot));
exporterPathsModulesList.reset (new AvailableModulesList());
rescanExporterPathModules (! ProjucerApplication::getApp().isRunningCommandLine);
exporterPathsModulesList->addListener (this);
exporterPathsModulesList.addListener (this);
setCppVersionFromOldExporterSettings();
updateDeprecatedProjectSettings();
@ -2313,25 +2312,19 @@ static Array<File> getExporterModulePathsToScan (Project& project)
return files;
}
AvailableModulesList& Project::getExporterPathsModulesList()
{
jassert (exporterPathsModulesList != nullptr);
return *exporterPathsModulesList;
}
void Project::rescanExporterPathModules (bool async)
{
if (async)
exporterPathsModulesList->scanPathsAsync (getExporterModulePathsToScan (*this));
exporterPathsModulesList.scanPathsAsync (getExporterModulePathsToScan (*this));
else
exporterPathsModulesList->scanPaths (getExporterModulePathsToScan (*this));
exporterPathsModulesList.scanPaths (getExporterModulePathsToScan (*this));
}
AvailableModulesList::ModuleIDAndFolder Project::getModuleWithID (const String& id)
{
if (! getEnabledModules().shouldUseGlobalPath (id))
{
const auto& mod = exporterPathsModulesList->getModuleWithID (id);
const auto& mod = exporterPathsModulesList.getModuleWithID (id);
if (mod.second != File())
return mod;
@ -2344,7 +2337,7 @@ AvailableModulesList::ModuleIDAndFolder Project::getModuleWithID (const String&
if (m.first == id)
return m;
return exporterPathsModulesList->getModuleWithID (id);
return exporterPathsModulesList.getModuleWithID (id);
}
//==============================================================================

View file

@ -450,7 +450,7 @@ public:
//==============================================================================
EnabledModulesList& getEnabledModules();
AvailableModulesList& getExporterPathsModulesList();
AvailableModulesList& getExporterPathsModulesList() { return exporterPathsModulesList; }
void rescanExporterPathModules (bool async = false);
std::pair<String, File> getModuleWithID (const String&);
@ -536,7 +536,8 @@ private:
//==============================================================================
std::unique_ptr<CompileEngineSettings> compileEngineSettings;
std::unique_ptr<EnabledModulesList> enabledModulesList;
std::unique_ptr<AvailableModulesList> exporterPathsModulesList;
AvailableModulesList exporterPathsModulesList;
//==============================================================================
void updateDeprecatedProjectSettings();