File indexing completed on 2024-05-26 04:46:53

0001 /*
0002   SPDX-FileCopyrightText: 2012-2024 Laurent Montel <montel@kde.org>
0003   based on code from kopete
0004 
0005   SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 #include "emoticontexteditaction.h"
0008 #include "emoticontexteditselector.h"
0009 
0010 #include <KLocalizedString>
0011 #include <QIcon>
0012 #include <QMenu>
0013 
0014 #include <QWidgetAction>
0015 
0016 using namespace TextEmoticonsWidgets;
0017 
0018 class EmoticonTextEditAction::EmoticonTextEditActionPrivate
0019 {
0020 public:
0021     EmoticonTextEditActionPrivate()
0022         : emoticonMenu(new QMenu())
0023     {
0024         selector = new EmoticonTextEditSelector(emoticonMenu);
0025         auto action = new QWidgetAction(emoticonMenu);
0026         action->setDefaultWidget(selector);
0027         emoticonMenu->addAction(action);
0028         connect(emoticonMenu, &QMenu::aboutToShow, selector, &EmoticonTextEditSelector::loadEmoticons);
0029     }
0030 
0031     ~EmoticonTextEditActionPrivate()
0032     {
0033         delete emoticonMenu;
0034     }
0035 
0036     void setCustomEmojiSupport(bool b);
0037     [[nodiscard]] bool customEmojiSupport() const;
0038 
0039     QMenu *const emoticonMenu;
0040     EmoticonTextEditSelector *selector = nullptr;
0041 };
0042 
0043 void EmoticonTextEditAction::EmoticonTextEditActionPrivate::setCustomEmojiSupport(bool b)
0044 {
0045     selector->setCustomEmojiSupport(b);
0046 }
0047 
0048 bool EmoticonTextEditAction::EmoticonTextEditActionPrivate::customEmojiSupport() const
0049 {
0050     return selector->customEmojiSupport();
0051 }
0052 
0053 EmoticonTextEditAction::EmoticonTextEditAction(QObject *parent)
0054     : KActionMenu(i18n("Add Smiley"), parent)
0055     , d(new EmoticonTextEditActionPrivate())
0056 {
0057     delete menu();
0058     setMenu(d->emoticonMenu);
0059     setIcon(QIcon::fromTheme(QStringLiteral("face-smile")));
0060     setPopupMode(QToolButton::InstantPopup);
0061     connect(d->selector, &EmoticonTextEditSelector::insertEmoji, this, &EmoticonTextEditAction::insertEmoticon);
0062 }
0063 
0064 EmoticonTextEditAction::~EmoticonTextEditAction() = default;
0065 
0066 void EmoticonTextEditAction::setCustomEmojiSupport(bool b)
0067 {
0068     d->setCustomEmojiSupport(b);
0069 }
0070 
0071 bool EmoticonTextEditAction::customEmojiSupport() const
0072 {
0073     return d->customEmojiSupport();
0074 }
0075 
0076 #include "moc_emoticontexteditaction.cpp"