Browse Source

Introjucer: updated window title bar status when current file has unsaved changes.

tags/2021-05-28
jules 12 years ago
parent
commit
b0fadda27c
5 changed files with 51 additions and 5 deletions
  1. +8
    -2
      extras/Introjucer/Source/Application/jucer_DocumentEditorComponent.cpp
  2. +2
    -0
      extras/Introjucer/Source/Application/jucer_DocumentEditorComponent.h
  3. +16
    -0
      extras/Introjucer/Source/Code Editor/jucer_SourceCodeEditor.cpp
  4. +6
    -1
      extras/Introjucer/Source/Code Editor/jucer_SourceCodeEditor.h
  5. +19
    -2
      extras/Introjucer/Source/Project/jucer_ProjectContentComponent.cpp

+ 8
- 2
extras/Introjucer/Source/Application/jucer_DocumentEditorComponent.cpp View File

@@ -29,8 +29,8 @@
//==============================================================================
DocumentEditorComponent::DocumentEditorComponent (OpenDocumentManager::Document* document_)
: document (document_)
DocumentEditorComponent::DocumentEditorComponent (OpenDocumentManager::Document* doc)
: document (doc)
{
IntrojucerApp::getApp().openDocumentManager.addListener (this);
}
@@ -55,3 +55,9 @@ void DocumentEditorComponent::documentAboutToClose (OpenDocumentManager::Documen
jassertfalse
}
}
void DocumentEditorComponent::setEditedState (bool /*hasBeenEdited*/)
{
if (ProjectContentComponent* pcc = findParentComponentOfClass<ProjectContentComponent>())
pcc->updateMainWindowTitle();
}

+ 2
- 0
extras/Introjucer/Source/Application/jucer_DocumentEditorComponent.h View File

@@ -46,6 +46,8 @@ public:
protected:
OpenDocumentManager::Document* document;
void setEditedState (bool hasBeenEdited);
private:
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (DocumentEditorComponent)
};


+ 16
- 0
extras/Introjucer/Source/Code Editor/jucer_SourceCodeEditor.cpp View File

@@ -26,6 +26,7 @@
#include "jucer_SourceCodeEditor.h"
#include "../Application/jucer_OpenDocumentManager.h"
//==============================================================================
SourceCodeDocument::SourceCodeDocument (Project* p, const File& f)
: modDetector (f), project (p)
@@ -104,6 +105,9 @@ SourceCodeEditor::SourceCodeEditor (OpenDocumentManager::Document* doc)
SourceCodeEditor::~SourceCodeEditor()
{
if (editor != nullptr)
editor->getDocument().removeListener (this);
getAppSettings().appearance.settings.removeListener (this);
if (SourceCodeDocument* doc = dynamic_cast <SourceCodeDocument*> (getDocument()))
@@ -120,6 +124,9 @@ void SourceCodeEditor::createEditor (CodeDocument& codeDocument)
void SourceCodeEditor::setEditor (CodeEditorComponent* newEditor)
{
if (editor != nullptr)
editor->getDocument().removeListener (this);
addAndMakeVisible (editor = newEditor);
editor->setFont (AppearanceSettings::getDefaultCodeFont());
@@ -127,6 +134,8 @@ void SourceCodeEditor::setEditor (CodeEditorComponent* newEditor)
updateColourScheme();
getAppSettings().appearance.settings.addListener (this);
editor->getDocument().addListener (this);
}
void SourceCodeEditor::scrollToKeepRangeOnScreen (const Range<int>& range)
@@ -160,6 +169,11 @@ void SourceCodeEditor::resized()
void SourceCodeEditor::updateColourScheme() { getAppSettings().appearance.applyToCodeEditor (*editor); }
void SourceCodeEditor::checkSaveState()
{
setEditedState (getDocument()->needsSaving());
}
void SourceCodeEditor::valueTreePropertyChanged (ValueTree&, const Identifier&) { updateColourScheme(); }
void SourceCodeEditor::valueTreeChildAdded (ValueTree&, ValueTree&) { updateColourScheme(); }
void SourceCodeEditor::valueTreeChildRemoved (ValueTree&, ValueTree&) { updateColourScheme(); }
@@ -167,6 +181,8 @@ void SourceCodeEditor::valueTreeChildOrderChanged (ValueTree&)
void SourceCodeEditor::valueTreeParentChanged (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,


+ 6
- 1
extras/Introjucer/Source/Code Editor/jucer_SourceCodeEditor.h View File

@@ -134,7 +134,8 @@ protected:
//==============================================================================
class SourceCodeEditor : public DocumentEditorComponent,
private ValueTree::Listener
private ValueTree::Listener,
private CodeDocument::Listener
{
public:
SourceCodeEditor (OpenDocumentManager::Document* document);
@@ -158,7 +159,11 @@ private:
void valueTreeParentChanged (ValueTree&);
void valueTreeRedirected (ValueTree&);
void codeDocumentTextInserted (const String&, int);
void codeDocumentTextDeleted (int, int);
void updateColourScheme();
void checkSaveState();
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SourceCodeEditor);
};


+ 19
- 2
extras/Introjucer/Source/Project/jucer_ProjectContentComponent.cpp View File

@@ -368,7 +368,6 @@ bool ProjectContentComponent::showDocument (OpenDocumentManager::Document* doc,
contentView->grabKeyboardFocus();
return opened;
}
void ProjectContentComponent::hideEditor()
@@ -426,6 +425,8 @@ void ProjectContentComponent::saveDocument()
currentDocument->save();
else
saveProject();
updateMainWindowTitle();
}
bool ProjectContentComponent::goToPreviousFile()
@@ -493,7 +494,23 @@ void ProjectContentComponent::deleteSelectedTreeItems()
void ProjectContentComponent::updateMainWindowTitle()
{
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)


Loading…
Cancel
Save