Refactor navigation history again, put last edit position in history

Task:     240811
This commit is contained in:
con
2009-03-18 17:17:53 +01:00
parent 393eb142f9
commit f84c651428
6 changed files with 29 additions and 27 deletions

View File

@@ -501,7 +501,7 @@ void BookmarkManager::documentPrevNext(bool next)
} }
Core::EditorManager *em = Core::EditorManager::instance(); Core::EditorManager *em = Core::EditorManager::instance();
em->addCurrentPositionToNavigationHistory(true); em->addCurrentPositionToNavigationHistory();
if (next) { if (next) {
if (nextLine == -1) if (nextLine == -1)
editor->gotoLine(firstLine); editor->gotoLine(firstLine);
@@ -513,7 +513,6 @@ void BookmarkManager::documentPrevNext(bool next)
else else
editor->gotoLine(prevLine); editor->gotoLine(prevLine);
} }
em->addCurrentPositionToNavigationHistory();
} }
void BookmarkManager::next() void BookmarkManager::next()

View File

@@ -190,7 +190,7 @@ EditorManagerPrivate::EditorManagerPrivate(ICore *core, QWidget *parent) :
m_goBackAction(new QAction(EditorManager::tr("Go back"), parent)), m_goBackAction(new QAction(EditorManager::tr("Go back"), parent)),
m_goForwardAction(new QAction(EditorManager::tr("Go forward"), parent)), m_goForwardAction(new QAction(EditorManager::tr("Go forward"), parent)),
m_openInExternalEditorAction(new QAction(EditorManager::tr("Open in External Editor"), parent)), m_openInExternalEditorAction(new QAction(EditorManager::tr("Open in External Editor"), parent)),
currentNavigationHistoryPosition(-1), currentNavigationHistoryPosition(0),
m_windowPopup(0), m_windowPopup(0),
m_coreListener(0) m_coreListener(0)
{ {
@@ -473,15 +473,11 @@ void EditorManager::setCurrentEditor(IEditor *editor, bool ignoreNavigationHisto
setCurrentView(0); setCurrentView(0);
if (m_d->m_currentEditor == editor) if (m_d->m_currentEditor == editor)
return; return;
if (m_d->m_currentEditor) if (m_d->m_currentEditor && !ignoreNavigationHistory)
updateCurrentPositionInNavigationHistory(); addCurrentPositionToNavigationHistory();
m_d->m_currentEditor = editor; m_d->m_currentEditor = editor;
if (editor) { if (editor) {
bool addToHistory = (!ignoreNavigationHistory);
if (addToHistory)
addCurrentPositionToNavigationHistory(true);
if (SplitterOrView *splitterOrView = m_d->m_splitter->findView(editor)) if (SplitterOrView *splitterOrView = m_d->m_splitter->findView(editor))
splitterOrView->view()->setCurrentEditor(editor); splitterOrView->view()->setCurrentEditor(editor);
} }
@@ -1374,17 +1370,17 @@ void EditorManager::addCurrentPositionToNavigationHistory(bool compress)
QByteArray state = editor->saveState(); QByteArray state = editor->saveState();
// cut existing // cut existing
int firstIndexToRemove; int firstIndexToRemove;
if (compress && m_d->currentNavigationHistoryPosition >= 0) { if (compress && m_d->currentNavigationHistoryPosition > 0) {
EditorManagerPrivate::EditLocation *previousLocation = EditorManagerPrivate::EditLocation *previousLocation =
m_d->m_navigationHistory.at(m_d->currentNavigationHistoryPosition); m_d->m_navigationHistory.at(m_d->currentNavigationHistoryPosition-1);
if ((previousLocation->editor && editor == previousLocation->editor) if ((previousLocation->editor && editor == previousLocation->editor)
|| (!fileName.isEmpty() && previousLocation->fileName == fileName)) { || (!fileName.isEmpty() && previousLocation->fileName == fileName)) {
firstIndexToRemove = m_d->currentNavigationHistoryPosition; firstIndexToRemove = m_d->currentNavigationHistoryPosition-1;
} else { } else {
firstIndexToRemove = m_d->currentNavigationHistoryPosition+1; firstIndexToRemove = m_d->currentNavigationHistoryPosition;
} }
} else { } else {
firstIndexToRemove = m_d->currentNavigationHistoryPosition+1; firstIndexToRemove = m_d->currentNavigationHistoryPosition;
} }
if (firstIndexToRemove >= 0) { if (firstIndexToRemove >= 0) {
for (int i = m_d->m_navigationHistory.size()-1; i >= firstIndexToRemove; --i) { for (int i = m_d->m_navigationHistory.size()-1; i >= firstIndexToRemove; --i) {
@@ -1400,17 +1396,26 @@ void EditorManager::addCurrentPositionToNavigationHistory(bool compress)
location->kind = editor->kind(); location->kind = editor->kind();
location->state = QVariant(state); location->state = QVariant(state);
m_d->m_navigationHistory.append(location); m_d->m_navigationHistory.append(location);
m_d->currentNavigationHistoryPosition = m_d->m_navigationHistory.size()-1; m_d->currentNavigationHistoryPosition = m_d->m_navigationHistory.size();
updateActions(); updateActions();
} }
void EditorManager::updateCurrentPositionInNavigationHistory() void EditorManager::updateCurrentPositionInNavigationHistory()
{ {
if (!m_d->m_currentEditor if (!m_d->m_currentEditor || !m_d->m_currentEditor->file())
|| m_d->currentNavigationHistoryPosition < 0
|| m_d->m_navigationHistory.at(m_d->currentNavigationHistoryPosition)->editor != m_d->m_currentEditor)
return; return;
m_d->m_navigationHistory.at(m_d->currentNavigationHistoryPosition)->state = m_d->m_currentEditor->saveState();
EditorManagerPrivate::EditLocation *location;
if (m_d->currentNavigationHistoryPosition < m_d->m_navigationHistory.size()) {
location = m_d->m_navigationHistory[m_d->currentNavigationHistoryPosition];
} else {
location = new EditorManagerPrivate::EditLocation;
m_d->m_navigationHistory.append(location);
}
location->editor = m_d->m_currentEditor;
location->fileName = m_d->m_currentEditor->file()->fileName();
location->kind = m_d->m_currentEditor->kind();
location->state = QVariant(m_d->m_currentEditor->saveState());
} }
void EditorManager::goBackInNavigationHistory() void EditorManager::goBackInNavigationHistory()

View File

@@ -979,9 +979,8 @@ bool CPPEditor::openEditorAt(Symbol *s)
if (baseTextDocument()->fileName() == fileName) { if (baseTextDocument()->fileName() == fileName) {
Core::EditorManager *editorManager = Core::EditorManager::instance(); Core::EditorManager *editorManager = Core::EditorManager::instance();
editorManager->addCurrentPositionToNavigationHistory(true);
gotoLine(line, column);
editorManager->addCurrentPositionToNavigationHistory(); editorManager->addCurrentPositionToNavigationHistory();
gotoLine(line, column);
setFocus(); setFocus();
return true; return true;
} }

View File

@@ -128,12 +128,11 @@ ITextEditor *BaseTextEditor::openEditorAt(const QString &fileName,
const QString &editorKind) const QString &editorKind)
{ {
Core::EditorManager *editorManager = Core::EditorManager::instance(); Core::EditorManager *editorManager = Core::EditorManager::instance();
editorManager->addCurrentPositionToNavigationHistory(true); editorManager->addCurrentPositionToNavigationHistory();
Core::IEditor *editor = editorManager->openEditor(fileName, editorKind, Core::EditorManager::IgnoreNavigationHistory); Core::IEditor *editor = editorManager->openEditor(fileName, editorKind, Core::EditorManager::IgnoreNavigationHistory);
TextEditor::ITextEditor *texteditor = qobject_cast<TextEditor::ITextEditor *>(editor); TextEditor::ITextEditor *texteditor = qobject_cast<TextEditor::ITextEditor *>(editor);
if (texteditor) { if (texteditor) {
texteditor->gotoLine(line, column); texteditor->gotoLine(line, column);
editorManager->addCurrentPositionToNavigationHistory();
return texteditor; return texteditor;
} }
return 0; return 0;
@@ -565,6 +564,8 @@ Core::IFile *BaseTextEditor::file()
void BaseTextEditor::editorContentsChange(int position, int charsRemoved, int charsAdded) void BaseTextEditor::editorContentsChange(int position, int charsRemoved, int charsAdded)
{ {
d->m_contentsChanged = true; d->m_contentsChanged = true;
// add last edit position to history
Core::EditorManager::instance()->addCurrentPositionToNavigationHistory(true);
// Keep the line numbers and the block information for the text marks updated // Keep the line numbers and the block information for the text marks updated
if (charsRemoved != 0) { if (charsRemoved != 0) {

View File

@@ -62,9 +62,8 @@ void LineNumberFilter::accept(FilterEntry selection) const
if (editor) { if (editor) {
Core::EditorManager *editorManager = Core::EditorManager::instance(); Core::EditorManager *editorManager = Core::EditorManager::instance();
editorManager->ensureEditorManagerVisible(); editorManager->ensureEditorManagerVisible();
editorManager->addCurrentPositionToNavigationHistory(true);
editor->gotoLine(selection.internalData.toInt());
editorManager->addCurrentPositionToNavigationHistory(); editorManager->addCurrentPositionToNavigationHistory();
editor->gotoLine(selection.internalData.toInt());
editor->widget()->setFocus(); editor->widget()->setFocus();
} }
} }

View File

@@ -265,9 +265,8 @@ void VCSBaseEditor::slotDiffBrowse(int index)
return; return;
const int lineNumber = d->m_diffSections.at(index); const int lineNumber = d->m_diffSections.at(index);
Core::EditorManager *editorManager = Core::EditorManager::instance(); Core::EditorManager *editorManager = Core::EditorManager::instance();
editorManager->addCurrentPositionToNavigationHistory(true);
gotoLine(lineNumber + 1, 0); // TextEdit uses 1..n convention
editorManager->addCurrentPositionToNavigationHistory(); editorManager->addCurrentPositionToNavigationHistory();
gotoLine(lineNumber + 1, 0); // TextEdit uses 1..n convention
} }
// Locate a line number in the list of diff sections. // Locate a line number in the list of diff sections.