1 /*
2 SPDX-FileCopyrightText: 2019-2021 Laurent Montel <montel@kde.org>
3
4 SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6
7 #include "unicodeemoticongui.h"
8
9 #include <KListWidgetSearchLine>
10 #include <QApplication>
11 #include <QFile>
12 #include <QFormLayout>
13 #include <QHBoxLayout>
14 #include <QJsonDocument>
15 #include <QJsonObject>
16 #include <QLineEdit>
17 #include <QListWidget>
18 #include <QPushButton>
19 #include <QStandardPaths>
20 #include <QVBoxLayout>
21
22 #include <emoticons/unicodeemoticonparser.h>
23
UnicodeEmoticonGui(QWidget * parent)24 UnicodeEmoticonGui::UnicodeEmoticonGui(QWidget *parent)
25 : QWidget(parent)
26 {
27 auto mainLayout = new QVBoxLayout(this);
28 auto hboxLayout = new QHBoxLayout;
29 hboxLayout->setContentsMargins({});
30 mainLayout->addLayout(hboxLayout);
31
32 auto mainComponentLayout = new QVBoxLayout;
33 mainComponentLayout->setContentsMargins({});
34
35 mSearchEmoticon = new KListWidgetSearchLine(this);
36 mListWidget = new QListWidget(this);
37 mSearchEmoticon->setListWidget(mListWidget);
38 mainComponentLayout->addWidget(mSearchEmoticon);
39 mainComponentLayout->addWidget(mListWidget);
40 hboxLayout->addLayout(mainComponentLayout);
41
42 mWidgetInfo = new UnicodeEmoticonInfo(this);
43 hboxLayout->addWidget(mWidgetInfo);
44
45 auto save = new QPushButton(QStringLiteral("Save"), this);
46 mainLayout->addWidget(save);
47 connect(save, &QPushButton::clicked, this, &UnicodeEmoticonGui::save);
48
49 connect(mListWidget, &QListWidget::itemClicked, this, &UnicodeEmoticonGui::slotItemChanged);
50 connect(mListWidget, &QListWidget::itemSelectionChanged, this, &UnicodeEmoticonGui::slotItemSelectionChanged);
51 load();
52 }
53
54 UnicodeEmoticonGui::~UnicodeEmoticonGui() = default;
55
slotItemSelectionChanged()56 void UnicodeEmoticonGui::slotItemSelectionChanged()
57 {
58 QListWidgetItem *item = mListWidget->currentItem();
59 slotItemChanged(item);
60 }
61
slotItemChanged(QListWidgetItem * item)62 void UnicodeEmoticonGui::slotItemChanged(QListWidgetItem *item)
63 {
64 if (item) {
65 auto itemResult = static_cast<UnicodeEmoticonListWidgetItem *>(item);
66 UnicodeEmoticon info = itemResult->info();
67 mWidgetInfo->setInfo(info);
68 }
69 }
70
load()71 void UnicodeEmoticonGui::load()
72 {
73 UnicodeEmoticonParser unicodeParser;
74 QFile file(QStringLiteral(":/emoji.json"));
75 if (!file.open(QFile::ReadOnly)) {
76 qWarning() << "Impossible to open file: " << file.errorString();
77 return;
78 }
79 const QJsonDocument doc = QJsonDocument::fromJson(file.readAll());
80
81 const QJsonObject obj = doc.object();
82 const QVector<UnicodeEmoticon> unicodeEmojiList = unicodeParser.parse(obj);
83 for (const UnicodeEmoticon &emoticon : unicodeEmojiList) {
84 auto item = new UnicodeEmoticonListWidgetItem(emoticon.identifier(), mListWidget);
85 item->setInfo(emoticon);
86 }
87 }
88
save()89 void UnicodeEmoticonGui::save()
90 {
91 QJsonDocument doc;
92 QJsonObject o;
93 doc.setObject(o);
94 // TODO
95 }
96
main(int argc,char * argv[])97 int main(int argc, char *argv[])
98 {
99 QApplication app(argc, argv);
100 QStandardPaths::setTestModeEnabled(true);
101
102 UnicodeEmoticonGui w;
103 w.show();
104 return app.exec();
105 }
106
UnicodeEmoticonInfo(QWidget * parent)107 UnicodeEmoticonInfo::UnicodeEmoticonInfo(QWidget *parent)
108 : QWidget(parent)
109 {
110 auto mainLayout = new QFormLayout(this);
111 mainLayout->setContentsMargins({});
112 mIdentifier = new QLineEdit(this);
113 mainLayout->addRow(QStringLiteral("identifier:"), mIdentifier);
114 mUnicode = new QLineEdit(this);
115 mainLayout->addRow(QStringLiteral("unicode:"), mUnicode);
116 mAliases = new QLineEdit(this);
117 mainLayout->addRow(QStringLiteral("aliases:"), mAliases);
118 mCategory = new QLineEdit(this);
119 mainLayout->addRow(QStringLiteral("category:"), mCategory);
120 mOrder = new QLineEdit(this);
121 mainLayout->addRow(QStringLiteral("order:"), mOrder);
122 }
123
124 UnicodeEmoticonInfo::~UnicodeEmoticonInfo() = default;
125
info() const126 UnicodeEmoticon UnicodeEmoticonInfo::info() const
127 {
128 return mInfo;
129 }
130
setInfo(const UnicodeEmoticon & info)131 void UnicodeEmoticonInfo::setInfo(const UnicodeEmoticon &info)
132 {
133 mIdentifier->setText(info.identifier());
134 mUnicode->setText(info.unicode());
135 mAliases->setText(info.aliases().join(QLatin1Char(',')));
136 mCategory->setText(info.category());
137 mOrder->setText(QString::number(info.order()));
138 mInfo = info;
139 }
140
UnicodeEmoticonListWidgetItem(const QString & str,QListWidget * parent)141 UnicodeEmoticonListWidgetItem::UnicodeEmoticonListWidgetItem(const QString &str, QListWidget *parent)
142 : QListWidgetItem(str, parent)
143 {
144 }
145
info() const146 UnicodeEmoticon UnicodeEmoticonListWidgetItem::info() const
147 {
148 return mInfo;
149 }
150
setInfo(const UnicodeEmoticon & info)151 void UnicodeEmoticonListWidgetItem::setInfo(const UnicodeEmoticon &info)
152 {
153 mInfo = info;
154 }
155