EditorManager: add GotoLastEdit action

Done-with: Guillem Miguel <guillemmr@hotmail.com>
Done-with: Andre Hartmann <aha_1980@gmx.de>
Change-Id: I5059ea4ba8e9aa115cf4d0a90b80a4606779039a
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Volodymyr Samokhatko
2017-04-01 18:50:10 +02:00
committed by André Hartmann
parent 889f0f4cec
commit 264185245d
7 changed files with 60 additions and 0 deletions

View File

@@ -131,6 +131,7 @@ const char GOTONEXTINHISTORY[] = "QtCreator.GotoNextInHistory";
const char GOTOPREVINHISTORY[] = "QtCreator.GotoPreviousInHistory";
const char GO_BACK[] = "QtCreator.GoBack";
const char GO_FORWARD[] = "QtCreator.GoForward";
const char GOTOLASTEDIT[] = "QtCreator.GotoLastEdit";
const char ABOUT_QTCREATOR[] = "QtCreator.AboutQtCreator";
const char ABOUT_PLUGINS[] = "QtCreator.AboutPlugins";
const char S_RETURNTOEDITOR[] = "QtCreator.ReturnToEditor";

View File

@@ -204,6 +204,7 @@ EditorManagerPrivate::EditorManagerPrivate(QObject *parent) :
m_gotoPreviousDocHistoryAction(new QAction(EditorManager::tr("Previous Open Document in History"), this)),
m_goBackAction(new QAction(Utils::Icons::PREV.icon(), EditorManager::tr("Go Back"), this)),
m_goForwardAction(new QAction(Utils::Icons::NEXT.icon(), EditorManager::tr("Go Forward"), this)),
m_gotoLastEditAction(new QAction(EditorManager::tr("Go to Last Edit"), this)),
m_copyFilePathContextAction(new QAction(EditorManager::tr("Copy Full Path"), this)),
m_copyLocationContextAction(new QAction(EditorManager::tr("Copy Path and Line Number"), this)),
m_copyFileNameContextAction(new QAction(EditorManager::tr("Copy File Name"), this)),
@@ -383,6 +384,12 @@ void EditorManagerPrivate::init()
connect(m_goForwardAction, &QAction::triggered,
m_instance, &EditorManager::goForwardInNavigationHistory);
// Go to last edit
cmd = ActionManager::registerAction(m_gotoLastEditAction, Constants::GOTOLASTEDIT, editDesignContext);
mwindow->addAction(cmd, Constants::G_WINDOW_NAVIGATE);
connect(m_gotoLastEditAction, &QAction::triggered,
this, &EditorManagerPrivate::gotoLastEditLocation);
m_splitAction = new QAction(Utils::Icons::SPLIT_HORIZONTAL.icon(), tr("Split"), this);
cmd = ActionManager::registerAction(m_splitAction, Constants::SPLIT, editManagerContext);
cmd->setDefaultKeySequence(QKeySequence(useMacShortcuts ? tr("Meta+E,2") : tr("Ctrl+E,2")));
@@ -1915,6 +1922,11 @@ void EditorManagerPrivate::gotoPreviousDocHistory()
}
}
void EditorManagerPrivate::gotoLastEditLocation()
{
currentEditorView()->goToEditLocation(d->m_globalLastEditLocation);
}
void EditorManagerPrivate::gotoNextSplit()
{
EditorView *view = currentEditorView();
@@ -2945,6 +2957,22 @@ void EditorManager::addCurrentPositionToNavigationHistory(const QByteArray &save
EditorManagerPrivate::updateActions();
}
void EditorManager::setLastEditLocation(const IEditor* editor)
{
IDocument *document = editor->document();
if (!document)
return;
const QByteArray &state = editor->saveState();
EditLocation location;
location.document = document;
location.fileName = document->filePath().toString();
location.id = document->id();
location.state = QVariant(state);
d->m_globalLastEditLocation = location;
}
void EditorManager::cutForwardNavigationHistory()
{
EditorManagerPrivate::currentEditorView()->cutForwardNavigationHistory();

View File

@@ -131,6 +131,7 @@ public:
static bool closeAllDocuments();
static void addCurrentPositionToNavigationHistory(const QByteArray &saveState = QByteArray());
static void setLastEditLocation(const IEditor *editor);
static void cutForwardNavigationHistory();
static bool saveDocument(IDocument *document);

View File

@@ -162,6 +162,8 @@ private:
static void gotoNextDocHistory();
static void gotoPreviousDocHistory();
static void gotoLastEditLocation();
static void autoSave();
static void handleContextChange(const QList<Core::IContext *> &context);
@@ -213,6 +215,7 @@ private:
~EditorManagerPrivate() override;
void init();
EditLocation m_globalLastEditLocation;
QList<EditLocation> m_globalHistory;
QList<EditorArea *> m_editorAreas;
QPointer<IEditor> m_currentEditor;
@@ -232,6 +235,7 @@ private:
QAction *m_gotoPreviousDocHistoryAction;
QAction *m_goBackAction;
QAction *m_goForwardAction;
QAction *m_gotoLastEditAction;
QAction *m_splitAction;
QAction *m_splitSideBySideAction;
QAction *m_splitNewWindowAction;

View File

@@ -610,6 +610,28 @@ void EditorView::goForwardInNavigationHistory()
updateNavigatorActions();
}
void EditorView::goToEditLocation(const EditLocation &location)
{
IEditor *editor = nullptr;
if (location.document) {
editor = EditorManagerPrivate::activateEditorForDocument(this, location.document,
EditorManager::IgnoreNavigationHistory);
}
if (!editor) {
if (fileNameWasRemoved(location.fileName))
return;
editor = EditorManagerPrivate::openEditor(this, location.fileName, location.id,
EditorManager::IgnoreNavigationHistory);
}
if (editor) {
editor->restoreState(location.state.toByteArray());
}
}
SplitterOrView::SplitterOrView(IEditor *editor)
{

View File

@@ -154,6 +154,8 @@ public slots:
void goForwardInNavigationHistory();
public:
void goToEditLocation(const EditLocation &location);
void addCurrentPositionToNavigationHistory(const QByteArray &saveState = QByteArray());
void cutForwardNavigationHistory();

View File

@@ -5270,6 +5270,8 @@ void TextEditorWidget::slotCursorPositionChanged()
d->m_lastCursorChangeWasInteresting = false;
} else if (d->m_contentsChanged) {
d->saveCurrentCursorPositionForNavigation();
if (EditorManager::currentEditor() && EditorManager::currentEditor()->widget() == this)
EditorManager::setLastEditLocation(EditorManager::currentEditor());
}
d->updateHighlights();