| @@ -276,6 +276,29 @@ void MainWindow::activeWindowStatusChanged() | |||||
| pcc->updateMissingFileStatuses(); | pcc->updateMissingFileStatuses(); | ||||
| ProjucerApplication::getApp().openDocumentManager.reloadModifiedFiles(); | ProjucerApplication::getApp().openDocumentManager.reloadModifiedFiles(); | ||||
| if (Project* p = getProject()) | |||||
| { | |||||
| if (p->hasProjectBeenModified()) | |||||
| { | |||||
| const int r = AlertWindow::showOkCancelBox (AlertWindow::QuestionIcon, | |||||
| TRANS (".jucer file has been modified since last save."), | |||||
| TRANS ("Do you want to keep current project or re-load from disk?"), | |||||
| TRANS ("Keep"), | |||||
| TRANS ("Re-load from disk")); | |||||
| if (r == 0) | |||||
| { | |||||
| File projectFile = p->getFile(); | |||||
| setProject (nullptr); | |||||
| openFile (projectFile); | |||||
| } | |||||
| else if (r == 1) | |||||
| { | |||||
| ProjucerApplication::getApp().getCommandManager().invokeDirectly (CommandIDs::saveProject, true); | |||||
| } | |||||
| } | |||||
| } | |||||
| } | } | ||||
| void MainWindow::updateTitle (const String& documentName) | void MainWindow::updateTitle (const String& documentName) | ||||
| @@ -104,6 +104,8 @@ public: | |||||
| return Result::fail (errors[0]); | return Result::fail (errors[0]); | ||||
| } | } | ||||
| project.updateModificationTime(); | |||||
| return Result::ok(); | return Result::ok(); | ||||
| } | } | ||||
| @@ -59,6 +59,8 @@ Project::Project (const File& f) | |||||
| setChangedFlag (false); | setChangedFlag (false); | ||||
| projectRoot.addListener (this); | projectRoot.addListener (this); | ||||
| modificationTime = getFile().getLastModificationTime(); | |||||
| } | } | ||||
| Project::~Project() | Project::~Project() | ||||
| @@ -374,6 +376,20 @@ void Project::valueTreeChildRemoved (ValueTree&, ValueTree&, int) { changed(); | |||||
| void Project::valueTreeChildOrderChanged (ValueTree&, int, int) { changed(); } | void Project::valueTreeChildOrderChanged (ValueTree&, int, int) { changed(); } | ||||
| void Project::valueTreeParentChanged (ValueTree&) {} | void Project::valueTreeParentChanged (ValueTree&) {} | ||||
| //============================================================================== | |||||
| bool Project::hasProjectBeenModified() | |||||
| { | |||||
| Time newModificationTime = getFile().getLastModificationTime(); | |||||
| if (newModificationTime != modificationTime) | |||||
| { | |||||
| modificationTime = newModificationTime; | |||||
| return true; | |||||
| } | |||||
| return false; | |||||
| } | |||||
| //============================================================================== | //============================================================================== | ||||
| File Project::resolveFilename (String filename) const | File Project::resolveFilename (String filename) const | ||||
| { | { | ||||
| @@ -311,6 +311,10 @@ public: | |||||
| //============================================================================== | //============================================================================== | ||||
| static const char* projectFileExtension; | static const char* projectFileExtension; | ||||
| //============================================================================== | |||||
| bool hasProjectBeenModified(); | |||||
| void updateModificationTime() { modificationTime = getFile().getLastModificationTime(); } | |||||
| private: | private: | ||||
| //============================================================================== | //============================================================================== | ||||
| void setMissingAudioPluginDefaultValues(); | void setMissingAudioPluginDefaultValues(); | ||||
| @@ -334,6 +338,8 @@ private: | |||||
| void updateOldModulePaths(); | void updateOldModulePaths(); | ||||
| void warnAboutOldProjucerVersion(); | void warnAboutOldProjucerVersion(); | ||||
| Time modificationTime; | |||||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Project) | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Project) | ||||
| }; | }; | ||||