From ad49605ea9c252e57f97b25a4cea993216babfc9 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Wed, 8 Nov 2023 15:37:38 +0100 Subject: [PATCH] QmlDesigner: Highlight selected node in code editor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We also highlight the drag target when using drag and drop. Task-number: QDS-10869 Change-Id: Ic396848f93deaa3cce899c2cf431d5a7f5a940f5 Reviewed-by: Qt CI Patch Build Bot Reviewed-by: Henning Gründl --- .../texteditor/texteditorwidget.cpp | 35 +++++++++++++++++++ .../components/texteditor/texteditorwidget.h | 2 ++ 2 files changed, 37 insertions(+) diff --git a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp index b344985476d..93976f10d9e 100644 --- a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp +++ b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp @@ -116,10 +116,26 @@ void TextEditorWidget::jumpToModelNode(const ModelNode &modelNode) int line, column; m_textEditor->editorWidget()->convertPosition(nodeOffset, &line, &column); m_textEditor->editorWidget()->gotoLine(line + 1, column); + + highlightToModelNode(modelNode); } m_blockCursorSelectionSynchronisation = false; } +void TextEditorWidget::highlightToModelNode(const ModelNode &modelNode) +{ + RewriterView *rewriterView = m_textEditorView->model()->rewriterView(); + const int nodeOffset = rewriterView->nodeOffset(modelNode); + if (nodeOffset > 0) { + int line, column; + m_textEditor->editorWidget()->convertPosition(nodeOffset, &line, &column); + + QTextCursor cursor = m_textEditor->textCursor(); + cursor.setPosition(nodeOffset); + m_textEditor->editorWidget()->updateFoldingHighlight(cursor); + } +} + void TextEditorWidget::jumpTextCursorToSelectedModelNode() { if (m_blockRoundTrip) @@ -217,6 +233,10 @@ bool TextEditorWidget::eventFilter(QObject *, QEvent *event) return true; } } + } else if (event->type() == QEvent::FocusIn) { + m_textEditor->editorWidget()->updateFoldingHighlight(QTextCursor()); + } else if (event->type() == QEvent::FocusOut) { + m_textEditor->editorWidget()->updateFoldingHighlight(QTextCursor()); } return false; } @@ -239,6 +259,20 @@ void TextEditorWidget::dragEnterEvent(QDragEnterEvent *dragEnterEvent) } } +void TextEditorWidget::dragMoveEvent(QDragMoveEvent *dragMoveEvent) +{ + QTextCursor cursor = m_textEditor->editorWidget()->cursorForPosition(dragMoveEvent->pos()); + const int cursorPosition = cursor.position(); + RewriterView *rewriterView = m_textEditorView->model()->rewriterView(); + + QTC_ASSERT(rewriterView, return ); + ModelNode modelNode = rewriterView->nodeAtTextCursorPosition(cursorPosition); + + if (!modelNode.isValid()) + return; + highlightToModelNode(modelNode); +} + void TextEditorWidget::dropEvent(QDropEvent *dropEvent) { QTextCursor cursor = m_textEditor->editorWidget()->cursorForPosition(dropEvent->pos()); @@ -323,6 +357,7 @@ void TextEditorWidget::dropEvent(QDropEvent *dropEvent) actionManager.handleExternalAssetsDrop(dropEvent->mimeData()); } m_textEditorView->model()->endDrag(); + m_textEditor->editorWidget()->updateFoldingHighlight(QTextCursor()); } } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.h b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.h index 8178050cf71..c6f23110af0 100644 --- a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.h +++ b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.h @@ -47,10 +47,12 @@ public: void setBlockCursorSelectionSynchronisation(bool b); void jumpToModelNode(const ModelNode &modelNode); + void highlightToModelNode(const ModelNode &modelNode); protected: bool eventFilter(QObject *object, QEvent *event) override; void dragEnterEvent(QDragEnterEvent *dragEnterEvent) override; + void dragMoveEvent(QDragMoveEvent *dragMoveEvent) override; void dropEvent(QDropEvent *dropEvent) override; private: