mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-26 04:58:49 +03:00
get completion string based on trigger position instead of current word
This commit is contained in:
parent
254b7549eb
commit
beec2607fc
2 changed files with 19 additions and 10 deletions
|
@ -129,10 +129,10 @@ void
|
||||||
FilteredTextEdit::insertCompletion(QString completion)
|
FilteredTextEdit::insertCompletion(QString completion)
|
||||||
{
|
{
|
||||||
// Paint the current word and replace it with 'completion'
|
// Paint the current word and replace it with 'completion'
|
||||||
auto cur_word = wordUnderCursor();
|
auto cur_text = textAfterPosition(trigger_pos_);
|
||||||
auto tc = textCursor();
|
auto tc = textCursor();
|
||||||
tc.movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, cur_word.length());
|
tc.movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, cur_text.length());
|
||||||
tc.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor, cur_word.length());
|
tc.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor, cur_text.length());
|
||||||
tc.insertText(completion);
|
tc.insertText(completion);
|
||||||
setTextCursor(tc);
|
setTextCursor(tc);
|
||||||
}
|
}
|
||||||
|
@ -248,8 +248,8 @@ FilteredTextEdit::keyPressEvent(QKeyEvent *event)
|
||||||
}
|
}
|
||||||
case Qt::Key_Colon: {
|
case Qt::Key_Colon: {
|
||||||
QTextEdit::keyPressEvent(event);
|
QTextEdit::keyPressEvent(event);
|
||||||
|
trigger_pos_ = textCursor().position() - 1;
|
||||||
emoji_popup_open_ = true;
|
emoji_popup_open_ = true;
|
||||||
emoji_completion_model_->setFilterRegExp(wordUnderCursor());
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Qt::Key_Return:
|
case Qt::Key_Return:
|
||||||
|
@ -311,15 +311,15 @@ FilteredTextEdit::keyPressEvent(QKeyEvent *event)
|
||||||
if (isModifier)
|
if (isModifier)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (emoji_popup_open_ && wordUnderCursor().length() > 2) {
|
if (emoji_popup_open_ && textAfterPosition(trigger_pos_).length() > 2) {
|
||||||
// Update completion
|
// Update completion
|
||||||
emoji_completion_model_->setFilterRegExp(wordUnderCursor());
|
emoji_completion_model_->setFilterRegExp(textAfterPosition(trigger_pos_));
|
||||||
completer_->complete(completerRect());
|
completer_->complete(completerRect());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (emoji_popup_open_ &&
|
if (emoji_popup_open_ &&
|
||||||
(completer_->completionCount() < 1 ||
|
(completer_->completionCount() < 1 ||
|
||||||
!wordUnderCursor().contains(QRegExp(":[^\r\n\t\f\v :]+$")))) {
|
!textAfterPosition(trigger_pos_).contains(QRegExp(":[^\r\n\t\f\v :]+$")))) {
|
||||||
// No completions for this word or another word than the completer was
|
// No completions for this word or another word than the completer was
|
||||||
// started with
|
// started with
|
||||||
emoji_popup_open_ = false;
|
emoji_popup_open_ = false;
|
||||||
|
@ -441,7 +441,8 @@ FilteredTextEdit::completerRect()
|
||||||
// Move left edge to the beginning of the word
|
// Move left edge to the beginning of the word
|
||||||
auto cursor = textCursor();
|
auto cursor = textCursor();
|
||||||
auto rect = cursorRect();
|
auto rect = cursorRect();
|
||||||
cursor.movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, wordUnderCursor().length());
|
cursor.movePosition(QTextCursor::Left, QTextCursor::MoveAnchor,
|
||||||
|
textAfterPosition(trigger_pos_).length());
|
||||||
auto cursor_global_x = viewport()->mapToGlobal(cursorRect(cursor).topLeft()).x();
|
auto cursor_global_x = viewport()->mapToGlobal(cursorRect(cursor).topLeft()).x();
|
||||||
auto rect_global_left = viewport()->mapToGlobal(rect.bottomLeft()).x();
|
auto rect_global_left = viewport()->mapToGlobal(rect.bottomLeft()).x();
|
||||||
auto dx = qAbs(rect_global_left - cursor_global_x);
|
auto dx = qAbs(rect_global_left - cursor_global_x);
|
||||||
|
|
|
@ -86,6 +86,7 @@ private:
|
||||||
bool emoji_popup_open_ = false;
|
bool emoji_popup_open_ = false;
|
||||||
CompletionModel *emoji_completion_model_;
|
CompletionModel *emoji_completion_model_;
|
||||||
std::deque<QString> true_history_, working_history_;
|
std::deque<QString> true_history_, working_history_;
|
||||||
|
int trigger_pos_; // Where emoji completer was triggered
|
||||||
size_t history_index_;
|
size_t history_index_;
|
||||||
QCompleter *completer_;
|
QCompleter *completer_;
|
||||||
QTimer *typingTimer_;
|
QTimer *typingTimer_;
|
||||||
|
@ -116,7 +117,14 @@ private:
|
||||||
cursor.movePosition(QTextCursor::StartOfWord, QTextCursor::KeepAnchor);
|
cursor.movePosition(QTextCursor::StartOfWord, QTextCursor::KeepAnchor);
|
||||||
return cursor.selectedText();
|
return cursor.selectedText();
|
||||||
}
|
}
|
||||||
QString wordUnderCursor()
|
QString textAfterPosition(int pos)
|
||||||
|
{
|
||||||
|
auto tc = textCursor();
|
||||||
|
tc.setPosition(pos);
|
||||||
|
tc.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor);
|
||||||
|
return tc.selectedText();
|
||||||
|
}
|
||||||
|
/*QString wordUnderCursor()
|
||||||
{
|
{
|
||||||
auto tc = textCursor();
|
auto tc = textCursor();
|
||||||
auto editor_text = toPlainText();
|
auto editor_text = toPlainText();
|
||||||
|
@ -130,7 +138,7 @@ private:
|
||||||
// Revert back
|
// Revert back
|
||||||
std::reverse(text.begin(), text.end());
|
std::reverse(text.begin(), text.end());
|
||||||
return text;
|
return text;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
dialogs::PreviewUploadOverlay previewDialog_;
|
dialogs::PreviewUploadOverlay previewDialog_;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue