1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

Projucer: Disable project saving when file modification warning is showing

This commit is contained in:
ed 2020-07-28 09:54:27 +01:00
parent f6782fe25b
commit a3af3a5381
3 changed files with 30 additions and 13 deletions

View file

@ -277,13 +277,22 @@ void HeaderComponent::initialiseButtons()
{
if (project != nullptr)
{
if (project->hasIncompatibleLicenseTypeAndSplashScreenSetting())
if (project->isSaveAndExportDisabled())
{
auto child = project->getProjectMessages().getChildWithName (ProjectMessages::Ids::warning)
.getChildWithName (ProjectMessages::Ids::incompatibleLicense);
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->isFileModificationCheckPending())
setWarningVisible (ProjectMessages::Ids::jucerFileModified);
}
else
{

View file

@ -39,22 +39,22 @@ Project::ProjectFileModificationPoller::ProjectFileModificationPoller (Project&
void Project::ProjectFileModificationPoller::reset()
{
project.removeProjectMessage (ProjectMessages::Ids::jucerFileModified);
showingWarning = false;
pending = false;
startTimer (250);
}
void Project::ProjectFileModificationPoller::timerCallback()
{
if (project.updateCachedFileState() && ! showingWarning)
if (project.updateCachedFileState() && ! pending)
{
project.addProjectMessage (ProjectMessages::Ids::jucerFileModified,
{ { "Save current state", [this] { resaveProject(); } },
{ "Re-load from disk", [this] { reloadProjectFromDisk(); } },
{ "Ignore", [this] { reset(); } } });
{ "Re-load from disk", [this] { reloadProjectFromDisk(); } },
{ "Ignore", [this] { reset(); } } });
stopTimer();
showingWarning = true;
pending = true;
}
}
@ -79,8 +79,8 @@ void Project::ProjectFileModificationPoller::reloadProjectFromDisk()
void Project::ProjectFileModificationPoller::resaveProject()
{
project.saveProject();
reset();
project.saveProject();
}
//==============================================================================
@ -745,9 +745,15 @@ bool Project::hasIncompatibleLicenseTypeAndSplashScreenSetting() const
&& ! ProjucerApplication::getApp().getLicenseController().getCurrentState().canUnlockFullFeatures();
}
bool Project::isFileModificationCheckPending() const
{
return fileModificationPoller.isCheckPending();
}
bool Project::isSaveAndExportDisabled() const
{
return ! ProjucerApplication::getApp().isRunningCommandLine && hasIncompatibleLicenseTypeAndSplashScreenSetting();
return ! ProjucerApplication::getApp().isRunningCommandLine
&& (hasIncompatibleLicenseTypeAndSplashScreenSetting() || isFileModificationCheckPending());
}
void Project::updateLicenseWarning()

View file

@ -501,6 +501,7 @@ public:
//==============================================================================
bool hasIncompatibleLicenseTypeAndSplashScreenSetting() const;
bool isFileModificationCheckPending() const;
bool isSaveAndExportDisabled() const;
private:
@ -514,6 +515,7 @@ private:
struct ProjectFileModificationPoller : private Timer
{
ProjectFileModificationPoller (Project& p);
bool isCheckPending() const noexcept { return pending; }
private:
void timerCallback() override;
@ -523,7 +525,7 @@ private:
void reloadProjectFromDisk();
Project& project;
bool showingWarning = false;
bool pending = false;
};
//==============================================================================