DocumentModel: Better separation of private API

Change-Id: Iee534ba5d6edd283add8a1f36fd0e56ab3ee8f41
Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
This commit is contained in:
Eike Ziller
2016-06-01 11:46:27 +02:00
committed by Eike Ziller
parent 505c9be9af
commit 8f83ac351b
7 changed files with 369 additions and 317 deletions

View File

@@ -217,7 +217,8 @@ HEADERS += corejsextensions.h \
messagebox.h \
iwelcomepage.h \
systemsettings.h \
coreicons.h
coreicons.h \
editormanager/documentmodel_p.h
FORMS += dialogs/newdialog.ui \
dialogs/saveitemsdialog.ui \

View File

@@ -142,7 +142,7 @@ QtcPlugin {
name: "Editor Manager"
prefix: "editormanager/"
files: [
"documentmodel.cpp", "documentmodel.h",
"documentmodel.cpp", "documentmodel.h", "documentmodel_p.h",
"editorarea.cpp", "editorarea.h",
"editormanager.cpp", "editormanager.h", "editormanager_p.h",
"editorview.cpp", "editorview.h",

View File

@@ -24,6 +24,8 @@
****************************************************************************/
#include "documentmodel.h"
#include "documentmodel_p.h"
#include "ieditor.h"
#include <coreplugin/documentmanager.h>
#include <coreplugin/idocument.h>
@@ -41,135 +43,17 @@
#include <QSet>
#include <QUrl>
static Core::Internal::DocumentModelPrivate *d;
namespace Core {
class DocumentModelPrivate : public QAbstractItemModel
{
Q_OBJECT
public:
~DocumentModelPrivate();
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
Qt::ItemFlags flags(const QModelIndex &index) const override;
QMimeData *mimeData(const QModelIndexList &indexes) const override;
QModelIndex parent(const QModelIndex &/*index*/) const override { return QModelIndex(); }
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const override;
Qt::DropActions supportedDragActions() const override;
QStringList mimeTypes() const override;
void addEntry(DocumentModel::Entry *entry);
void removeDocument(int idx);
int indexOfFilePath(const Utils::FileName &filePath) const;
int indexOfDocument(IDocument *document) const;
bool disambiguateDisplayNames(DocumentModel::Entry *entry);
static QIcon lockedIcon();
private:
friend class DocumentModel;
void itemChanged();
class DynamicEntry
{
public:
DocumentModel::Entry *entry;
int pathComponents;
DynamicEntry(DocumentModel::Entry *e) :
entry(e),
pathComponents(0)
{
}
DocumentModel::Entry *operator->() const { return entry; }
void disambiguate()
{
entry->document->setUniqueDisplayName(entry->fileName().fileName(++pathComponents));
}
void setNumberedName(int number)
{
entry->document->setUniqueDisplayName(QStringLiteral("%1 (%2)")
.arg(entry->document->displayName())
.arg(number));
}
};
QList<DocumentModel::Entry *> m_entries;
QMap<IDocument *, QList<IEditor *> > m_editors;
QHash<QString, DocumentModel::Entry *> m_entryByFixedPath;
};
namespace Internal {
DocumentModelPrivate::~DocumentModelPrivate()
{
qDeleteAll(m_entries);
}
static DocumentModelPrivate *d;
DocumentModel::Entry::Entry() :
document(0),
isSuspended(false)
{
}
DocumentModel::Entry::~Entry()
{
if (isSuspended)
delete document;
}
DocumentModel::DocumentModel()
{
}
void DocumentModel::init()
{
d = new DocumentModelPrivate;
}
void DocumentModel::destroy()
{
delete d;
}
QIcon DocumentModel::lockedIcon()
{
return DocumentModelPrivate::lockedIcon();
}
QAbstractItemModel *DocumentModel::model()
{
return d;
}
Utils::FileName DocumentModel::Entry::fileName() const
{
return document->filePath();
}
QString DocumentModel::Entry::displayName() const
{
return document->displayName();
}
QString DocumentModel::Entry::plainDisplayName() const
{
return document->plainDisplayName();
}
Id DocumentModel::Entry::id() const
{
return document->id();
}
int DocumentModelPrivate::columnCount(const QModelIndex &parent) const
{
if (!parent.isValid())
@@ -184,39 +68,6 @@ int DocumentModelPrivate::rowCount(const QModelIndex &parent) const
return 0;
}
void DocumentModel::addEditor(IEditor *editor, bool *isNewDocument)
{
if (!editor)
return;
QList<IEditor *> &editorList = d->m_editors[editor->document()];
bool isNew = editorList.isEmpty();
if (isNewDocument)
*isNewDocument = isNew;
editorList << editor;
if (isNew) {
Entry *entry = new Entry;
entry->document = editor->document();
d->addEntry(entry);
}
}
void DocumentModel::addSuspendedDocument(const QString &fileName, const QString &displayName, Id id)
{
Entry *entry = new Entry;
entry->document = new IDocument;
entry->document->setFilePath(Utils::FileName::fromString(fileName));
entry->document->setPreferredDisplayName(displayName);
entry->document->setId(id);
entry->isSuspended = true;
d->addEntry(entry);
}
DocumentModel::Entry *DocumentModel::firstSuspendedEntry()
{
return Utils::findOrDefault(d->m_entries, [](Entry *entry) { return entry->isSuspended; });
}
void DocumentModelPrivate::addEntry(DocumentModel::Entry *entry)
{
const Utils::FileName fileName = entry->fileName();
@@ -247,7 +98,7 @@ void DocumentModelPrivate::addEntry(DocumentModel::Entry *entry)
int cmp = displayName.localeAwareCompare(m_entries.at(index)->plainDisplayName());
if (cmp < 0)
break;
if (cmp == 0 && fileName < d->m_entries.at(index)->fileName())
if (cmp == 0 && fileName < m_entries.at(index)->fileName())
break;
}
int row = index + 1/*<no document>*/;
@@ -338,38 +189,14 @@ int DocumentModelPrivate::indexOfFilePath(const Utils::FileName &filePath) const
return m_entries.indexOf(m_entryByFixedPath.value(fixedPath));
}
void DocumentModel::removeEntry(DocumentModel::Entry *entry)
{
// For non suspended entries, we wouldn't know what to do with the associated editors
QTC_ASSERT(entry->isSuspended, return);
int index = d->m_entries.indexOf(entry);
d->removeDocument(index);
}
void DocumentModel::removeEditor(IEditor *editor, bool *lastOneForDocument)
{
if (lastOneForDocument)
*lastOneForDocument = false;
QTC_ASSERT(editor, return);
IDocument *document = editor->document();
QTC_ASSERT(d->m_editors.contains(document), return);
d->m_editors[document].removeAll(editor);
if (d->m_editors.value(document).isEmpty()) {
if (lastOneForDocument)
*lastOneForDocument = true;
d->m_editors.remove(document);
d->removeDocument(indexOfDocument(document));
}
}
void DocumentModelPrivate::removeDocument(int idx)
{
if (idx < 0)
return;
QTC_ASSERT(idx < d->m_entries.size(), return);
QTC_ASSERT(idx < m_entries.size(), return);
int row = idx + 1/*<no document>*/;
beginRemoveRows(QModelIndex(), row, row);
DocumentModel::Entry *entry = d->m_entries.takeAt(idx);
DocumentModel::Entry *entry = m_entries.takeAt(idx);
endRemoveRows();
const QString fileName = entry->fileName().toString();
@@ -383,7 +210,176 @@ void DocumentModelPrivate::removeDocument(int idx)
delete entry;
}
void DocumentModel::removeAllSuspendedEntries()
int DocumentModelPrivate::indexOfDocument(IDocument *document) const
{
return Utils::indexOf(m_entries, [&document](DocumentModel::Entry *entry) {
return entry->document == document;
});
}
Qt::ItemFlags DocumentModelPrivate::flags(const QModelIndex &index) const
{
const DocumentModel::Entry *e = DocumentModel::entryAtRow(index.row());
if (!e || e->fileName().isEmpty())
return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
return Qt::ItemIsDragEnabled | Qt::ItemIsEnabled | Qt::ItemIsSelectable;
}
QMimeData *DocumentModelPrivate::mimeData(const QModelIndexList &indexes) const
{
auto data = new Utils::DropMimeData;
foreach (const QModelIndex &index, indexes) {
const DocumentModel::Entry *e = DocumentModel::entryAtRow(index.row());
if (!e || e->fileName().isEmpty())
continue;
data->addFile(e->fileName().toString());
}
return data;
}
QModelIndex DocumentModelPrivate::index(int row, int column, const QModelIndex &parent) const
{
Q_UNUSED(parent)
if (column < 0 || column > 1 || row < 0 || row >= m_entries.count() + 1/*<no document>*/)
return QModelIndex();
return createIndex(row, column);
}
Qt::DropActions DocumentModelPrivate::supportedDragActions() const
{
return Qt::MoveAction;
}
QStringList DocumentModelPrivate::mimeTypes() const
{
return Utils::DropSupport::mimeTypesForFilePaths();
}
QVariant DocumentModelPrivate::data(const QModelIndex &index, int role) const
{
if (!index.isValid() || (index.column() != 0 && role < Qt::UserRole))
return QVariant();
const DocumentModel::Entry *entry = DocumentModel::entryAtRow(index.row());
if (!entry) {
// <no document> entry
switch (role) {
case Qt::DisplayRole:
return tr("<no document>");
case Qt::ToolTipRole:
return tr("No document is selected.");
default:
return QVariant();
}
}
switch (role) {
case Qt::DisplayRole: {
QString name = entry->displayName();
if (entry->document->isModified())
name += QLatin1Char('*');
return name;
}
case Qt::DecorationRole:
return entry->document->isFileReadOnly() ? lockedIcon() : QIcon();
case Qt::ToolTipRole:
return entry->fileName().isEmpty() ? entry->displayName() : entry->fileName().toUserOutput();
default:
return QVariant();
}
return QVariant();
}
void DocumentModelPrivate::itemChanged()
{
IDocument *document = qobject_cast<IDocument *>(sender());
int idx = indexOfDocument(document);
if (idx < 0)
return;
const QString fileName = document->filePath().toString();
QString fixedPath;
if (!fileName.isEmpty())
fixedPath = DocumentManager::fixFileName(fileName, DocumentManager::ResolveLinks);
DocumentModel::Entry *entry = m_entries.at(idx);
bool found = false;
// The entry's fileName might have changed, so find the previous fileName that was associated
// with it and remove it, then add the new fileName.
for (auto it = m_entryByFixedPath.begin(), end = m_entryByFixedPath.end(); it != end; ++it) {
if (it.value() == entry) {
found = true;
if (it.key() != fixedPath) {
m_entryByFixedPath.remove(it.key());
if (!fixedPath.isEmpty())
m_entryByFixedPath[fixedPath] = entry;
}
break;
}
}
if (!found && !fixedPath.isEmpty())
m_entryByFixedPath[fixedPath] = entry;
if (!disambiguateDisplayNames(m_entries.at(idx))) {
QModelIndex mindex = index(idx + 1/*<no document>*/, 0);
emit dataChanged(mindex, mindex);
}
}
void DocumentModelPrivate::addEditor(IEditor *editor, bool *isNewDocument)
{
if (!editor)
return;
QList<IEditor *> &editorList = d->m_editors[editor->document()];
bool isNew = editorList.isEmpty();
if (isNewDocument)
*isNewDocument = isNew;
editorList << editor;
if (isNew) {
auto entry = new DocumentModel::Entry;
entry->document = editor->document();
d->addEntry(entry);
}
}
void DocumentModelPrivate::addSuspendedDocument(const QString &fileName, const QString &displayName, Id id)
{
auto entry = new DocumentModel::Entry;
entry->document = new IDocument;
entry->document->setFilePath(Utils::FileName::fromString(fileName));
entry->document->setPreferredDisplayName(displayName);
entry->document->setId(id);
entry->isSuspended = true;
d->addEntry(entry);
}
DocumentModel::Entry *DocumentModelPrivate::firstSuspendedEntry()
{
return Utils::findOrDefault(d->m_entries, [](DocumentModel::Entry *entry) { return entry->isSuspended; });
}
void DocumentModelPrivate::removeEditor(IEditor *editor, bool *lastOneForDocument)
{
if (lastOneForDocument)
*lastOneForDocument = false;
QTC_ASSERT(editor, return);
IDocument *document = editor->document();
QTC_ASSERT(d->m_editors.contains(document), return);
d->m_editors[document].removeAll(editor);
if (d->m_editors.value(document).isEmpty()) {
if (lastOneForDocument)
*lastOneForDocument = true;
d->m_editors.remove(document);
d->removeDocument(DocumentModel::indexOfDocument(document));
}
}
void DocumentModelPrivate::removeEntry(DocumentModel::Entry *entry)
{
// For non suspended entries, we wouldn't know what to do with the associated editors
QTC_ASSERT(entry->isSuspended, return);
int index = d->m_entries.indexOf(entry);
d->removeDocument(index);
}
void DocumentModelPrivate::removeAllSuspendedEntries()
{
for (int i = d->m_entries.count()-1; i >= 0; --i) {
if (d->m_entries.at(i)->isSuspended) {
@@ -403,6 +399,87 @@ void DocumentModel::removeAllSuspendedEntries()
}
}
DocumentModelPrivate::DynamicEntry::DynamicEntry(DocumentModel::Entry *e) :
entry(e),
pathComponents(0)
{
}
DocumentModel::Entry *DocumentModelPrivate::DynamicEntry::operator->() const
{
return entry;
}
void DocumentModelPrivate::DynamicEntry::disambiguate()
{
entry->document->setUniqueDisplayName(entry->fileName().fileName(++pathComponents));
}
void DocumentModelPrivate::DynamicEntry::setNumberedName(int number)
{
entry->document->setUniqueDisplayName(QStringLiteral("%1 (%2)")
.arg(entry->document->displayName())
.arg(number));
}
} // Internal
DocumentModel::Entry::Entry() :
document(0),
isSuspended(false)
{
}
DocumentModel::Entry::~Entry()
{
if (isSuspended)
delete document;
}
DocumentModel::DocumentModel()
{
}
void DocumentModel::init()
{
d = new Internal::DocumentModelPrivate;
}
void DocumentModel::destroy()
{
delete d;
}
QIcon DocumentModel::lockedIcon()
{
return Internal::DocumentModelPrivate::lockedIcon();
}
QAbstractItemModel *DocumentModel::model()
{
return d;
}
Utils::FileName DocumentModel::Entry::fileName() const
{
return document->filePath();
}
QString DocumentModel::Entry::displayName() const
{
return document->displayName();
}
QString DocumentModel::Entry::plainDisplayName() const
{
return document->plainDisplayName();
}
Id DocumentModel::Entry::id() const
{
return document->id();
}
QList<IEditor *> DocumentModel::editorsForDocument(IDocument *document)
{
return d->m_editors.value(document);
@@ -426,13 +503,6 @@ int DocumentModel::indexOfDocument(IDocument *document)
return d->indexOfDocument(document);
}
int DocumentModelPrivate::indexOfDocument(IDocument *document) const
{
return Utils::indexOf(m_entries, [&document](DocumentModel::Entry *entry) {
return entry->document == document;
});
}
DocumentModel::Entry *DocumentModel::entryForDocument(IDocument *document)
{
return Utils::findOrDefault(d->m_entries,
@@ -468,24 +538,6 @@ QList<IEditor *> DocumentModel::editorsForFilePath(const QString &filePath)
return QList<IEditor *>();
}
QModelIndex DocumentModelPrivate::index(int row, int column, const QModelIndex &parent) const
{
Q_UNUSED(parent)
if (column < 0 || column > 1 || row < 0 || row >= m_entries.count() + 1/*<no document>*/)
return QModelIndex();
return createIndex(row, column);
}
Qt::DropActions DocumentModelPrivate::supportedDragActions() const
{
return Qt::MoveAction;
}
QStringList DocumentModelPrivate::mimeTypes() const
{
return Utils::DropSupport::mimeTypesForFilePaths();
}
DocumentModel::Entry *DocumentModel::entryAtRow(int row)
{
int entryIndex = row - 1/*<no document>*/;
@@ -499,59 +551,6 @@ int DocumentModel::entryCount()
return d->m_entries.count();
}
QVariant DocumentModelPrivate::data(const QModelIndex &index, int role) const
{
if (!index.isValid() || (index.column() != 0 && role < Qt::UserRole))
return QVariant();
const DocumentModel::Entry *entry = DocumentModel::entryAtRow(index.row());
if (!entry) {
// <no document> entry
switch (role) {
case Qt::DisplayRole:
return tr("<no document>");
case Qt::ToolTipRole:
return tr("No document is selected.");
default:
return QVariant();
}
}
switch (role) {
case Qt::DisplayRole: {
QString name = entry->displayName();
if (entry->document->isModified())
name += QLatin1Char('*');
return name;
}
case Qt::DecorationRole:
return entry->document->isFileReadOnly() ? lockedIcon() : QIcon();
case Qt::ToolTipRole:
return entry->fileName().isEmpty() ? entry->displayName() : entry->fileName().toUserOutput();
default:
return QVariant();
}
return QVariant();
}
Qt::ItemFlags DocumentModelPrivate::flags(const QModelIndex &index) const
{
const DocumentModel::Entry *e = DocumentModel::entryAtRow(index.row());
if (!e || e->fileName().isEmpty())
return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
return Qt::ItemIsDragEnabled | Qt::ItemIsEnabled | Qt::ItemIsSelectable;
}
QMimeData *DocumentModelPrivate::mimeData(const QModelIndexList &indexes) const
{
auto data = new Utils::DropMimeData;
foreach (const QModelIndex &index, indexes) {
const DocumentModel::Entry *e = DocumentModel::entryAtRow(index.row());
if (!e || e->fileName().isEmpty())
continue;
data->addFile(e->fileName().toString());
}
return data;
}
int DocumentModel::rowOfDocument(IDocument *document)
{
if (!document)
@@ -559,45 +558,9 @@ int DocumentModel::rowOfDocument(IDocument *document)
return indexOfDocument(document) + 1/*<no document>*/;
}
void DocumentModelPrivate::itemChanged()
{
IDocument *document = qobject_cast<IDocument *>(sender());
int idx = indexOfDocument(document);
if (idx < 0)
return;
const QString fileName = document->filePath().toString();
QString fixedPath;
if (!fileName.isEmpty())
fixedPath = DocumentManager::fixFileName(fileName, DocumentManager::ResolveLinks);
DocumentModel::Entry *entry = d->m_entries.at(idx);
bool found = false;
// The entry's fileName might have changed, so find the previous fileName that was associated
// with it and remove it, then add the new fileName.
for (auto it = m_entryByFixedPath.begin(), end = m_entryByFixedPath.end(); it != end; ++it) {
if (it.value() == entry) {
found = true;
if (it.key() != fixedPath) {
m_entryByFixedPath.remove(it.key());
if (!fixedPath.isEmpty())
m_entryByFixedPath[fixedPath] = entry;
}
break;
}
}
if (!found && !fixedPath.isEmpty())
m_entryByFixedPath[fixedPath] = entry;
if (!disambiguateDisplayNames(d->m_entries.at(idx))) {
QModelIndex mindex = index(idx + 1/*<no document>*/, 0);
emit dataChanged(mindex, mindex);
}
}
QList<DocumentModel::Entry *> DocumentModel::entries()
{
return d->m_entries;
}
} // namespace Core
#include "documentmodel.moc"

View File

@@ -78,14 +78,6 @@ public:
static QList<IEditor *> editorsForDocuments(const QList<IDocument *> &entries);
static QList<IEditor *> editorsForOpenedDocuments();
// editor manager related functions, nobody else should call it
static void addEditor(IEditor *editor, bool *isNewDocument);
static void addSuspendedDocument(const QString &fileName, const QString &displayName, Id id);
static Entry *firstSuspendedEntry();
static void removeEditor(IEditor *editor, bool *lastOneForDocument);
static void removeEntry(Entry *entry);
static void removeAllSuspendedEntries();
private:
DocumentModel();
};

View File

@@ -0,0 +1,94 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "documentmodel.h"
#include "ieditor.h"
#include <QAbstractItemModel>
#include <QHash>
#include <QIcon>
#include <QList>
#include <QMap>
namespace Core {
namespace Internal {
class DocumentModelPrivate : public QAbstractItemModel
{
Q_OBJECT
public:
~DocumentModelPrivate();
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
Qt::ItemFlags flags(const QModelIndex &index) const override;
QMimeData *mimeData(const QModelIndexList &indexes) const override;
QModelIndex parent(const QModelIndex &/*index*/) const override { return QModelIndex(); }
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const override;
Qt::DropActions supportedDragActions() const override;
QStringList mimeTypes() const override;
void addEntry(DocumentModel::Entry *entry);
void removeDocument(int idx);
int indexOfFilePath(const Utils::FileName &filePath) const;
int indexOfDocument(IDocument *document) const;
bool disambiguateDisplayNames(DocumentModel::Entry *entry);
static QIcon lockedIcon();
static void addEditor(IEditor *editor, bool *isNewDocument);
static void addSuspendedDocument(const QString &fileName, const QString &displayName, Id id);
static DocumentModel::Entry *firstSuspendedEntry();
static void removeEditor(IEditor *editor, bool *lastOneForDocument);
static void removeEntry(DocumentModel::Entry *entry);
static void removeAllSuspendedEntries();
void itemChanged();
class DynamicEntry
{
public:
DocumentModel::Entry *entry;
int pathComponents;
DynamicEntry(DocumentModel::Entry *e);
DocumentModel::Entry *operator->() const;
void disambiguate();
void setNumberedName(int number);
};
QList<DocumentModel::Entry *> m_entries;
QMap<IDocument *, QList<IEditor *> > m_editors;
QHash<QString, DocumentModel::Entry *> m_entryByFixedPath;
};
} // Internal
} // Core

View File

@@ -31,6 +31,7 @@
#include "openeditorswindow.h"
#include "openeditorsview.h"
#include "documentmodel.h"
#include "documentmodel_p.h"
#include "ieditor.h"
#include <coreplugin/actionmanager/actioncontainer.h>
@@ -1130,7 +1131,7 @@ void EditorManagerPrivate::addEditor(IEditor *editor)
ICore::addContextObject(editor);
bool isNewDocument = false;
DocumentModel::addEditor(editor, &isNewDocument);
DocumentModelPrivate::addEditor(editor, &isNewDocument);
if (isNewDocument) {
const bool isTemporary = editor->document()->isTemporary();
const bool addWatcher = !isTemporary;
@@ -1145,7 +1146,7 @@ void EditorManagerPrivate::addEditor(IEditor *editor)
void EditorManagerPrivate::removeEditor(IEditor *editor)
{
bool lastOneForDocument = false;
DocumentModel::removeEditor(editor, &lastOneForDocument);
DocumentModelPrivate::removeEditor(editor, &lastOneForDocument);
if (lastOneForDocument)
DocumentManager::removeDocument(editor->document());
ICore::removeContextObject(editor);
@@ -1252,7 +1253,7 @@ bool EditorManagerPrivate::activateEditorForEntry(EditorView *view, DocumentMode
}
if (!openEditor(view, entry->fileName().toString(), entry->id(), flags)) {
DocumentModel::removeEntry(entry);
DocumentModelPrivate::removeEntry(entry);
return false;
}
return true;
@@ -1975,7 +1976,7 @@ bool EditorManagerPrivate::saveDocumentAs(IDocument *document)
void EditorManagerPrivate::closeAllEditorsExceptVisible()
{
DocumentModel::removeAllSuspendedEntries();
DocumentModelPrivate::removeAllSuspendedEntries();
QList<IDocument *> documentsToClose = DocumentModel::openedDocuments();
foreach (IEditor *editor, EditorManager::visibleEditors())
documentsToClose.removeAll(editor->document());
@@ -2118,7 +2119,7 @@ IEditor *EditorManager::currentEditor()
bool EditorManager::closeAllEditors(bool askAboutModifiedEditors)
{
DocumentModel::removeAllSuspendedEntries();
DocumentModelPrivate::removeAllSuspendedEntries();
if (closeDocuments(DocumentModel::openedDocuments(), askAboutModifiedEditors))
return true;
return false;
@@ -2126,7 +2127,7 @@ bool EditorManager::closeAllEditors(bool askAboutModifiedEditors)
void EditorManager::closeOtherDocuments(IDocument *document)
{
DocumentModel::removeAllSuspendedEntries();
DocumentModelPrivate::removeAllSuspendedEntries();
QList<IDocument *> documentsToClose = DocumentModel::openedDocuments();
documentsToClose.removeAll(document);
closeDocuments(documentsToClose, true);
@@ -2310,7 +2311,7 @@ void EditorManager::closeDocument(DocumentModel::Entry *entry)
if (!entry)
return;
if (entry->isSuspended)
DocumentModel::removeEntry(entry);
DocumentModelPrivate::removeEntry(entry);
else
closeDocuments(QList<IDocument *>() << entry->document);
}
@@ -2421,7 +2422,7 @@ bool EditorManager::closeEditors(const QList<IEditor*> &editorsToClose, bool ask
if (newCurrent) {
EditorManagerPrivate::activateEditor(view, newCurrent, DoNotChangeCurrentEditor);
} else if (forceViewToShowEditor == view) {
DocumentModel::Entry *entry = DocumentModel::firstSuspendedEntry();
DocumentModel::Entry *entry = DocumentModelPrivate::firstSuspendedEntry();
if (entry) {
EditorManagerPrivate::activateEditorForEntry(view, entry, DoNotChangeCurrentEditor);
} else { // no "suspended" ones, so any entry left should have a document
@@ -2886,7 +2887,7 @@ bool EditorManager::restoreState(const QByteArray &state)
if (rfi.exists() && fi.lastModified() < rfi.lastModified())
openEditor(fileName, id, DoNotMakeVisible);
else
DocumentModel::addSuspendedDocument(fileName, displayName, id);
DocumentModelPrivate::addSuspendedDocument(fileName, displayName, id);
}
}

View File

@@ -28,6 +28,7 @@
#include "editormanager.h"
#include "editormanager_p.h"
#include "documentmodel.h"
#include "documentmodel_p.h"
#include <coreplugin/actionmanager/actionmanager.h>
#include <coreplugin/editortoolbar.h>
@@ -920,7 +921,7 @@ void SplitterOrView::restoreState(const QByteArray &state)
| EditorManager::DoNotChangeCurrentEditor);
if (!e) {
DocumentModel::Entry *entry = DocumentModel::firstSuspendedEntry();
DocumentModel::Entry *entry = DocumentModelPrivate::firstSuspendedEntry();
if (entry) {
EditorManagerPrivate::activateEditorForEntry(view(), entry,
EditorManager::IgnoreNavigationHistory | EditorManager::DoNotChangeCurrentEditor);