diff options
author | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2023-04-22 12:47:41 +0200 |
---|---|---|
committer | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2023-04-25 20:42:10 +0200 |
commit | c2e8d20fcf742cac2ff30c335acfcff122ef1ba5 (patch) | |
tree | e08f4b636f49535f6a6aec38d76784ec9354ddfb /src | |
parent | 48a9a6a394d15f30074c2d257422bca15018814b (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.cpp | 10 | ||||
-rw-r--r-- | src/tts/qml/qdeclarativetexttospeech.cpp | 27 | ||||
-rw-r--r-- | src/tts/qml/qdeclarativetexttospeech_p.h | 7 | ||||
-rw-r--r-- | src/tts/qtexttospeech.cpp | 2 |
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 ¶meters, { 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 ¶meters) +{ + 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 ¶meters); + 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 ¶ms) { Q_D(QTextToSpeech); - if (d->m_providerName == engine) + if (d->m_providerName == engine && params.isEmpty()) return true; // read values from the old engine |