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) {
|
if (role == ReplacedText) {
|
||||||
return m_filterModel->data(filterIndex, CustomEmojiModel::ReplacedTextRole);
|
return m_filterModel->data(filterIndex, CustomEmojiModel::ReplacedTextRole);
|
||||||
}
|
}
|
||||||
|
if (role == Subtitle) {
|
||||||
|
return m_filterModel->data(filterIndex, EmojiModel::DescriptionRole);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return {};
|
return {};
|
||||||
@@ -149,7 +152,7 @@ void CompletionModel::updateCompletion()
|
|||||||
m_filterModel->setSourceModel(m_emojiModel);
|
m_filterModel->setSourceModel(m_emojiModel);
|
||||||
m_autoCompletionType = Emoji;
|
m_autoCompletionType = Emoji;
|
||||||
m_filterModel->setFilterRole(CustomEmojiModel::Name);
|
m_filterModel->setFilterRole(CustomEmojiModel::Name);
|
||||||
m_filterModel->setSecondaryFilterRole(-1);
|
m_filterModel->setSecondaryFilterRole(EmojiModel::DescriptionRole);
|
||||||
m_filterModel->setFullText(m_fullText);
|
m_filterModel->setFullText(m_fullText);
|
||||||
m_filterModel->setFilterText(m_text);
|
m_filterModel->setFilterText(m_text);
|
||||||
m_filterModel->invalidate();
|
m_filterModel->invalidate();
|
||||||
|
|||||||
@@ -25,6 +25,17 @@ bool CompletionProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &so
|
|||||||
#endif
|
#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
|
int CompletionProxyModel::secondaryFilterRole() const
|
||||||
{
|
{
|
||||||
return m_secondaryFilterRole;
|
return m_secondaryFilterRole;
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ class CompletionProxyModel : public QSortFilterProxyModel
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
|
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
|
||||||
|
bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override;
|
||||||
|
|
||||||
int secondaryFilterRole() const;
|
int secondaryFilterRole() const;
|
||||||
void setSecondaryFilterRole(int role);
|
void setSecondaryFilterRole(int role);
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ public:
|
|||||||
MxcUrl = 50,
|
MxcUrl = 50,
|
||||||
DisplayRole = 51,
|
DisplayRole = 51,
|
||||||
ReplacedTextRole = 52,
|
ReplacedTextRole = 52,
|
||||||
|
DescriptionRole = 53, // also invalid, reserved
|
||||||
};
|
};
|
||||||
Q_ENUM(Roles);
|
Q_ENUM(Roles);
|
||||||
|
|
||||||
|
|||||||
@@ -48,6 +48,8 @@ QVariant EmojiModel::data(const QModelIndex &index, int role) const
|
|||||||
return QStringLiteral("invalid");
|
return QStringLiteral("invalid");
|
||||||
case DisplayRole:
|
case DisplayRole:
|
||||||
return QStringLiteral("%2 :%1:").arg(emoji.shortName, emoji.unicode);
|
return QStringLiteral("%2 :%1:").arg(emoji.shortName, emoji.unicode);
|
||||||
|
case DescriptionRole:
|
||||||
|
return emoji.description;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return {};
|
return {};
|
||||||
|
|||||||
@@ -14,6 +14,12 @@ struct Emoji {
|
|||||||
, isCustom(isCustom)
|
, 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;
|
Emoji() = default;
|
||||||
|
|
||||||
friend QDataStream &operator<<(QDataStream &arch, const Emoji &object)
|
friend QDataStream &operator<<(QDataStream &arch, const Emoji &object)
|
||||||
@@ -33,11 +39,13 @@ struct Emoji {
|
|||||||
|
|
||||||
QString unicode;
|
QString unicode;
|
||||||
QString shortName;
|
QString shortName;
|
||||||
|
QString description;
|
||||||
bool isCustom = false;
|
bool isCustom = false;
|
||||||
|
|
||||||
Q_GADGET
|
Q_GADGET
|
||||||
Q_PROPERTY(QString unicode MEMBER unicode)
|
Q_PROPERTY(QString unicode MEMBER unicode)
|
||||||
Q_PROPERTY(QString shortName MEMBER shortName)
|
Q_PROPERTY(QString shortName MEMBER shortName)
|
||||||
|
Q_PROPERTY(QString description MEMBER description)
|
||||||
Q_PROPERTY(bool isCustom MEMBER isCustom)
|
Q_PROPERTY(bool isCustom MEMBER isCustom)
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -64,6 +72,7 @@ public:
|
|||||||
InvalidRole = 50,
|
InvalidRole = 50,
|
||||||
DisplayRole = 51,
|
DisplayRole = 51,
|
||||||
ReplacedTextRole = 52,
|
ReplacedTextRole = 52,
|
||||||
|
DescriptionRole = 53,
|
||||||
};
|
};
|
||||||
Q_ENUM(RoleNames);
|
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])
|
x = re.search(".*E[0-9]+.[0-9] ", parts[1])
|
||||||
description = parts[1].removeprefix(x.group())
|
description = parts[1].removeprefix(x.group())
|
||||||
|
shortcode = description
|
||||||
if "flag:" in description:
|
if "flag:" in description:
|
||||||
description = "Flag of " + description.split(": ")[1]
|
description = "Flag of " + description.split(": ")[1]
|
||||||
|
|
||||||
@@ -87,12 +88,15 @@ for line in response.text.split("\n"):
|
|||||||
|
|
||||||
is_skin_tone = "skin tone" in description
|
is_skin_tone = "skin tone" in description
|
||||||
|
|
||||||
if not is_skin_tone and escaped_sequence in emoji_unicode_shortname_map:
|
if escaped_sequence in emoji_unicode_shortname_map:
|
||||||
description = emoji_unicode_shortname_map[escaped_sequence]
|
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:
|
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
|
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()
|
file.close()
|
||||||
tones_file.close()
|
tones_file.close()
|
||||||
|
|||||||
Reference in New Issue
Block a user