diff --git a/extras/Introjucer/Source/Application/jucer_DocumentEditorComponent.cpp b/extras/Introjucer/Source/Application/jucer_DocumentEditorComponent.cpp index c5bf76a55c..7b0317150d 100644 --- a/extras/Introjucer/Source/Application/jucer_DocumentEditorComponent.cpp +++ b/extras/Introjucer/Source/Application/jucer_DocumentEditorComponent.cpp @@ -39,7 +39,7 @@ DocumentEditorComponent::~DocumentEditorComponent() IntrojucerApp::getApp().openDocumentManager.removeListener (this); } -void DocumentEditorComponent::documentAboutToClose (OpenDocumentManager::Document* closingDoc) +bool DocumentEditorComponent::documentAboutToClose (OpenDocumentManager::Document* closingDoc) { if (document == closingDoc) { @@ -48,6 +48,8 @@ void DocumentEditorComponent::documentAboutToClose (OpenDocumentManager::Documen if (ProjectContentComponent* pcc = findParentComponentOfClass()) pcc->hideDocument (document); } + + return true; } void DocumentEditorComponent::setEditedState (bool /*hasBeenEdited*/) diff --git a/extras/Introjucer/Source/Application/jucer_DocumentEditorComponent.h b/extras/Introjucer/Source/Application/jucer_DocumentEditorComponent.h index c17e935679..f1e2a7c026 100644 --- a/extras/Introjucer/Source/Application/jucer_DocumentEditorComponent.h +++ b/extras/Introjucer/Source/Application/jucer_DocumentEditorComponent.h @@ -41,7 +41,7 @@ public: OpenDocumentManager::Document* getDocument() const { return document; } - void documentAboutToClose (OpenDocumentManager::Document*) override; + bool documentAboutToClose (OpenDocumentManager::Document*) override; protected: OpenDocumentManager::Document* document; diff --git a/extras/Introjucer/Source/Application/jucer_OpenDocumentManager.cpp b/extras/Introjucer/Source/Application/jucer_OpenDocumentManager.cpp index 99214337c3..b01e22a961 100644 --- a/extras/Introjucer/Source/Application/jucer_OpenDocumentManager.cpp +++ b/extras/Introjucer/Source/Application/jucer_OpenDocumentManager.cpp @@ -195,8 +195,14 @@ bool OpenDocumentManager::closeDocument (int index, bool saveIfNeeded) if (saveIfNeededAndUserAgrees (doc) != FileBasedDocument::savedOk) return false; + bool canClose = true; + for (int i = listeners.size(); --i >= 0;) - listeners.getUnchecked(i)->documentAboutToClose (doc); + if (! listeners.getUnchecked(i)->documentAboutToClose (doc)) + canClose = false; + + if (! canClose) + return false; documents.remove (index); IntrojucerApp::getCommandManager().commandStatusChanged(); @@ -359,13 +365,15 @@ OpenDocumentManager::Document* RecentDocumentList::getClosestPreviousDocOtherTha return nullptr; } -void RecentDocumentList::documentAboutToClose (OpenDocumentManager::Document* document) +bool RecentDocumentList::documentAboutToClose (OpenDocumentManager::Document* document) { previousDocs.removeAllInstancesOf (document); nextDocs.removeAllInstancesOf (document); jassert (! previousDocs.contains (document)); jassert (! nextDocs.contains (document)); + + return true; } static void restoreDocList (Project& project, Array & list, const XmlElement* xml) diff --git a/extras/Introjucer/Source/Application/jucer_OpenDocumentManager.h b/extras/Introjucer/Source/Application/jucer_OpenDocumentManager.h index c725827a26..2a4750c1d3 100644 --- a/extras/Introjucer/Source/Application/jucer_OpenDocumentManager.h +++ b/extras/Introjucer/Source/Application/jucer_OpenDocumentManager.h @@ -90,7 +90,8 @@ public: DocumentCloseListener() {} virtual ~DocumentCloseListener() {} - virtual void documentAboutToClose (Document* document) = 0; + // return false to force it to stop. + virtual bool documentAboutToClose (Document* document) = 0; }; void addListener (DocumentCloseListener*); @@ -143,7 +144,7 @@ public: XmlElement* createXML() const; private: - void documentAboutToClose (OpenDocumentManager::Document*); + bool documentAboutToClose (OpenDocumentManager::Document*); Array previousDocs, nextDocs; }; diff --git a/extras/Introjucer/Source/ComponentEditor/components/jucer_JucerComponentHandler.h b/extras/Introjucer/Source/ComponentEditor/components/jucer_JucerComponentHandler.h index 3f489ffd54..da29f0e132 100644 --- a/extras/Introjucer/Source/ComponentEditor/components/jucer_JucerComponentHandler.h +++ b/extras/Introjucer/Source/ComponentEditor/components/jucer_JucerComponentHandler.h @@ -37,7 +37,7 @@ class JucerComponentHandler : public ComponentTypeHandler { public: JucerComponentHandler() - : ComponentTypeHandler ("Jucer Component", "xxx", + : ComponentTypeHandler ("Introjucer Component", "xxx", typeid (TestComponent), 300, 200) {} @@ -145,11 +145,11 @@ public: static void setJucerComponentFile (JucerDocument& document, TestComponent* comp, const String& newFilename) { - jassert (comp != 0); + jassert (comp != nullptr); - if (comp != 0) + if (comp != nullptr) document.perform (new JucerCompFileChangeAction (comp, *document.getComponentLayout(), newFilename), - "Change Jucer component file"); + "Change Introjucer component file"); } private: diff --git a/extras/Introjucer/Source/ComponentEditor/components/jucer_ViewportHandler.h b/extras/Introjucer/Source/ComponentEditor/components/jucer_ViewportHandler.h index 13bcda40d0..cdacb00e28 100644 --- a/extras/Introjucer/Source/ComponentEditor/components/jucer_ViewportHandler.h +++ b/extras/Introjucer/Source/ComponentEditor/components/jucer_ViewportHandler.h @@ -498,7 +498,7 @@ private: document.perform (new JucerCompFileChangeAction (component, *document.getComponentLayout(), newFile.getRelativePathFrom (document.getCppFile().getParentDirectory()) .replaceCharacter ('\\', '/')), - "Change Jucer component file"); + "Change Introjucer component file"); } File getFile() const diff --git a/extras/Introjucer/Source/ComponentEditor/jucer_JucerDocument.cpp b/extras/Introjucer/Source/ComponentEditor/jucer_JucerDocument.cpp index 23a5c28e7d..446cd026fe 100644 --- a/extras/Introjucer/Source/ComponentEditor/jucer_JucerDocument.cpp +++ b/extras/Introjucer/Source/ComponentEditor/jucer_JucerDocument.cpp @@ -54,10 +54,12 @@ JucerDocument::JucerDocument (SourceCodeDocument* c) IntrojucerApp::getCommandManager().commandStatusChanged(); cpp->getCodeDocument().addListener (this); + IntrojucerApp::getApp().openDocumentManager.addListener (this); } JucerDocument::~JucerDocument() { + IntrojucerApp::getApp().openDocumentManager.removeListener (this); cpp->getCodeDocument().removeListener (this); IntrojucerApp::getCommandManager().commandStatusChanged(); } @@ -78,6 +80,11 @@ struct UserDocChangeTimer : public Timer JucerDocument& doc; }; +bool JucerDocument::documentAboutToClose (OpenDocumentManager::Document* doc) +{ + return doc != cpp; +} + void JucerDocument::userEditedCpp() { if (userDocChangeTimer == nullptr) @@ -656,8 +663,8 @@ JucerDocument* JucerDocument::createForCppFile (Project* p, const File& file) { OpenDocumentManager& odm = IntrojucerApp::getApp().openDocumentManager; - if (SourceCodeDocument* cpp = dynamic_cast (odm.openFile (p, file))) - if (dynamic_cast (odm.openFile (p, file.withFileExtension (".h"))) != nullptr) + if (SourceCodeDocument* cpp = dynamic_cast (odm.openFile (p, file))) + if (dynamic_cast (odm.openFile (p, file.withFileExtension (".h"))) != nullptr) return createDocument (cpp); return nullptr; diff --git a/extras/Introjucer/Source/ComponentEditor/jucer_JucerDocument.h b/extras/Introjucer/Source/ComponentEditor/jucer_JucerDocument.h index 37bb9effb8..790c2d82d9 100644 --- a/extras/Introjucer/Source/ComponentEditor/jucer_JucerDocument.h +++ b/extras/Introjucer/Source/ComponentEditor/jucer_JucerDocument.h @@ -35,7 +35,8 @@ //============================================================================== class JucerDocument : public ChangeBroadcaster, private Timer, - private CodeDocument::Listener + private CodeDocument::Listener, + private OpenDocumentManager::DocumentCloseListener { public: JucerDocument (SourceCodeDocument* cpp); @@ -167,6 +168,7 @@ private: void codeDocumentTextInserted (const String& newText, int insertIndex) override; void codeDocumentTextDeleted (int startIndex, int endIndex) override; void userEditedCpp(); + bool documentAboutToClose (OpenDocumentManager::Document*) override; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JucerDocument); }; diff --git a/extras/Introjucer/Source/ComponentEditor/ui/jucer_TestComponent.cpp b/extras/Introjucer/Source/ComponentEditor/ui/jucer_TestComponent.cpp index 43b0d61602..5104a0aefe 100644 --- a/extras/Introjucer/Source/ComponentEditor/ui/jucer_TestComponent.cpp +++ b/extras/Introjucer/Source/ComponentEditor/ui/jucer_TestComponent.cpp @@ -146,7 +146,7 @@ void TestComponent::paint (Graphics& g) g.drawLine (0.0f, (float) getHeight(), (float) getWidth(), 0.0f); g.setFont (14.0f); - g.drawText ("Jucer Component", + g.drawText ("Introjucer Component", 0, 0, getWidth(), getHeight() / 2, Justification::centred, true); g.drawText ("(no file loaded)", diff --git a/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.cpp b/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.cpp index 83c424bc8e..5a4056bf90 100644 --- a/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.cpp +++ b/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.cpp @@ -357,9 +357,10 @@ void ProjectContentComponent::reloadLastOpenDocuments() } } -void ProjectContentComponent::documentAboutToClose (OpenDocumentManager::Document* document) +bool ProjectContentComponent::documentAboutToClose (OpenDocumentManager::Document* document) { hideDocument (document); + return true; } void ProjectContentComponent::changeListenerCallback (ChangeBroadcaster*) diff --git a/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.h b/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.h index b19195bdce..01ba5d8013 100644 --- a/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.h +++ b/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.h @@ -118,7 +118,7 @@ protected: ComponentBoundsConstrainer treeSizeConstrainer; BubbleMessageComponent bubbleMessage; - void documentAboutToClose (OpenDocumentManager::Document*) override; + bool documentAboutToClose (OpenDocumentManager::Document*) override; void changeListenerCallback (ChangeBroadcaster*) override; void showTranslationTool();