diff options
Diffstat (limited to 'Swift/QtUI/QtRecentEmojisGrid.cpp')
-rw-r--r-- | Swift/QtUI/QtRecentEmojisGrid.cpp | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/Swift/QtUI/QtRecentEmojisGrid.cpp b/Swift/QtUI/QtRecentEmojisGrid.cpp new file mode 100644 index 0000000..54cca76 --- /dev/null +++ b/Swift/QtUI/QtRecentEmojisGrid.cpp @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2016-2017 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ + +#include <Swift/QtUI/QtRecentEmojisGrid.h> + +#include <algorithm> + +#include <QSettings> +#include <QVector> + +#include <SwifTools/EmojiMapper.h> + +#include <Swift/QtUI/QtEmojiCell.h> +#include <Swift/QtUI/QtSwiftUtil.h> + +namespace Swift { + const int QtRecentEmojisGrid::MAX_RECENTS = 50; + + QtRecentEmojisGrid::QtRecentEmojisGrid(QSettings* settings) : QtEmojisGrid(), settings_(settings) { + loadSettings(); + connect(this, SIGNAL(onEmojiSelected(QString)), this, SLOT(handleEmojiClicked(QString))); + refresh(); + } + + QtRecentEmojisGrid::~QtRecentEmojisGrid() { + writeSettings(); + } + + void QtRecentEmojisGrid::handleEmojiClicked(QString emoji) { + recents_.erase(std::remove(recents_.begin(), recents_.end(), emoji), recents_.end()); + + if (recents_.size() > MAX_RECENTS) { + recents_.resize(MAX_RECENTS - 1); + } + + recents_.push_front(emoji); + refresh(); + } + + void QtRecentEmojisGrid::refresh() { + QtEmojisGrid::setEmojis(recents_); + } + + void QtRecentEmojisGrid::loadSettings() { + QByteArray readData = settings_->value("recentEmojis").toByteArray(); + QDataStream readStream(&readData, QIODevice::ReadOnly); + readStream >> recents_; + } + + void QtRecentEmojisGrid::writeSettings() { + QByteArray data; + QDataStream stream(&data, QIODevice::WriteOnly); + stream << recents_; + settings_->setValue("recentEmojis", data); + } +} |