diff options
author | David Schulz <[email protected]> | 2024-08-29 13:02:25 +0200 |
---|---|---|
committer | David Schulz <[email protected]> | 2024-08-30 05:27:12 +0000 |
commit | def7d6c8157d81772cdcc1bf229c68303dee914c (patch) | |
tree | 96c0c873b559b8ea04fa5af0cdb47e554551bcdb /src/plugins/copilot | |
parent | 7dec58dbb9fd394e98413bae38ce3f0dfcd39adf (diff) |
Copilot: add Apply Line action to tooltip
Task-number: QTCREATORBUG-31418
Change-Id: Iec4b2d47d47356df851d8949e59243817aafe075
Reviewed-by: Marcus Tillmanns <[email protected]>
Diffstat (limited to 'src/plugins/copilot')
-rw-r--r-- | src/plugins/copilot/copilothoverhandler.cpp | 11 | ||||
-rw-r--r-- | src/plugins/copilot/copilotsuggestion.cpp | 34 | ||||
-rw-r--r-- | src/plugins/copilot/copilotsuggestion.h | 4 |
3 files changed, 38 insertions, 11 deletions
diff --git a/src/plugins/copilot/copilothoverhandler.cpp b/src/plugins/copilot/copilothoverhandler.cpp index d17ec073b2c..789650e67c2 100644 --- a/src/plugins/copilot/copilothoverhandler.cpp +++ b/src/plugins/copilot/copilothoverhandler.cpp @@ -47,11 +47,13 @@ public: auto apply = addAction(Tr::tr("Apply (%1)").arg(QKeySequence(Qt::Key_Tab).toString())); auto applyWord = addAction( Tr::tr("Apply Word (%1)").arg(QKeySequence(QKeySequence::MoveToNextWord).toString())); + auto applyLine = addAction(Tr::tr("Apply Line")); connect(prev, &QAction::triggered, this, &CopilotCompletionToolTip::selectPrevious); connect(next, &QAction::triggered, this, &CopilotCompletionToolTip::selectNext); connect(apply, &QAction::triggered, this, &CopilotCompletionToolTip::apply); connect(applyWord, &QAction::triggered, this, &CopilotCompletionToolTip::applyWord); + connect(applyLine, &QAction::triggered, this, &CopilotCompletionToolTip::applyLine); updateLabels(); } @@ -108,6 +110,15 @@ private: ToolTip::hide(); } + void applyLine() + { + if (TextSuggestion *suggestion = m_editor->currentSuggestion()) { + if (!suggestion->applyLine(m_editor)) + return; + } + ToolTip::hide(); + } + QLabel *m_numberLabel; QList<Completion> m_completions; int m_currentCompletion = 0; diff --git a/src/plugins/copilot/copilotsuggestion.cpp b/src/plugins/copilot/copilotsuggestion.cpp index c97e65fb8b8..a935a9f8b9c 100644 --- a/src/plugins/copilot/copilotsuggestion.cpp +++ b/src/plugins/copilot/copilotsuggestion.cpp @@ -43,6 +43,26 @@ bool CopilotSuggestion::apply() bool CopilotSuggestion::applyWord(TextEditorWidget *widget) { + return applyPart(Word, widget); +} + +bool CopilotSuggestion::applyLine(TextEditor::TextEditorWidget *widget) +{ + return applyPart(Line, widget); +} + +void CopilotSuggestion::reset() +{ + m_start.removeSelectedText(); +} + +int CopilotSuggestion::position() +{ + return m_start.selectionEnd(); +} + +bool CopilotSuggestion::applyPart(Part part, TextEditor::TextEditorWidget *widget) +{ Completion completion = m_completions.value(m_currentCompletion); const Range range = completion.range(); const QTextCursor cursor = range.toSelection(m_start.document()); @@ -50,11 +70,13 @@ bool CopilotSuggestion::applyWord(TextEditorWidget *widget) const QString text = completion.text(); const int startPos = currentCursor.positionInBlock() - cursor.positionInBlock() + (cursor.selectionEnd() - cursor.selectionStart()); - const int next = endOfNextWord(text, startPos); + int next = part == Word ? endOfNextWord(text, startPos) : text.indexOf('\n', startPos); if (next == -1) return apply(); + if (part == Line) + ++next; QString subText = text.mid(startPos, next - startPos); if (subText.isEmpty()) return false; @@ -78,15 +100,5 @@ bool CopilotSuggestion::applyWord(TextEditorWidget *widget) return false; } -void CopilotSuggestion::reset() -{ - m_start.removeSelectedText(); -} - -int CopilotSuggestion::position() -{ - return m_start.selectionEnd(); -} - } // namespace Copilot::Internal diff --git a/src/plugins/copilot/copilotsuggestion.h b/src/plugins/copilot/copilotsuggestion.h index 719016236a2..4684bef12fb 100644 --- a/src/plugins/copilot/copilotsuggestion.h +++ b/src/plugins/copilot/copilotsuggestion.h @@ -18,6 +18,7 @@ public: bool apply() final; bool applyWord(TextEditor::TextEditorWidget *widget) final; + bool applyLine(TextEditor::TextEditorWidget *widget) final; void reset() final; int position() final; @@ -25,6 +26,9 @@ public: int currentCompletion() const { return m_currentCompletion; } private: + enum Part {Word, Line}; + bool applyPart(Part part, TextEditor::TextEditorWidget *widget); + QList<Completion> m_completions; int m_currentCompletion = 0; QTextCursor m_start; |