File indexing completed on 2024-04-21 04:58:02

0001 /*
0002     SPDX-FileCopyrightText: 2002 George Russell <george.russell@clara.net>
0003     SPDX-FileCopyrightText: 2003-2004 Olaf Schmidt <ojschmidt@kde.org>
0004     SPDX-FileCopyrightText: 2015 Jeremy Whiting <jpwhiting@kde.org>
0005 
0006     SPDX-License-Identifier: GPL-2.0-or-later
0007 */
0008 
0009 // Own
0010 #include "khtmltts.h"
0011 #include "textextension.h"
0012 
0013 // Qt
0014 #include <QAction>
0015 #include <QIcon>
0016 #include <QTextToSpeech>
0017 
0018 // KDE
0019 #include <KActionCollection>
0020 #include <KLocalizedString>
0021 #include <KParts/ReadOnlyPart>
0022 #include <kpluginfactory.h>
0023 
0024 KHTMLPluginTTS::KHTMLPluginTTS(QObject *parent, const QVariantList &)
0025     : KonqParts::Plugin(parent)
0026 {
0027     TextExtension *textExt = TextExtension::childObject(parent);
0028     if (textExt && qobject_cast<KParts::ReadOnlyPart *>(parent)) {
0029         m_tts = std::unique_ptr<QTextToSpeech>(new QTextToSpeech);
0030 
0031         QAction *action = actionCollection()->addAction(QStringLiteral("tools_tts"));
0032         action->setIcon(QIcon::fromTheme(QStringLiteral("text-speak")));
0033         action->setText(i18n("&Speak Text"));
0034         connect(action, SIGNAL(triggered(bool)), SLOT(slotReadOut()));
0035     }
0036 }
0037 
0038 KHTMLPluginTTS::~KHTMLPluginTTS()
0039 {
0040 }
0041 
0042 void KHTMLPluginTTS::slotReadOut()
0043 {
0044     TextExtension *textExt = TextExtension::childObject(parent());
0045     QString query;
0046     const TextExtension::Format format = TextExtension::PlainText;
0047     if (textExt->hasSelection()) {
0048         query = textExt->selectedText(format);
0049     } else {
0050         query = textExt->completeText(format);
0051     }
0052 
0053     m_tts->say(query);
0054 }
0055 
0056 K_PLUGIN_CLASS_WITH_JSON(KHTMLPluginTTS, "khtmltts.json")
0057 
0058 #include "khtmltts.moc"