forked from qt-creator/qt-creator
Editors: Get rid of keeping separate lists of "duplicated" editors.
And use documents for the list of currently open documents, instead of using a set of "original" editors that needed to be separately managed. Change-Id: I3379ca44f03646399d3ecb0e775d7f1fd81a6bcf Reviewed-by: Eike Ziller <eike.ziller@digia.com>
This commit is contained in:
@@ -507,9 +507,9 @@ EditorToolBar *EditorManager::createToolBar(QWidget *parent)
|
||||
|
||||
void EditorManager::removeEditor(IEditor *editor)
|
||||
{
|
||||
bool isDuplicate = d->m_editorModel->isDuplicate(editor);
|
||||
d->m_editorModel->removeEditor(editor);
|
||||
if (!isDuplicate)
|
||||
bool lastOneForDocument = false;
|
||||
d->m_editorModel->removeEditor(editor, &lastOneForDocument);
|
||||
if (lastOneForDocument)
|
||||
DocumentManager::removeDocument(editor->document());
|
||||
ICore::removeContextObject(editor);
|
||||
}
|
||||
@@ -660,22 +660,18 @@ void EditorManager::emptyView(Core::Internal::EditorView *view)
|
||||
|
||||
QList<IEditor *> editors = view->editors();
|
||||
foreach (IEditor *editor, editors) {
|
||||
if (!d->m_editorModel->isDuplicate(editor)) {
|
||||
QList<IEditor *> duplicates = d->m_editorModel->duplicatesFor(editor);
|
||||
if (!duplicates.isEmpty()) {
|
||||
d->m_editorModel->makeOriginal(duplicates.first());
|
||||
} else {
|
||||
// it's the only editor for that file and it's not a duplicate,
|
||||
if (d->m_editorModel->editorsForDocument(editor->document()).size() == 1) {
|
||||
// it's the only editor for that file
|
||||
// so we need to keep it around (--> in the editor model)
|
||||
if (currentEditor() == editor) {
|
||||
// we don't want a current editor that is not open in a view
|
||||
setCurrentView(view);
|
||||
setCurrentEditor(0);
|
||||
}
|
||||
editors.removeAll(editor);
|
||||
view->removeEditor(editor);
|
||||
continue; // don't close the editor
|
||||
}
|
||||
}
|
||||
emit editorAboutToClose(editor);
|
||||
removeEditor(editor);
|
||||
view->removeEditor(editor);
|
||||
@@ -743,33 +739,6 @@ void EditorManager::closeView(Core::Internal::EditorView *view)
|
||||
}
|
||||
}
|
||||
|
||||
QList<IEditor*>
|
||||
EditorManager::editorsForDocuments(QList<IDocument*> documents) const
|
||||
{
|
||||
const QList<IEditor *> editors = openedEditors();
|
||||
QSet<IEditor *> found;
|
||||
foreach (IDocument *document, documents) {
|
||||
foreach (IEditor *editor, editors) {
|
||||
if (editor->document() == document && !found.contains(editor))
|
||||
found << editor;
|
||||
}
|
||||
}
|
||||
return found.toList();
|
||||
}
|
||||
|
||||
QList<IDocument *> EditorManager::documentsForEditors(QList<IEditor *> editors) const
|
||||
{
|
||||
QSet<IEditor *> handledEditors;
|
||||
QList<IDocument *> documents;
|
||||
foreach (IEditor *editor, editors) {
|
||||
if (!handledEditors.contains(editor)) {
|
||||
documents << editor->document();
|
||||
handledEditors.insert(editor);
|
||||
}
|
||||
}
|
||||
return documents;
|
||||
}
|
||||
|
||||
bool EditorManager::closeAllEditors(bool askAboutModifiedEditors)
|
||||
{
|
||||
d->m_editorModel->removeAllRestoredEditors();
|
||||
@@ -780,19 +749,21 @@ bool EditorManager::closeAllEditors(bool askAboutModifiedEditors)
|
||||
return false;
|
||||
}
|
||||
|
||||
void EditorManager::closeOtherEditors(IEditor *editor)
|
||||
void EditorManager::closeOtherEditors(IDocument *document)
|
||||
{
|
||||
d->m_editorModel->removeAllRestoredEditors();
|
||||
QList<IEditor*> editors = openedEditors();
|
||||
editors.removeAll(editor);
|
||||
closeEditors(editors, true);
|
||||
QList<IEditor *> editorsToClose;
|
||||
foreach (IEditor *editor, openedEditors())
|
||||
if (editor->document() != document)
|
||||
editorsToClose << editor;
|
||||
closeEditors(editorsToClose, true);
|
||||
}
|
||||
|
||||
void EditorManager::closeOtherEditors()
|
||||
{
|
||||
IEditor *current = currentEditor();
|
||||
QTC_ASSERT(current, return);
|
||||
closeOtherEditors(current);
|
||||
closeOtherEditors(current->document());
|
||||
}
|
||||
|
||||
// SLOT connected to action
|
||||
@@ -822,9 +793,9 @@ void EditorManager::addSaveAndCloseEditorActions(QMenu *contextMenu, OpenEditors
|
||||
assignAction(d->m_saveAsCurrentEditorContextAction, ActionManager::command(Constants::SAVEAS)->action());
|
||||
assignAction(d->m_revertToSavedCurrentEditorContextAction, ActionManager::command(Constants::REVERTTOSAVED)->action());
|
||||
|
||||
IEditor *editor = entry ? entry->editor : 0;
|
||||
IDocument *document = entry ? entry->document : 0;
|
||||
|
||||
setupSaveActions(editor,
|
||||
setupSaveActions(document,
|
||||
d->m_saveCurrentEditorContextAction,
|
||||
d->m_saveAsCurrentEditorContextAction,
|
||||
d->m_revertToSavedCurrentEditorContextAction);
|
||||
@@ -955,36 +926,36 @@ void EditorManager::doEscapeKeyFocusMoveMagic()
|
||||
|
||||
void EditorManager::saveDocumentFromContextMenu()
|
||||
{
|
||||
IEditor *editor = d->m_contextMenuEntry ? d->m_contextMenuEntry->editor : 0;
|
||||
if (editor)
|
||||
saveDocument(editor->document());
|
||||
IDocument *document = d->m_contextMenuEntry ? d->m_contextMenuEntry->document : 0;
|
||||
if (document)
|
||||
saveDocument(document);
|
||||
}
|
||||
|
||||
void EditorManager::saveDocumentAsFromContextMenu()
|
||||
{
|
||||
IEditor *editor = d->m_contextMenuEntry ? d->m_contextMenuEntry->editor : 0;
|
||||
if (editor)
|
||||
saveDocumentAs(editor->document());
|
||||
IDocument *document = d->m_contextMenuEntry ? d->m_contextMenuEntry->document : 0;
|
||||
if (document)
|
||||
saveDocumentAs(document);
|
||||
}
|
||||
|
||||
void EditorManager::revertToSavedFromContextMenu()
|
||||
{
|
||||
IEditor *editor = d->m_contextMenuEntry ? d->m_contextMenuEntry->editor : 0;
|
||||
if (editor)
|
||||
revertToSaved(editor);
|
||||
IDocument *document = d->m_contextMenuEntry ? d->m_contextMenuEntry->document : 0;
|
||||
if (document)
|
||||
revertToSaved(document);
|
||||
}
|
||||
|
||||
void EditorManager::closeEditorFromContextMenu()
|
||||
{
|
||||
IEditor *editor = d->m_contextMenuEntry ? d->m_contextMenuEntry->editor : 0;
|
||||
if (editor)
|
||||
closeEditor(editor);
|
||||
IDocument *document = d->m_contextMenuEntry ? d->m_contextMenuEntry->document : 0;
|
||||
if (document)
|
||||
closeEditors(d->m_editorModel->editorsForDocument(document));
|
||||
}
|
||||
|
||||
void EditorManager::closeOtherEditorsFromContextMenu()
|
||||
{
|
||||
IEditor *editor = d->m_contextMenuEntry ? d->m_contextMenuEntry->editor : 0;
|
||||
closeOtherEditors(editor);
|
||||
IDocument *document = d->m_contextMenuEntry ? d->m_contextMenuEntry->document : 0;
|
||||
closeOtherEditors(document);
|
||||
}
|
||||
|
||||
void EditorManager::showInGraphicalShell()
|
||||
@@ -1068,8 +1039,8 @@ void EditorManager::closeEditor(OpenEditorsModel::Entry *entry)
|
||||
{
|
||||
if (!entry)
|
||||
return;
|
||||
if (entry->editor)
|
||||
closeEditor(entry->editor);
|
||||
if (entry->document)
|
||||
closeEditors(d->m_editorModel->editorsForDocument(entry->document));
|
||||
else
|
||||
d->m_editorModel->removeEntry(entry);
|
||||
}
|
||||
@@ -1082,14 +1053,13 @@ bool EditorManager::closeEditors(const QList<IEditor*> &editorsToClose, bool ask
|
||||
EditorView *currentView = currentEditorView();
|
||||
|
||||
bool closingFailed = false;
|
||||
QList<IEditor*> acceptedEditors;
|
||||
QSet<IEditor*> acceptedEditors;
|
||||
QSet<IDocument *> acceptedDocuments;
|
||||
//ask all core listeners to check whether the editor can be closed
|
||||
const QList<ICoreListener *> listeners =
|
||||
ExtensionSystem::PluginManager::getObjects<ICoreListener>();
|
||||
foreach (IEditor *editor, editorsToClose) {
|
||||
bool editorAccepted = true;
|
||||
if (d->m_editorModel->isDuplicate(editor))
|
||||
editor = d->m_editorModel->originalForDuplicate(editor);
|
||||
foreach (ICoreListener *listener, listeners) {
|
||||
if (!listener->editorAboutToClose(editor)) {
|
||||
editorAccepted = false;
|
||||
@@ -1097,21 +1067,24 @@ bool EditorManager::closeEditors(const QList<IEditor*> &editorsToClose, bool ask
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (editorAccepted)
|
||||
acceptedEditors.append(editor);
|
||||
if (editorAccepted) {
|
||||
acceptedEditors += d->m_editorModel->editorsForDocument(editor->document()).toSet();
|
||||
acceptedDocuments.insert(editor->document());
|
||||
}
|
||||
}
|
||||
if (acceptedEditors.isEmpty())
|
||||
return false;
|
||||
//ask whether to save modified files
|
||||
if (askAboutModifiedEditors) {
|
||||
bool cancelled = false;
|
||||
QList<IDocument*> list = DocumentManager::saveModifiedDocuments(documentsForEditors(acceptedEditors), &cancelled);
|
||||
QList<IDocument*> list = DocumentManager::saveModifiedDocuments(acceptedDocuments.toList(), &cancelled);
|
||||
if (cancelled)
|
||||
return false;
|
||||
if (!list.isEmpty()) {
|
||||
closingFailed = true;
|
||||
QSet<IEditor*> skipSet = editorsForDocuments(list).toSet();
|
||||
acceptedEditors = acceptedEditors.toSet().subtract(skipSet).toList();
|
||||
acceptedDocuments.subtract(list.toSet());
|
||||
QSet<IEditor*> skipSet = d->m_editorModel->editorsForDocuments(list).toSet();
|
||||
acceptedEditors = acceptedEditors.subtract(skipSet);
|
||||
}
|
||||
}
|
||||
if (acceptedEditors.isEmpty())
|
||||
@@ -1120,12 +1093,6 @@ bool EditorManager::closeEditors(const QList<IEditor*> &editorsToClose, bool ask
|
||||
// close Editor History list
|
||||
windowPopup()->setVisible(false);
|
||||
|
||||
// add duplicates
|
||||
QList<IEditor *> duplicates;
|
||||
foreach (IEditor *editor, acceptedEditors)
|
||||
duplicates += d->m_editorModel->duplicatesFor(editor);
|
||||
acceptedEditors += duplicates;
|
||||
|
||||
QList<EditorView*> closedViews;
|
||||
|
||||
// remove the editors
|
||||
@@ -1168,14 +1135,18 @@ bool EditorManager::closeEditors(const QList<IEditor*> &editorsToClose, bool ask
|
||||
if (entry) {
|
||||
activateEditorForEntry(view, entry, flags);
|
||||
} else {
|
||||
const QList<IEditor *> editors = d->m_editorModel->editors();
|
||||
if (!editors.isEmpty())
|
||||
activateEditor(view, editors.last(), flags);
|
||||
// no "restored" ones, so any entry left should have a document
|
||||
const QList<OpenEditorsModel::Entry *> documents = d->m_editorModel->entries();
|
||||
if (!documents.isEmpty()) {
|
||||
IDocument *document = documents.last()->document;
|
||||
if (document)
|
||||
activateEditorForDocument(view, document, flags);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
emit editorsClosed(acceptedEditors);
|
||||
emit editorsClosed(acceptedEditors.toList());
|
||||
|
||||
foreach (IEditor *editor, acceptedEditors) {
|
||||
delete editor;
|
||||
@@ -1197,50 +1168,6 @@ bool EditorManager::closeEditors(const QList<IEditor*> &editorsToClose, bool ask
|
||||
return !closingFailed;
|
||||
}
|
||||
|
||||
void EditorManager::closeDuplicate(Core::IEditor *editor)
|
||||
{
|
||||
|
||||
IEditor *original = editor;
|
||||
if (d->m_editorModel->isDuplicate(editor))
|
||||
original= d->m_editorModel->originalForDuplicate(editor);
|
||||
QList<IEditor *> duplicates = d->m_editorModel->duplicatesFor(original);
|
||||
|
||||
if (duplicates.isEmpty()) {
|
||||
closeEditor(editor);
|
||||
return;
|
||||
}
|
||||
|
||||
if (original== editor)
|
||||
d->m_editorModel->makeOriginal(duplicates.first());
|
||||
|
||||
EditorView *currentView = currentEditorView();
|
||||
|
||||
emit editorAboutToClose(editor);
|
||||
|
||||
if (EditorView *view = viewForEditor(editor)) {
|
||||
removeEditor(editor);
|
||||
view->removeEditor(editor);
|
||||
|
||||
IEditor *newCurrent = view->currentEditor();
|
||||
if (!newCurrent)
|
||||
newCurrent = pickUnusedEditor();
|
||||
if (newCurrent) {
|
||||
activateEditor(view, newCurrent, DoNotChangeCurrentEditor);
|
||||
} else {
|
||||
OpenEditorsModel::Entry *entry = d->m_editorModel->firstRestoredEditor();
|
||||
if (entry)
|
||||
activateEditorForEntry(view, entry, DoNotChangeCurrentEditor);
|
||||
}
|
||||
}
|
||||
|
||||
emit editorsClosed(QList<IEditor*>() << editor);
|
||||
delete editor;
|
||||
if (currentView) {
|
||||
if (IEditor *currentEditor = currentView->currentEditor())
|
||||
activateEditor(currentView, currentEditor);
|
||||
}
|
||||
}
|
||||
|
||||
Core::IEditor *EditorManager::pickUnusedEditor() const
|
||||
{
|
||||
foreach (IEditor *editor, openedEditors()) {
|
||||
@@ -1265,9 +1192,9 @@ void EditorManager::activateEditorForEntry(Internal::EditorView *view, OpenEdito
|
||||
setCurrentEditor(0);
|
||||
return;
|
||||
}
|
||||
IEditor *editor = entry->editor;
|
||||
if (editor) {
|
||||
activateEditor(view, editor, flags);
|
||||
IDocument *document = entry->document;
|
||||
if (document) {
|
||||
activateEditorForDocument(view, document, flags);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1298,6 +1225,7 @@ Core::IEditor *EditorManager::placeEditor(Core::Internal::EditorView *view, Core
|
||||
bool duplicateSupported = editor->duplicateSupported();
|
||||
if (EditorView *sourceView = viewForEditor(editor)) {
|
||||
if (editor != sourceView->currentEditor() || !duplicateSupported) {
|
||||
// pull the IEditor over to the new view
|
||||
sourceView->removeEditor(editor);
|
||||
view->addEditor(editor);
|
||||
view->setCurrentEditor(editor);
|
||||
@@ -1309,7 +1237,6 @@ Core::IEditor *EditorManager::placeEditor(Core::Internal::EditorView *view, Core
|
||||
} else if (duplicateSupported) {
|
||||
editor = duplicateEditor(editor);
|
||||
Q_ASSERT(editor);
|
||||
d->m_editorModel->makeOriginal(editor);
|
||||
}
|
||||
}
|
||||
view->addEditor(editor);
|
||||
@@ -1475,14 +1402,15 @@ IEditor *EditorManager::createEditor(const Id &editorId, const QString &fileName
|
||||
return editor;
|
||||
}
|
||||
|
||||
void EditorManager::addEditor(IEditor *editor, bool isDuplicate)
|
||||
void EditorManager::addEditor(IEditor *editor)
|
||||
{
|
||||
if (!editor)
|
||||
return;
|
||||
ICore::addContextObject(editor);
|
||||
|
||||
d->m_editorModel->addEditor(editor, isDuplicate);
|
||||
if (!isDuplicate) {
|
||||
bool isNewDocument = false;
|
||||
d->m_editorModel->addEditor(editor, &isNewDocument);
|
||||
if (isNewDocument) {
|
||||
const bool isTemporary = editor->isTemporary();
|
||||
const bool addWatcher = !isTemporary;
|
||||
DocumentManager::addDocument(editor->document(), addWatcher);
|
||||
@@ -2035,14 +1963,14 @@ void EditorManager::updateMakeWritableWarning()
|
||||
}
|
||||
}
|
||||
|
||||
void EditorManager::setupSaveActions(IEditor *editor, QAction *saveAction, QAction *saveAsAction, QAction *revertToSavedAction)
|
||||
void EditorManager::setupSaveActions(IDocument *document, QAction *saveAction, QAction *saveAsAction, QAction *revertToSavedAction)
|
||||
{
|
||||
saveAction->setEnabled(editor != 0 && editor->document()->isModified());
|
||||
saveAsAction->setEnabled(editor != 0 && editor->document()->isSaveAsAllowed());
|
||||
revertToSavedAction->setEnabled(editor != 0
|
||||
&& !editor->document()->filePath().isEmpty() && editor->document()->isModified());
|
||||
saveAction->setEnabled(document != 0 && document->isModified());
|
||||
saveAsAction->setEnabled(document != 0 && document->isSaveAsAllowed());
|
||||
revertToSavedAction->setEnabled(document != 0
|
||||
&& !document->filePath().isEmpty() && document->isModified());
|
||||
|
||||
const QString documentName = editor ? editor->document()->displayName() : QString();
|
||||
const QString documentName = document ? document->displayName() : QString();
|
||||
QString quotedName;
|
||||
|
||||
if (!documentName.isEmpty()) {
|
||||
@@ -2056,11 +1984,12 @@ void EditorManager::setupSaveActions(IEditor *editor, QAction *saveAction, QActi
|
||||
void EditorManager::updateActions()
|
||||
{
|
||||
IEditor *curEditor = currentEditor();
|
||||
IDocument *curDocument = curEditor ? curEditor->document() : 0;
|
||||
int openedCount = d->m_editorModel->openDocumentCount();
|
||||
|
||||
if (curEditor) {
|
||||
if (curDocument) {
|
||||
if (HostOsInfo::isMacHost())
|
||||
window()->setWindowModified(curEditor->document()->isModified());
|
||||
window()->setWindowModified(curDocument->isModified());
|
||||
updateMakeWritableWarning();
|
||||
} else /* curEditor */ if (HostOsInfo::isMacHost()) {
|
||||
window()->setWindowModified(false);
|
||||
@@ -2070,11 +1999,11 @@ void EditorManager::updateActions()
|
||||
setCloseSplitEnabled(root, root->isSplitter());
|
||||
|
||||
QString quotedName;
|
||||
if (curEditor)
|
||||
quotedName = QLatin1Char('"') + curEditor->document()->displayName() + QLatin1Char('"');
|
||||
setupSaveActions(curEditor, d->m_saveAction, d->m_saveAsAction, d->m_revertToSavedAction);
|
||||
if (curDocument)
|
||||
quotedName = QLatin1Char('"') + curDocument->displayName() + QLatin1Char('"');
|
||||
setupSaveActions(curDocument, d->m_saveAction, d->m_saveAsAction, d->m_revertToSavedAction);
|
||||
|
||||
d->m_closeCurrentEditorAction->setEnabled(curEditor != 0);
|
||||
d->m_closeCurrentEditorAction->setEnabled(curDocument);
|
||||
d->m_closeCurrentEditorAction->setText(tr("Close %1").arg(quotedName));
|
||||
d->m_closeAllEditorsAction->setEnabled(openedCount > 0);
|
||||
d->m_closeOtherEditorsAction->setEnabled(openedCount > 1);
|
||||
@@ -2139,9 +2068,10 @@ QList<IEditor*> EditorManager::visibleEditors() const
|
||||
return editors;
|
||||
}
|
||||
|
||||
// TODO code using this should probably better use OpenEditorsModel
|
||||
QList<IEditor*> EditorManager::openedEditors() const
|
||||
{
|
||||
return d->m_editorModel->editors();
|
||||
return d->m_editorModel->oneEditorForEachDocument();
|
||||
}
|
||||
|
||||
OpenEditorsModel *EditorManager::openedEditorsModel() const
|
||||
@@ -2232,15 +2162,22 @@ QByteArray EditorManager::saveState() const
|
||||
QList<OpenEditorsModel::Entry *> entries = d->m_editorModel->entries();
|
||||
int entriesCount = 0;
|
||||
foreach (OpenEditorsModel::Entry *entry, entries) {
|
||||
// TODO: isTemporary should move to IDocument
|
||||
IEditor *editor = entry->document
|
||||
? d->m_editorModel->editorsForDocument(entry->document).first()
|
||||
: 0;
|
||||
// The editor may be 0 if it was not loaded yet: In that case it is not temporary
|
||||
if (!entry->editor || !entry->editor->isTemporary())
|
||||
if (!editor || !editor->isTemporary())
|
||||
++entriesCount;
|
||||
}
|
||||
|
||||
stream << entriesCount;
|
||||
|
||||
foreach (OpenEditorsModel::Entry *entry, entries) {
|
||||
if (!entry->editor || !entry->editor->isTemporary())
|
||||
IEditor *editor = entry->document
|
||||
? d->m_editorModel->editorsForDocument(entry->document).first()
|
||||
: 0;
|
||||
if (!editor || !editor->isTemporary())
|
||||
stream << entry->fileName() << entry->displayName() << entry->id();
|
||||
}
|
||||
|
||||
@@ -2352,17 +2289,18 @@ void EditorManager::readSettings()
|
||||
|
||||
void EditorManager::revertToSaved()
|
||||
{
|
||||
revertToSaved(currentEditor());
|
||||
IEditor *editor = currentEditor();
|
||||
revertToSaved(editor ? editor->document() : 0);
|
||||
}
|
||||
|
||||
void EditorManager::revertToSaved(Core::IEditor *editor)
|
||||
void EditorManager::revertToSaved(Core::IDocument *document)
|
||||
{
|
||||
if (!editor)
|
||||
if (!document)
|
||||
return;
|
||||
const QString fileName = editor->document()->filePath();
|
||||
const QString fileName = document->filePath();
|
||||
if (fileName.isEmpty())
|
||||
return;
|
||||
if (editor->document()->isModified()) {
|
||||
if (document->isModified()) {
|
||||
QMessageBox msgBox(QMessageBox::Question, tr("Revert to Saved"),
|
||||
tr("You will lose your current changes if you proceed reverting %1.").arg(QDir::toNativeSeparators(fileName)),
|
||||
QMessageBox::Yes|QMessageBox::No, ICore::mainWindow());
|
||||
@@ -2375,7 +2313,7 @@ void EditorManager::revertToSaved(Core::IEditor *editor)
|
||||
|
||||
}
|
||||
QString errorString;
|
||||
if (!editor->document()->reload(&errorString, IDocument::FlagReload, IDocument::TypeContents))
|
||||
if (!document->reload(&errorString, IDocument::FlagReload, IDocument::TypeContents))
|
||||
QMessageBox::critical(ICore::mainWindow(), tr("File Error"), errorString);
|
||||
}
|
||||
|
||||
@@ -2444,7 +2382,7 @@ Core::IEditor *EditorManager::duplicateEditor(Core::IEditor *editor)
|
||||
IEditor *duplicate = editor->duplicate(0);
|
||||
duplicate->restoreState(editor->saveState());
|
||||
emit editorCreated(duplicate, duplicate->document()->filePath());
|
||||
addEditor(duplicate, true);
|
||||
addEditor(duplicate);
|
||||
return duplicate;
|
||||
}
|
||||
|
||||
|
||||
@@ -136,9 +136,8 @@ public:
|
||||
|
||||
OpenEditorsModel *openedEditorsModel() const;
|
||||
void closeEditor(OpenEditorsModel::Entry *entry);
|
||||
void closeOtherEditors(IEditor *editor);
|
||||
void closeOtherEditors(IDocument *document);
|
||||
|
||||
QList<IEditor*> editorsForDocuments(QList<IDocument *> documents) const;
|
||||
void addCurrentPositionToNavigationHistory(IEditor *editor = 0, const QByteArray &saveState = QByteArray());
|
||||
void cutForwardNavigationHistory();
|
||||
|
||||
@@ -203,7 +202,7 @@ public slots:
|
||||
bool saveDocument(Core::IDocument *documentParam = 0);
|
||||
bool saveDocumentAs(Core::IDocument *documentParam = 0);
|
||||
void revertToSaved();
|
||||
void revertToSaved(Core::IEditor *editor);
|
||||
void revertToSaved(IDocument *document);
|
||||
void closeEditor();
|
||||
void closeOtherEditors();
|
||||
void doEscapeKeyFocusMoveMagic();
|
||||
@@ -251,9 +250,8 @@ private:
|
||||
virtual ~EditorManager();
|
||||
void init();
|
||||
|
||||
QList<IDocument *> documentsForEditors(QList<IEditor *> editors) const;
|
||||
static IEditor *createEditor(const Id &id = Id(), const QString &fileName = QString());
|
||||
void addEditor(IEditor *editor, bool isDuplicate = false);
|
||||
void addEditor(IEditor *editor);
|
||||
void removeEditor(IEditor *editor);
|
||||
|
||||
void restoreEditorState(IEditor *editor);
|
||||
@@ -273,7 +271,6 @@ private:
|
||||
static Internal::SplitterOrView *findRoot(const Internal::EditorView *view, int *rootIndex = 0);
|
||||
|
||||
void closeEditor(IEditor *editor);
|
||||
void closeDuplicate(IEditor *editor);
|
||||
void closeView(Internal::EditorView *view);
|
||||
void emptyView(Internal::EditorView *view);
|
||||
static void splitNewWindow(Internal::EditorView *view);
|
||||
@@ -282,7 +279,7 @@ private:
|
||||
void updateAutoSave();
|
||||
void setCloseSplitEnabled(Internal::SplitterOrView *splitterOrView, bool enable);
|
||||
void updateMakeWritableWarning();
|
||||
void setupSaveActions(IEditor *editor, QAction *saveAction, QAction *saveAsAction, QAction *revertToSavedAction);
|
||||
void setupSaveActions(IDocument *document, QAction *saveAction, QAction *saveAsAction, QAction *revertToSavedAction);
|
||||
|
||||
friend class Core::Internal::MainWindow;
|
||||
friend class Core::Internal::SplitterOrView;
|
||||
|
||||
@@ -45,8 +45,8 @@ struct OpenEditorsModelPrivate
|
||||
const QIcon m_lockedIcon;
|
||||
const QIcon m_unlockedIcon;
|
||||
|
||||
QList<OpenEditorsModel::Entry *> m_editors;
|
||||
QList<IEditor *> m_duplicateEditors;
|
||||
QList<OpenEditorsModel::Entry *> m_documents;
|
||||
QMap<IDocument *, QList<IEditor *> > m_editors;
|
||||
};
|
||||
|
||||
OpenEditorsModelPrivate::OpenEditorsModelPrivate() :
|
||||
@@ -56,7 +56,7 @@ OpenEditorsModelPrivate::OpenEditorsModelPrivate() :
|
||||
}
|
||||
|
||||
OpenEditorsModel::Entry::Entry() :
|
||||
editor(0)
|
||||
document(0)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -81,16 +81,16 @@ QIcon OpenEditorsModel::unlockedIcon() const
|
||||
}
|
||||
|
||||
QString OpenEditorsModel::Entry::fileName() const {
|
||||
return editor ? editor->document()->filePath() : m_fileName;
|
||||
return document ? document->filePath() : m_fileName;
|
||||
}
|
||||
|
||||
QString OpenEditorsModel::Entry::displayName() const {
|
||||
return editor ? editor->document()->displayName() : m_displayName;
|
||||
return document ? document->displayName() : m_displayName;
|
||||
}
|
||||
|
||||
Id OpenEditorsModel::Entry::id() const
|
||||
{
|
||||
return editor ? editor->id() : m_id;
|
||||
return m_id;
|
||||
}
|
||||
|
||||
int OpenEditorsModel::columnCount(const QModelIndex &parent) const
|
||||
@@ -103,31 +103,32 @@ int OpenEditorsModel::columnCount(const QModelIndex &parent) const
|
||||
int OpenEditorsModel::rowCount(const QModelIndex &parent) const
|
||||
{
|
||||
if (!parent.isValid())
|
||||
return d->m_editors.count() + 1/*<no document>*/;
|
||||
return d->m_documents.count() + 1/*<no document>*/;
|
||||
return 0;
|
||||
}
|
||||
|
||||
QList<IEditor *> OpenEditorsModel::editors() const
|
||||
// TODO remove
|
||||
QList<IEditor *> OpenEditorsModel::oneEditorForEachDocument() const
|
||||
{
|
||||
QList<IEditor *> result;
|
||||
foreach (const Entry *entry, d->m_editors)
|
||||
if (entry->editor)
|
||||
result += entry->editor;
|
||||
QMapIterator<IDocument *, QList<IEditor *> > it(d->m_editors);
|
||||
while (it.hasNext())
|
||||
result << it.next().value().first();
|
||||
return result;
|
||||
}
|
||||
|
||||
void OpenEditorsModel::addEditor(IEditor *editor, bool isDuplicate)
|
||||
void OpenEditorsModel::addEditor(IEditor *editor, bool *isNewDocument)
|
||||
{
|
||||
if (!editor)
|
||||
return;
|
||||
|
||||
if (isDuplicate) {
|
||||
d->m_duplicateEditors.append(editor);
|
||||
return;
|
||||
}
|
||||
|
||||
QList<IEditor *> &editorList = d->m_editors[editor->document()];
|
||||
if (isNewDocument)
|
||||
*isNewDocument = editorList.isEmpty();
|
||||
editorList << editor;
|
||||
Entry *entry = new Entry;
|
||||
entry->editor = editor;
|
||||
entry->document = editor->document();
|
||||
entry->m_id = editor->id();
|
||||
addEntry(entry);
|
||||
}
|
||||
|
||||
@@ -142,9 +143,9 @@ void OpenEditorsModel::addRestoredEditor(const QString &fileName, const QString
|
||||
|
||||
OpenEditorsModel::Entry *OpenEditorsModel::firstRestoredEditor() const
|
||||
{
|
||||
for (int i = 0; i < d->m_editors.count(); ++i)
|
||||
if (!d->m_editors.at(i)->editor)
|
||||
return d->m_editors.at(i);
|
||||
for (int i = 0; i < d->m_documents.count(); ++i)
|
||||
if (!d->m_documents.at(i)->document)
|
||||
return d->m_documents.at(i);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -152,43 +153,34 @@ void OpenEditorsModel::addEntry(Entry *entry)
|
||||
{
|
||||
QString fileName = entry->fileName();
|
||||
|
||||
// replace a non-loaded entry (aka 'restored') if possible
|
||||
int previousIndex = findFileName(fileName);
|
||||
if (previousIndex >= 0) {
|
||||
if (entry->editor && d->m_editors.at(previousIndex)->editor == 0) {
|
||||
d->m_editors[previousIndex] = entry;
|
||||
connect(entry->editor->document(), SIGNAL(changed()), this, SLOT(itemChanged()));
|
||||
if (entry->document && d->m_documents.at(previousIndex)->document == 0) {
|
||||
d->m_documents[previousIndex] = entry;
|
||||
connect(entry->document, SIGNAL(changed()), this, SLOT(itemChanged()));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
int index;
|
||||
QString displayName = entry->displayName();
|
||||
for (index = 0; index < d->m_editors.count(); ++index) {
|
||||
if (displayName < d->m_editors.at(index)->displayName())
|
||||
for (index = 0; index < d->m_documents.count(); ++index) {
|
||||
if (displayName < d->m_documents.at(index)->displayName())
|
||||
break;
|
||||
}
|
||||
int row = index + 1/*<no document>*/;
|
||||
beginInsertRows(QModelIndex(), row, row);
|
||||
d->m_editors.insert(index, entry);
|
||||
if (entry->editor)
|
||||
connect(entry->editor->document(), SIGNAL(changed()), this, SLOT(itemChanged()));
|
||||
d->m_documents.insert(index, entry);
|
||||
if (entry->document)
|
||||
connect(entry->document, SIGNAL(changed()), this, SLOT(itemChanged()));
|
||||
endInsertRows();
|
||||
}
|
||||
|
||||
int OpenEditorsModel::findDocument(IDocument *document) const
|
||||
{
|
||||
for (int i = 0; i < d->m_editors.count(); ++i) {
|
||||
IEditor *editor = d->m_editors.at(i)->editor;
|
||||
if (editor && editor->document() == document)
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
int OpenEditorsModel::findEditor(IEditor *editor) const
|
||||
{
|
||||
for (int i = 0; i < d->m_editors.count(); ++i)
|
||||
if (d->m_editors.at(i)->editor == editor)
|
||||
for (int i = 0; i < d->m_documents.count(); ++i)
|
||||
if (d->m_documents.at(i)->document == document)
|
||||
return i;
|
||||
return -1;
|
||||
}
|
||||
@@ -197,8 +189,8 @@ int OpenEditorsModel::findFileName(const QString &filename) const
|
||||
{
|
||||
if (filename.isEmpty())
|
||||
return -1;
|
||||
for (int i = 0; i < d->m_editors.count(); ++i) {
|
||||
if (d->m_editors.at(i)->fileName() == filename)
|
||||
for (int i = 0; i < d->m_documents.count(); ++i) {
|
||||
if (d->m_documents.at(i)->fileName() == filename)
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
@@ -206,116 +198,107 @@ int OpenEditorsModel::findFileName(const QString &filename) const
|
||||
|
||||
void OpenEditorsModel::removeEntry(OpenEditorsModel::Entry *entry)
|
||||
{
|
||||
int index = d->m_editors.indexOf(entry);
|
||||
removeEditor(index);
|
||||
QTC_ASSERT(!entry->document, return); // we wouldn't know what to do with the associated editors
|
||||
int index = d->m_documents.indexOf(entry);
|
||||
removeDocument(index);
|
||||
}
|
||||
|
||||
void OpenEditorsModel::removeEditor(IEditor *editor)
|
||||
void OpenEditorsModel::removeEditor(IEditor *editor, bool *lastOneForDocument)
|
||||
{
|
||||
d->m_duplicateEditors.removeAll(editor);
|
||||
removeEditor(findEditor(editor));
|
||||
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);
|
||||
removeDocument(findDocument(document));
|
||||
}
|
||||
}
|
||||
|
||||
void OpenEditorsModel::removeEditor(const QString &fileName)
|
||||
void OpenEditorsModel::removeDocument(const QString &fileName)
|
||||
{
|
||||
removeEditor(findFileName(fileName));
|
||||
int index = findFileName(fileName);
|
||||
QTC_ASSERT(!d->m_documents.at(index)->document, return); // we wouldn't know what to do with the associated editors
|
||||
removeDocument(index);
|
||||
}
|
||||
|
||||
void OpenEditorsModel::removeEditor(int idx)
|
||||
void OpenEditorsModel::removeDocument(int idx)
|
||||
{
|
||||
if (idx < 0)
|
||||
return;
|
||||
QTC_ASSERT(idx < d->m_editors.size(), return);
|
||||
IEditor *editor = d->m_editors.at(idx)->editor;
|
||||
QTC_ASSERT(idx < d->m_documents.size(), return);
|
||||
IDocument *document = d->m_documents.at(idx)->document;
|
||||
int row = idx + 1/*<no document>*/;
|
||||
beginRemoveRows(QModelIndex(), row, row);
|
||||
d->m_editors.removeAt(idx);
|
||||
d->m_documents.removeAt(idx);
|
||||
endRemoveRows();
|
||||
if (editor)
|
||||
disconnect(editor->document(), SIGNAL(changed()), this, SLOT(itemChanged()));
|
||||
if (document)
|
||||
disconnect(document, SIGNAL(changed()), this, SLOT(itemChanged()));
|
||||
}
|
||||
|
||||
void OpenEditorsModel::removeAllRestoredEditors()
|
||||
{
|
||||
for (int i = d->m_editors.count()-1; i >= 0; --i) {
|
||||
if (!d->m_editors.at(i)->editor) {
|
||||
for (int i = d->m_documents.count()-1; i >= 0; --i) {
|
||||
if (!d->m_documents.at(i)->document) {
|
||||
int row = i + 1/*<no document>*/;
|
||||
beginRemoveRows(QModelIndex(), row, row);
|
||||
d->m_editors.removeAt(i);
|
||||
d->m_documents.removeAt(i);
|
||||
endRemoveRows();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool OpenEditorsModel::isDuplicate(IEditor *editor) const
|
||||
QList<IEditor *> OpenEditorsModel::editorsForDocument(IDocument *document) const
|
||||
{
|
||||
return editor && d->m_duplicateEditors.contains(editor);
|
||||
return d->m_editors.value(document);
|
||||
}
|
||||
|
||||
IEditor *OpenEditorsModel::originalForDuplicate(IEditor *duplicate) const
|
||||
{
|
||||
IDocument *document = duplicate->document();
|
||||
foreach (const Entry *e, d->m_editors)
|
||||
if (e->editor && e->editor->document() == document)
|
||||
return e->editor;
|
||||
return 0;
|
||||
}
|
||||
|
||||
QList<IEditor *> OpenEditorsModel::duplicatesFor(IEditor *editor) const
|
||||
QList<IEditor *> OpenEditorsModel::editorsForDocuments(const QList<IDocument *> &documents) const
|
||||
{
|
||||
QList<IEditor *> result;
|
||||
IDocument *document = editor->document();
|
||||
foreach (IEditor *e, d->m_duplicateEditors)
|
||||
if (e->document() == document)
|
||||
result += e;
|
||||
foreach (IDocument *document, documents)
|
||||
result += d->m_editors.value(document);
|
||||
return result;
|
||||
}
|
||||
|
||||
void OpenEditorsModel::makeOriginal(IEditor *duplicate)
|
||||
int OpenEditorsModel::indexOfDocument(IDocument *document) const
|
||||
{
|
||||
Q_ASSERT(duplicate && isDuplicate(duplicate));
|
||||
IEditor *original = originalForDuplicate(duplicate);
|
||||
Q_ASSERT(original);
|
||||
int i = findEditor(original);
|
||||
d->m_editors[i]->editor = duplicate;
|
||||
d->m_duplicateEditors.removeOne(duplicate);
|
||||
d->m_duplicateEditors.append(original);
|
||||
}
|
||||
|
||||
int OpenEditorsModel::indexOfEditor(IEditor *editor) const
|
||||
{
|
||||
if (!editor)
|
||||
if (!document)
|
||||
return -1;
|
||||
return findEditor(editor);
|
||||
return findDocument(document);
|
||||
}
|
||||
|
||||
QModelIndex OpenEditorsModel::index(int row, int column, const QModelIndex &parent) const
|
||||
{
|
||||
Q_UNUSED(parent)
|
||||
if (column < 0 || column > 1 || row < 0 || row >= d->m_editors.count() + 1/*<no document>*/)
|
||||
if (column < 0 || column > 1 || row < 0 || row >= d->m_documents.count() + 1/*<no document>*/)
|
||||
return QModelIndex();
|
||||
return createIndex(row, column);
|
||||
}
|
||||
|
||||
OpenEditorsModel::Entry *OpenEditorsModel::entryAtRow(int row) const
|
||||
{
|
||||
int editorIndex = row - 1/*<no document>*/;
|
||||
if (editorIndex < 0)
|
||||
int entryIndex = row - 1/*<no document>*/;
|
||||
if (entryIndex < 0)
|
||||
return 0;
|
||||
return d->m_editors[editorIndex];
|
||||
return d->m_documents[entryIndex];
|
||||
}
|
||||
|
||||
int OpenEditorsModel::openDocumentCount() const
|
||||
{
|
||||
return d->m_editors.count();
|
||||
return d->m_documents.count();
|
||||
}
|
||||
|
||||
QVariant OpenEditorsModel::data(const QModelIndex &index, int role) const
|
||||
{
|
||||
if (!index.isValid() || (index.column() != 0 && role < Qt::UserRole))
|
||||
return QVariant();
|
||||
int editorIndex = index.row() - 1/*<no document>*/;
|
||||
if (editorIndex < 0) {
|
||||
int entryIndex = index.row() - 1/*<no document>*/;
|
||||
if (entryIndex < 0) {
|
||||
// <no document> entry
|
||||
switch (role) {
|
||||
case Qt::DisplayRole:
|
||||
@@ -326,19 +309,19 @@ QVariant OpenEditorsModel::data(const QModelIndex &index, int role) const
|
||||
return QVariant();
|
||||
}
|
||||
}
|
||||
const Entry *e = d->m_editors.at(editorIndex);
|
||||
const Entry *e = d->m_documents.at(entryIndex);
|
||||
switch (role) {
|
||||
case Qt::DisplayRole:
|
||||
return (e->editor && e->editor->document()->isModified())
|
||||
return (e->document && e->document->isModified())
|
||||
? e->displayName() + QLatin1Char('*')
|
||||
: e->displayName();
|
||||
case Qt::DecorationRole:
|
||||
{
|
||||
bool showLock = false;
|
||||
if (e->editor) {
|
||||
showLock = e->editor->document()->filePath().isEmpty()
|
||||
if (e->document) {
|
||||
showLock = e->document->filePath().isEmpty()
|
||||
? false
|
||||
: e->editor->document()->isFileReadOnly();
|
||||
: e->document->isFileReadOnly();
|
||||
} else {
|
||||
showLock = !QFileInfo(e->m_fileName).isWritable();
|
||||
}
|
||||
@@ -348,23 +331,17 @@ QVariant OpenEditorsModel::data(const QModelIndex &index, int role) const
|
||||
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 QVariant::fromValue(e->editor ? Core::Id(e->editor->id()) : e->id());
|
||||
default:
|
||||
return QVariant();
|
||||
}
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
int OpenEditorsModel::rowOfEditor(IEditor *editor) const
|
||||
int OpenEditorsModel::rowOfDocument(IDocument *document) const
|
||||
{
|
||||
if (!editor)
|
||||
if (!document)
|
||||
return 0 /*<no document>*/;
|
||||
return findEditor(originalForDuplicate(editor)) + 1/*<no document>*/;
|
||||
return findDocument(document) + 1/*<no document>*/;
|
||||
}
|
||||
|
||||
void OpenEditorsModel::itemChanged()
|
||||
@@ -380,7 +357,7 @@ void OpenEditorsModel::itemChanged()
|
||||
|
||||
QList<OpenEditorsModel::Entry *> OpenEditorsModel::entries() const
|
||||
{
|
||||
return d->m_editors;
|
||||
return d->m_documents;
|
||||
}
|
||||
|
||||
} // namespace Core
|
||||
|
||||
@@ -62,7 +62,7 @@ public:
|
||||
|
||||
struct CORE_EXPORT Entry {
|
||||
Entry();
|
||||
IEditor *editor;
|
||||
IDocument *document;
|
||||
QString fileName() const;
|
||||
QString displayName() const;
|
||||
Id id() const;
|
||||
@@ -72,38 +72,34 @@ public:
|
||||
};
|
||||
|
||||
Entry *entryAtRow(int row) const;
|
||||
int rowOfEditor(IEditor *editor) const;
|
||||
int rowOfDocument(IDocument *document) const;
|
||||
|
||||
int openDocumentCount() const;
|
||||
|
||||
void addEditor(IEditor *editor, bool isDuplicate = false);
|
||||
void addRestoredEditor(const QString &fileName, const QString &displayName, const Id &id);
|
||||
Entry *firstRestoredEditor() const;
|
||||
|
||||
QList<Entry *> entries() const;
|
||||
|
||||
QList<IEditor *> editorsForDocument(IDocument *document) const;
|
||||
QList<IEditor *> editorsForDocuments(const QList<IDocument *> &documents) const;
|
||||
QList<IEditor *> oneEditorForEachDocument() const;
|
||||
int indexOfDocument(IDocument *document) const;
|
||||
|
||||
// editor manager related methods, nobody else should call it
|
||||
void addEditor(IEditor *editor, bool *isNewDocument);
|
||||
void addRestoredEditor(const QString &fileName, const QString &displayName, const Id &id);
|
||||
Entry *firstRestoredEditor() const;
|
||||
void removeEntry(Entry *entry);
|
||||
void removeEditor(IEditor *editor);
|
||||
void removeEditor(const QString &fileName);
|
||||
|
||||
void removeEditor(IEditor *editor, bool *lastOneForDocument);
|
||||
void removeDocument(const QString &fileName);
|
||||
void removeAllRestoredEditors();
|
||||
|
||||
QList<IEditor *> editors() const;
|
||||
bool isDuplicate(IEditor *editor) const;
|
||||
QList<IEditor *> duplicatesFor(IEditor *editor) const;
|
||||
IEditor *originalForDuplicate(IEditor *duplicate) const;
|
||||
void makeOriginal(IEditor *duplicate);
|
||||
int indexOfEditor(IEditor *editor) const;
|
||||
|
||||
private slots:
|
||||
void itemChanged();
|
||||
|
||||
private:
|
||||
void addEntry(Entry *entry);
|
||||
int findDocument(IDocument *document) const;
|
||||
int findEditor(IEditor *editor) const;
|
||||
int findFileName(const QString &filename) const;
|
||||
void removeEditor(int idx);
|
||||
void removeDocument(int idx);
|
||||
|
||||
OpenEditorsModelPrivate *d;
|
||||
};
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
|
||||
#include "openeditorsview.h"
|
||||
#include "editormanager.h"
|
||||
#include "ieditor.h"
|
||||
#include "openeditorsmodel.h"
|
||||
|
||||
#include <coreplugin/coreconstants.h>
|
||||
@@ -126,8 +127,9 @@ OpenEditorsWidget::~OpenEditorsWidget()
|
||||
|
||||
void OpenEditorsWidget::updateCurrentItem(Core::IEditor *editor)
|
||||
{
|
||||
IDocument *document = editor ? editor->document() : 0;
|
||||
EditorManager *em = EditorManager::instance();
|
||||
QModelIndex index = m_model->index(em->openedEditorsModel()->indexOfEditor(editor), 0);
|
||||
QModelIndex index = m_model->index(em->openedEditorsModel()->indexOfDocument(document), 0);
|
||||
if (!index.isValid()) {
|
||||
clearSelection();
|
||||
return;
|
||||
|
||||
@@ -204,7 +204,7 @@ void OpenEditorsWindow::setEditors(const QList<EditLocation> &globalHistory, Edi
|
||||
|
||||
// add purely restored editors which are not initialised yet
|
||||
foreach (OpenEditorsModel::Entry *entry, model->entries()) {
|
||||
if (entry->editor)
|
||||
if (entry->document)
|
||||
continue;
|
||||
QTreeWidgetItem *item = new QTreeWidgetItem();
|
||||
QString title = entry->displayName();
|
||||
@@ -229,7 +229,7 @@ void OpenEditorsWindow::selectEditor(QTreeWidgetItem *item)
|
||||
} else {
|
||||
if (!EditorManager::openEditor(
|
||||
item->toolTip(0), item->data(0, Qt::UserRole+2).value<Core::Id>())) {
|
||||
EditorManager::instance()->openedEditorsModel()->removeEditor(item->toolTip(0));
|
||||
EditorManager::instance()->openedEditorsModel()->removeDocument(item->toolTip(0));
|
||||
delete item;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -290,7 +290,8 @@ void EditorToolBar::setToolbarCreationFlags(ToolbarCreationFlags flags)
|
||||
|
||||
void EditorToolBar::setCurrentEditor(IEditor *editor)
|
||||
{
|
||||
d->m_editorList->setCurrentIndex(d->m_editorsListModel->rowOfEditor(editor));
|
||||
IDocument *document = editor ? editor->document() : 0;
|
||||
d->m_editorList->setCurrentIndex(d->m_editorsListModel->rowOfDocument(document));
|
||||
|
||||
// If we never added the toolbar from the editor, we will never change
|
||||
// the editor, so there's no need to update the toolbar either.
|
||||
@@ -303,7 +304,7 @@ void EditorToolBar::setCurrentEditor(IEditor *editor)
|
||||
void EditorToolBar::updateEditorListSelection(IEditor *newSelection)
|
||||
{
|
||||
if (newSelection)
|
||||
d->m_editorList->setCurrentIndex(d->m_editorsListModel->rowOfEditor(newSelection));
|
||||
d->m_editorList->setCurrentIndex(d->m_editorsListModel->rowOfDocument(newSelection->document()));
|
||||
}
|
||||
|
||||
void EditorToolBar::changeActiveEditor(int row)
|
||||
@@ -375,7 +376,7 @@ void EditorToolBar::updateEditorStatus(IEditor *editor)
|
||||
return;
|
||||
}
|
||||
|
||||
d->m_editorList->setCurrentIndex(d->m_editorsListModel->rowOfEditor(editor));
|
||||
d->m_editorList->setCurrentIndex(d->m_editorsListModel->rowOfDocument(editor->document()));
|
||||
|
||||
if (editor->document()->filePath().isEmpty()) {
|
||||
d->m_lockButton->setIcon(QIcon());
|
||||
|
||||
@@ -1999,7 +1999,9 @@ int FakeVimPluginPrivate::currentFile() const
|
||||
{
|
||||
OpenEditorsModel *model = EditorManager::instance()->openedEditorsModel();
|
||||
IEditor *editor = EditorManager::currentEditor();
|
||||
return model->indexOfEditor(editor);
|
||||
if (!editor)
|
||||
return -1;
|
||||
return model->indexOfDocument(editor->document());
|
||||
}
|
||||
|
||||
void FakeVimPluginPrivate::switchToFile(int n)
|
||||
|
||||
Reference in New Issue
Block a user