From 553a97c8bb5042fbef0487255af52a4a6793d0fd Mon Sep 17 00:00:00 2001 From: Konstantinos Sideris Date: Sat, 24 Mar 2018 23:16:15 +0200 Subject: Add basic support for username auto-completion fixes #40 --- include/TextInputWidget.h | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'include/TextInputWidget.h') diff --git a/include/TextInputWidget.h b/include/TextInputWidget.h index 872773f1..95262722 100644 --- a/include/TextInputWidget.h +++ b/include/TextInputWidget.h @@ -18,7 +18,11 @@ #pragma once #include +#include +#include +#include +#include #include #include #include @@ -26,15 +30,20 @@ #include "FlatButton.h" #include "LoadingIndicator.h" +#include "SuggestionsPopup.hpp" #include "dialogs/PreviewUploadOverlay.h" #include "emoji/PickButton.h" +class RoomState; + namespace dialogs { class PreviewUploadOverlay; } +struct SearchResult; + class FilteredTextEdit : public QTextEdit { Q_OBJECT @@ -61,18 +70,45 @@ signals: void video(QSharedPointer data, const QString &filename); void file(QSharedPointer data, const QString &filename); + //! Trigger the suggestion popup. + void showSuggestions(const QString &query); + void resultsRetrieved(const QVector &results); + +public slots: + void showResults(const QVector &results); + protected: void keyPressEvent(QKeyEvent *event) override; bool canInsertFromMimeData(const QMimeData *source) const override; void insertFromMimeData(const QMimeData *source) override; + void focusOutEvent(QFocusEvent *event) override + { + popup_.hide(); + QWidget::focusOutEvent(event); + } private: std::deque true_history_, working_history_; size_t history_index_; QTimer *typingTimer_; + SuggestionsPopup popup_; + + void closeSuggestions() { popup_.hide(); } + void resetAnchor() { atTriggerPosition_ = -1; } + + QString query() + { + auto cursor = textCursor(); + cursor.movePosition(QTextCursor::StartOfWord, QTextCursor::KeepAnchor); + return cursor.selectedText(); + } + dialogs::PreviewUploadOverlay previewDialog_; + //! Latest position of the '@' character that triggers the username completer. + int atTriggerPosition_ = -1; + void textChanged(); void uploadData(const QByteArray data, const QString &media, const QString &filename); void afterCompletion(int); @@ -97,6 +133,7 @@ public slots: void openFileSelection(); void hideUploadSpinner(); void focusLineEdit() { input_->setFocus(); } + void setRoomState(QSharedPointer state) { currState_ = state; } private slots: void addSelectedEmoji(const QString &emoji); @@ -132,5 +169,8 @@ private: FlatButton *sendMessageBtn_; emoji::PickButton *emojiBtn_; + //! State of the current room. + QSharedPointer currState_; + QColor borderColor_; }; -- cgit 1.5.1