QmlDesigner: Highlight selected node in code editor

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 <ci_patchbuild_bot@qt.io>
Reviewed-by: Henning Gründl <henning.gruendl@qt.io>
This commit is contained in:
Thomas Hartmann
2023-11-08 15:37:38 +01:00
parent 036963de02
commit ad49605ea9
2 changed files with 37 additions and 0 deletions

View File

@@ -116,10 +116,26 @@ void TextEditorWidget::jumpToModelNode(const ModelNode &modelNode)
int line, column; int line, column;
m_textEditor->editorWidget()->convertPosition(nodeOffset, &line, &column); m_textEditor->editorWidget()->convertPosition(nodeOffset, &line, &column);
m_textEditor->editorWidget()->gotoLine(line + 1, column); m_textEditor->editorWidget()->gotoLine(line + 1, column);
highlightToModelNode(modelNode);
} }
m_blockCursorSelectionSynchronisation = false; 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() void TextEditorWidget::jumpTextCursorToSelectedModelNode()
{ {
if (m_blockRoundTrip) if (m_blockRoundTrip)
@@ -217,6 +233,10 @@ bool TextEditorWidget::eventFilter(QObject *, QEvent *event)
return true; 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; 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) void TextEditorWidget::dropEvent(QDropEvent *dropEvent)
{ {
QTextCursor cursor = m_textEditor->editorWidget()->cursorForPosition(dropEvent->pos()); QTextCursor cursor = m_textEditor->editorWidget()->cursorForPosition(dropEvent->pos());
@@ -323,6 +357,7 @@ void TextEditorWidget::dropEvent(QDropEvent *dropEvent)
actionManager.handleExternalAssetsDrop(dropEvent->mimeData()); actionManager.handleExternalAssetsDrop(dropEvent->mimeData());
} }
m_textEditorView->model()->endDrag(); m_textEditorView->model()->endDrag();
m_textEditor->editorWidget()->updateFoldingHighlight(QTextCursor());
} }
} // namespace QmlDesigner } // namespace QmlDesigner

View File

@@ -47,10 +47,12 @@ public:
void setBlockCursorSelectionSynchronisation(bool b); void setBlockCursorSelectionSynchronisation(bool b);
void jumpToModelNode(const ModelNode &modelNode); void jumpToModelNode(const ModelNode &modelNode);
void highlightToModelNode(const ModelNode &modelNode);
protected: protected:
bool eventFilter(QObject *object, QEvent *event) override; bool eventFilter(QObject *object, QEvent *event) override;
void dragEnterEvent(QDragEnterEvent *dragEnterEvent) override; void dragEnterEvent(QDragEnterEvent *dragEnterEvent) override;
void dragMoveEvent(QDragMoveEvent *dragMoveEvent) override;
void dropEvent(QDropEvent *dropEvent) override; void dropEvent(QDropEvent *dropEvent) override;
private: private: