File indexing completed on 2024-04-28 16:12:56

0001 /*
0002    SPDX-FileCopyrightText: 2019-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "unicodeemoticongui.h"
0008 
0009 #include <KListWidgetSearchLine>
0010 #include <QApplication>
0011 #include <QFile>
0012 #include <QFormLayout>
0013 #include <QHBoxLayout>
0014 #include <QJsonDocument>
0015 #include <QJsonObject>
0016 #include <QLineEdit>
0017 #include <QListWidget>
0018 #include <QPushButton>
0019 #include <QStandardPaths>
0020 #include <QVBoxLayout>
0021 #include <TextEmoticonsCore/UnicodeEmoticonParser>
0022 
0023 UnicodeEmoticonGui::UnicodeEmoticonGui(QWidget *parent)
0024     : QWidget(parent)
0025 {
0026     auto mainLayout = new QVBoxLayout(this);
0027     auto hboxLayout = new QHBoxLayout;
0028     hboxLayout->setContentsMargins({});
0029     mainLayout->addLayout(hboxLayout);
0030 
0031     auto mainComponentLayout = new QVBoxLayout;
0032     mainComponentLayout->setContentsMargins({});
0033 
0034     mSearchEmoticon = new KListWidgetSearchLine(this);
0035     mListWidget = new QListWidget(this);
0036     mSearchEmoticon->setListWidget(mListWidget);
0037     mainComponentLayout->addWidget(mSearchEmoticon);
0038     mainComponentLayout->addWidget(mListWidget);
0039     hboxLayout->addLayout(mainComponentLayout);
0040 
0041     mWidgetInfo = new UnicodeEmoticonInfo(this);
0042     hboxLayout->addWidget(mWidgetInfo);
0043 
0044     auto buttonLayout = new QHBoxLayout;
0045     mainLayout->addLayout(buttonLayout);
0046     auto save = new QPushButton(QStringLiteral("Save..."), this);
0047     buttonLayout->addWidget(save);
0048     connect(save, &QPushButton::clicked, this, &UnicodeEmoticonGui::save);
0049 
0050     auto exportIdentifier = new QPushButton(QStringLiteral("Export identifiers..."), this);
0051     buttonLayout->addWidget(exportIdentifier);
0052     connect(exportIdentifier, &QPushButton::clicked, this, &UnicodeEmoticonGui::slotExportIdentifier);
0053 
0054     connect(mListWidget, &QListWidget::itemClicked, this, &UnicodeEmoticonGui::slotItemChanged);
0055     connect(mListWidget, &QListWidget::itemSelectionChanged, this, &UnicodeEmoticonGui::slotItemSelectionChanged);
0056     load();
0057 }
0058 
0059 UnicodeEmoticonGui::~UnicodeEmoticonGui() = default;
0060 
0061 void UnicodeEmoticonGui::slotItemSelectionChanged()
0062 {
0063     QListWidgetItem *item = mListWidget->currentItem();
0064     slotItemChanged(item);
0065 }
0066 
0067 void UnicodeEmoticonGui::slotItemChanged(QListWidgetItem *item)
0068 {
0069     if (item) {
0070         auto itemResult = static_cast<UnicodeEmoticonListWidgetItem *>(item);
0071         TextEmoticonsCore::UnicodeEmoticon info = itemResult->info();
0072         mWidgetInfo->setInfo(info);
0073     }
0074 }
0075 
0076 void UnicodeEmoticonGui::load()
0077 {
0078     TextEmoticonsCore::UnicodeEmoticonParser unicodeParser;
0079     QFile file(QStringLiteral(":/emoji.json"));
0080     if (!file.open(QFile::ReadOnly)) {
0081         qWarning() << "Impossible to open file: " << file.errorString();
0082         return;
0083     }
0084     const QJsonDocument doc = QJsonDocument::fromJson(file.readAll());
0085 
0086     const QJsonObject obj = doc.object();
0087     const QList<TextEmoticonsCore::UnicodeEmoticon> unicodeEmojiList = unicodeParser.parse(obj);
0088     for (const TextEmoticonsCore::UnicodeEmoticon &emoticon : unicodeEmojiList) {
0089         auto item = new UnicodeEmoticonListWidgetItem(emoticon.identifier(), mListWidget);
0090         item->setInfo(emoticon);
0091     }
0092 }
0093 
0094 void UnicodeEmoticonGui::save()
0095 {
0096     QJsonDocument doc;
0097     QJsonObject o;
0098     doc.setObject(o);
0099     // TODO
0100 }
0101 
0102 void UnicodeEmoticonGui::slotExportIdentifier()
0103 {
0104     // TODO
0105 }
0106 
0107 int main(int argc, char *argv[])
0108 {
0109     QApplication app(argc, argv);
0110     QStandardPaths::setTestModeEnabled(true);
0111 
0112     UnicodeEmoticonGui w;
0113     w.show();
0114     return app.exec();
0115 }
0116 
0117 UnicodeEmoticonInfo::UnicodeEmoticonInfo(QWidget *parent)
0118     : QWidget(parent)
0119 {
0120     auto mainLayout = new QFormLayout(this);
0121     mainLayout->setContentsMargins({});
0122     mIdentifier = new QLineEdit(this);
0123     mainLayout->addRow(QStringLiteral("identifier:"), mIdentifier);
0124     mUnicode = new QLineEdit(this);
0125     mainLayout->addRow(QStringLiteral("unicode:"), mUnicode);
0126     mAliases = new QLineEdit(this);
0127     mainLayout->addRow(QStringLiteral("aliases:"), mAliases);
0128     mCategory = new QLineEdit(this);
0129     mainLayout->addRow(QStringLiteral("category:"), mCategory);
0130     mOrder = new QLineEdit(this);
0131     mainLayout->addRow(QStringLiteral("order:"), mOrder);
0132 }
0133 
0134 UnicodeEmoticonInfo::~UnicodeEmoticonInfo() = default;
0135 
0136 TextEmoticonsCore::UnicodeEmoticon UnicodeEmoticonInfo::info() const
0137 {
0138     return mInfo;
0139 }
0140 
0141 void UnicodeEmoticonInfo::setInfo(const TextEmoticonsCore::UnicodeEmoticon &info)
0142 {
0143     mIdentifier->setText(info.identifier());
0144     mUnicode->setText(info.unicode());
0145     mAliases->setText(info.aliases().join(QLatin1Char(',')));
0146     mCategory->setText(info.category());
0147     mOrder->setText(QString::number(info.order()));
0148     mInfo = info;
0149 }
0150 
0151 UnicodeEmoticonListWidgetItem::UnicodeEmoticonListWidgetItem(const QString &str, QListWidget *parent)
0152     : QListWidgetItem(str, parent)
0153 {
0154 }
0155 
0156 TextEmoticonsCore::UnicodeEmoticon UnicodeEmoticonListWidgetItem::info() const
0157 {
0158     return mInfo;
0159 }
0160 
0161 void UnicodeEmoticonListWidgetItem::setInfo(const TextEmoticonsCore::UnicodeEmoticon &info)
0162 {
0163     mInfo = info;
0164 }
0165 
0166 #include "moc_unicodeemoticongui.cpp"