Get category switching working

This commit is contained in:
Loren Burkholder 2021-01-22 20:07:23 -05:00
parent e3f95fcdab
commit bc7cf9ef39
4 changed files with 42 additions and 41 deletions

View file

@ -126,7 +126,7 @@ Popup {
interval: 350 // tweak as needed? interval: 350 // tweak as needed?
onTriggered: { onTriggered: {
emojiPopup.model.filter = emojiSearch.text; emojiPopup.model.filter = emojiSearch.text;
emojiPopup.model.category = EmojiCategory.Search; emojiPopup.model.category = Emoji.Category.Search;
} }
} }
@ -178,42 +178,42 @@ Popup {
// TODO: Would like to get 'simple' icons for the categories // TODO: Would like to get 'simple' icons for the categories
ListElement { ListElement {
image: ":/icons/icons/emoji-categories/people.png" image: ":/icons/icons/emoji-categories/people.png"
category: EmojiCategory.People category: Emoji.Category.People
} }
ListElement { ListElement {
image: ":/icons/icons/emoji-categories/nature.png" image: ":/icons/icons/emoji-categories/nature.png"
category: EmojiCategory.Nature category: Emoji.Category.Nature
} }
ListElement { ListElement {
image: ":/icons/icons/emoji-categories/foods.png" image: ":/icons/icons/emoji-categories/foods.png"
category: EmojiCategory.Food category: Emoji.Category.Food
} }
ListElement { ListElement {
image: ":/icons/icons/emoji-categories/activity.png" image: ":/icons/icons/emoji-categories/activity.png"
category: EmojiCategory.Activity category: Emoji.Category.Activity
} }
ListElement { ListElement {
image: ":/icons/icons/emoji-categories/travel.png" image: ":/icons/icons/emoji-categories/travel.png"
category: EmojiCategory.Travel category: Emoji.Category.Travel
} }
ListElement { ListElement {
image: ":/icons/icons/emoji-categories/objects.png" image: ":/icons/icons/emoji-categories/objects.png"
category: EmojiCategory.Objects category: Emoji.Category.Objects
} }
ListElement { ListElement {
image: ":/icons/icons/emoji-categories/symbols.png" image: ":/icons/icons/emoji-categories/symbols.png"
category: EmojiCategory.Symbols category: Emoji.Category.Symbols
} }
ListElement { ListElement {
image: ":/icons/icons/emoji-categories/flags.png" image: ":/icons/icons/emoji-categories/flags.png"
category: EmojiCategory.Flags category: Emoji.Category.Flags
} }
} }
@ -224,21 +224,21 @@ Popup {
hoverEnabled: true hoverEnabled: true
ToolTip.text: { ToolTip.text: {
switch (model.category) { switch (model.category) {
case EmojiCategory.People: case Emoji.Category.People:
return qsTr('People'); return qsTr('People');
case EmojiCategory.Nature: case Emoji.Category.Nature:
return qsTr('Nature'); return qsTr('Nature');
case EmojiCategory.Food: case Emoji.Category.Food:
return qsTr('Food'); return qsTr('Food');
case EmojiCategory.Activity: case Emoji.Category.Activity:
return qsTr('Activity'); return qsTr('Activity');
case EmojiCategory.Travel: case Emoji.Category.Travel:
return qsTr('Travel'); return qsTr('Travel');
case EmojiCategory.Objects: case Emoji.Category.Objects:
return qsTr('Objects'); return qsTr('Objects');
case EmojiCategory.Symbols: case Emoji.Category.Symbols:
return qsTr('Symbols'); return qsTr('Symbols');
case EmojiCategory.Flags: case Emoji.Category.Flags:
return qsTr('Flags'); return qsTr('Flags');
} }
} }
@ -295,7 +295,7 @@ Popup {
ToolTip.visible: hovered ToolTip.visible: hovered
onClicked: { onClicked: {
// clear any filters // clear any filters
emojiPopup.model.category = EmojiCategory.Search; emojiPopup.model.category = Emoji.Category.Search;
gridView.positionViewAtBeginning(); gridView.positionViewAtBeginning();
emojiSearch.forceActiveFocus(); emojiSearch.forceActiveFocus();
} }

View file

@ -63,14 +63,14 @@ EmojiProxyModel::EmojiProxyModel(QObject *parent)
EmojiProxyModel::~EmojiProxyModel() {} EmojiProxyModel::~EmojiProxyModel() {}
EmojiCategory Emoji::Category
EmojiProxyModel::category() const EmojiProxyModel::category() const
{ {
return category_; return category_;
} }
void void
EmojiProxyModel::setCategory(EmojiCategory cat) EmojiProxyModel::setCategory(Emoji::Category cat)
{ {
if (category_ == cat) { if (category_ == cat) {
return; return;
@ -106,7 +106,7 @@ EmojiProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent
const Emoji emoji = index.data(static_cast<int>(EmojiModel::Roles::Emoji)).value<Emoji>(); const Emoji emoji = index.data(static_cast<int>(EmojiModel::Roles::Emoji)).value<Emoji>();
// TODO: Add favorites / recently used // TODO: Add favorites / recently used
if (category_ != EmojiCategory::Search) { if (category_ != Emoji::Category::Search) {
return emoji.category == category_; return emoji.category == category_;
} }

View file

@ -36,15 +36,15 @@ class EmojiProxyModel : public QSortFilterProxyModel
Q_OBJECT Q_OBJECT
Q_PROPERTY( Q_PROPERTY(
emoji::EmojiCategory category READ category WRITE setCategory NOTIFY categoryChanged) emoji::Emoji::Category category READ category WRITE setCategory NOTIFY categoryChanged)
Q_PROPERTY(QString filter READ filter WRITE setFilter NOTIFY filterChanged) Q_PROPERTY(QString filter READ filter WRITE setFilter NOTIFY filterChanged)
public: public:
explicit EmojiProxyModel(QObject *parent = nullptr); explicit EmojiProxyModel(QObject *parent = nullptr);
~EmojiProxyModel() override; ~EmojiProxyModel() override;
EmojiCategory category() const; Emoji::Category category() const;
void setCategory(EmojiCategory cat); void setCategory(Emoji::Category cat);
QString filter() const; QString filter() const;
void setFilter(const QString &filter); void setFilter(const QString &filter);
@ -57,7 +57,7 @@ protected:
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override; bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
private: private:
EmojiCategory category_ = EmojiCategory::Search; Emoji::Category category_ = Emoji::Category::Search;
emoji::Provider emoji_provider_; emoji::Provider emoji_provider_;
}; };
} }

View file

@ -26,32 +26,33 @@
namespace emoji { namespace emoji {
Q_NAMESPACE Q_NAMESPACE
enum class EmojiCategory
{
People,
Nature,
Food,
Activity,
Travel,
Objects,
Symbols,
Flags,
Search
};
Q_ENUM_NS(EmojiCategory)
struct Emoji struct Emoji
{ {
Q_GADGET Q_GADGET
public:
enum class Category
{
People,
Nature,
Food,
Activity,
Travel,
Objects,
Symbols,
Flags,
Search
};
Q_ENUM(Category)
Q_PROPERTY(const QString &unicode MEMBER unicode) Q_PROPERTY(const QString &unicode MEMBER unicode)
Q_PROPERTY(const QString &shortName MEMBER shortName) Q_PROPERTY(const QString &shortName MEMBER shortName)
Q_PROPERTY(emoji::EmojiCategory category MEMBER category) Q_PROPERTY(emoji::Emoji::Category category MEMBER category)
public: public:
QString unicode; QString unicode;
QString shortName; QString shortName;
EmojiCategory category; Category category;
}; };
class Provider class Provider