forked from qt-creator/qt-creator
make ctrl-tab navigation view specific
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()));
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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,40 +189,67 @@ 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()) {
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user