Add description for emoji
This commit is contained in:
@@ -102,6 +102,9 @@ QVariant CompletionModel::data(const QModelIndex &index, int role) const
|
||||
if (role == ReplacedText) {
|
||||
return m_filterModel->data(filterIndex, CustomEmojiModel::ReplacedTextRole);
|
||||
}
|
||||
if (role == Subtitle) {
|
||||
return m_filterModel->data(filterIndex, EmojiModel::DescriptionRole);
|
||||
}
|
||||
}
|
||||
|
||||
return {};
|
||||
@@ -149,7 +152,7 @@ void CompletionModel::updateCompletion()
|
||||
m_filterModel->setSourceModel(m_emojiModel);
|
||||
m_autoCompletionType = Emoji;
|
||||
m_filterModel->setFilterRole(CustomEmojiModel::Name);
|
||||
m_filterModel->setSecondaryFilterRole(-1);
|
||||
m_filterModel->setSecondaryFilterRole(EmojiModel::DescriptionRole);
|
||||
m_filterModel->setFullText(m_fullText);
|
||||
m_filterModel->setFilterText(m_text);
|
||||
m_filterModel->invalidate();
|
||||
|
||||
@@ -25,6 +25,17 @@ bool CompletionProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &so
|
||||
#endif
|
||||
}
|
||||
|
||||
bool CompletionProxyModel::lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const
|
||||
{
|
||||
if (m_secondaryFilterRole == -1)
|
||||
return QSortFilterProxyModel::lessThan(source_left, source_right);
|
||||
bool left_primary = sourceModel()->data(source_left, filterRole()).toString().startsWith(m_filterText, Qt::CaseInsensitive);
|
||||
bool right_primary = sourceModel()->data(source_right, filterRole()).toString().startsWith(m_filterText, Qt::CaseInsensitive);
|
||||
if (left_primary != right_primary)
|
||||
return left_primary;
|
||||
return QSortFilterProxyModel::lessThan(source_left, source_right);
|
||||
}
|
||||
|
||||
int CompletionProxyModel::secondaryFilterRole() const
|
||||
{
|
||||
return m_secondaryFilterRole;
|
||||
|
||||
@@ -13,6 +13,7 @@ class CompletionProxyModel : public QSortFilterProxyModel
|
||||
|
||||
public:
|
||||
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
|
||||
bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override;
|
||||
|
||||
int secondaryFilterRole() const;
|
||||
void setSecondaryFilterRole(int role);
|
||||
|
||||
@@ -29,6 +29,7 @@ public:
|
||||
MxcUrl = 50,
|
||||
DisplayRole = 51,
|
||||
ReplacedTextRole = 52,
|
||||
DescriptionRole = 53, // also invalid, reserved
|
||||
};
|
||||
Q_ENUM(Roles);
|
||||
|
||||
|
||||
@@ -48,6 +48,8 @@ QVariant EmojiModel::data(const QModelIndex &index, int role) const
|
||||
return QStringLiteral("invalid");
|
||||
case DisplayRole:
|
||||
return QStringLiteral("%2 :%1:").arg(emoji.shortName, emoji.unicode);
|
||||
case DescriptionRole:
|
||||
return emoji.description;
|
||||
}
|
||||
}
|
||||
return {};
|
||||
|
||||
@@ -14,6 +14,12 @@ struct Emoji {
|
||||
, isCustom(isCustom)
|
||||
{
|
||||
}
|
||||
Emoji(QString u, QString s, QString d)
|
||||
: unicode(std::move(std::move(u)))
|
||||
, shortName(std::move(std::move(s)))
|
||||
, description(std::move(std::move(d)))
|
||||
{
|
||||
}
|
||||
Emoji() = default;
|
||||
|
||||
friend QDataStream &operator<<(QDataStream &arch, const Emoji &object)
|
||||
@@ -33,11 +39,13 @@ struct Emoji {
|
||||
|
||||
QString unicode;
|
||||
QString shortName;
|
||||
QString description;
|
||||
bool isCustom = false;
|
||||
|
||||
Q_GADGET
|
||||
Q_PROPERTY(QString unicode MEMBER unicode)
|
||||
Q_PROPERTY(QString shortName MEMBER shortName)
|
||||
Q_PROPERTY(QString description MEMBER description)
|
||||
Q_PROPERTY(bool isCustom MEMBER isCustom)
|
||||
};
|
||||
|
||||
@@ -64,6 +72,7 @@ public:
|
||||
InvalidRole = 50,
|
||||
DisplayRole = 51,
|
||||
ReplacedTextRole = 52,
|
||||
DescriptionRole = 53,
|
||||
};
|
||||
Q_ENUM(RoleNames);
|
||||
|
||||
|
||||
3706
src/emojis.h
3706
src/emojis.h
File diff suppressed because it is too large
Load Diff
3560
src/emojitones.h
3560
src/emojitones.h
File diff suppressed because it is too large
Load Diff
@@ -79,6 +79,7 @@ for line in response.text.split("\n"):
|
||||
|
||||
x = re.search(".*E[0-9]+.[0-9] ", parts[1])
|
||||
description = parts[1].removeprefix(x.group())
|
||||
shortcode = description
|
||||
if "flag:" in description:
|
||||
description = "Flag of " + description.split(": ")[1]
|
||||
|
||||
@@ -87,12 +88,15 @@ for line in response.text.split("\n"):
|
||||
|
||||
is_skin_tone = "skin tone" in description
|
||||
|
||||
if not is_skin_tone and escaped_sequence in emoji_unicode_shortname_map:
|
||||
description = emoji_unicode_shortname_map[escaped_sequence]
|
||||
if escaped_sequence in emoji_unicode_shortname_map:
|
||||
shortcode = emoji_unicode_shortname_map[escaped_sequence]
|
||||
|
||||
emoji_args = 'QString::fromUtf8("{0}"), QStringLiteral("{1}"), QStringLiteral("{2}")'.format(escaped_sequence, shortcode, description)
|
||||
emoji_qvariant = 'QVariant::fromValue(Emoji{' + emoji_args + '})'
|
||||
|
||||
if is_skin_tone:
|
||||
tones_file.write("{\"" + description.split(":")[0] + "\", QVariant::fromValue(Emoji{QString::fromUtf8(\"" + escaped_sequence + "\"), QStringLiteral(\"" + description + "\")})},\n")
|
||||
tones_file.write("{\"" + description.split(":")[0] + "\", " + emoji_qvariant + "},\n")
|
||||
continue
|
||||
file.write("_emojis[" + group + "].append(QVariant::fromValue(Emoji{QString::fromUtf8(\"" + escaped_sequence + "\"), QStringLiteral(\"" + description + "\")}));\n")
|
||||
file.write("_emojis[" + group + "].append(" + emoji_qvariant + ");\n")
|
||||
file.close()
|
||||
tones_file.close()
|
||||
|
||||
Reference in New Issue
Block a user