From 01a70073e71cc994317a1eb1cb4a3481b51edb2a Mon Sep 17 00:00:00 2001
From: Kai Koehne <kai.koehne@nokia.com>
Date: Fri, 3 Jul 2009 13:10:04 +0200
Subject: [PATCH] Renamed Core::Internal::EditorModel to Core::OpenEditorsModel

also moved into own header/cpp file. The renaming + export allow
us to reuse the model in the bauhaus plugin.

Reviewed-by: thorbjorn
---
 src/plugins/coreplugin/coreplugin.pro         |   2 +
 .../editormanager/editormanager.cpp           |  13 +-
 .../coreplugin/editormanager/editormanager.h  |   4 +-
 .../coreplugin/editormanager/editorview.cpp   | 258 +-----------------
 .../coreplugin/editormanager/editorview.h     |  60 +---
 .../editormanager/openeditorsview.cpp         |   1 +
 .../editormanager/openeditorswindow.cpp       |   5 +-
 .../editormanager/openeditorswindow.h         |   5 +-
 8 files changed, 25 insertions(+), 323 deletions(-)

diff --git a/src/plugins/coreplugin/coreplugin.pro b/src/plugins/coreplugin/coreplugin.pro
index 0b9d77bf23b..ae1874438fa 100644
--- a/src/plugins/coreplugin/coreplugin.pro
+++ b/src/plugins/coreplugin/coreplugin.pro
@@ -38,6 +38,7 @@ SOURCES += mainwindow.cpp \
     versiondialog.cpp \
     editormanager/editormanager.cpp \
     editormanager/editorview.cpp \
+    editormanager/openeditorsmodel.cpp \
     editormanager/openeditorsview.cpp \
     editormanager/openeditorswindow.cpp \
     editormanager/iexternaleditor.cpp \
@@ -99,6 +100,7 @@ HEADERS += mainwindow.h \
     viewmanager.h \
     editormanager/editormanager.h \
     editormanager/editorview.h \
+    editormanager/openeditorsmodel.h \
     editormanager/openeditorsview.h \
     editormanager/openeditorswindow.h \
     editormanager/ieditor.h \
diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp
index cf309b32034..6bbdd9fb2e9 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.cpp
+++ b/src/plugins/coreplugin/editormanager/editormanager.cpp
@@ -31,6 +31,7 @@
 #include "editorview.h"
 #include "openeditorswindow.h"
 #include "openeditorsview.h"
+#include "openeditorsmodel.h"
 #include "openwithdialog.h"
 #include "filemanager.h"
 #include "icore.h"
@@ -96,6 +97,8 @@ EditorManagerPlaceHolder::EditorManagerPlaceHolder(Core::IMode *mode, QWidget *p
     layout()->setMargin(0);
     connect(Core::ModeManager::instance(), SIGNAL(currentModeChanged(Core::IMode *)),
             this, SLOT(currentModeChanged(Core::IMode *)));
+
+    currentModeChanged(Core::ModeManager::instance()->currentMode());
 }
 
 EditorManagerPlaceHolder::~EditorManagerPlaceHolder()
@@ -180,7 +183,7 @@ struct EditorManagerPrivate {
     QString fileFilters;
     QString selectedFilter;
 
-    EditorModel *m_editorModel;
+    OpenEditorsModel *m_editorModel;
     QString m_externalEditor;
 };
 }
@@ -204,7 +207,7 @@ EditorManagerPrivate::EditorManagerPrivate(ICore *core, QWidget *parent) :
     m_windowPopup(0),
     m_coreListener(0)
 {
-    m_editorModel = new EditorModel(parent);
+    m_editorModel = new OpenEditorsModel(parent);
 }
 
 EditorManagerPrivate::~EditorManagerPrivate()
@@ -1496,7 +1499,7 @@ QList<IEditor*> EditorManager::openedEditors() const
     return m_d->m_editorModel->editors();
 }
 
-Internal::EditorModel *EditorManager::openedEditorsModel() const
+OpenEditorsModel *EditorManager::openedEditorsModel() const
 {
     return m_d->m_editorModel;
 }
@@ -1651,12 +1654,12 @@ QByteArray EditorManager::saveState() const
 
     stream << m_d->m_editorStates;
 
