forked from qt-creator/qt-creator
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:
committed by
André Hartmann
parent
889f0f4cec
commit
264185245d
@@ -131,6 +131,7 @@ const char GOTONEXTINHISTORY[] = "QtCreator.GotoNextInHistory";
|
|||||||
const char GOTOPREVINHISTORY[] = "QtCreator.GotoPreviousInHistory";
|
const char GOTOPREVINHISTORY[] = "QtCreator.GotoPreviousInHistory";
|
||||||
const char GO_BACK[] = "QtCreator.GoBack";
|
const char GO_BACK[] = "QtCreator.GoBack";
|
||||||
const char GO_FORWARD[] = "QtCreator.GoForward";
|
const char GO_FORWARD[] = "QtCreator.GoForward";
|
||||||
|
const char GOTOLASTEDIT[] = "QtCreator.GotoLastEdit";
|
||||||
const char ABOUT_QTCREATOR[] = "QtCreator.AboutQtCreator";
|
const char ABOUT_QTCREATOR[] = "QtCreator.AboutQtCreator";
|
||||||
const char ABOUT_PLUGINS[] = "QtCreator.AboutPlugins";
|
const char ABOUT_PLUGINS[] = "QtCreator.AboutPlugins";
|
||||||
const char S_RETURNTOEDITOR[] = "QtCreator.ReturnToEditor";
|
const char S_RETURNTOEDITOR[] = "QtCreator.ReturnToEditor";
|
||||||
|
@@ -204,6 +204,7 @@ EditorManagerPrivate::EditorManagerPrivate(QObject *parent) :
|
|||||||
m_gotoPreviousDocHistoryAction(new QAction(EditorManager::tr("Previous Open Document in History"), this)),
|
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_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_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_copyFilePathContextAction(new QAction(EditorManager::tr("Copy Full Path"), this)),
|
||||||
m_copyLocationContextAction(new QAction(EditorManager::tr("Copy Path and Line Number"), this)),
|
m_copyLocationContextAction(new QAction(EditorManager::tr("Copy Path and Line Number"), this)),
|
||||||
m_copyFileNameContextAction(new QAction(EditorManager::tr("Copy File Name"), this)),
|
m_copyFileNameContextAction(new QAction(EditorManager::tr("Copy File Name"), this)),
|
||||||
@@ -383,6 +384,12 @@ void EditorManagerPrivate::init()
|
|||||||
connect(m_goForwardAction, &QAction::triggered,
|
connect(m_goForwardAction, &QAction::triggered,
|
||||||
m_instance, &EditorManager::goForwardInNavigationHistory);
|
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);
|
m_splitAction = new QAction(Utils::Icons::SPLIT_HORIZONTAL.icon(), tr("Split"), this);
|
||||||
cmd = ActionManager::registerAction(m_splitAction, Constants::SPLIT, editManagerContext);
|
cmd = ActionManager::registerAction(m_splitAction, Constants::SPLIT, editManagerContext);
|
||||||
cmd->setDefaultKeySequence(QKeySequence(useMacShortcuts ? tr("Meta+E,2") : tr("Ctrl+E,2")));
|
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()
|
void EditorManagerPrivate::gotoNextSplit()
|
||||||
{
|
{
|
||||||
EditorView *view = currentEditorView();
|
EditorView *view = currentEditorView();
|
||||||
@@ -2945,6 +2957,22 @@ void EditorManager::addCurrentPositionToNavigationHistory(const QByteArray &save
|
|||||||
EditorManagerPrivate::updateActions();
|
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()
|
void EditorManager::cutForwardNavigationHistory()
|
||||||
{
|
{
|
||||||
EditorManagerPrivate::currentEditorView()->cutForwardNavigationHistory();
|
EditorManagerPrivate::currentEditorView()->cutForwardNavigationHistory();
|
||||||
|
@@ -131,6 +131,7 @@ public:
|
|||||||
static bool closeAllDocuments();
|
static bool closeAllDocuments();
|
||||||
|
|
||||||
static void addCurrentPositionToNavigationHistory(const QByteArray &saveState = QByteArray());
|
static void addCurrentPositionToNavigationHistory(const QByteArray &saveState = QByteArray());
|
||||||
|
static void setLastEditLocation(const IEditor *editor);
|
||||||
static void cutForwardNavigationHistory();
|
static void cutForwardNavigationHistory();
|
||||||
|
|
||||||
static bool saveDocument(IDocument *document);
|
static bool saveDocument(IDocument *document);
|
||||||
|
@@ -162,6 +162,8 @@ private:
|
|||||||
static void gotoNextDocHistory();
|
static void gotoNextDocHistory();
|
||||||
static void gotoPreviousDocHistory();
|
static void gotoPreviousDocHistory();
|
||||||
|
|
||||||
|
static void gotoLastEditLocation();
|
||||||
|
|
||||||
static void autoSave();
|
static void autoSave();
|
||||||
static void handleContextChange(const QList<Core::IContext *> &context);
|
static void handleContextChange(const QList<Core::IContext *> &context);
|
||||||
|
|
||||||
@@ -213,6 +215,7 @@ private:
|
|||||||
~EditorManagerPrivate() override;
|
~EditorManagerPrivate() override;
|
||||||
void init();
|
void init();
|
||||||
|
|
||||||
|
EditLocation m_globalLastEditLocation;
|
||||||
QList<EditLocation> m_globalHistory;
|
QList<EditLocation> m_globalHistory;
|
||||||
QList<EditorArea *> m_editorAreas;
|
QList<EditorArea *> m_editorAreas;
|
||||||
QPointer<IEditor> m_currentEditor;
|
QPointer<IEditor> m_currentEditor;
|
||||||
@@ -232,6 +235,7 @@ private:
|
|||||||
QAction *m_gotoPreviousDocHistoryAction;
|
QAction *m_gotoPreviousDocHistoryAction;
|
||||||
QAction *m_goBackAction;
|
QAction *m_goBackAction;
|
||||||
QAction *m_goForwardAction;
|
QAction *m_goForwardAction;
|
||||||
|
QAction *m_gotoLastEditAction;
|
||||||
QAction *m_splitAction;
|
QAction *m_splitAction;
|
||||||
QAction *m_splitSideBySideAction;
|
QAction *m_splitSideBySideAction;
|
||||||
QAction *m_splitNewWindowAction;
|
QAction *m_splitNewWindowAction;
|
||||||
|
@@ -610,6 +610,28 @@ void EditorView::goForwardInNavigationHistory()
|
|||||||
updateNavigatorActions();
|
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)
|
SplitterOrView::SplitterOrView(IEditor *editor)
|
||||||
{
|
{
|
||||||
|
@@ -154,6 +154,8 @@ public slots:
|
|||||||
void goForwardInNavigationHistory();
|
void goForwardInNavigationHistory();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
void goToEditLocation(const EditLocation &location);
|
||||||
|
|
||||||
void addCurrentPositionToNavigationHistory(const QByteArray &saveState = QByteArray());
|
void addCurrentPositionToNavigationHistory(const QByteArray &saveState = QByteArray());
|
||||||
void cutForwardNavigationHistory();
|
void cutForwardNavigationHistory();
|
||||||
|
|
||||||
|
@@ -5270,6 +5270,8 @@ void TextEditorWidget::slotCursorPositionChanged()
|
|||||||
d->m_lastCursorChangeWasInteresting = false;
|
d->m_lastCursorChangeWasInteresting = false;
|
||||||
} else if (d->m_contentsChanged) {
|
} else if (d->m_contentsChanged) {
|
||||||
d->saveCurrentCursorPositionForNavigation();
|
d->saveCurrentCursorPositionForNavigation();
|
||||||
|
if (EditorManager::currentEditor() && EditorManager::currentEditor()->widget() == this)
|
||||||
|
EditorManager::setLastEditLocation(EditorManager::currentEditor());
|
||||||
}
|
}
|
||||||
|
|
||||||
d->updateHighlights();
|
d->updateHighlights();
|
||||||
|
Reference in New Issue
Block a user