summaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
authorcon <qtc-committer@nokia.com>2010-03-19 10:28:05 +0100
committercon <qtc-committer@nokia.com>2010-03-22 16:01:55 +0100
commitd6061a23e16bfa1f76cf9a153d3d5a923bb0fa59 (patch)
treecaccfe93f588b3282af3c4be209dc755a5f7cc83 /src/plugins
parent5bc886c5b643d69c841005777538e24cb223d75d (diff)
downloadqt-creator-d6061a23e16bfa1f76cf9a153d3d5a923bb0fa59.tar.gz
Refactor the externally modified file handling
Reviewed-by: dt
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/bineditor/bineditorplugin.cpp48
-rw-r--r--src/plugins/bineditor/imageviewer.cpp41
-rw-r--r--src/plugins/bineditor/imageviewer.h3
-rw-r--r--src/plugins/cmakeprojectmanager/cmakeproject.cpp12
-rw-r--r--src/plugins/cmakeprojectmanager/cmakeproject.h4
-rw-r--r--src/plugins/coreplugin/editormanager/editormanager.cpp19
-rw-r--r--src/plugins/coreplugin/editormanager/editormanager.h4
-rw-r--r--src/plugins/coreplugin/filemanager.cpp139
-rw-r--r--src/plugins/coreplugin/generalsettings.cpp4
-rw-r--r--src/plugins/coreplugin/generalsettings.ui6
-rw-r--r--src/plugins/coreplugin/ifile.h32
-rw-r--r--src/plugins/designer/formwindowfile.cpp47
-rw-r--r--src/plugins/designer/formwindowfile.h3
-rw-r--r--src/plugins/genericprojectmanager/genericproject.cpp11
-rw-r--r--src/plugins/genericprojectmanager/genericproject.h3
-rw-r--r--src/plugins/projectexplorer/session.cpp14
-rw-r--r--src/plugins/qmlprojectmanager/qmlprojectfile.cpp11
-rw-r--r--src/plugins/qmlprojectmanager/qmlprojectfile.h3
-rw-r--r--src/plugins/qt4projectmanager/qt4nodes.cpp18
-rw-r--r--src/plugins/qt4projectmanager/qt4nodes.h3
-rw-r--r--src/plugins/qt4projectmanager/qt4project.cpp11
-rw-r--r--src/plugins/qt4projectmanager/qt4project.h3
-rw-r--r--src/plugins/resourceeditor/resourceeditorw.cpp48
-rw-r--r--src/plugins/resourceeditor/resourceeditorw.h3
-rw-r--r--src/plugins/texteditor/basetextdocument.cpp46
-rw-r--r--src/plugins/texteditor/basetextdocument.h3
-rw-r--r--src/plugins/vcsbase/submiteditorfile.cpp13
-rw-r--r--src/plugins/vcsbase/submiteditorfile.h4
28 files changed, 334 insertions, 222 deletions
diff --git a/src/plugins/bineditor/bineditorplugin.cpp b/src/plugins/bineditor/bineditorplugin.cpp
index 012ac0bccd..432df20a97 100644
--- a/src/plugins/bineditor/bineditorplugin.cpp
+++ b/src/plugins/bineditor/bineditorplugin.cpp
@@ -47,6 +47,7 @@
#include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/editormanager/ieditor.h>
#include <coreplugin/icore.h>
+#include <coreplugin/ifile.h>
#include <coreplugin/mimedatabase.h>
#include <coreplugin/uniqueidmanager.h>
#include <extensionsystem/pluginmanager.h>
@@ -251,41 +252,24 @@ public:
bool isSaveAsAllowed() const { return true; }
- void modified(ReloadBehavior *behavior) {
- const QString fileName = m_fileName;
+ ReloadBehavior reloadBehavior(ChangeTrigger state, ChangeType type) const {
+ if (type == TypePermissions)
+ return BehaviorSilent;
+ if (type == TypeContents) {
+ if (state == TriggerInternal && !isModified())
+ return BehaviorSilent;
+ return BehaviorAsk;
+ }
+ return BehaviorAsk;
+ }
- switch (*behavior) {
- case Core::IFile::ReloadNone:
- return;
- case Core::IFile::ReloadUnmodified:
- if (!isModified()) {
- open(fileName);
- return;
- }
- break;
- case Core::IFile::ReloadAll:
- open(fileName);
+ void reload(ReloadFlag flag, ChangeType type) {
+ if (flag == FlagIgnore)
return;
- case Core::IFile::ReloadPermissions:
+ if (type == TypePermissions) {
emit changed();
- return;
- case Core::IFile::AskForReload:
- break;
- }
-
- switch (Utils::reloadPrompt(fileName, isModified(), Core::ICore::instance()->mainWindow())) {
- case Utils::ReloadCurrent:
- open(fileName);
- break;
- case Utils::ReloadAll:
- open(fileName);
- *behavior = Core::IFile::ReloadAll;
- break;
- case Utils::ReloadSkipCurrent:
- break;
- case Utils::ReloadNone:
- *behavior = Core::IFile::ReloadNone;
- break;
+ } else {
+ open(m_fileName);
}
}
diff --git a/src/plugins/bineditor/imageviewer.cpp b/src/plugins/bineditor/imageviewer.cpp
index f465d5b805..94adaef587 100644
--- a/src/plugins/bineditor/imageviewer.cpp
+++ b/src/plugins/bineditor/imageviewer.cpp
@@ -114,34 +114,25 @@ ImageViewerFile::ImageViewerFile(ImageViewer *parent)
}
-void ImageViewerFile::modified(ReloadBehavior * behavior)
+Core::IFile::ReloadBehavior ImageViewerFile::reloadBehavior(Core::IFile::ChangeTrigger state,
+ Core::IFile::ChangeType type) const
{
- switch (*behavior) {
- case Core::IFile::ReloadNone:
- return;
- case Core::IFile::ReloadUnmodified:
- case Core::IFile::ReloadAll:
- m_editor->open(m_fileName);
- return;
- case Core::IFile::ReloadPermissions:
- return;
- case Core::IFile::AskForReload:
- break;
- }
+ if (type == TypePermissions)
+ return BehaviorSilent;
+ if (type == TypeContents && state == TriggerInternal)
+ return BehaviorSilent;
+ return BehaviorAsk;
+}
- switch (Utils::reloadPrompt(m_fileName, isModified(), Core::ICore::instance()->mainWindow())) {
- case Utils::ReloadCurrent:
- m_editor->open(m_fileName);
- break;
- case Utils::ReloadAll:
+void ImageViewerFile::reload(Core::IFile::ReloadFlag flag,
+ Core::IFile::ChangeType type)
+{
+ if (flag == FlagIgnore)
+ return;
+ if (type == TypePermissions) {
+ emit changed();
+ } else {
m_editor->open(m_fileName);
- *behavior = Core::IFile::ReloadAll;
- break;
- case Utils::ReloadSkipCurrent:
- break;
- case Utils::ReloadNone:
- *behavior = Core::IFile::ReloadNone;
- break;
}
}
diff --git a/src/plugins/bineditor/imageviewer.h b/src/plugins/bineditor/imageviewer.h
index c7cdbd81b5..edaa9d86d3 100644
--- a/src/plugins/bineditor/imageviewer.h
+++ b/src/plugins/bineditor/imageviewer.h
@@ -80,7 +80,8 @@ public:
bool isReadOnly() const { return true; }
bool isSaveAsAllowed() const { return false; }
- void modified(ReloadBehavior *behavior);
+ ReloadBehavior reloadBehavior(ChangeTrigger state, ChangeType type) const;
+ void reload(ReloadFlag flag, ChangeType type);
void checkPermissions() {}
diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp
index b4304bb60a..0ef66e8f20 100644
--- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp
@@ -598,9 +598,17 @@ bool CMakeFile::isSaveAsAllowed() const
return false;
}
-void CMakeFile::modified(ReloadBehavior *behavior)
+Core::IFile::ReloadBehavior CMakeFile::reloadBehavior(ChangeTrigger state, ChangeType type) const
{
- Q_UNUSED(behavior)
+ Q_UNUSED(state)
+ Q_UNUSED(type)
+ return BehaviorSilent;
+}
+
+void CMakeFile::reload(ReloadFlag flag, ChangeType type)
+{
+ Q_UNUSED(flag)
+ Q_UNUSED(type)
}
CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeProject *project)
diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.h b/src/plugins/cmakeprojectmanager/cmakeproject.h
index 3f4a148abf..62612c0f7c 100644
--- a/src/plugins/cmakeprojectmanager/cmakeproject.h
+++ b/src/plugins/cmakeprojectmanager/cmakeproject.h
@@ -193,7 +193,9 @@ public:
bool isReadOnly() const;
bool isSaveAsAllowed() const;
- void modified(ReloadBehavior *behavior);
+ ReloadBehavior reloadBehavior(ChangeTrigger state, ChangeType type) const;
+ void reload(ReloadFlag flag, ChangeType type);
+
private:
CMakeProject *m_project;
QString m_fileName;
diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp
index 1242e4d428..d78c62913a 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.cpp
+++ b/src/plugins/coreplugin/editormanager/editormanager.cpp
@@ -214,7 +214,7 @@ struct EditorManagerPrivate {
OpenEditorsModel *m_editorModel;
QString m_externalEditor;
- IFile::ReloadBehavior m_reloadBehavior;
+ IFile::ReloadSetting m_reloadSetting;
};
}
@@ -235,7 +235,7 @@ EditorManagerPrivate::EditorManagerPrivate(ICore *core, QWidget *parent) :
m_openInExternalEditorAction(new QAction(EditorManager::tr("Open in External Editor"), parent)),
m_windowPopup(0),
m_coreListener(0),
- m_reloadBehavior(IFile::AskForReload)
+ m_reloadSetting(IFile::AlwaysAsk)
{
m_editorModel = new OpenEditorsModel(parent);
}
@@ -1716,7 +1716,7 @@ void EditorManager::saveSettings()
SettingsDatabase *settings = m_d->m_core->settingsDatabase();
settings->setValue(QLatin1String(documentStatesKey), m_d->m_editorStates);
settings->setValue(QLatin1String(externalEditorKey), m_d->m_externalEditor);
- settings->setValue(QLatin1String(reloadBehaviorKey), m_d->m_reloadBehavior);
+ settings->setValue(QLatin1String(reloadBehaviorKey), m_d->m_reloadSetting);
}
void EditorManager::readSettings()
@@ -1741,7 +1741,7 @@ void EditorManager::readSettings()
m_d->m_externalEditor = settings->value(QLatin1String(externalEditorKey)).toString();
if (settings->contains(QLatin1String(reloadBehaviorKey)))
- m_d->m_reloadBehavior = (IFile::ReloadBehavior)settings->value(QLatin1String(reloadBehaviorKey)).toInt();
+ m_d->m_reloadSetting = (IFile::ReloadSetting)settings->value(QLatin1String(reloadBehaviorKey)).toInt();
}
@@ -1765,8 +1765,7 @@ void EditorManager::revertToSaved()
return;
}
- IFile::ReloadBehavior temp = IFile::ReloadAll;
- currEditor->file()->modified(&temp);
+ currEditor->file()->reload(IFile::FlagReload, IFile::TypeContents);
}
void EditorManager::showEditorInfoBar(const QString &id,
@@ -1899,14 +1898,14 @@ QString EditorManager::externalEditor() const
return m_d->m_externalEditor;
}
-void EditorManager::setReloadBehavior(IFile::ReloadBehavior behavior)
+void EditorManager::setReloadSetting(IFile::ReloadSetting behavior)
{
- m_d->m_reloadBehavior = behavior;
+ m_d->m_reloadSetting = behavior;
}
-IFile::ReloadBehavior EditorManager::reloadBehavior() const
+IFile::ReloadSetting EditorManager::reloadSetting() const
{
- return m_d->m_reloadBehavior;
+ return m_d->m_reloadSetting;
}
Core::IEditor *EditorManager::duplicateEditor(Core::IEditor *editor)
diff --git a/src/plugins/coreplugin/editormanager/editormanager.h b/src/plugins/coreplugin/editormanager/editormanager.h
index f3deeb6812..a762364f6c 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.h
+++ b/src/plugins/coreplugin/editormanager/editormanager.h
@@ -185,8 +185,8 @@ public:
QString defaultExternalEditor() const;
QString externalEditorHelpText() const;
- void setReloadBehavior(IFile::ReloadBehavior behavior);
- IFile::ReloadBehavior reloadBehavior() const;
+ void setReloadSetting(IFile::ReloadSetting behavior);
+ IFile::ReloadSetting reloadSetting() const;
// Helper to display a message dialog when encountering a read-only
// file, prompting the user about how to make it writeable.
diff --git a/src/plugins/coreplugin/filemanager.cpp b/src/plugins/coreplugin/filemanager.cpp
index cc8068cd10..d3f6a0b6ed 100644
--- a/src/plugins/coreplugin/filemanager.cpp
+++ b/src/plugins/coreplugin/filemanager.cpp
@@ -40,6 +40,7 @@
#include <utils/qtcassert.h>
#include <utils/pathchooser.h>
+#include <utils/reloadpromptutils.h>
#include <QtCore/QSettings>
#include <QtCore/QFileInfo>
@@ -227,8 +228,9 @@ void FileManager::addFileInfo(IFile *file)
if (!d->m_states.contains(fixedname)) {
d->m_states.insert(fixedname, Internal::FileState());
- if (!fixedname.isEmpty())
+ if (!fixedname.isEmpty()) {
d->m_fileWatcher->addPath(fixedname);
+ }
}
d->m_states[fixedname].lastUpdatedState.insert(file, item);
@@ -278,8 +280,9 @@ void FileManager::removeFileInfo(const QString &fileName, IFile *file)
if (d->m_states.value(fixedName).lastUpdatedState.isEmpty()) {
d->m_states.remove(fixedName);
- if (!fixedName.isEmpty())
+ if (!fixedName.isEmpty()) {
d->m_fileWatcher->removePath(fixedName);
+ }
}
}
@@ -341,7 +344,9 @@ void FileManager::checkForNewFileName()
// check if the IFile is in the map
if (d->m_states.value(fileName).lastUpdatedState.contains(file)) {
- // Should checkForNewFileName also call updateFileInfo if the name didn't change?
+ // the file might have been deleted and written again, so guard against that
+ d->m_fileWatcher->removePath(fileName);
+ d->m_fileWatcher->addPath(fileName);
updateFileInfo(file);
return;
}
@@ -718,17 +723,25 @@ void FileManager::checkForReload()
d->m_blockActivated = true;
- IFile::ReloadBehavior behavior = EditorManager::instance()->reloadBehavior();
+ IFile::ReloadSetting defaultBehavior = EditorManager::instance()->reloadSetting();
+ Utils::ReloadPromptAnswer previousAnswer = Utils::ReloadCurrent;
- QStringList allFileNames;
- foreach(const QString &fileName, d->m_changedFiles) {
- allFileNames << fileName;
+ QList<IEditor*> editorsToClose;
+ QMap<IFile*, QString> filesToSave;
+ QStringList modifiedFileNames;
+ foreach (const QString &fileName, d->m_changedFiles) {
// Get the information from the filesystem
+ IFile::ChangeTrigger behavior = IFile::TriggerExternal;
+ IFile::ChangeType type = IFile::TypeContents;
QFileInfo fi(fileName);
- bool expected = false;
- if (fi.lastModified() == d->m_states.value(fileName).expected.modified
- && fi.permissions() == d->m_states.value(fileName).expected.permissions) {
- expected = true;
+ if (!fi.exists()) {
+ type = IFile::TypeRemoved;
+ } else {
+ modifiedFileNames << fileName;
+ if (fi.lastModified() == d->m_states.value(fileName).expected.modified
+ && fi.permissions() == d->m_states.value(fileName).expected.permissions) {
+ behavior = IFile::TriggerInternal;
+ }
}
const QMap<IFile *, Internal::FileStateItem> &lastUpdated =
@@ -736,35 +749,109 @@ void FileManager::checkForReload()
QMap<IFile *, Internal::FileStateItem>::const_iterator it, end;
it = lastUpdated.constBegin();
end = lastUpdated.constEnd();
-
for ( ; it != end; ++it) {
+ IFile *file = it.key();
// Compare
if (it.value().modified == fi.lastModified()
&& it.value().permissions == fi.permissions()) {
// Already up to date
+ continue;
+ }
+ // we've got some modification
+ // check if it's contents or permissions:
+ if (it.value().modified == fi.lastModified()) {
+ // Only permission change
+ file->reload(IFile::FlagReload, IFile::TypePermissions);
+ // now we know it's a content change or file was removed
+ } else if (defaultBehavior == IFile::ReloadUnmodified
+ && type == IFile::TypeContents && !file->isModified()) {
+ // content change, but unmodified (and settings say to reload in this case)
+ file->reload(IFile::FlagReload, type);
+ // file was removed or it's a content change and the default behavior for
+ // unmodified files didn't kick in
+ } else if (defaultBehavior == IFile::IgnoreAll) {
+ // content change or removed, but settings say ignore
+ file->reload(IFile::FlagIgnore, type);
+ // either the default behavior is to always ask,
+ // or the ReloadUnmodified default behavior didn't kick in,
+ // so do whatever the IFile wants us to do
} else {
- // Update IFile
- if (expected) {
- IFile::ReloadBehavior tempBeh = IFile::ReloadUnmodified;
- it.key()->modified(&tempBeh);
- } else {
- if (it.value().modified == fi.lastModified()) {
- // Only permission change
- IFile::ReloadBehavior tempBeh = IFile::ReloadPermissions;
- it.key()->modified(&tempBeh);
+ // check if IFile wants us to ask
+ if (file->reloadBehavior(behavior, type) == IFile::BehaviorSilent) {
+ // content change or removed, IFile wants silent handling
+ file->reload(IFile::FlagReload, type);
+ // IFile wants us to ask
+ } else if (type == IFile::TypeContents) {
+ // content change, IFile wants to ask user
+ if (previousAnswer == Utils::ReloadNone) {
+ // answer already given, ignore
+ file->reload(IFile::FlagIgnore, IFile::TypeContents);
+ } else if (previousAnswer == Utils::ReloadAll) {
+ // answer already given, reload
+ file->reload(IFile::FlagReload, IFile::TypeContents);
} else {
- it.key()->modified(&behavior);
+ // Ask about content change
+ previousAnswer = Utils::reloadPrompt(fileName, file->isModified(), QApplication::activeWindow());
+ switch (previousAnswer) {
+ case Utils::ReloadAll:
+ case Utils::ReloadCurrent:
+ file->reload(IFile::FlagReload, IFile::TypeContents);
+ break;
+ case Utils::ReloadSkipCurrent:
+ case Utils::ReloadNone:
+ file->reload(IFile::FlagIgnore, IFile::TypeContents);
+ break;
+ }
+ }
+ // IFile wants us to ask, and it's the TypeRemoved case
+ } else {
+ // Ask about removed file
+ bool unhandled = true;
+ while (unhandled) {
+ switch (Utils::fileDeletedPrompt(fileName, QApplication::activeWindow())) {
+ case Utils::FileDeletedSave:
+ filesToSave.insert(file, fileName);
+ unhandled = false;
+ break;
+ case Utils::FileDeletedSaveAs:
+ {
+ const QString &saveFileName = getSaveAsFileName(file);
+ if (!saveFileName.isEmpty()) {
+ filesToSave.insert(file, saveFileName);
+ unhandled = false;
+ }
+ break;
+ }
+ case Utils::FileDeletedClose:
+ editorsToClose << EditorManager::instance()->editorsForFile(file);
+ unhandled = false;
+ break;
+ }
}
}
- updateFileInfo(it.key());
}
+
+ updateFileInfo(file);
}
}
- if (!allFileNames.isEmpty()) {
- d->m_fileWatcher->removePaths(allFileNames);
- d->m_fileWatcher->addPaths(allFileNames);
+
+ // cleanup
+ if (!modifiedFileNames.isEmpty()) {
+ d->m_fileWatcher->removePaths(modifiedFileNames);
+ d->m_fileWatcher->addPaths(modifiedFileNames);
}
d->m_changedFiles.clear();
+
+ // handle deleted files
+ EditorManager::instance()->closeEditors(editorsToClose, false);
+ QMapIterator<IFile *, QString> it(filesToSave);
+ while (it.hasNext()) {
+ it.next();
+ blockFileChange(it.key());
+ it.key()->save(it.value());
+ unblockFileChange(it.key());
+ }
+
d->m_blockActivated = false;
}
diff --git a/src/plugins/coreplugin/generalsettings.cpp b/src/plugins/coreplugin/generalsettings.cpp
index 8abfe9a36b..da2c7d59c7 100644
--- a/src/plugins/coreplugin/generalsettings.cpp
+++ b/src/plugins/coreplugin/generalsettings.cpp
@@ -124,7 +124,7 @@ QWidget *GeneralSettings::createPage(QWidget *parent)
fillLanguageBox();
m_page->colorButton->setColor(StyleHelper::requestedBaseColor());
m_page->externalEditorEdit->setText(EditorManager::instance()->externalEditor());
- m_page->reloadBehavior->setCurrentIndex(EditorManager::instance()->reloadBehavior());
+ m_page->reloadBehavior->setCurrentIndex(EditorManager::instance()->reloadSetting());
#ifdef Q_OS_UNIX
m_page->terminalEdit->setText(ConsoleProcess::terminalEmulator(settings));
#else
@@ -182,7 +182,7 @@ void GeneralSettings::apply()
// Apply the new base color if accepted
StyleHelper::setBaseColor(m_page->colorButton->color());
EditorManager::instance()->setExternalEditor(m_page->externalEditorEdit->text());
- EditorManager::instance()->setReloadBehavior(IFile::ReloadBehavior(m_page->reloadBehavior->currentIndex()));
+ EditorManager::instance()->setReloadSetting(IFile::ReloadSetting(m_page->reloadBehavior->currentIndex()));
#ifdef Q_OS_UNIX
ConsoleProcess::setTerminalEmulator(Core::ICore::instance()->settings(),
m_page->terminalEdit->text());
diff --git a/src/plugins/coreplugin/generalsettings.ui b/src/plugins/coreplugin/generalsettings.ui
index 18d9dd2d0b..a143b0eddd 100644
--- a/src/plugins/coreplugin/generalsettings.ui
+++ b/src/plugins/coreplugin/generalsettings.ui
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>487</width>
- <height>319</height>
+ <width>492</width>
+ <height>339</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
@@ -234,7 +234,7 @@
</item>
<item>
<property name="text">
- <string>Reload all modified files</string>
+ <string>Reload all unmodified files</string>
</property>
</item>
<item>
diff --git a/src/plugins/coreplugin/ifile.h b/src/plugins/coreplugin/ifile.h
index 59d37bf49d..575cac9488 100644
--- a/src/plugins/coreplugin/ifile.h
+++ b/src/plugins/coreplugin/ifile.h
@@ -44,12 +44,31 @@ class CORE_EXPORT IFile : public QObject
public:
// This enum must match the indexes of the reloadBehavior widget
// in generalsettings.ui
- enum ReloadBehavior {
- AskForReload = 0,
+ enum ReloadSetting {
+ AlwaysAsk = 0,
ReloadUnmodified = 1,
- ReloadNone = 2,
- ReloadAll,
- ReloadPermissions
+ IgnoreAll = 2
+ };
+
+ enum ChangeTrigger {
+ TriggerInternal,
+ TriggerExternal
+ };
+
+ enum ChangeType {
+ TypeContents,
+ TypePermissions,
+ TypeRemoved
+ };
+
+ enum ReloadBehavior {
+ BehaviorAsk,
+ BehaviorSilent
+ };
+
+ enum ReloadFlag {
+ FlagReload,
+ FlagIgnore
};
IFile(QObject *parent = 0) : QObject(parent) {}
@@ -66,7 +85,8 @@ public:
virtual bool isReadOnly() const = 0;
virtual bool isSaveAsAllowed() const = 0;
- virtual void modified(ReloadBehavior *behavior) = 0;
+ virtual ReloadBehavior reloadBehavior(ChangeTrigger state, ChangeType type) const = 0;
+ virtual void reload(ReloadFlag flag, ChangeType type) = 0;
virtual void checkPermissions() {}
diff --git a/src/plugins/designer/formwindowfile.cpp b/src/plugins/designer/formwindowfile.cpp
index 6851d5ed93..e95e4b92be 100644
--- a/src/plugins/designer/formwindowfile.cpp
+++ b/src/plugins/designer/formwindowfile.cpp
@@ -111,43 +111,26 @@ bool FormWindowFile::isSaveAsAllowed() const
return true;
}
-void FormWindowFile::modified(Core::IFile::ReloadBehavior *behavior)
+Core::IFile::ReloadBehavior FormWindowFile::reloadBehavior(ChangeTrigger state, ChangeType type) const
{
- if (Designer::Constants::Internal::debug)
- qDebug() << Q_FUNC_INFO << m_fileName << *behavior;
+ if (type == TypePermissions)
+ return BehaviorSilent;
+ if (type == TypeContents) {
+ if (state == TriggerInternal && !isModified())
+ return BehaviorSilent;
+ return BehaviorAsk;
+ }
+ return BehaviorAsk;
+}
- switch (*behavior) {
- case Core::IFile::ReloadNone:
- return;
- case Core::IFile::ReloadUnmodified:
- if (!isModified()) {
- reload(m_fileName);
- return;
- }
- break;
- case Core::IFile::ReloadAll:
- emit reload(m_fileName);
+void FormWindowFile::reload(ReloadFlag flag, ChangeType type)
+{
+ if (flag == FlagIgnore)
return;
- case Core::IFile::ReloadPermissions:
+ if (type == TypePermissions) {
emit changed();
- return;
- case Core::IFile::AskForReload:
- break;
- }
-
- switch (Utils::reloadPrompt(m_fileName, isModified(), Core::ICore::instance()->mainWindow())) {
- case Utils::ReloadCurrent:
- emit reload(m_fileName);
- break;
- case Utils::ReloadAll:
+ } else {
emit reload(m_fileName);
- *behavior = Core::IFile::ReloadAll;
- break;
- case Utils::ReloadSkipCurrent:
- break;
- case Utils::ReloadNone:
- *behavior = Core::IFile::ReloadNone;
- break;
}
}
diff --git a/src/plugins/designer/formwindowfile.h b/src/plugins/designer/formwindowfile.h
index 5c08cc8b73..5ac62ac4f0 100644
--- a/src/plugins/designer/formwindowfile.h
+++ b/src/plugins/designer/formwindowfile.h
@@ -55,7 +55,8 @@ public:
virtual bool isModified() const;
virtual bool isReadOnly() const;
virtual bool isSaveAsAllowed() const;
- virtual void modified(Core::IFile::ReloadBehavior *behavior);
+ ReloadBehavior reloadBehavior(ChangeTrigger state, ChangeType type) const;
+ void reload(ReloadFlag flag, ChangeType type);
virtual QString defaultPath() const;
virtual QString suggestedFileName() const;
virtual QString mimeType() const;
diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp
index ffbfa38630..88af20a68f 100644
--- a/src/plugins/genericprojectmanager/genericproject.cpp
+++ b/src/plugins/genericprojectmanager/genericproject.cpp
@@ -579,6 +579,15 @@ bool GenericProjectFile::isSaveAsAllowed() const
return false;
}
-void GenericProjectFile::modified(ReloadBehavior *)
+Core::IFile::ReloadBehavior GenericProjectFile::reloadBehavior(ChangeTrigger state, ChangeType type) const
{
+ Q_UNUSED(state)
+ Q_UNUSED(type)
+ return BehaviorSilent;
+}
+
+void GenericProjectFile::reload(ReloadFlag flag, ChangeType type)
+{
+ Q_UNUSED(flag)
+ Q_UNUSED(type)
}
diff --git a/src/plugins/genericprojectmanager/genericproject.h b/src/plugins/genericprojectmanager/genericproject.h
index 1d44268c8f..124ae9f144 100644
--- a/src/plugins/genericprojectmanager/genericproject.h
+++ b/src/plugins/genericprojectmanager/genericproject.h
@@ -163,7 +163,8 @@ public:
virtual bool isReadOnly() const;
virtual bool isSaveAsAllowed() const;
- virtual void modified(ReloadBehavior *behavior);
+ ReloadBehavior reloadBehavior(ChangeTrigger state, ChangeType type) const;
+ void reload(ReloadFlag flag, ChangeType type);
private:
GenericProject *m_project;
diff --git a/src/plugins/projectexplorer/session.cpp b/src/plugins/projectexplorer/session.cpp
index 54618da9b2..2f2c7340f7 100644
--- a/src/plugins/projectexplorer/session.cpp
+++ b/src/plugins/projectexplorer/session.cpp
@@ -89,7 +89,8 @@ public:
bool isReadOnly() const;
bool isSaveAsAllowed() const;
- void modified(Core::IFile::ReloadBehavior *behavior);
+ ReloadBehavior reloadBehavior(ChangeTrigger state, ChangeType type) const;
+ void reload(ReloadFlag flag, ChangeType type);
public slots:
void sessionLoadingProgress();
@@ -320,8 +321,17 @@ bool SessionFile::isSaveAsAllowed() const
return true;
}
-void SessionFile::modified(Core::IFile::ReloadBehavior *)
+Core::IFile::ReloadBehavior SessionFile::reloadBehavior(ChangeTrigger state, ChangeType type) const
{
+ Q_UNUSED(state)
+ Q_UNUSED(type)
+ return BehaviorSilent;
+}
+
+void SessionFile::reload(ReloadFlag flag, ChangeType type)
+{
+ Q_UNUSED(flag)
+ Q_UNUSED(type)
}
QString SessionFile::defaultPath() const
diff --git a/src/plugins/qmlprojectmanager/qmlprojectfile.cpp b/src/plugins/qmlprojectmanager/qmlprojectfile.cpp
index 17c8681a0d..3bc827879f 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectfile.cpp
+++ b/src/plugins/qmlprojectmanager/qmlprojectfile.cpp
@@ -83,8 +83,17 @@ bool QmlProjectFile::isSaveAsAllowed() const
return false;
}
-void QmlProjectFile::modified(ReloadBehavior *)
+Core::IFile::ReloadBehavior QmlProjectFile::reloadBehavior(ChangeTrigger state, ChangeType type) const
{
+ Q_UNUSED(state)
+ Q_UNUSED(type)
+ return BehaviorSilent;
+}
+
+void QmlProjectFile::reload(ReloadFlag flag, ChangeType type)
+{
+ Q_UNUSED(flag)
+ Q_UNUSED(type)
}
} // namespace Internal
diff --git a/src/plugins/qmlprojectmanager/qmlprojectfile.h b/src/plugins/qmlprojectmanager/qmlprojectfile.h
index 81a54c89cb..b01c4f76bd 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectfile.h
+++ b/src/plugins/qmlprojectmanager/qmlprojectfile.h
@@ -57,7 +57,8 @@ public:
virtual bool isReadOnly() const;
virtual bool isSaveAsAllowed() const;
- virtual void modified(ReloadBehavior *behavior);
+ ReloadBehavior reloadBehavior(ChangeTrigger state, ChangeType type) const;
+ void reload(ReloadFlag flag, ChangeType type);
private:
QmlProject *m_project;
diff --git a/src/plugins/qt4projectmanager/qt4nodes.cpp b/src/plugins/qt4projectmanager/qt4nodes.cpp
index c13141e2bc..fc705baeae 100644
--- a/src/plugins/qt4projectmanager/qt4nodes.cpp
+++ b/src/plugins/qt4projectmanager/qt4nodes.cpp
@@ -207,12 +207,21 @@ bool Qt4PriFile::isSaveAsAllowed() const
return false;
}
-void Qt4PriFile::modified(Core::IFile::ReloadBehavior *behavior)
+Core::IFile::ReloadBehavior Qt4PriFile::reloadBehavior(ChangeTrigger state, ChangeType type) const
{
- Q_UNUSED(behavior);
- m_priFile->scheduleUpdate();
+ Q_UNUSED(state)
+ Q_UNUSED(type)
+ return BehaviorSilent;
}
+void Qt4PriFile::reload(ReloadFlag flag, ChangeType type)
+{
+ Q_UNUSED(flag)
+ Q_UNUSED(type)
+ if (type == TypePermissions)
+ return;
+ m_priFile->scheduleUpdate();
+}
/*!
\class Qt4PriFileNode
@@ -725,8 +734,7 @@ void Qt4PriFileNode::changeFiles(const FileType fileType,
// (The .pro files are notified by the file system watcher)
foreach (Core::IEditor *editor, Core::ICore::instance()->editorManager()->editorsForFileName(m_projectFilePath)) {
if (Core::IFile *editorFile = editor->file()) {
- Core::IFile::ReloadBehavior b = Core::IFile::ReloadUnmodified;
- editorFile->modified(&b);
+ editorFile->reload(Core::IFile::FlagReload, Core::IFile::TypeContents);
}
}
diff --git a/src/plugins/qt4projectmanager/qt4nodes.h b/src/plugins/qt4projectmanager/qt4nodes.h
index ea9216a617..c48de9d0c7 100644
--- a/src/plugins/qt4projectmanager/qt4nodes.h
+++ b/src/plugins/qt4projectmanager/qt4nodes.h
@@ -113,7 +113,8 @@ public:
virtual bool isReadOnly() const;
virtual bool isSaveAsAllowed() const;
- virtual void modified(Core::IFile::ReloadBehavior *behavior);
+ ReloadBehavior reloadBehavior(ChangeTrigger state, ChangeType type) const;
+ void reload(ReloadFlag flag, ChangeType type);
private:
Qt4PriFileNode *m_priFile;
diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp
index ae7ea1e62c..536080086f 100644
--- a/src/plugins/qt4projectmanager/qt4project.cpp
+++ b/src/plugins/qt4projectmanager/qt4project.cpp
@@ -216,8 +216,17 @@ bool Qt4ProjectFile::isSaveAsAllowed() const
return false;
}
-void Qt4ProjectFile::modified(Core::IFile::ReloadBehavior *)
+Core::IFile::ReloadBehavior Qt4ProjectFile::reloadBehavior(ChangeTrigger state, ChangeType type) const
{
+ Q_UNUSED(state)
+ Q_UNUSED(type)
+ return BehaviorSilent;
+}
+
+void Qt4ProjectFile::reload(ReloadFlag flag, ChangeType type)
+{
+ Q_UNUSED(flag)
+ Q_UNUSED(type)
}
/*!
diff --git a/src/plugins/qt4projectmanager/qt4project.h b/src/plugins/qt4projectmanager/qt4project.h
index 02f540bfaa..0d85df2292 100644
--- a/src/plugins/qt4projectmanager/qt4project.h
+++ b/src/plugins/qt4projectmanager/qt4project.h
@@ -97,7 +97,8 @@ public:
bool isReadOnly() const;
bool isSaveAsAllowed() const;
- void modified(Core::IFile::ReloadBehavior *behavior);
+ ReloadBehavior reloadBehavior(ChangeTrigger state, ChangeType type) const;
+ void reload(ReloadFlag flag, ChangeType type);
private:
const QString m_mimeType;
diff --git a/src/plugins/resourceeditor/resourceeditorw.cpp b/src/plugins/resourceeditor/resourceeditorw.cpp
index df993a58fa..7fde0e20ae 100644
--- a/src/plugins/resourceeditor/resourceeditorw.cpp
+++ b/src/plugins/resourceeditor/resourceeditorw.cpp
@@ -185,42 +185,26 @@ bool ResourceEditorFile::isSaveAsAllowed() const
return true;
}
-void ResourceEditorFile::modified(Core::IFile::ReloadBehavior *behavior)
+Core::IFile::ReloadBehavior ResourceEditorFile::reloadBehavior(ChangeTrigger state, ChangeType type) const
{
- const QString fileName = m_parent->m_resourceEditor->fileName();
+ if (type == TypePermissions)
+ return BehaviorSilent;
+ if (type == TypeContents) {
+ if (state == TriggerInternal && !isModified())
+ return BehaviorSilent;
+ return BehaviorAsk;
+ }
+ return BehaviorAsk;
+}
- switch (*behavior) {
- case Core::IFile::ReloadNone:
- return;
- case Core::IFile::ReloadUnmodified:
- if (!isModified()) {
- m_parent->open(fileName);
- return;
- }
- break;
- case Core::IFile::ReloadAll:
- m_parent->open(fileName);
+void ResourceEditorFile::reload(ReloadFlag flag, ChangeType type)
+{
+ if (flag == FlagIgnore)
return;
- case Core::IFile::ReloadPermissions:
+ if (type == TypePermissions) {
emit changed();
- return;
- case Core::IFile::AskForReload:
- break;
- }
-
- switch (Utils::reloadPrompt(fileName, isModified(), Core::ICore::instance()->mainWindow())) {
- case Utils::ReloadCurrent:
- m_parent->open(fileName);
- break;
- case Utils::ReloadAll:
- m_parent->open(fileName);
- *behavior = Core::IFile::ReloadAll;
- break;
- case Utils::ReloadSkipCurrent:
- break;
- case Utils::ReloadNone:
- *behavior = Core::IFile::ReloadNone;
- break;
+ } else {
+ m_parent->open(m_parent->m_resourceEditor->fileName());
}
}
diff --git a/src/plugins/resourceeditor/resourceeditorw.h b/src/plugins/resourceeditor/resourceeditorw.h
index f8b275d6ef..e0a2e5f7b2 100644
--- a/src/plugins/resourceeditor/resourceeditorw.h
+++ b/src/plugins/resourceeditor/resourceeditorw.h
@@ -62,7 +62,8 @@ public:
bool isModified() const;
bool isReadOnly() const;
bool isSaveAsAllowed() const;
- void modified(Core::IFile::ReloadBehavior *behavior);
+ ReloadBehavior reloadBehavior(ChangeTrigger state, ChangeType type) const;
+ void reload(ReloadFlag flag, ChangeType type);
QString defaultPath() const;
QString suggestedFileName() const;
virtual QString mimeType() const;
diff --git a/src/plugins/texteditor/basetextdocument.cpp b/src/plugins/texteditor/basetextdocument.cpp
index 70997f5b02..e037767740 100644
--- a/src/plugins/texteditor/basetextdocument.cpp
+++ b/src/plugins/texteditor/basetextdocument.cpp
@@ -248,40 +248,26 @@ void BaseTextDocument::reload()
emit reloaded();
}
-void BaseTextDocument::modified(Core::IFile::ReloadBehavior *behavior)
+Core::IFile::ReloadBehavior BaseTextDocument::reloadBehavior(ChangeTrigger state, ChangeType type) const
{
- switch (*behavior) {
- case Core::IFile::ReloadNone:
- return;
- case Core::IFile::ReloadUnmodified:
- if (!isModified()) {
- reload();
- return;
- }
- break;
- case Core::IFile::ReloadAll:
- reload();
- return;
- case Core::IFile::ReloadPermissions:
- emit changed();
- return;
- case Core::IFile::AskForReload:
- break;
+ if (type == TypePermissions)
+ return BehaviorSilent;
+ if (type == TypeContents) {
+ if (state == TriggerInternal && !isModified())
+ return BehaviorSilent;
+ return BehaviorAsk;
}
+ return BehaviorAsk;
+}
- switch (Utils::reloadPrompt(m_fileName, isModified(), QApplication::activeWindow())) {
- case Utils::ReloadCurrent:
- reload();
- break;
- case Utils::ReloadAll:
+void BaseTextDocument::reload(ReloadFlag flag, ChangeType type)
+{
+ if (flag == FlagIgnore)
+ return;
+ if (type == TypePermissions) {
+ emit changed();
+ } else {
reload();
- *behavior = Core::IFile::ReloadAll;
- break;
- case Utils::ReloadSkipCurrent:
- break;
- case Utils::ReloadNone:
- *behavior = Core::IFile::ReloadNone;
- break;
}
}
diff --git a/src/plugins/texteditor/basetextdocument.h b/src/plugins/texteditor/basetextdocument.h
index 2b7852991d..2958fc3805 100644
--- a/src/plugins/texteditor/basetextdocument.h
+++ b/src/plugins/texteditor/basetextdocument.h
@@ -85,7 +85,8 @@ public:
virtual bool isModified() const;
virtual bool isSaveAsAllowed() const { return true; }
virtual void checkPermissions();
- virtual void modified(Core::IFile::ReloadBehavior *behavior);
+ ReloadBehavior reloadBehavior(ChangeTrigger state, ChangeType type) const;
+ void reload(ReloadFlag flag, ChangeType type);
virtual QString mimeType() const;
void setMimeType(const QString &mt);
diff --git a/src/plugins/vcsbase/submiteditorfile.cpp b/src/plugins/vcsbase/submiteditorfile.cpp
index a181256a39..949e30c0d9 100644
--- a/src/plugins/vcsbase/submiteditorfile.cpp
+++ b/src/plugins/vcsbase/submiteditorfile.cpp
@@ -64,3 +64,16 @@ QString SubmitEditorFile::mimeType() const
{
return m_mimeType;
}
+
+Core::IFile::ReloadBehavior SubmitEditorFile::reloadBehavior(ChangeTrigger state, ChangeType type) const
+{
+ Q_UNUSED(state)
+ Q_UNUSED(type)
+ return BehaviorSilent;
+}
+
+void SubmitEditorFile::reload(ReloadFlag flag, ChangeType type)
+{
+ Q_UNUSED(flag)
+ Q_UNUSED(type)
+}
diff --git a/src/plugins/vcsbase/submiteditorfile.h b/src/plugins/vcsbase/submiteditorfile.h
index 5e89ff5337..e5c489c8b5 100644
--- a/src/plugins/vcsbase/submiteditorfile.h
+++ b/src/plugins/vcsbase/submiteditorfile.h
@@ -52,7 +52,9 @@ public:
bool isReadOnly() const { return false; }
bool isSaveAsAllowed() const { return false; }
bool save(const QString &fileName);
- void modified(ReloadBehavior * /*behavior*/) { return; }
+ ReloadBehavior reloadBehavior(ChangeTrigger state, ChangeType type) const;
+ void reload(ReloadFlag flag, ChangeType type);
+
void setFileName(const QString name);
void setModified(bool modified = true);