From 67ab31c224d2c7628e5fdd19df77378af6d0b13a Mon Sep 17 00:00:00 2001 From: Leandro Melo <leandro.melo@nokia.com> Date: Tue, 29 Nov 2011 13:51:00 +0100 Subject: [PATCH] Editor: Bookmark when Shift-clicking the gutter Task-number: QTCREATORBUG-2852 Change-Id: If539f812bce76c1c1e7b63e7133e2a7c962990ea Reviewed-by: Eike Ziller <eike.ziller@nokia.com> --- src/plugins/bookmarks/bookmarkmanager.cpp | 8 ++++++++ src/plugins/bookmarks/bookmarkmanager.h | 9 +++++---- src/plugins/bookmarks/bookmarksplugin.cpp | 7 +++++++ src/plugins/debugger/debuggerplugin.cpp | 15 +++++++++++---- src/plugins/texteditor/basetexteditor.cpp | 7 ++++++- src/plugins/texteditor/itexteditor.h | 7 ++++++- 6 files changed, 43 insertions(+), 10 deletions(-) diff --git a/src/plugins/bookmarks/bookmarkmanager.cpp b/src/plugins/bookmarks/bookmarkmanager.cpp index e988598aec8..d1965872130 100644 --- a/src/plugins/bookmarks/bookmarkmanager.cpp +++ b/src/plugins/bookmarks/bookmarkmanager.cpp @@ -760,6 +760,14 @@ void BookmarkManager::loadBookmarks() updateActionStatus(); } +void BookmarkManager::handleBookmarkRequest(TextEditor::ITextEditor *textEditor, + int line, + TextEditor::ITextEditor::MarkRequestKind kind) +{ + if (kind == TextEditor::ITextEditor::BookmarkRequest && textEditor->file()) + toggleBookmark(textEditor->file()->fileName(), line); +} + // BookmarkViewFactory BookmarkViewFactory::BookmarkViewFactory(BookmarkManager *bm) diff --git a/src/plugins/bookmarks/bookmarkmanager.h b/src/plugins/bookmarks/bookmarkmanager.h index 3e450290c64..a0ac93cbb67 100644 --- a/src/plugins/bookmarks/bookmarkmanager.h +++ b/src/plugins/bookmarks/bookmarkmanager.h @@ -36,6 +36,8 @@ #include <coreplugin/icontext.h> #include <coreplugin/inavigationwidgetfactory.h> +#include <texteditor/itexteditor.h> + #include <QtCore/QAbstractItemModel> #include <QtCore/QMultiMap> #include <QtCore/QList> @@ -51,10 +53,6 @@ namespace Core { class IEditor; } -namespace TextEditor { -class ITextEditor; -} - namespace Bookmarks { namespace Internal { @@ -115,6 +113,9 @@ signals: private slots: void updateActionStatus(); void loadBookmarks(); + void handleBookmarkRequest(TextEditor::ITextEditor * textEditor, + int line, + TextEditor::ITextEditor::MarkRequestKind kind); private: TextEditor::ITextEditor *currentTextEditor() const; diff --git a/src/plugins/bookmarks/bookmarksplugin.cpp b/src/plugins/bookmarks/bookmarksplugin.cpp index bada612f120..19d9cb5b249 100644 --- a/src/plugins/bookmarks/bookmarksplugin.cpp +++ b/src/plugins/bookmarks/bookmarksplugin.cpp @@ -179,6 +179,13 @@ void BookmarksPlugin::editorOpened(Core::IEditor *editor) if (qobject_cast<ITextEditor *>(editor)) { connect(editor, SIGNAL(markContextMenuRequested(TextEditor::ITextEditor*,int,QMenu*)), this, SLOT(requestContextMenu(TextEditor::ITextEditor*,int,QMenu*))); + + connect(editor, + SIGNAL(markRequested(TextEditor::ITextEditor*,int, + TextEditor::ITextEditor::MarkRequestKind)), + m_bookmarkManager, + SLOT(handleBookmarkRequest(TextEditor::ITextEditor*,int, + TextEditor::ITextEditor::MarkRequestKind))); } } diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 8d36242fa85..187ed776d72 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -707,7 +707,9 @@ public slots: void editorOpened(Core::IEditor *editor); void updateBreakMenuItem(Core::IEditor *editor); void setBusyCursor(bool busy); - void requestMark(TextEditor::ITextEditor *editor, int lineNumber); + void requestMark(TextEditor::ITextEditor *editor, + int lineNumber, + TextEditor::ITextEditor::MarkRequestKind kind); void requestContextMenu(TextEditor::ITextEditor *editor, int lineNumber, QMenu *menu); @@ -1773,8 +1775,8 @@ void DebuggerPluginPrivate::editorOpened(IEditor *editor) if (!textEditor) return; connect(textEditor, - SIGNAL(markRequested(TextEditor::ITextEditor*,int)), - SLOT(requestMark(TextEditor::ITextEditor*,int))); + SIGNAL(markRequested(TextEditor::ITextEditor*,int, TextEditor::ITextEditor::MarkRequestKind)), + SLOT(requestMark(TextEditor::ITextEditor*,int, TextEditor::ITextEditor::MarkRequestKind))); connect(textEditor, SIGNAL(markContextMenuRequested(TextEditor::ITextEditor*,int,QMenu*)), SLOT(requestContextMenu(TextEditor::ITextEditor*,int,QMenu*))); @@ -1943,8 +1945,13 @@ void DebuggerPluginPrivate::toggleBreakpointByAddress(quint64 address, } } -void DebuggerPluginPrivate::requestMark(ITextEditor *editor, int lineNumber) +void DebuggerPluginPrivate::requestMark(ITextEditor *editor, + int lineNumber, + ITextEditor::MarkRequestKind kind) { + if (kind != ITextEditor::BreakpointRequest) + return; + if (editor->property("DisassemblerView").toBool()) { QString line = editor->contents() .section('\n', lineNumber - 1, lineNumber - 1); diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index 2b6866d66a1..8df44c4a496 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -4370,7 +4370,12 @@ void BaseTextEditorWidget::extraAreaMouseEvent(QMouseEvent *e) d->extraAreaToggleMarkBlockNumber = -1; if (cursor.blockNumber() == n) { int line = n + 1; - emit editor()->markRequested(editor(), line); + ITextEditor::MarkRequestKind kind; + if (QApplication::keyboardModifiers() & Qt::ShiftModifier) + kind = ITextEditor::BookmarkRequest; + else + kind = ITextEditor::BreakpointRequest; + emit editor()->markRequested(editor(), line, kind); } } } diff --git a/src/plugins/texteditor/itexteditor.h b/src/plugins/texteditor/itexteditor.h index ab8ff77347d..fe1caa87d5d 100644 --- a/src/plugins/texteditor/itexteditor.h +++ b/src/plugins/texteditor/itexteditor.h @@ -153,10 +153,15 @@ public: static QMap<QString, QString> openedTextEditorsContents(); static QMap<QString, QTextCodec *> openedTextEditorsEncodings(); + enum MarkRequestKind { + BreakpointRequest, + BookmarkRequest + }; + signals: void contentsChanged(); void contentsChangedBecauseOfUndo(); - void markRequested(TextEditor::ITextEditor *editor, int line); + void markRequested(TextEditor::ITextEditor *editor, int line, TextEditor::ITextEditor::MarkRequestKind kind); void markContextMenuRequested(TextEditor::ITextEditor *editor, int line, QMenu *menu); void tooltipOverrideRequested(TextEditor::ITextEditor *editor, const QPoint &globalPos, int position, bool *handled); void tooltipRequested(TextEditor::ITextEditor *editor, const QPoint &globalPos, int position); -- GitLab