Commit 8f83ac35 authored by Eike Ziller's avatar Eike Ziller Committed by Eike Ziller

DocumentModel: Better separation of private API

Change-Id: Iee534ba5d6edd283add8a1f36fd0e56ab3ee8f41
Reviewed-by: default avatarDavid Schulz <david.schulz@theqtcompany.com>
parent 505c9be9
......@@ -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 \
......
......@@ -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",
......
......@@ -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();
};
......
/****************************************************************************
**
** 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
......@@ -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);
}
}
......
......@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment