KTextAddons

speechtotextselectdevicewidget.cpp
1/*
2 SPDX-FileCopyrightText: 2023-2025 Laurent Montel <montel@kde.org>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5*/
6
7#include "speechtotextselectdevicewidget.h"
8#include <KConfigGroup>
9#include <KLocalizedString>
10#include <KSharedConfig>
11#include <QAudioDevice>
12#include <QMediaDevices>
13
14#include <QComboBox>
15#include <QHBoxLayout>
16#include <QLabel>
17
18using namespace TextSpeechToText;
19namespace
20{
21const char mySoundGroupName[] = "Speech To Text";
22}
23SpeechToTextSelectDeviceWidget::SpeechToTextSelectDeviceWidget(QWidget *parent)
24 : QWidget{parent}
25 , mDeviceComboBox(new QComboBox(this))
26{
27 auto mainLayout = new QHBoxLayout(this);
28 mainLayout->setObjectName(QStringLiteral("mainLayout"));
29 mainLayout->setContentsMargins({});
30
31 auto label = new QLabel(i18nc("@label:textbox", "Input:"), this);
32 label->setObjectName(QStringLiteral("label"));
33 label->setTextFormat(Qt::PlainText);
34 mainLayout->addWidget(label);
35
36 mDeviceComboBox->setObjectName(QStringLiteral("mDeviceComboBox"));
37 mainLayout->addWidget(mDeviceComboBox);
38 initializeInput();
39}
40
41SpeechToTextSelectDeviceWidget::~SpeechToTextSelectDeviceWidget() = default;
42
43void SpeechToTextSelectDeviceWidget::loadSettings()
44{
45 KConfigGroup group(KSharedConfig::openConfig(), QLatin1StringView(mySoundGroupName));
46 const QByteArray deviceIdentifier = group.readEntry("SoundDevice", QByteArray());
47 if (!deviceIdentifier.isEmpty()) {
48 const int nbDevice{mDeviceComboBox->count()};
49 for (int i = 0; i < nbDevice; ++i) {
50 const QAudioDevice audioDevice = mDeviceComboBox->itemData(i).value<QAudioDevice>();
51 if (audioDevice.id() == deviceIdentifier) {
52 mDeviceComboBox->setCurrentIndex(i);
53 break;
54 }
55 }
56 }
57}
58
59void SpeechToTextSelectDeviceWidget::saveSettings()
60{
61 KConfigGroup group(KSharedConfig::openConfig(), QLatin1StringView(mySoundGroupName));
62 const auto device = mDeviceComboBox->itemData(mDeviceComboBox->currentIndex()).value<QAudioDevice>();
63 if (!device.isNull()) {
64 const QByteArray deviceIdentifier = device.id();
65 group.writeEntry("SoundDevice", deviceIdentifier);
66 }
67}
68
69void SpeechToTextSelectDeviceWidget::initializeInput()
70{
71 mDeviceComboBox->addItem(i18n("Default"), QVariant(QString()));
72 for (const auto &device : QMediaDevices::audioInputs()) {
73 const auto name = device.description();
74 mDeviceComboBox->addItem(name, QVariant::fromValue(device));
75 }
76}
77
78#include "moc_speechtotextselectdevicewidget.cpp"
static KSharedConfig::Ptr openConfig(const QString &fileName=QString(), OpenFlags mode=FullConfig, QStandardPaths::StandardLocation type=QStandardPaths::GenericConfigLocation)
QString i18nc(const char *context, const char *text, const TYPE &arg...)
QString i18n(const char *text, const TYPE &arg...)
QString name(const QVariant &location)
QString label(StandardShortcut id)
bool isEmpty() const const
PlainText
QVariant fromValue(T &&value)
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Mar 28 2025 11:48:40 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.