From 60f76da09116ff3231f5bc1918a58b0fb5597979 Mon Sep 17 00:00:00 2001 From: reuk Date: Thu, 25 Nov 2021 11:41:12 +0000 Subject: [PATCH] Projucer: Show document save state in the titlebar --- .../Source/Application/jucer_MainWindow.cpp | 21 ++++++++++++++++--- .../Source/Application/jucer_MainWindow.h | 4 +++- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/extras/Projucer/Source/Application/jucer_MainWindow.cpp b/extras/Projucer/Source/Application/jucer_MainWindow.cpp index 2f2b7c2c18..10079fb25e 100644 --- a/extras/Projucer/Source/Application/jucer_MainWindow.cpp +++ b/extras/Projucer/Source/Application/jucer_MainWindow.cpp @@ -39,9 +39,9 @@ class BlurOverlayWithComponent : public Component, { public: BlurOverlayWithComponent (MainWindow& window, std::unique_ptr comp) - : ComponentMovementWatcher (&window), - mainWindow (window), - componentToShow (std::move (comp)) + : ComponentMovementWatcher (&window), + mainWindow (window), + componentToShow (std::move (comp)) { kernel.createGaussianBlur (1.25f); @@ -326,6 +326,11 @@ void MainWindow::setProject (std::unique_ptr newProject) getProjectContentComponent()->setProject (currentProject.get()); } + if (currentProject != nullptr) + currentProject->addChangeListener (this); + + changeListenerCallback (currentProject.get()); + projectNameValue.referTo (currentProject != nullptr ? currentProject->getProjectValue (Ids::name) : Value()); initialiseProjectWindow(); @@ -707,6 +712,16 @@ void MainWindow::valueChanged (Value& value) : "Projucer"); } +void MainWindow::changeListenerCallback (ChangeBroadcaster* source) +{ + auto* project = getProject(); + + if (source == project) + if (auto* peer = getPeer()) + peer->setHasChangedSinceSaved (project != nullptr ? project->hasChangedSinceSaved() + : false); +} + //============================================================================== MainWindowList::MainWindowList() { diff --git a/extras/Projucer/Source/Application/jucer_MainWindow.h b/extras/Projucer/Source/Application/jucer_MainWindow.h index ac63ac0e40..0bb11cce25 100644 --- a/extras/Projucer/Source/Application/jucer_MainWindow.h +++ b/extras/Projucer/Source/Application/jucer_MainWindow.h @@ -39,7 +39,8 @@ class MainWindow : public DocumentWindow, public ApplicationCommandTarget, public FileDragAndDropTarget, public DragAndDropContainer, - private Value::Listener + private Value::Listener, + private ChangeListener { public: //============================================================================== @@ -87,6 +88,7 @@ public: StringArray& files, bool& canMoveFiles) override; private: void valueChanged (Value&) override; + void changeListenerCallback (ChangeBroadcaster* source) override; static const char* getProjectWindowPosName() { return "projectWindowPos"; } void createProjectContentCompIfNeeded();