/* * Copyright (c) 2016-2017 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #include #include #include #include #include #include #include #include namespace Swift { static const int emojiCellSpacing = 2; QtEmojisGrid::QtEmojisGrid() : FlowLayout(0, emojiCellSpacing, emojiCellSpacing) { } QtEmojisGrid::QtEmojisGrid(QString categoryName) : FlowLayout(0, emojiCellSpacing, emojiCellSpacing) { auto category = EmojiMapper::categoryNameToEmojis(Q2PSTRING(categoryName)); QVector categoryEmojis; for (const auto& emoji : category) { categoryEmojis.push_back(P2QSTRING(emoji)); } setEmojis(categoryEmojis); } void QtEmojisGrid::setEmojis(const QVector& emojis) { clearEmojis(); for (const auto& unicodeEmoji : emojis) { QString shortname = QString::fromStdString(EmojiMapper::unicodeToShortname(Q2PSTRING(unicodeEmoji))); auto emoji = new QtEmojiCell(shortname, unicodeEmoji); connect(emoji, SIGNAL(emojiClicked(QString)), this, SIGNAL(onEmojiSelected(QString))); addItem(new QWidgetItem(emoji)); } } void QtEmojisGrid::addEmoticon(QIcon icon, QString text) { auto emoji = new QtEmojiCell(icon, text); connect(emoji, SIGNAL(emojiClicked(QString)), this, SIGNAL(onEmojiSelected(QString))); addItem(new QWidgetItem(emoji)); } void QtEmojisGrid::clearEmojis() { QLayoutItem* child = nullptr; while ((child = this->takeAt(0)) != nullptr) { if (child->widget()) { child->widget()->hide(); removeWidget(child->widget()); } else { removeItem(child); } } } }