mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
Introjucer: updated window title bar status when current file has unsaved changes.
This commit is contained in:
parent
2c8b5a37af
commit
b0fadda27c
5 changed files with 51 additions and 5 deletions
|
|
@ -29,8 +29,8 @@
|
||||||
|
|
||||||
|
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
DocumentEditorComponent::DocumentEditorComponent (OpenDocumentManager::Document* document_)
|
DocumentEditorComponent::DocumentEditorComponent (OpenDocumentManager::Document* doc)
|
||||||
: document (document_)
|
: document (doc)
|
||||||
{
|
{
|
||||||
IntrojucerApp::getApp().openDocumentManager.addListener (this);
|
IntrojucerApp::getApp().openDocumentManager.addListener (this);
|
||||||
}
|
}
|
||||||
|
|
@ -55,3 +55,9 @@ void DocumentEditorComponent::documentAboutToClose (OpenDocumentManager::Documen
|
||||||
jassertfalse
|
jassertfalse
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DocumentEditorComponent::setEditedState (bool /*hasBeenEdited*/)
|
||||||
|
{
|
||||||
|
if (ProjectContentComponent* pcc = findParentComponentOfClass<ProjectContentComponent>())
|
||||||
|
pcc->updateMainWindowTitle();
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,8 @@ public:
|
||||||
protected:
|
protected:
|
||||||
OpenDocumentManager::Document* document;
|
OpenDocumentManager::Document* document;
|
||||||
|
|
||||||
|
void setEditedState (bool hasBeenEdited);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (DocumentEditorComponent)
|
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (DocumentEditorComponent)
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@
|
||||||
#include "jucer_SourceCodeEditor.h"
|
#include "jucer_SourceCodeEditor.h"
|
||||||
#include "../Application/jucer_OpenDocumentManager.h"
|
#include "../Application/jucer_OpenDocumentManager.h"
|
||||||
|
|
||||||
|
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
SourceCodeDocument::SourceCodeDocument (Project* p, const File& f)
|
SourceCodeDocument::SourceCodeDocument (Project* p, const File& f)
|
||||||
: modDetector (f), project (p)
|
: modDetector (f), project (p)
|
||||||
|
|
@ -104,6 +105,9 @@ SourceCodeEditor::SourceCodeEditor (OpenDocumentManager::Document* doc)
|
||||||
|
|
||||||
SourceCodeEditor::~SourceCodeEditor()
|
SourceCodeEditor::~SourceCodeEditor()
|
||||||
{
|
{
|
||||||
|
if (editor != nullptr)
|
||||||
|
editor->getDocument().removeListener (this);
|
||||||
|
|
||||||
getAppSettings().appearance.settings.removeListener (this);
|
getAppSettings().appearance.settings.removeListener (this);
|
||||||
|
|
||||||
if (SourceCodeDocument* doc = dynamic_cast <SourceCodeDocument*> (getDocument()))
|
if (SourceCodeDocument* doc = dynamic_cast <SourceCodeDocument*> (getDocument()))
|
||||||
|
|
@ -120,6 +124,9 @@ void SourceCodeEditor::createEditor (CodeDocument& codeDocument)
|
||||||
|
|
||||||
void SourceCodeEditor::setEditor (CodeEditorComponent* newEditor)
|
void SourceCodeEditor::setEditor (CodeEditorComponent* newEditor)
|
||||||
{
|
{
|
||||||
|
if (editor != nullptr)
|
||||||
|
editor->getDocument().removeListener (this);
|
||||||
|
|
||||||
addAndMakeVisible (editor = newEditor);
|
addAndMakeVisible (editor = newEditor);
|
||||||
|
|
||||||
editor->setFont (AppearanceSettings::getDefaultCodeFont());
|
editor->setFont (AppearanceSettings::getDefaultCodeFont());
|
||||||
|
|
@ -127,6 +134,8 @@ void SourceCodeEditor::setEditor (CodeEditorComponent* newEditor)
|
||||||
|
|
||||||
updateColourScheme();
|
updateColourScheme();
|
||||||
getAppSettings().appearance.settings.addListener (this);
|
getAppSettings().appearance.settings.addListener (this);
|
||||||
|
|
||||||
|
editor->getDocument().addListener (this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SourceCodeEditor::scrollToKeepRangeOnScreen (const Range<int>& range)
|
void SourceCodeEditor::scrollToKeepRangeOnScreen (const Range<int>& range)
|
||||||
|
|
@ -160,6 +169,11 @@ void SourceCodeEditor::resized()
|
||||||
|
|
||||||
void SourceCodeEditor::updateColourScheme() { getAppSettings().appearance.applyToCodeEditor (*editor); }
|
void SourceCodeEditor::updateColourScheme() { getAppSettings().appearance.applyToCodeEditor (*editor); }
|
||||||
|
|
||||||
|
void SourceCodeEditor::checkSaveState()
|
||||||
|
{
|
||||||
|
setEditedState (getDocument()->needsSaving());
|
||||||
|
}
|
||||||
|
|
||||||
void SourceCodeEditor::valueTreePropertyChanged (ValueTree&, const Identifier&) { updateColourScheme(); }
|
void SourceCodeEditor::valueTreePropertyChanged (ValueTree&, const Identifier&) { updateColourScheme(); }
|
||||||
void SourceCodeEditor::valueTreeChildAdded (ValueTree&, ValueTree&) { updateColourScheme(); }
|
void SourceCodeEditor::valueTreeChildAdded (ValueTree&, ValueTree&) { updateColourScheme(); }
|
||||||
void SourceCodeEditor::valueTreeChildRemoved (ValueTree&, ValueTree&) { updateColourScheme(); }
|
void SourceCodeEditor::valueTreeChildRemoved (ValueTree&, ValueTree&) { updateColourScheme(); }
|
||||||
|
|
@ -167,6 +181,8 @@ void SourceCodeEditor::valueTreeChildOrderChanged (ValueTree&)
|
||||||
void SourceCodeEditor::valueTreeParentChanged (ValueTree&) { updateColourScheme(); }
|
void SourceCodeEditor::valueTreeParentChanged (ValueTree&) { updateColourScheme(); }
|
||||||
void SourceCodeEditor::valueTreeRedirected (ValueTree&) { updateColourScheme(); }
|
void SourceCodeEditor::valueTreeRedirected (ValueTree&) { updateColourScheme(); }
|
||||||
|
|
||||||
|
void SourceCodeEditor::codeDocumentTextInserted (const String&, int) { checkSaveState(); }
|
||||||
|
void SourceCodeEditor::codeDocumentTextDeleted (int, int) { checkSaveState(); }
|
||||||
|
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
GenericCodeEditorComponent::GenericCodeEditorComponent (const File& f, CodeDocument& codeDocument,
|
GenericCodeEditorComponent::GenericCodeEditorComponent (const File& f, CodeDocument& codeDocument,
|
||||||
|
|
|
||||||
|
|
@ -134,7 +134,8 @@ protected:
|
||||||
|
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
class SourceCodeEditor : public DocumentEditorComponent,
|
class SourceCodeEditor : public DocumentEditorComponent,
|
||||||
private ValueTree::Listener
|
private ValueTree::Listener,
|
||||||
|
private CodeDocument::Listener
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SourceCodeEditor (OpenDocumentManager::Document* document);
|
SourceCodeEditor (OpenDocumentManager::Document* document);
|
||||||
|
|
@ -158,7 +159,11 @@ private:
|
||||||
void valueTreeParentChanged (ValueTree&);
|
void valueTreeParentChanged (ValueTree&);
|
||||||
void valueTreeRedirected (ValueTree&);
|
void valueTreeRedirected (ValueTree&);
|
||||||
|
|
||||||
|
void codeDocumentTextInserted (const String&, int);
|
||||||
|
void codeDocumentTextDeleted (int, int);
|
||||||
|
|
||||||
void updateColourScheme();
|
void updateColourScheme();
|
||||||
|
void checkSaveState();
|
||||||
|
|
||||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SourceCodeEditor);
|
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SourceCodeEditor);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -368,7 +368,6 @@ bool ProjectContentComponent::showDocument (OpenDocumentManager::Document* doc,
|
||||||
contentView->grabKeyboardFocus();
|
contentView->grabKeyboardFocus();
|
||||||
|
|
||||||
return opened;
|
return opened;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProjectContentComponent::hideEditor()
|
void ProjectContentComponent::hideEditor()
|
||||||
|
|
@ -426,6 +425,8 @@ void ProjectContentComponent::saveDocument()
|
||||||
currentDocument->save();
|
currentDocument->save();
|
||||||
else
|
else
|
||||||
saveProject();
|
saveProject();
|
||||||
|
|
||||||
|
updateMainWindowTitle();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ProjectContentComponent::goToPreviousFile()
|
bool ProjectContentComponent::goToPreviousFile()
|
||||||
|
|
@ -493,7 +494,23 @@ void ProjectContentComponent::deleteSelectedTreeItems()
|
||||||
void ProjectContentComponent::updateMainWindowTitle()
|
void ProjectContentComponent::updateMainWindowTitle()
|
||||||
{
|
{
|
||||||
if (MainWindow* mw = findParentComponentOfClass<MainWindow>())
|
if (MainWindow* mw = findParentComponentOfClass<MainWindow>())
|
||||||
mw->updateTitle (currentDocument != nullptr ? currentDocument->getName() : String::empty);
|
{
|
||||||
|
String title;
|
||||||
|
bool edited = false;
|
||||||
|
|
||||||
|
if (currentDocument != nullptr)
|
||||||
|
{
|
||||||
|
title = currentDocument->getName();
|
||||||
|
edited = currentDocument->needsSaving();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ComponentPeer* peer = mw->getPeer())
|
||||||
|
if (! peer->setDocumentEditedStatus (edited))
|
||||||
|
if (edited)
|
||||||
|
title << "*";
|
||||||
|
|
||||||
|
mw->updateTitle (title);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProjectContentComponent::showBubbleMessage (const Rectangle<int>& pos, const String& text)
|
void ProjectContentComponent::showBubbleMessage (const Rectangle<int>& pos, const String& text)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue