diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index 0f387d1ac4d9090547338003c199c6f183386d96..e3f8f164ad5ca63eebbf6554b1bf3d56c84f5601 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -133,10 +133,6 @@ EditorManagerPlaceHolder* EditorManagerPlaceHolder::current() namespace Core { -//struct EditorHistoryItem { -// IFile *file; -// QPointer<Internal::EditorView> view; -//}; struct EditorManagerPrivate { explicit EditorManagerPrivate(ICore *core, QWidget *parent); @@ -167,8 +163,6 @@ struct EditorManagerPrivate { QAction *m_removeAllSplitsAction; QAction *m_gotoOtherSplitAction; - QList<IEditor *> m_editorHistory; - Internal::OpenEditorsWindow *m_windowPopup; Core::BaseView *m_openEditorsView; Internal::EditorClosingCoreListener *m_coreListener; @@ -196,8 +190,8 @@ EditorManagerPrivate::EditorManagerPrivate(ICore *core, QWidget *parent) : m_closeCurrentEditorAction(new QAction(EditorManager::tr("Close"), parent)), m_closeAllEditorsAction(new QAction(EditorManager::tr("Close All"), parent)), m_closeOtherEditorsAction(new QAction(EditorManager::tr("Close Others"), parent)), - m_gotoNextDocHistoryAction(new QAction(EditorManager::tr("Next Document in History"), parent)), - m_gotoPreviousDocHistoryAction(new QAction(EditorManager::tr("Previous Document in History"), parent)), + m_gotoNextDocHistoryAction(new QAction(EditorManager::tr("Next Open Document in History"), parent)), + m_gotoPreviousDocHistoryAction(new QAction(EditorManager::tr("Previous Open Document in History"), parent)), m_goBackAction(new QAction(QIcon(QLatin1String(":/help/images/previous.png")), EditorManager::tr("Go Back"), parent)), m_goForwardAction(new QAction(QIcon(QLatin1String(":/help/images/next.png")), EditorManager::tr("Go Forward"), parent)), m_openInExternalEditorAction(new QAction(EditorManager::tr("Open in External Editor"), parent)), @@ -455,15 +449,6 @@ QString EditorManager::defaultExternalEditor() const #endif } -void EditorManager::updateEditorHistory() -{ - IEditor *editor = currentEditor(); - if (!editor) - return; - m_d->m_editorHistory.removeAll(editor); - m_d->m_editorHistory.prepend(editor); -} - void EditorManager::removeEditor(IEditor *editor) { bool isDuplicate = m_d->m_editorModel->isDuplicate(editor); @@ -471,9 +456,7 @@ void EditorManager::removeEditor(IEditor *editor) if (!isDuplicate) { m_d->m_core->fileManager()->removeFile(editor->file()); } - m_d->m_editorHistory.removeAll(editor); m_d->m_core->removeContextObject(editor); - } void EditorManager::handleContextChange(Core::IContext *context) @@ -502,9 +485,9 @@ void EditorManager::setCurrentEditor(IEditor *editor, bool ignoreNavigationHisto if (editor) { if (SplitterOrView *splitterOrView = m_d->m_splitter->findView(editor)) splitterOrView->view()->setCurrentEditor(editor); + m_d->m_view->updateEditorHistory(editor); // the global view should have a complete history } updateActions(); - updateEditorHistory(); emit currentEditorChanged(editor); } @@ -533,6 +516,8 @@ Core::Internal::SplitterOrView *EditorManager::currentView() const view = m_d->m_currentEditor? m_d->m_splitter->findView(m_d->m_currentEditor): m_d->m_splitter->findFirstView(); + if (!view) + return m_d->m_splitter; return view; } @@ -616,7 +601,6 @@ void EditorManager::closeView(Core::Internal::EditorView *view) else setCurrentView(newCurrent); } - updateEditorHistory(); } QList<IEditor*> @@ -840,7 +824,7 @@ void EditorManager::closeDuplicate(Core::IEditor *editor) Core::IEditor *EditorManager::pickUnusedEditor() const { - foreach (IEditor *editor, m_d->m_editorHistory) { + foreach (IEditor *editor, openedEditors()) { SplitterOrView *view = m_d->m_splitter->findView(editor); if (!view || view->editor() != editor) return editor; @@ -848,7 +832,6 @@ Core::IEditor *EditorManager::pickUnusedEditor() const return 0; } - Core::IEditor *EditorManager::activateEditor(const QModelIndex &index, Internal::EditorView *view, OpenEditorFlags flags) { IEditor *editor = index.data(Qt::UserRole).value<IEditor*>(); @@ -863,7 +846,11 @@ Core::IEditor *EditorManager::activateEditor(const QModelIndex &index, Internal: Core::IEditor *EditorManager::placeEditor(Core::Internal::EditorView *view, Core::IEditor *editor) { - Q_ASSERT(view && editor) ; + Q_ASSERT(view && editor); + + if (view->currentEditor() && view->currentEditor()->file() == editor->file()) + editor = view->currentEditor(); + if (!view->hasEditor(editor)) { bool duplicateSupported = editor->duplicateSupported(); if (SplitterOrView *sourceView = m_d->m_splitter->findView(editor)) { @@ -1043,10 +1030,6 @@ void EditorManager::addEditor(IEditor *editor, bool isDuplicate) m_d->m_core->fileManager()->addToRecentFiles(editor->file()->fileName()); } } - - m_d->m_editorHistory.removeAll(editor); - m_d->m_editorHistory.prepend(editor); - emit editorOpened(editor); } @@ -1142,7 +1125,7 @@ IEditor *EditorManager::openEditor(Core::Internal::EditorView *view, const QStri const QList<IEditor *> editors = editorsForFileName(fileName); if (!editors.isEmpty()) { - return activateEditor(editors.first(), flags); + return activateEditor(view, editors.first(), flags); } QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); IEditor *editor = createEditor(editorKind, fileName); @@ -1422,7 +1405,8 @@ void EditorManager::gotoNextDocHistory() if (dialog->isVisible()) { dialog->selectNextEditor(); } else { - dialog->setEditors(m_d->m_editorHistory, m_d->m_currentEditor, m_d->m_editorModel); + EditorView *view = currentView()->view(); + dialog->setEditors(m_d->m_view, view, m_d->m_editorModel); dialog->selectNextEditor(); showWindowPopup(); } @@ -1434,7 +1418,8 @@ void EditorManager::gotoPreviousDocHistory() if (dialog->isVisible()) { dialog->selectPreviousEditor(); } else { - dialog->setEditors(m_d->m_editorHistory, m_d->m_currentEditor, m_d->m_editorModel); + EditorView *view = currentView()->view(); + dialog->setEditors(m_d->m_view, view, m_d->m_editorModel); dialog->selectPreviousEditor(); showWindowPopup(); } @@ -1489,8 +1474,8 @@ void EditorManager::updateActions() m_d->m_closeOtherEditorsAction->setEnabled(openedCount > 1); m_d->m_closeOtherEditorsAction->setText((openedCount > 1 ? tr("Close All Except %1").arg(quotedName) : tr("Close Others"))); - m_d->m_gotoNextDocHistoryAction->setEnabled(m_d->m_editorHistory.count() > 0); - m_d->m_gotoPreviousDocHistoryAction->setEnabled(m_d->m_editorHistory.count() > 0); + m_d->m_gotoNextDocHistoryAction->setEnabled(m_d->m_editorModel->rowCount() != 0); + m_d->m_gotoPreviousDocHistoryAction->setEnabled(m_d->m_editorModel->rowCount() != 0); EditorView *view = currentEditorView(); m_d->m_goBackAction->setEnabled(view->canGoBack()); m_d->m_goForwardAction->setEnabled(view->canGoForward()); @@ -1513,11 +1498,6 @@ OpenEditorsModel *EditorManager::openedEditorsModel() const return m_d->m_editorModel; } -QList<IEditor*> EditorManager::editorHistory() const -{ - return m_d->m_editorHistory; -} - void EditorManager::addCurrentPositionToNavigationHistory(IEditor *editor, const QByteArray &saveState) { currentView()->view()->addCurrentPositionToNavigationHistory(editor, saveState); @@ -1874,7 +1854,6 @@ void EditorManager::split(Qt::Orientation orientation) : m_d->m_splitter->findFirstView(); if (view && !view->splitter()) { view->split(orientation); - updateEditorHistory(); } updateActions(); } diff --git a/src/plugins/coreplugin/editormanager/editormanager.h b/src/plugins/coreplugin/editormanager/editormanager.h index 1da33f80aa16bab2b895969457330f5a87f49d16..c5e45da9ad031fb871e56a9e50c8212befbc1632 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.h +++ b/src/plugins/coreplugin/editormanager/editormanager.h @@ -36,6 +36,7 @@ #include <QtGui/QWidget> #include <QtCore/QList> +#include <QtCore/QPointer> QT_BEGIN_NAMESPACE class QSettings; @@ -72,6 +73,8 @@ class SplitterOrView; class EditorClosingCoreListener; class OpenEditorsViewFactory; + + } // namespace Internal class CORE_EXPORT EditorManagerPlaceHolder : public QWidget @@ -126,17 +129,17 @@ public: IEditor *currentEditor() const; IEditor *activateEditor(IEditor *editor, OpenEditorFlags flags = 0); + IEditor *activateEditor(const QModelIndex &index, Internal::EditorView *view = 0, OpenEditorFlags = 0); + IEditor *activateEditor(Core::Internal::EditorView *view, Core::IFile*file, OpenEditorFlags flags = 0); QList<IEditor*> openedEditors() const; OpenEditorsModel *openedEditorsModel() const; - IEditor *activateEditor(const QModelIndex &index, Internal::EditorView *view = 0, OpenEditorFlags = 0); void closeEditor(const QModelIndex &index); void closeOtherEditors(IEditor *editor); QList<IEditor*> editorsForFiles(QList<IFile*> files) const; //QList<EditorGroup *> editorGroups() const; - QList<IEditor*> editorHistory() const; void addCurrentPositionToNavigationHistory(IEditor *editor = 0, const QByteArray &saveState = QByteArray()); bool saveEditor(IEditor *editor); @@ -210,7 +213,6 @@ private slots: void gotoNextDocHistory(); void gotoPreviousDocHistory(); void handleContextChange(Core::IContext *context); - void updateEditorHistory(); void updateActions(); void revertToSaved(); void makeCurrentEditorWritable(); @@ -239,11 +241,11 @@ private: void setCurrentEditor(IEditor *editor, bool ignoreNavigationHistory = false); void setCurrentView(Core::Internal::SplitterOrView *view); IEditor *activateEditor(Core::Internal::EditorView *view, Core::IEditor *editor, OpenEditorFlags flags = 0); - IEditor *activateEditor(Core::Internal::EditorView *view, Core::IFile*file, OpenEditorFlags flags = 0); IEditor *openEditor(Core::Internal::EditorView *view, const QString &fileName, const QString &editorKind = QString(), OpenEditorFlags flags = 0); Core::Internal::SplitterOrView *currentView() const; + void closeEditor(Core::IEditor *editor); void closeDuplicate(Core::IEditor *editor); void closeView(Core::Internal::EditorView *view); diff --git a/src/plugins/coreplugin/editormanager/editorview.cpp b/src/plugins/coreplugin/editormanager/editorview.cpp index fab27321e5ee125276f50de9482014115d3e67f9..b19c7eacdca779765932d84b0e9bb9b676469444 100644 --- a/src/plugins/coreplugin/editormanager/editorview.cpp +++ b/src/plugins/coreplugin/editormanager/editorview.cpp @@ -323,6 +323,7 @@ void EditorView::setCurrentEditor(IEditor *editor) m_editorList->setCurrentIndex(m_model->indexOf(editor).row()); updateEditorStatus(editor); updateToolBar(editor); + updateEditorHistory(editor); // FIXME: this keeps the editor hidden if switching from A to B and back if (editor != m_editorForInfoWidget) { @@ -413,6 +414,35 @@ void EditorView::listContextMenu(QPoint pos) } } +void EditorView::updateEditorHistory(IEditor *editor) +{ + if (!editor) + return; + IFile *file = editor->file(); + + if (!file) + return; + + QString fileName = file->fileName(); + QByteArray state = editor->saveState(); + + EditLocation location; + location.file = file; + location.fileName = file->fileName(); + location.kind = editor->kind(); + location.state = QVariant(state); + + for(int i = 0; i < m_editorHistory.size(); ++i) { + if (m_editorHistory.at(i).file == 0 + || m_editorHistory.at(i).file == file + ){ + m_editorHistory.removeAt(i--); + continue; + } + } + m_editorHistory.prepend(location); +} + void EditorView::addCurrentPositionToNavigationHistory(IEditor *editor, const QByteArray &saveState) { if (editor && editor != currentEditor()) { @@ -436,29 +466,32 @@ void EditorView::addCurrentPositionToNavigationHistory(IEditor *editor, const QB state = saveState; } - EditLocation *location = new EditLocation; - location->file = file; - location->fileName = file->fileName(); - location->kind = editor->kind(); - location->state = QVariant(state); + EditLocation location; + location.file = file; + location.fileName = file->fileName(); + location.kind = editor->kind(); + location.state = QVariant(state); m_currentNavigationHistoryPosition = qMin(m_currentNavigationHistoryPosition, m_navigationHistory.size()); // paranoia m_navigationHistory.insert(m_currentNavigationHistoryPosition, location); ++m_currentNavigationHistoryPosition; while (m_navigationHistory.size() >= 30) { if (m_currentNavigationHistoryPosition > 15) { - delete m_navigationHistory.takeFirst(); + m_navigationHistory.takeFirst(); --m_currentNavigationHistoryPosition; } else { - delete m_navigationHistory.takeLast(); + m_navigationHistory.takeLast(); } } } void EditorView::copyNavigationHistoryFrom(EditorView* other) { + if (!other) + return; m_currentNavigationHistoryPosition = other->m_currentNavigationHistoryPosition; m_navigationHistory = other->m_navigationHistory; + m_editorHistory = other->m_editorHistory; } void EditorView::updateCurrentPositionInNavigationHistory() @@ -470,10 +503,10 @@ void EditorView::updateCurrentPositionInNavigationHistory() IFile *file = editor->file(); EditLocation *location; if (m_currentNavigationHistoryPosition < m_navigationHistory.size()) { - location = m_navigationHistory[m_currentNavigationHistoryPosition]; + location = &m_navigationHistory[m_currentNavigationHistoryPosition]; } else { - location = new EditLocation; - m_navigationHistory.append(location); + m_navigationHistory.append(EditLocation()); + location = &m_navigationHistory[m_navigationHistory.size()-1]; } location->file = file; location->fileName = file->fileName(); @@ -487,18 +520,18 @@ void EditorView::goBackInNavigationHistory() updateCurrentPositionInNavigationHistory(); while (m_currentNavigationHistoryPosition > 0) { --m_currentNavigationHistoryPosition; - EditLocation *location = m_navigationHistory.at(m_currentNavigationHistoryPosition); + EditLocation location = m_navigationHistory.at(m_currentNavigationHistoryPosition); IEditor *editor; - if (location->file) { - editor = em->activateEditor(this, location->file, EditorManager::IgnoreNavigationHistory); + if (location.file) { + editor = em->activateEditor(this, location.file, EditorManager::IgnoreNavigationHistory); } else { - editor = em->openEditor(this, location->fileName, location->kind, EditorManager::IgnoreNavigationHistory); + editor = em->openEditor(this, location.fileName, location.kind, EditorManager::IgnoreNavigationHistory); if (!editor) { - delete m_navigationHistory.takeAt(m_currentNavigationHistoryPosition); + m_navigationHistory.removeAt(m_currentNavigationHistoryPosition); continue; } } - editor->restoreState(location->state.toByteArray()); + editor->restoreState(location.state.toByteArray()); break; } } @@ -510,19 +543,19 @@ void EditorView::goForwardInNavigationHistory() if (m_currentNavigationHistoryPosition >= m_navigationHistory.size()-1) return; ++m_currentNavigationHistoryPosition; - EditLocation *location = m_navigationHistory.at(m_currentNavigationHistoryPosition); + EditLocation location = m_navigationHistory.at(m_currentNavigationHistoryPosition); IEditor *editor; - if (location->file) { - editor = em->activateEditor(this, location->file, EditorManager::IgnoreNavigationHistory); + if (location.file) { + editor = em->activateEditor(this, location.file, EditorManager::IgnoreNavigationHistory); } else { - editor = em->openEditor(this, location->fileName, location->kind, EditorManager::IgnoreNavigationHistory); + editor = em->openEditor(this, location.fileName, location.kind, EditorManager::IgnoreNavigationHistory); if (!editor) { //TODO - qDebug() << Q_FUNC_INFO << "can't open file" << location->fileName; + qDebug() << Q_FUNC_INFO << "can't open file" << location.fileName; return; } } - editor->restoreState(location->state.toByteArray()); + editor->restoreState(location.state.toByteArray()); } diff --git a/src/plugins/coreplugin/editormanager/editorview.h b/src/plugins/coreplugin/editormanager/editorview.h index 343c4e073f982a0ab5b23cf8b9ef83a058c5a83c..35ddcb6ad82c3148ab9d6d323b953457754b2399 100644 --- a/src/plugins/coreplugin/editormanager/editorview.h +++ b/src/plugins/coreplugin/editormanager/editorview.h @@ -131,22 +131,22 @@ private: QList<IEditor *> m_editors; QMap<QWidget *, IEditor *> m_widgetEditorMap; - QList<EditLocation *> m_navigationHistory; - void clearNavigationHistory() { - qDeleteAll(m_navigationHistory); - m_navigationHistory.clear(); - } + QList<EditLocation> m_navigationHistory; + QList<EditLocation> m_editorHistory; int m_currentNavigationHistoryPosition; void updateCurrentPositionInNavigationHistory(); + public: inline bool canGoForward() const { return m_currentNavigationHistoryPosition < m_navigationHistory.size()-1; } inline bool canGoBack() const { return m_currentNavigationHistoryPosition > 0; } void goBackInNavigationHistory(); void goForwardInNavigationHistory(); void addCurrentPositionToNavigationHistory(IEditor *editor = 0, const QByteArray &saveState = QByteArray()); + inline QList<EditLocation> editorHistory() const { return m_editorHistory; } void copyNavigationHistoryFrom(EditorView* other); + void updateEditorHistory(IEditor *editor); }; class SplitterOrView : public QWidget diff --git a/src/plugins/coreplugin/editormanager/openeditorsmodel.cpp b/src/plugins/coreplugin/editormanager/openeditorsmodel.cpp index 82bad267ba1d94328ed6a6842f3250eda2b36b2d..601900b288bd9705676759e7fb1c63dabab24f4c 100644 --- a/src/plugins/coreplugin/editormanager/openeditorsmodel.cpp +++ b/src/plugins/coreplugin/editormanager/openeditorsmodel.cpp @@ -281,6 +281,14 @@ QModelIndex OpenEditorsModel::indexOf(IEditor *editor) const return createIndex(idx, 0); } +QString OpenEditorsModel::displayNameForFile(IFile *file) const +{ + for (int i = 0; i < m_editors.count(); ++i) + if (m_editors.at(i).editor && m_editors.at(i).editor->file() == file) + return m_editors.at(i).editor->displayName(); + return QString(); +} + void OpenEditorsModel::itemChanged() { emitDataChanged(qobject_cast<IEditor*>(sender())); diff --git a/src/plugins/coreplugin/editormanager/openeditorsmodel.h b/src/plugins/coreplugin/editormanager/openeditorsmodel.h index 9172f2e29ee040f244912bae5ece5aa2163ab5ab..deaf14c953af025eebb6032d3c4d510c8be0f0dd 100644 --- a/src/plugins/coreplugin/editormanager/openeditorsmodel.h +++ b/src/plugins/coreplugin/editormanager/openeditorsmodel.h @@ -37,6 +37,7 @@ namespace Core { class IEditor; +class IFile; class CORE_EXPORT OpenEditorsModel : public QAbstractItemModel { @@ -81,6 +82,8 @@ public: void makeOriginal(IEditor *duplicate); QModelIndex indexOf(IEditor *editor) const; + QString displayNameForFile(IFile *file) const; + private slots: void itemChanged(); diff --git a/src/plugins/coreplugin/editormanager/openeditorswindow.cpp b/src/plugins/coreplugin/editormanager/openeditorswindow.cpp index 2684ca09755bc51149cd224e1ca447ac49a2e081..4db7b369af8e41b8f3ef40946bb65678c13704db 100644 --- a/src/plugins/coreplugin/editormanager/openeditorswindow.cpp +++ b/src/plugins/coreplugin/editormanager/openeditorswindow.cpp @@ -34,7 +34,8 @@ #include <QtGui/QHeaderView> -Q_DECLARE_METATYPE(Core::IEditor *) +Q_DECLARE_METATYPE(Core::Internal::EditorView*) +Q_DECLARE_METATYPE(Core::IFile *) using namespace Core; using namespace Core::Internal; @@ -188,41 +189,68 @@ void OpenEditorsWindow::centerOnItem(int selectedIndex) } } -void OpenEditorsWindow::setEditors(const QList<IEditor *>&editors, IEditor *current, OpenEditorsModel *model) +void OpenEditorsWindow::setEditors(EditorView *mainView, EditorView *view, OpenEditorsModel *model) { static const QIcon lockedIcon(QLatin1String(":/core/images/locked.png")); static const QIcon emptyIcon(QLatin1String(":/core/images/empty14.png")); m_editorList->clear(); + bool first = true; - QList<IEditor *> doneList; - QList<IFile *>doneFileList; - foreach (IEditor *editor, editors) { - if (doneList.contains(editor)) + QSet<IFile*> filesDone; + foreach (const EditLocation &hi, view->editorHistory()) { + if (hi.file == 0 || filesDone.contains(hi.file)) continue; - doneList += editor; - if (!editor->widget()->isVisible() && doneFileList.contains(editor->file())) - continue; - doneFileList += editor->file(); + filesDone.insert(hi.file.data()); QTreeWidgetItem *item = new QTreeWidgetItem(); - QString title = editor->displayName(); - if (editor->file()->isModified()) + QString title = model->displayNameForFile(hi.file); + if (hi.file && hi.file->isModified()) title += tr("*"); - item->setIcon(0, editor->file()->isReadOnly() ? lockedIcon : emptyIcon); + item->setIcon(0, hi.file->isReadOnly() ? lockedIcon : emptyIcon); item->setText(0, title); - item->setToolTip(0, editor->file()->fileName()); - item->setData(0, Qt::UserRole, QVariant::fromValue(editor)); + item->setToolTip(0, hi.file->fileName()); + item->setData(0, Qt::UserRole, QVariant::fromValue(hi.file.data())); + item->setData(0, Qt::UserRole+1, QVariant::fromValue(view)); item->setTextAlignment(0, Qt::AlignLeft); m_editorList->addTopLevelItem(item); - if (editor == current) + if (first){ m_editorList->setCurrentItem(item); - + first = false; + } } + // add missing editors from the main view + if (mainView != view) { + foreach (const EditLocation &hi, mainView->editorHistory()) { + if (hi.file == 0 || filesDone.contains(hi.file)) + continue; + filesDone.insert(hi.file.data()); + + QTreeWidgetItem *item = new QTreeWidgetItem(); + + QString title = model->displayNameForFile(hi.file); + if (hi.file && hi.file->isModified()) + title += tr("*"); + item->setIcon(0, hi.file->isReadOnly() ? lockedIcon : emptyIcon); + item->setText(0, title); + item->setToolTip(0, hi.file->fileName()); + item->setData(0, Qt::UserRole, QVariant::fromValue(hi.file.data())); + item->setData(0, Qt::UserRole+1, QVariant::fromValue(view)); + item->setTextAlignment(0, Qt::AlignLeft); + + m_editorList->addTopLevelItem(item); + + if (first){ + m_editorList->setCurrentItem(item); + first = false; + } + } +} + // add purely restored editors which are not initialised yet foreach (OpenEditorsModel::Entry entry, model->entries()) { if (entry.editor) @@ -232,7 +260,7 @@ void OpenEditorsWindow::setEditors(const QList<IEditor *>&editors, IEditor *curr item->setIcon(0, emptyIcon); item->setText(0, title); item->setToolTip(0, entry.fileName()); - item->setData(0, Qt::UserRole+1, QVariant::fromValue(entry.kind())); + item->setData(0, Qt::UserRole+2, QVariant::fromValue(entry.kind())); item->setTextAlignment(0, Qt::AlignLeft); m_editorList->addTopLevelItem(item); @@ -244,10 +272,12 @@ void OpenEditorsWindow::selectEditor(QTreeWidgetItem *item) { if (!item) return; - if (IEditor *editor = item->data(0, Qt::UserRole).value<IEditor*>()) - EditorManager::instance()->activateEditor(editor); - else - EditorManager::instance()->openEditor(item->toolTip(0), item->data(0, Qt::UserRole+1).toByteArray()); + if (IFile *file = item->data(0, Qt::UserRole).value<IFile*>()) { + EditorView *view = item->data(0, Qt::UserRole+1).value<EditorView*>(); + EditorManager::instance()->activateEditor(view, file); + } else { + EditorManager::instance()->openEditor(item->toolTip(0), item->data(0, Qt::UserRole+2).toByteArray()); + } } void OpenEditorsWindow::editorClicked(QTreeWidgetItem *item) diff --git a/src/plugins/coreplugin/editormanager/openeditorswindow.h b/src/plugins/coreplugin/editormanager/openeditorswindow.h index 21f53bdf429529bffb1a142e4f4baabbd39fa39e..7ce25c1ac6498a42f8c645da9cf82dd89229b915 100644 --- a/src/plugins/coreplugin/editormanager/openeditorswindow.h +++ b/src/plugins/coreplugin/editormanager/openeditorswindow.h @@ -44,6 +44,9 @@ class OpenEditorsModel; namespace Internal { +class EditorHistoryItem; +class EditorView; + class OpenEditorsWindow : public QWidget { Q_OBJECT @@ -54,7 +57,7 @@ public: OpenEditorsWindow(QWidget *parent = 0); ~OpenEditorsWindow() {} - void setEditors(const QList<IEditor *>&editors, IEditor *current, OpenEditorsModel *model); + void setEditors(EditorView *mainView, EditorView *view, OpenEditorsModel *model); bool event(QEvent *e); bool eventFilter(QObject *src, QEvent *e); diff --git a/src/plugins/coreplugin/scriptmanager/qworkbench_wrapper.cpp b/src/plugins/coreplugin/scriptmanager/qworkbench_wrapper.cpp index df8f7352adbf6b28307223f4e3e7c55f5964ea9a..1a4803ca71d6bc84adf4302ac951d22f63c59383 100644 --- a/src/plugins/coreplugin/scriptmanager/qworkbench_wrapper.cpp +++ b/src/plugins/coreplugin/scriptmanager/qworkbench_wrapper.cpp @@ -256,11 +256,6 @@ QList<Core::IEditor*> EditorManagerPrototype::openedEditors() const return callee()->openedEditors(); } -QList<Core::IEditor*> EditorManagerPrototype::editorHistory() const -{ - return callee()->editorHistory(); -} - QList<Core::IEditor*> EditorManagerPrototype::editorsForFiles(QList<Core::IFile*> files) const { return callee()->editorsForFiles(files); diff --git a/src/plugins/coreplugin/scriptmanager/qworkbench_wrapper.h b/src/plugins/coreplugin/scriptmanager/qworkbench_wrapper.h index a8d386bbf96596d0151503e5e2faac8b1014dcfd..52bad34648337272240ecb2cb72060aadf946d54 100644 --- a/src/plugins/coreplugin/scriptmanager/qworkbench_wrapper.h +++ b/src/plugins/coreplugin/scriptmanager/qworkbench_wrapper.h @@ -165,7 +165,6 @@ class EditorManagerPrototype : public QObject, public QScriptable Q_OBJECT Q_PROPERTY(Core::IEditor* currentEditor READ currentEditor WRITE activateEditor DESIGNABLE false SCRIPTABLE true STORED false) Q_PROPERTY(QList<Core::IEditor*> openedEditors READ openedEditors DESIGNABLE false SCRIPTABLE true STORED false) - Q_PROPERTY(QList<Core::IEditor*> editorHistory READ editorHistory DESIGNABLE false SCRIPTABLE true STORED false) public: typedef Core::EditorManager EditorManager;