From 8c2e3fd2cbaeb1178ae3991de794ee6d74c84d85 Mon Sep 17 00:00:00 2001 From: Eike Ziller <eike.ziller@digia.com> Date: Thu, 18 Jul 2013 12:26:23 +0200 Subject: [PATCH] Fix usage of EditorManager::editorsForFileName And move to using the corresponding method in document model. Change-Id: I80b12ceab8a91c5393b9c0422d660a8896ae09d8 Reviewed-by: Tobias Hunger <tobias.hunger@digia.com> --- src/plugins/coreplugin/documentmanager.cpp | 6 +-- .../editormanager/editormanager.cpp | 23 +++-------- .../coreplugin/editormanager/editormanager.h | 4 +- .../debugger/qml/qmlinspectoradapter.cpp | 3 +- .../debugger/qml/qmlv8debuggerclient.cpp | 7 +--- src/plugins/git/gitplugin.cpp | 9 +--- .../qmljseditor/qmljsfindreferences.cpp | 4 +- src/plugins/qt4projectmanager/qt4nodes.cpp | 41 ++++++++----------- src/plugins/texteditor/basetextmark.cpp | 15 +++---- src/plugins/vcsbase/vcsbaseeditor.cpp | 14 ++----- src/plugins/vcsbase/vcsbaseplugin.cpp | 6 +-- 11 files changed, 47 insertions(+), 85 deletions(-) diff --git a/src/plugins/coreplugin/documentmanager.cpp b/src/plugins/coreplugin/documentmanager.cpp index dc81932f66c..b9050460deb 100644 --- a/src/plugins/coreplugin/documentmanager.cpp +++ b/src/plugins/coreplugin/documentmanager.cpp @@ -1333,14 +1333,14 @@ void DocumentManager::executeOpenWithMenuAction(QAction *action) OpenWithEntry entry = qvariant_cast<OpenWithEntry>(data); if (entry.editorFactory) { // close any open editors that have this file open, but have a different type. - EditorManager *em = EditorManager::instance(); - QList<IEditor *> editorsOpenForFile = em->editorsForFileName(entry.fileName); + QList<IEditor *> editorsOpenForFile + = EditorManager::documentModel()->editorsForFilePath(entry.fileName); if (!editorsOpenForFile.isEmpty()) { foreach (IEditor *openEditor, editorsOpenForFile) { if (entry.editorFactory->id() == openEditor->id()) editorsOpenForFile.removeAll(openEditor); } - if (!em->closeEditors(editorsOpenForFile)) // don't open if cancel was pressed + if (!EditorManager::instance()->closeEditors(editorsOpenForFile)) // don't open if cancel was pressed return; } diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index 881efab5885..4f1ed05f126 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -627,17 +627,6 @@ SplitterOrView *EditorManager::findRoot(const EditorView *view, int *rootIndex) return 0; } -QList<IEditor *> EditorManager::editorsForFileName(const QString &filename) const -{ - QList<IEditor *> found; - QString fixedname = DocumentManager::fixFileName(filename, DocumentManager::KeepLinks); - foreach (IEditor *editor, openedEditors()) { - if (fixedname == DocumentManager::fixFileName(editor->document()->filePath(), DocumentManager::KeepLinks)) - found << editor; - } - return found; -} - IDocument *EditorManager::currentDocument() { return d->m_currentEditor ? d->m_currentEditor->document() : 0; @@ -1558,7 +1547,7 @@ IEditor *EditorManager::openEditor(Core::Internal::EditorView *view, const QStri if (newEditor) *newEditor = false; - const QList<IEditor *> editors = editorsForFileName(fn); + const QList<IEditor *> editors = d->m_documentModel->editorsForFilePath(fn); if (!editors.isEmpty()) { IEditor *editor = editors.first(); if (flags & EditorManager::CanContainLineNumber) @@ -1797,9 +1786,9 @@ bool EditorManager::saveDocumentAs(IDocument *documentParam) if (absoluteFilePath != document->filePath()) { // close existing editors for the new file name - const QList<IEditor *> existList = editorsForFileName(absoluteFilePath); - if (!existList.isEmpty()) - closeEditors(existList, false); + IDocument *otherDocument = d->m_documentModel->documentForFilePath(absoluteFilePath); + if (otherDocument) + closeDocuments(QList<IDocument *>() << otherDocument, false); } const bool success = DocumentManager::saveDocument(document, absoluteFilePath); @@ -2069,9 +2058,9 @@ DocumentModel *EditorManager::documentModel() return d->m_documentModel; } -void EditorManager::closeDocuments(const QList<IDocument *> &document, bool askAboutModifiedEditors) +bool EditorManager::closeDocuments(const QList<IDocument *> &document, bool askAboutModifiedEditors) { - m_instance->closeEditors(d->m_documentModel->editorsForDocuments(document), askAboutModifiedEditors); + return m_instance->closeEditors(d->m_documentModel->editorsForDocuments(document), askAboutModifiedEditors); } void EditorManager::addCurrentPositionToNavigationHistory(IEditor *editor, const QByteArray &saveState) diff --git a/src/plugins/coreplugin/editormanager/editormanager.h b/src/plugins/coreplugin/editormanager/editormanager.h index ad7a091821e..57406c8f0e1 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.h +++ b/src/plugins/coreplugin/editormanager/editormanager.h @@ -122,8 +122,6 @@ public: QStringList getOpenFileNames() const; Id getOpenWithEditorId(const QString &fileName, bool *isExternalEditor = 0) const; - QList<IEditor *> editorsForFileName(const QString &filename) const; - static IDocument *currentDocument(); static IEditor *currentEditor(); QList<IEditor *> visibleEditors() const; @@ -135,7 +133,7 @@ public: IEditor *activateEditorForDocument(Internal::EditorView *view, IDocument *document, OpenEditorFlags flags = 0); static DocumentModel *documentModel(); - static void closeDocuments(const QList<IDocument *> &documents, bool askAboutModifiedEditors = true); + static bool closeDocuments(const QList<IDocument *> &documents, bool askAboutModifiedEditors = true); void closeEditor(DocumentModel::Entry *entry); void closeOtherEditors(IDocument *document); diff --git a/src/plugins/debugger/qml/qmlinspectoradapter.cpp b/src/plugins/debugger/qml/qmlinspectoradapter.cpp index 7ded0f0fc85..ade2eedcf0f 100644 --- a/src/plugins/debugger/qml/qmlinspectoradapter.cpp +++ b/src/plugins/debugger/qml/qmlinspectoradapter.cpp @@ -353,9 +353,8 @@ void QmlInspectorAdapter::updatePendingPreviewDocuments(QmlJS::Document::Ptr doc if (idx == -1) return; - Core::EditorManager *em = Core::EditorManager::instance(); QList<Core::IEditor *> editors - = em->editorsForFileName(doc->fileName()); + = Core::EditorManager::documentModel()->editorsForFilePath(doc->fileName()); if (editors.isEmpty()) return; diff --git a/src/plugins/debugger/qml/qmlv8debuggerclient.cpp b/src/plugins/debugger/qml/qmlv8debuggerclient.cpp index dc03a2890b6..1d51afb31f4 100644 --- a/src/plugins/debugger/qml/qmlv8debuggerclient.cpp +++ b/src/plugins/debugger/qml/qmlv8debuggerclient.cpp @@ -1998,12 +1998,7 @@ void QmlV8DebuggerClient::highlightExceptionCode(int lineNumber, const QString &filePath, const QString &errorMessage) { - DocumentModel *documentModel = EditorManager::documentModel(); - int index = documentModel->indexOfFilePath(filePath); - if (index < 0 || !documentModel->documents().at(index)->document) - return; - QList<IEditor *> editors = documentModel->editorsForDocument( - documentModel->documents().at(index)->document); + QList<IEditor *> editors = EditorManager::documentModel()->editorsForFilePath(filePath); // set up the format for the errors QTextCharFormat errorFormat; diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp index 2ee39cddf2f..6801a973900 100644 --- a/src/plugins/git/gitplugin.cpp +++ b/src/plugins/git/gitplugin.cpp @@ -1250,16 +1250,11 @@ void GitPlugin::updateSubmodules() // If the file is modified in an editor, make sure it is saved. static bool ensureFileSaved(const QString &fileName) { - const QList<Core::IEditor*> editors = Core::EditorManager::instance()->editorsForFileName(fileName); - if (editors.isEmpty()) - return true; - Core::IDocument *document = editors.front()->document(); + Core::IDocument *document = Core::EditorManager::documentModel()->documentForFilePath(fileName); if (!document || !document->isModified()) return true; bool canceled; - QList<Core::IDocument *> documents; - documents << document; - Core::DocumentManager::saveModifiedDocuments(documents, &canceled); + Core::DocumentManager::saveModifiedDocuments(QList<Core::IDocument *>() << document, &canceled); return !canceled; } diff --git a/src/plugins/qmljseditor/qmljsfindreferences.cpp b/src/plugins/qmljseditor/qmljsfindreferences.cpp index af0d7b461b9..7c54a0d3d34 100644 --- a/src/plugins/qmljseditor/qmljsfindreferences.cpp +++ b/src/plugins/qmljseditor/qmljsfindreferences.cpp @@ -998,9 +998,9 @@ void FindReferences::onReplaceButtonClicked(const QString &text, const QList<Fin // files that are opened in an editor are changed, but not saved QStringList changedOnDisk; QStringList changedUnsavedEditors; - Core::EditorManager *editorManager = Core::EditorManager::instance(); + Core::DocumentModel *documentModel = Core::EditorManager::documentModel(); foreach (const QString &fileName, fileNames) { - if (editorManager->editorsForFileName(fileName).isEmpty()) + if (documentModel->documentForFilePath(fileName)) changedOnDisk += fileName; else changedUnsavedEditors += fileName; diff --git a/src/plugins/qt4projectmanager/qt4nodes.cpp b/src/plugins/qt4projectmanager/qt4nodes.cpp index eeb393fb91d..8899e2948a9 100644 --- a/src/plugins/qt4projectmanager/qt4nodes.cpp +++ b/src/plugins/qt4projectmanager/qt4nodes.cpp @@ -1052,25 +1052,19 @@ bool Qt4PriFileNode::priFileWritable(const QString &path) bool Qt4PriFileNode::saveModifiedEditors() { - QList<Core::IDocument*> modifiedDocuments; - - foreach (Core::IEditor *editor, Core::ICore::editorManager()->editorsForFileName(m_projectFilePath)) { - if (Core::IDocument *editorDocument = editor->document()) { - if (editorDocument->isModified()) - modifiedDocuments << editorDocument; - } - } + Core::IDocument *document + = Core::EditorManager::documentModel()->documentForFilePath(m_projectFilePath); + if (!document || !document->isModified()) + return true; - if (!modifiedDocuments.isEmpty()) { - bool cancelled; - Core::DocumentManager::saveModifiedDocuments(modifiedDocuments, &cancelled, - tr("There are unsaved changes for project file %1.").arg(m_projectFilePath)); - if (cancelled) - return false; - // force instant reload of ourselves - QtSupport::ProFileCacheManager::instance()->discardFile(m_projectFilePath); - m_project->qt4ProjectManager()->notifyChanged(m_projectFilePath); - } + bool cancelled; + Core::DocumentManager::saveModifiedDocuments(QList<Core::IDocument *>() << document, &cancelled, + tr("There are unsaved changes for project file %1.").arg(m_projectFilePath)); + if (cancelled) + return false; + // force instant reload of ourselves + QtSupport::ProFileCacheManager::instance()->discardFile(m_projectFilePath); + m_project->qt4ProjectManager()->notifyChanged(m_projectFilePath); return true; } @@ -1182,12 +1176,11 @@ void Qt4PriFileNode::changeFiles(const QString &mimeType, // We manually tell each editor to reload it's file. // (The .pro files are notified by the file system watcher.) QStringList errorStrings; - foreach (Core::IEditor *editor, Core::ICore::editorManager()->editorsForFileName(m_projectFilePath)) { - if (Core::IDocument *editorDocument= editor->document()) { - QString errorString; - if (!editorDocument->reload(&errorString, Core::IDocument::FlagReload, Core::IDocument::TypeContents)) - errorStrings << errorString; - } + Core::IDocument *document = Core::EditorManager::documentModel()->documentForFilePath(m_projectFilePath); + if (document) { + QString errorString; + if (!document->reload(&errorString, Core::IDocument::FlagReload, Core::IDocument::TypeContents)) + errorStrings << errorString; } if (!errorStrings.isEmpty()) QMessageBox::warning(Core::ICore::mainWindow(), tr("File Error"), diff --git a/src/plugins/texteditor/basetextmark.cpp b/src/plugins/texteditor/basetextmark.cpp index 49dc658b1b1..e4558341d4f 100644 --- a/src/plugins/texteditor/basetextmark.cpp +++ b/src/plugins/texteditor/basetextmark.cpp @@ -58,13 +58,14 @@ BaseTextMarkRegistry::BaseTextMarkRegistry(QObject *parent) void BaseTextMarkRegistry::add(BaseTextMark *mark) { m_marks[Utils::FileName::fromString(mark->fileName())].insert(mark); - Core::EditorManager *em = Core::EditorManager::instance(); - foreach (Core::IEditor *editor, em->editorsForFileName(mark->fileName())) { - if (ITextEditor *textEditor = qobject_cast<ITextEditor *>(editor)) { - ITextMarkable *markableInterface = textEditor->markableInterface(); - if (markableInterface->addMark(mark)) - break; - } + Core::DocumentModel *documentModel = Core::EditorManager::documentModel(); + Core::IDocument *document = documentModel->documentForFilePath(mark->fileName()); + if (!document) + return; + // TODO: markableInterface should be moved to ITextEditorDocument + if (ITextEditor *textEditor + = qobject_cast<ITextEditor *>(documentModel->editorsForDocument(document).first())) { + textEditor->markableInterface()->addMark(mark); } } diff --git a/src/plugins/vcsbase/vcsbaseeditor.cpp b/src/plugins/vcsbase/vcsbaseeditor.cpp index c7a35604d8f..df85102cf7e 100644 --- a/src/plugins/vcsbase/vcsbaseeditor.cpp +++ b/src/plugins/vcsbase/vcsbaseeditor.cpp @@ -1226,17 +1226,9 @@ const VcsBaseEditorParameters *VcsBaseEditorWidget::findType(const VcsBaseEditor // Find the codec used for a file querying the editor. static QTextCodec *findFileCodec(const QString &source) { - typedef QList<Core::IEditor *> EditorList; - - const EditorList editors = Core::EditorManager::instance()->editorsForFileName(source); - if (!editors.empty()) { - const EditorList::const_iterator ecend = editors.constEnd(); - for (EditorList::const_iterator it = editors.constBegin(); it != ecend; ++it) - if (TextEditor::BaseTextEditor *be = qobject_cast<TextEditor::BaseTextEditor *>(*it)) { - QTextCodec *codec = const_cast<QTextCodec *>(be->textDocument()->codec()); - return codec; - } - } + Core::IDocument *document = Core::EditorManager::documentModel()->documentForFilePath(source); + if (Core::TextDocument *textDocument = qobject_cast<Core::TextDocument *>(document)) + return const_cast<QTextCodec *>(textDocument->codec()); return 0; } diff --git a/src/plugins/vcsbase/vcsbaseplugin.cpp b/src/plugins/vcsbase/vcsbaseplugin.cpp index 442df7946b4..f3c33ec3133 100644 --- a/src/plugins/vcsbase/vcsbaseplugin.cpp +++ b/src/plugins/vcsbase/vcsbaseplugin.cpp @@ -219,9 +219,9 @@ StateListener::StateListener(QObject *parent) : static inline QString displayNameOfEditor(const QString &fileName) { - const QList<Core::IEditor*> editors = Core::EditorManager::instance()->editorsForFileName(fileName); - if (!editors.isEmpty()) - return editors.front()->document()->displayName(); + Core::IDocument *document = Core::EditorManager::documentModel()->documentForFilePath(fileName); + if (document) + return document->displayName(); return QString(); } -- GitLab