mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-22 11:00:48 +03:00
use completion interface in emoji completions
This commit is contained in:
parent
00bc87b550
commit
07259b9cb7
2 changed files with 19 additions and 5 deletions
|
@ -30,6 +30,7 @@
|
||||||
|
|
||||||
#include "Cache.h"
|
#include "Cache.h"
|
||||||
#include "ChatPage.h"
|
#include "ChatPage.h"
|
||||||
|
#include "CompletionModelRoles.h"
|
||||||
#include "CompletionProxyModel.h"
|
#include "CompletionProxyModel.h"
|
||||||
#include "Logging.h"
|
#include "Logging.h"
|
||||||
#include "TextInputWidget.h"
|
#include "TextInputWidget.h"
|
||||||
|
@ -71,6 +72,7 @@ FilteredTextEdit::FilteredTextEdit(QWidget *parent)
|
||||||
auto model = new emoji::EmojiSearchModel(this);
|
auto model = new emoji::EmojiSearchModel(this);
|
||||||
model->sort(0, Qt::AscendingOrder);
|
model->sort(0, Qt::AscendingOrder);
|
||||||
completer_->setModel((emoji_completion_model_ = new CompletionProxyModel(model, this)));
|
completer_->setModel((emoji_completion_model_ = new CompletionProxyModel(model, this)));
|
||||||
|
emoji_completion_model_->setFilterRole(CompletionModel::SearchRole);
|
||||||
completer_->setModelSorting(QCompleter::UnsortedModel);
|
completer_->setModelSorting(QCompleter::UnsortedModel);
|
||||||
completer_->popup()->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
completer_->popup()->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||||
completer_->popup()->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
completer_->popup()->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||||
|
@ -79,8 +81,8 @@ FilteredTextEdit::FilteredTextEdit(QWidget *parent)
|
||||||
QOverload<const QModelIndex &>::of(&QCompleter::activated),
|
QOverload<const QModelIndex &>::of(&QCompleter::activated),
|
||||||
[this](auto &index) {
|
[this](auto &index) {
|
||||||
emoji_popup_open_ = false;
|
emoji_popup_open_ = false;
|
||||||
auto emoji = index.data(emoji::EmojiModel::Unicode).toString();
|
auto text = index.data(CompletionModel::CompletionRole).toString();
|
||||||
insertCompletion(emoji);
|
insertCompletion(text);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(this, &FilteredTextEdit::resultsRetrieved, this, &FilteredTextEdit::showResults);
|
connect(this, &FilteredTextEdit::resultsRetrieved, this, &FilteredTextEdit::showResults);
|
||||||
|
@ -297,7 +299,9 @@ FilteredTextEdit::keyPressEvent(QKeyEvent *event)
|
||||||
|
|
||||||
if (emoji_popup_open_ && textAfterPosition(trigger_pos_).length() > 2) {
|
if (emoji_popup_open_ && textAfterPosition(trigger_pos_).length() > 2) {
|
||||||
// Update completion
|
// Update completion
|
||||||
emoji_completion_model_->setFilterRegExp(textAfterPosition(trigger_pos_));
|
// Don't include the trigger token in the search
|
||||||
|
emoji_completion_model_->setFilterWildcard(
|
||||||
|
textAfterPosition(trigger_pos_).remove(0, 1));
|
||||||
completer_->complete(completerRect());
|
completer_->complete(completerRect());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include "EmojiModel.h"
|
#include "EmojiModel.h"
|
||||||
|
|
||||||
|
#include <CompletionModelRoles.h>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QEvent>
|
#include <QEvent>
|
||||||
#include <QSortFilterProxyModel>
|
#include <QSortFilterProxyModel>
|
||||||
|
@ -19,12 +20,21 @@ public:
|
||||||
}
|
}
|
||||||
QVariant data(const QModelIndex &index, int role = Qt::UserRole + 1) const override
|
QVariant data(const QModelIndex &index, int role = Qt::UserRole + 1) const override
|
||||||
{
|
{
|
||||||
if (role == Qt::DisplayRole) {
|
switch (role) {
|
||||||
|
case Qt::DisplayRole: {
|
||||||
auto emoji = QSortFilterProxyModel::data(index, role).toString();
|
auto emoji = QSortFilterProxyModel::data(index, role).toString();
|
||||||
return emoji + " :" +
|
return emoji + " :" +
|
||||||
toShortcode(data(index, EmojiModel::ShortName).toString()) + ":";
|
toShortcode(data(index, EmojiModel::ShortName).toString()) + ":";
|
||||||
}
|
}
|
||||||
return QSortFilterProxyModel::data(index, role);
|
case CompletionModel::CompletionRole:
|
||||||
|
return QSortFilterProxyModel::data(index, EmojiModel::Unicode);
|
||||||
|
case CompletionModel::SearchRole: {
|
||||||
|
return toShortcode(
|
||||||
|
QSortFilterProxyModel::data(index, EmojiModel::ShortName).toString());
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return QSortFilterProxyModel::data(index, role);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
Loading…
Reference in a new issue