-    QList<EditorModel::Entry> entries = m_d->m_editorModel->entries();
+    QList<OpenEditorsModel::Entry> entries = m_d->m_editorModel->entries();
     stream << entries.count();
 
     if (IEditor *current = m_d->m_currentEditor) // current first
         stream << current->file()->fileName() << current->displayName() << QByteArray(current->kind());
-    foreach (EditorModel::Entry entry, entries) {
+    foreach (OpenEditorsModel::Entry entry, entries) {
         if (entry.editor && entry.editor == m_d->m_currentEditor) // all but current
             continue;
         stream << entry.fileName() << entry.displayName() << entry.kind();
diff --git a/src/plugins/coreplugin/editormanager/editormanager.h b/src/plugins/coreplugin/editormanager/editormanager.h
index 212925a6f7e..6283e3ae56a 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.h
+++ b/src/plugins/coreplugin/editormanager/editormanager.h
@@ -63,10 +63,10 @@ enum MakeWritableResult {
 };
 
 struct EditorManagerPrivate;
+class OpenEditorsModel;
 
 namespace Internal {
 class OpenEditorsWindow;
-class EditorModel;
 class EditorView;
 class SplitterOrView;
 
@@ -128,7 +128,7 @@ public:
 
     QList<IEditor*> openedEditors() const;
 
-    Internal::EditorModel *openedEditorsModel() const;
+    OpenEditorsModel *openedEditorsModel() const;
     void activateEditor(const QModelIndex &index, Internal::EditorView *view = 0, OpenEditorFlags = 0);
     void closeEditor(const QModelIndex &index);
     void closeOtherEditors(IEditor *editor);
diff --git a/src/plugins/coreplugin/editormanager/editorview.cpp b/src/plugins/coreplugin/editormanager/editorview.cpp
index a3f02f8c715..89e1465090e 100644
--- a/src/plugins/coreplugin/editormanager/editorview.cpp
+++ b/src/plugins/coreplugin/editormanager/editorview.cpp
@@ -31,6 +31,7 @@
 #include "editormanager.h"
 #include "coreimpl.h"
 #include "minisplitter.h"
+#include "openeditorsmodel.h"
 
 #include <utils/qtcassert.h>
 
@@ -63,262 +64,9 @@ using namespace Core;
 using namespace Core::Internal;
 
 
-//================EditorModel====================
-
-QString EditorModel::Entry::fileName() const {
-    return editor ? editor->file()->fileName() : m_fileName;
-}
-QString EditorModel::Entry::displayName() const {
-    return editor ? editor->displayName() : m_displayName;
-}
-QByteArray EditorModel::Entry::kind() const
-{
-    return editor ? QByteArray(editor->kind()) : m_kind;
-}
-
-int EditorModel::columnCount(const QModelIndex &parent) const
-{
-    Q_UNUSED(parent);
-    return 2;
-}
-
-int EditorModel::rowCount(const QModelIndex &parent) const
-{
-    if (!parent.isValid())
-        return m_editors.count();
-    return 0;
-}
-
-QList<IEditor *> EditorModel::editors() const
-{
-    QList<IEditor *> result;
-    foreach (Entry entry, m_editors)
-        if (entry.editor)
-            result += entry.editor;
-    return result;
-}
-
-void EditorModel::addEditor(IEditor *editor, bool isDuplicate)
-{
-    if (isDuplicate) {
-        m_duplicateEditors.append(editor);
-        return;
-    }
-
-    Entry entry;
-    entry.editor = editor;
-    addEntry(entry);
-}
-
-void EditorModel::addRestoredEditor(const QString &fileName, const QString &displayName, const QByteArray &kind)
-{
-    Entry entry;
-    entry.m_fileName = fileName;
-    entry.m_displayName = displayName;
-    entry.m_kind = kind;
-    addEntry(entry);
-}
-
-QModelIndex EditorModel::firstRestoredEditor() const
-{
-    for (int i = 0; i < m_editors.count(); ++i)
-        if (!m_editors.at(i).editor)
-            return createIndex(i, 0);
-    return QModelIndex();
-}
-
-void EditorModel::addEntry(const Entry &entry)
-{
-    QString fileName = entry.fileName();
-
-    int previousIndex = findFileName(fileName);
-    if (previousIndex >= 0) {
-        if (entry.editor && m_editors.at(previousIndex).editor == 0) {
-            m_editors[previousIndex] = entry;
-            connect(entry.editor, SIGNAL(changed()), this, SLOT(itemChanged()));
-        }
-        return;
-    }
-
-    int index;
-    QString displayName = entry.displayName();
-    for (index = 0; index < m_editors.count(); ++index) {
-        if (displayName < m_editors.at(index).displayName())
-            break;
-    }
-
-    beginInsertRows(QModelIndex(), index, index);
-    m_editors.insert(index, entry);
-    if (entry.editor)
-        connect(entry.editor, SIGNAL(changed()), this, SLOT(itemChanged()));
-    endInsertRows();
-}
-
-
-int EditorModel::findEditor(IEditor *editor) const
-{
-    for (int i = 0; i < m_editors.count(); ++i)
-        if (m_editors.at(i).editor == editor)
-            return i;
-    return -1;
-}
-
-int EditorModel::findFileName(const QString &filename) const
-{
-    if (filename.isEmpty())
-        return -1;
-    for (int i = 0; i < m_editors.count(); ++i) {
-        if (m_editors.at(i).fileName() == filename)
-            return i;
-    }
-    return -1;
-}
-
-void EditorModel::removeEditor(IEditor *editor)
-{
-    m_duplicateEditors.removeAll(editor);
-    int idx = findEditor(editor);
-    if (idx < 0)
-        return;
-    beginRemoveRows(QModelIndex(), idx, idx);
-    m_editors.removeAt(idx);
-    endRemoveRows();
-    disconnect(editor, SIGNAL(changed()), this, SLOT(itemChanged()));
-}
-
-void EditorModel::removeEditor(const QModelIndex &index)
-{
-    int idx = index.row();
-    if (idx < 0)
-        return;
-    IEditor *editor= m_editors.at(idx).editor;
-    beginRemoveRows(QModelIndex(), idx, idx);
-    m_editors.removeAt(idx);
-    endRemoveRows();
-    if (editor)
-        disconnect(editor, SIGNAL(changed()), this, SLOT(itemChanged()));
-}
-
-void EditorModel::removeAllRestoredEditors()
-{
-    for (int i = m_editors.count()-1; i >= 0; --i) {
-        if (!m_editors.at(i).editor) {
-            beginRemoveRows(QModelIndex(), i, i);
-            m_editors.removeAt(i);
-            endRemoveRows();
-        }
-    }
-}
-
-int EditorModel::restoredEditorCount() const
-{
-    int count = 0;
-    for (int i = m_editors.count()-1; i >= 0; --i) {
-        if (!m_editors.at(i).editor) {
-            ++count;
-        }
-    }
-    return count;
-}
-
-bool EditorModel::isDuplicate(IEditor *editor) const
-{
-    return m_duplicateEditors.contains(editor);
-}
-
-IEditor *EditorModel::originalForDuplicate(IEditor *duplicate) const
-{
-    IFile *file = duplicate->file();
-    foreach(Entry e, m_editors)
-        if (e.editor && e.editor->file() == file)
-            return e.editor;
-    return 0;
-}
-
-QList<IEditor *> EditorModel::duplicatesFor(IEditor *editor) const
-{
-    QList<IEditor *> result;
-    IFile *file = editor->file();
-    foreach(IEditor *e, m_duplicateEditors)
-        if (e->file() == file)
-            result += e;
-    return result;
-}
-
-void EditorModel::makeOriginal(IEditor *duplicate)
-{
-    Q_ASSERT(isDuplicate(duplicate));
-    IEditor *original = originalForDuplicate(duplicate);
-    Q_ASSERT(original);
-    int i = findEditor(original);
-    m_editors[i].editor = duplicate;
-    m_duplicateEditors.removeOne(duplicate);
-    m_duplicateEditors.append(original);
-}
-
-void EditorModel::emitDataChanged(IEditor *editor)
-{
-    int idx = findEditor(editor);
-    if (idx < 0)
-        return;
-    QModelIndex mindex = index(idx, 0);
-    emit dataChanged(mindex, mindex);
-}
-
-QModelIndex EditorModel::index(int row, int column, const QModelIndex &parent) const
-{
-    Q_UNUSED(parent);
-    if (column < 0 || column > 1 || row < 0 || row >= m_editors.count())
-        return QModelIndex();
-    return createIndex(row, column);
-}
-
-QVariant EditorModel::data(const QModelIndex &index, int role) const
-{
-    if (!index.isValid() || (index.column() != 0 && role < Qt::UserRole))
-        return QVariant();
-    Entry e = m_editors.at(index.row());
-    switch (role) {
-    case Qt::DisplayRole:
-        return (e.editor && e.editor->file()->isModified())
-                ? e.displayName() + QLatin1String("*")
-                : e.displayName();
-    case Qt::DecorationRole:
-        return (e.editor && e.editor->file()->isReadOnly())
-                ? QIcon(QLatin1String(":/core/images/locked.png"))
-                : QIcon();
-    case Qt::ToolTipRole:
-        return e.fileName().isEmpty()
-                ? e.displayName()
-                : QDir::toNativeSeparators(e.fileName());
-    case Qt::UserRole:
-        return qVariantFromValue(e.editor);
-    case Qt::UserRole + 1:
-        return e.fileName();
-    case Qt::UserRole + 2:
-        return e.editor ? QByteArray(e.editor->kind()) : e.kind();
-    default:
-        return QVariant();
-    }
-    return QVariant();
-}
-
-QModelIndex EditorModel::indexOf(IEditor *editor) const
-{
-    int idx = findEditor(originalForDuplicate(editor));
-    return createIndex(idx, 0);
-}
-
-void EditorModel::itemChanged()
-{
-    emitDataChanged(qobject_cast<IEditor*>(sender()));
-}
-
-
-
 //================EditorView====================
 
-EditorView::EditorView(EditorModel *model, QWidget *parent) :
+EditorView::EditorView(OpenEditorsModel *model, QWidget *parent) :
     QWidget(parent),
     m_model(model),
     m_toolBar(new QWidget),
@@ -677,7 +425,7 @@ void EditorView::listContextMenu(QPoint pos)
     }
 }
 
-SplitterOrView::SplitterOrView(Internal::EditorModel *model)
+SplitterOrView::SplitterOrView(OpenEditorsModel *model)
 {
     Q_ASSERT(model);
     m_isRoot = true;
diff --git a/src/plugins/coreplugin/editormanager/editorview.h b/src/plugins/coreplugin/editormanager/editorview.h
index 5e9ce5fbe05..fcc1ddd10b7 100644
--- a/src/plugins/coreplugin/editormanager/editorview.h
+++ b/src/plugins/coreplugin/editormanager/editorview.h
@@ -55,69 +55,17 @@ QT_END_NAMESPACE
 namespace Core {
 
 class IEditor;
+class OpenEditorsModel;
 
 namespace Internal {
 
-class EditorModel : public QAbstractItemModel
-{
-    Q_OBJECT
-public:
-    EditorModel(QObject *parent) : QAbstractItemModel(parent) {}
-    int columnCount(const QModelIndex &parent = QModelIndex()) const;
-    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
-    QModelIndex parent(const QModelIndex &/*index*/) const { return QModelIndex(); }
-    int rowCount(const QModelIndex &parent = QModelIndex()) const;
-    QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const;
-
-    void addEditor(IEditor *editor, bool isDuplicate = false);
-    void addRestoredEditor(const QString &fileName, const QString &displayName, const QByteArray &kind);
-    QModelIndex firstRestoredEditor() const;
-
-    struct Entry {
-        Entry():editor(0){}
-        IEditor *editor;
-        QString fileName() const;
-        QString displayName() const;
-        QByteArray kind() const;
-        QString m_fileName;
-        QString m_displayName;
-        QByteArray m_kind;
-    };
-    QList<Entry> entries() const { return m_editors; }
-
-    inline IEditor *editorAt(int row) const { return m_editors.at(row).editor; }
-
-    void removeEditor(IEditor *editor);
-    void removeEditor(const QModelIndex &index);
-
-    void removeAllRestoredEditors();
-    int restoredEditorCount() const;
-    void emitDataChanged(IEditor *editor);
-
-    QList<IEditor *> editors() const;
-    bool isDuplicate(IEditor *editor) const;
-    QList<IEditor *> duplicatesFor(IEditor *editor) const;
-    IEditor *originalForDuplicate(IEditor *duplicate) const;
-    void makeOriginal(IEditor *duplicate);
-    QModelIndex indexOf(IEditor *editor) const;
-private slots:
-    void itemChanged();
-
-private:
-    void addEntry(const Entry &entry);
-    int findEditor(IEditor *editor) const;
-    int findFileName(const QString &filename) const;
-    QList<Entry> m_editors;
-    QList<IEditor *>m_duplicateEditors;
-};
-
 
 class EditorView : public QWidget
 {
     Q_OBJECT
 
 public:
-    EditorView(EditorModel *model = 0, QWidget *parent = 0);
+    EditorView(OpenEditorsModel *model = 0, QWidget *parent = 0);
     virtual ~EditorView();
 
     int editorCount() const;
@@ -155,7 +103,7 @@ private:
     void updateToolBar(IEditor *editor);
     void checkProjectLoaded(IEditor *editor);
 
-    EditorModel *m_model;
+    OpenEditorsModel *m_model;
     QWidget *m_toolBar;
     QToolBar *m_activeToolBar;
     QStackedWidget *m_container;
@@ -181,7 +129,7 @@ class SplitterOrView  : public QWidget
 {
     Q_OBJECT
 public:
-    SplitterOrView(Internal::EditorModel *model); // creates a root splitter
+    SplitterOrView(OpenEditorsModel *model); // creates a root splitter
     SplitterOrView(Core::IEditor *editor = 0);
     ~SplitterOrView();
 
diff --git a/src/plugins/coreplugin/editormanager/openeditorsview.cpp b/src/plugins/coreplugin/editormanager/openeditorsview.cpp
index e8ce95a2ede..e4cf7843bd2 100644
--- a/src/plugins/coreplugin/editormanager/openeditorsview.cpp
+++ b/src/plugins/coreplugin/editormanager/openeditorsview.cpp
@@ -30,6 +30,7 @@
 #include "openeditorsview.h"
 #include "editormanager.h"
 #include "editorview.h"
+#include "openeditorsmodel.h"
 #include "icore.h"
 
 #include <coreplugin/coreconstants.h>
diff --git a/src/plugins/coreplugin/editormanager/openeditorswindow.cpp b/src/plugins/coreplugin/editormanager/openeditorswindow.cpp
index 23d74b36efa..2684ca09755 100644
--- a/src/plugins/coreplugin/editormanager/openeditorswindow.cpp
+++ b/src/plugins/coreplugin/editormanager/openeditorswindow.cpp
@@ -28,6 +28,7 @@
 **************************************************************************/
 
 #include "openeditorswindow.h"
+#include "openeditorsmodel.h"
 #include "editormanager.h"
 #include "editorview.h"
 
@@ -187,7 +188,7 @@ void OpenEditorsWindow::centerOnItem(int selectedIndex)
     }
 }
 
-void OpenEditorsWindow::setEditors(const QList<IEditor *>&editors, IEditor *current, EditorModel *model)
+void OpenEditorsWindow::setEditors(const QList<IEditor *>&editors, IEditor *current, OpenEditorsModel *model)
 {
     static const QIcon lockedIcon(QLatin1String(":/core/images/locked.png"));
     static const QIcon emptyIcon(QLatin1String(":/core/images/empty14.png"));
@@ -223,7 +224,7 @@ void OpenEditorsWindow::setEditors(const QList<IEditor *>&editors, IEditor *curr
     }
 
     // add purely restored editors which are not initialised yet
-    foreach (EditorModel::Entry entry, model->entries()) {
+    foreach (OpenEditorsModel::Entry entry, model->entries()) {
         if (entry.editor)
             continue;
         QTreeWidgetItem *item = new QTreeWidgetItem();
diff --git a/src/plugins/coreplugin/editormanager/openeditorswindow.h b/src/plugins/coreplugin/editormanager/openeditorswindow.h
index 3038e481328..21f53bdf429 100644
--- a/src/plugins/coreplugin/editormanager/openeditorswindow.h
+++ b/src/plugins/coreplugin/editormanager/openeditorswindow.h
@@ -40,11 +40,10 @@
 namespace Core {
 
 class IEditor;
+class OpenEditorsModel;
 
 namespace Internal {
 
-class EditorModel;
-
 class OpenEditorsWindow : public QWidget
 {
     Q_OBJECT
@@ -55,7 +54,7 @@ public:
     OpenEditorsWindow(QWidget *parent = 0);
     ~OpenEditorsWindow() {}
 
-    void setEditors(const QList<IEditor *>&editors, IEditor *current, EditorModel *model);
+    void setEditors(const QList<IEditor *>&editors, IEditor *current, OpenEditorsModel *model);
 
     bool event(QEvent *e);
     bool eventFilter(QObject *src, QEvent *e);
-- 
GitLab