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"