mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-29 02:40:05 +00:00
Introjucer: avoided problems when closing a GUI comp which is a sub-component of another currently-loaded GUI component.
This commit is contained in:
parent
59b9b0ccaf
commit
8e4825e7bd
11 changed files with 38 additions and 17 deletions
|
|
@ -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<ProjectContentComponent>())
|
||||
pcc->hideDocument (document);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void DocumentEditorComponent::setEditedState (bool /*hasBeenEdited*/)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 <OpenDocumentManager::Document*>& list, const XmlElement* xml)
|
||||
|
|
|
|||
|
|
@ -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 <OpenDocumentManager::Document*> previousDocs, nextDocs;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 <SourceCodeDocument*> (odm.openFile (p, file)))
|
||||
if (dynamic_cast <SourceCodeDocument*> (odm.openFile (p, file.withFileExtension (".h"))) != nullptr)
|
||||
if (SourceCodeDocument* cpp = dynamic_cast<SourceCodeDocument*> (odm.openFile (p, file)))
|
||||
if (dynamic_cast<SourceCodeDocument*> (odm.openFile (p, file.withFileExtension (".h"))) != nullptr)
|
||||
return createDocument (cpp);
|
||||
|
||||
return nullptr;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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)",
|
||||
|
|
|
|||
|
|
@ -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*)
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue