summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorVolker Hilsheimer <volker.hilsheimer@qt.io>2023-04-22 12:47:41 +0200
committerVolker Hilsheimer <volker.hilsheimer@qt.io>2023-04-25 20:42:10 +0200
commitc2e8d20fcf742cac2ff30c335acfcff122ef1ba5 (patch)
treee08f4b636f49535f6a6aec38d76784ec9354ddfb /src
parent48a9a6a394d15f30074c2d257422bca15018814b (diff)
TextToSpeech: make engine parameters available from QML
Add a map-type property that QML code can initialize to engine-specific key/value mappings. Changing the property at runtime re-initializes the engine. Implement asnychronous initialization option in the mock engine so that we can test those code paths better. Change-Id: I0f2667b9b8e2339fa2e6966a2669f6f54ff2572a Reviewed-by: Axel Spoerl <axel.spoerl@qt.io> Reviewed-by: Jarkko Koivikko <jarkko.koivikko@code-q.fi>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/tts/mock/qtexttospeech_mock.cpp10
-rw-r--r--src/tts/qml/qdeclarativetexttospeech.cpp27
-rw-r--r--src/tts/qml/qdeclarativetexttospeech_p.h7
-rw-r--r--src/tts/qtexttospeech.cpp2
4 files changed, 42 insertions, 4 deletions
diff --git a/src/plugins/tts/mock/qtexttospeech_mock.cpp b/src/plugins/tts/mock/qtexttospeech_mock.cpp
index 63507d0..2aad44c 100644
--- a/src/plugins/tts/mock/qtexttospeech_mock.cpp
+++ b/src/plugins/tts/mock/qtexttospeech_mock.cpp
@@ -4,6 +4,7 @@
#include "qtexttospeech_mock.h"
#include <QtCore/QTimerEvent>
+#include <QtCore/QTimer>
#include <QtCore/qregularexpression.h>
QT_BEGIN_NAMESPACE
@@ -15,7 +16,14 @@ QTextToSpeechEngineMock::QTextToSpeechEngineMock(const QVariantMap &parameters,
{
m_locale = availableLocales().first();
m_voice = availableVoices().first();
- m_state = QTextToSpeech::Ready;
+ if (m_parameters[u"delayedInitialization"_s].toBool()) {
+ QTimer::singleShot(50, this, [this]{
+ m_state = QTextToSpeech::Ready;
+ emit stateChanged(m_state);
+ });
+ } else {
+ m_state = QTextToSpeech::Ready;
+ }
m_errorReason = QTextToSpeech::ErrorReason::NoError;
}
diff --git a/src/tts/qml/qdeclarativetexttospeech.cpp b/src/tts/qml/qdeclarativetexttospeech.cpp
index 7d824be..44427f0 100644
--- a/src/tts/qml/qdeclarativetexttospeech.cpp
+++ b/src/tts/qml/qdeclarativetexttospeech.cpp
@@ -38,10 +38,33 @@ void QDeclarativeTextToSpeech::setEngine(const QString &engine)
m_engine = engine;
if (m_complete)
- QTextToSpeech::setEngine(m_engine);
+ QTextToSpeech::setEngine(m_engine, m_engineParameters);
emit engineChanged(m_engine);
}
+/*!
+ \qmlproperty map TextToSpeech::engineParameters
+ \brief This property holds engine-specific parameters.
+
+ \sa engine
+*/
+QVariantMap QDeclarativeTextToSpeech::engineParameters() const
+{
+ return m_engineParameters;
+}
+
+void QDeclarativeTextToSpeech::setEngineParameters(const QVariantMap &parameters)
+{
+ if (m_engineParameters == parameters)
+ return;
+
+ m_engineParameters = parameters;
+ // if changed after initialization, then we need to recreate the engine
+ if (m_complete)
+ QTextToSpeech::setEngine(QTextToSpeech::engine(), m_engineParameters);
+ emit engineParametersChanged();
+}
+
void QDeclarativeTextToSpeech::classBegin()
{
}
@@ -49,7 +72,7 @@ void QDeclarativeTextToSpeech::classBegin()
void QDeclarativeTextToSpeech::componentComplete()
{
m_complete = true;
- QTextToSpeech::setEngine(m_engine);
+ QTextToSpeech::setEngine(m_engine, m_engineParameters);
selectVoice();
}
diff --git a/src/tts/qml/qdeclarativetexttospeech_p.h b/src/tts/qml/qdeclarativetexttospeech_p.h
index d55ac3d..205c1a5 100644
--- a/src/tts/qml/qdeclarativetexttospeech_p.h
+++ b/src/tts/qml/qdeclarativetexttospeech_p.h
@@ -28,6 +28,8 @@ class QDeclarativeTextToSpeech : public QTextToSpeech, public QQmlParserStatus
{
Q_OBJECT
Q_PROPERTY(QString engine READ engine WRITE setEngine NOTIFY engineChanged FINAL)
+ Q_PROPERTY(QVariantMap engineParameters READ engineParameters WRITE setEngineParameters NOTIFY engineParametersChanged FINAL)
+
Q_INTERFACES(QQmlParserStatus)
QML_NAMED_ELEMENT(TextToSpeech)
@@ -43,8 +45,12 @@ public:
QString engine() const;
void setEngine(const QString &engine);
+ QVariantMap engineParameters() const;
+ void setEngineParameters(const QVariantMap &parameters);
+
Q_SIGNALS:
void engineChanged(const QString &);
+ void engineParametersChanged();
protected:
void classBegin() override;
@@ -53,6 +59,7 @@ protected:
private:
bool m_complete = false;
QString m_engine;
+ QVariantMap m_engineParameters;
};
QT_END_NAMESPACE
diff --git a/src/tts/qtexttospeech.cpp b/src/tts/qtexttospeech.cpp
index dcfce64..6d2220b 100644
--- a/src/tts/qtexttospeech.cpp
+++ b/src/tts/qtexttospeech.cpp
@@ -459,7 +459,7 @@ QTextToSpeech::~QTextToSpeech()
bool QTextToSpeech::setEngine(const QString &engine, const QVariantMap &params)
{
Q_D(QTextToSpeech);
- if (d->m_providerName == engine)
+ if (d->m_providerName == engine && params.isEmpty())
return true;
// read values from the old engine