mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Fix #2086609 [[Enhancement] Add Restore defaults button to the Configure Read aloud window](https://bugs.launchpad.net/calibre/+bug/2086609)
This commit is contained in:
parent
327c5c86de
commit
0d37f50833
@ -5,6 +5,7 @@ from qt.core import (
|
|||||||
QAbstractItemView,
|
QAbstractItemView,
|
||||||
QCheckBox,
|
QCheckBox,
|
||||||
QDialog,
|
QDialog,
|
||||||
|
QDialogButtonBox,
|
||||||
QDoubleSpinBox,
|
QDoubleSpinBox,
|
||||||
QFont,
|
QFont,
|
||||||
QFormLayout,
|
QFormLayout,
|
||||||
@ -39,6 +40,8 @@ from calibre.gui2.tts.types import (
|
|||||||
)
|
)
|
||||||
from calibre.gui2.widgets2 import Dialog, QComboBox
|
from calibre.gui2.widgets2 import Dialog, QComboBox
|
||||||
|
|
||||||
|
embedding_engine_name = 'piper'
|
||||||
|
|
||||||
|
|
||||||
class EngineChoice(QWidget):
|
class EngineChoice(QWidget):
|
||||||
|
|
||||||
@ -63,6 +66,9 @@ class EngineChoice(QWidget):
|
|||||||
ec.currentIndexChanged.connect(self.current_changed)
|
ec.currentIndexChanged.connect(self.current_changed)
|
||||||
self.update_description()
|
self.update_description()
|
||||||
|
|
||||||
|
def restore_defaults(self):
|
||||||
|
self.engine_choice.setCurrentIndex(0)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def value(self) -> str:
|
def value(self) -> str:
|
||||||
return self.engine_choice.currentData()
|
return self.engine_choice.currentData()
|
||||||
@ -347,23 +353,35 @@ class EngineSpecificConfig(QWidget):
|
|||||||
if self.engine_name and self.engine_name != engine_name:
|
if self.engine_name and self.engine_name != engine_name:
|
||||||
self.engine_specific_settings[self.engine_name] = self.as_settings()
|
self.engine_specific_settings[self.engine_name] = self.as_settings()
|
||||||
self.engine_name = engine_name
|
self.engine_name = engine_name
|
||||||
metadata = available_engines()[engine_name]
|
|
||||||
tts = create_tts_backend(force_engine=engine_name)
|
|
||||||
if engine_name not in self.voice_data:
|
if engine_name not in self.voice_data:
|
||||||
|
tts = create_tts_backend(force_engine=engine_name)
|
||||||
self.voice_data[engine_name] = tts.available_voices
|
self.voice_data[engine_name] = tts.available_voices
|
||||||
if self.for_embedding:
|
if self.for_embedding:
|
||||||
self.engine_specific_settings[engine_name] = EngineSpecificSettings.create_from_config(engine_name, TTS_EMBEDED_CONFIG)
|
self.engine_specific_settings[engine_name] = EngineSpecificSettings.create_from_config(engine_name, TTS_EMBEDED_CONFIG)
|
||||||
else:
|
else:
|
||||||
self.engine_specific_settings[engine_name] = EngineSpecificSettings.create_from_config(engine_name)
|
self.engine_specific_settings[engine_name] = EngineSpecificSettings.create_from_config(engine_name)
|
||||||
self.default_output_modules[engine_name] = tts.default_output_module
|
self.default_output_modules[engine_name] = tts.default_output_module
|
||||||
|
return self.initialize_widgets_from_settings()
|
||||||
|
|
||||||
|
def restore_defaults(self):
|
||||||
|
if self.for_embedding:
|
||||||
|
self.engine_specific_settings[embedding_engine_name] = EngineSpecificSettings.create_from_config(embedding_engine_name, TTS_EMBEDED_CONFIG)
|
||||||
|
else:
|
||||||
|
for engine_name in available_engines():
|
||||||
|
self.engine_specific_settings[engine_name] = EngineSpecificSettings.create_from_prefs(engine_name)
|
||||||
|
self.initialize_widgets_from_settings()
|
||||||
|
|
||||||
|
def initialize_widgets_from_settings(self):
|
||||||
|
tts = create_tts_backend(force_engine=self.engine_name)
|
||||||
|
metadata = available_engines()[self.engine_name]
|
||||||
self.output_module.blockSignals(True)
|
self.output_module.blockSignals(True)
|
||||||
self.output_module.clear()
|
self.output_module.clear()
|
||||||
if metadata.has_multiple_output_modules:
|
if metadata.has_multiple_output_modules:
|
||||||
self.layout().setRowVisible(self.output_module, True)
|
self.layout().setRowVisible(self.output_module, True)
|
||||||
self.output_module.addItem(_('System default (currently {})').format(tts.default_output_module), '')
|
self.output_module.addItem(_('System default (currently {})').format(tts.default_output_module), '')
|
||||||
for om in self.voice_data[engine_name]:
|
for om in self.voice_data[self.engine_name]:
|
||||||
self.output_module.addItem(om, om)
|
self.output_module.addItem(om, om)
|
||||||
if (idx := self.output_module.findData(self.engine_specific_settings[engine_name].output_module)) > -1:
|
if (idx := self.output_module.findData(self.engine_specific_settings[self.engine_name].output_module)) > -1:
|
||||||
self.output_module.setCurrentIndex(idx)
|
self.output_module.setCurrentIndex(idx)
|
||||||
else:
|
else:
|
||||||
self.layout().setRowVisible(self.output_module, False)
|
self.layout().setRowVisible(self.output_module, False)
|
||||||
@ -394,7 +412,7 @@ class EngineSpecificConfig(QWidget):
|
|||||||
self.audio_device.addItem(_('System default (currently {})').format(self.default_audio_device.description), '')
|
self.audio_device.addItem(_('System default (currently {})').format(self.default_audio_device.description), '')
|
||||||
for ad in self.all_audio_devices:
|
for ad in self.all_audio_devices:
|
||||||
self.audio_device.addItem(ad.description, ad.id.hex())
|
self.audio_device.addItem(ad.description, ad.id.hex())
|
||||||
if cad := self.engine_specific_settings[engine_name].audio_device_id:
|
if cad := self.engine_specific_settings[self.engine_name].audio_device_id:
|
||||||
if (idx := self.audio_device.findData(cad.id.hex())):
|
if (idx := self.audio_device.findData(cad.id.hex())):
|
||||||
self.audio_device.setCurrentIndex(idx)
|
self.audio_device.setCurrentIndex(idx)
|
||||||
self.layout().setRowVisible(self.audio_device, True)
|
self.layout().setRowVisible(self.audio_device, True)
|
||||||
@ -483,9 +501,16 @@ class ConfigDialog(Dialog):
|
|||||||
h = QHBoxLayout()
|
h = QHBoxLayout()
|
||||||
l.addLayout(h)
|
l.addLayout(h)
|
||||||
h.addWidget(b), h.addStretch(10), h.addWidget(self.bb)
|
h.addWidget(b), h.addStretch(10), h.addWidget(self.bb)
|
||||||
|
self.restore_defaults_button = b = self.bb.addButton(_('Restore &defaults'), QDialogButtonBox.ButtonRole.ActionRole)
|
||||||
|
b.setToolTip(_('Restore all Read aloud settings ot their defaults'))
|
||||||
|
b.clicked.connect(self.restore_defaults)
|
||||||
self.initial_engine_choice = ec.value
|
self.initial_engine_choice = ec.value
|
||||||
self.set_engine(self.initial_engine_choice)
|
self.set_engine(self.initial_engine_choice)
|
||||||
|
|
||||||
|
def restore_defaults(self):
|
||||||
|
self.engine_choice.restore_defaults()
|
||||||
|
self.engine_specific_config.restore_defaults()
|
||||||
|
|
||||||
def set_engine(self, engine_name: str) -> None:
|
def set_engine(self, engine_name: str) -> None:
|
||||||
metadata = self.engine_specific_config.set_engine(engine_name)
|
metadata = self.engine_specific_config.set_engine(engine_name)
|
||||||
self.voice_button.setVisible(metadata.has_managed_voices)
|
self.voice_button.setVisible(metadata.has_managed_voices)
|
||||||
@ -532,7 +557,7 @@ class EmbeddingConfig(QWidget):
|
|||||||
self.l = l = QVBoxLayout(self)
|
self.l = l = QVBoxLayout(self)
|
||||||
self.engine_specific_config = esc = EngineSpecificConfig(self, for_embedding=True)
|
self.engine_specific_config = esc = EngineSpecificConfig(self, for_embedding=True)
|
||||||
l.addWidget(esc)
|
l.addWidget(esc)
|
||||||
self.engine_specific_config.set_engine('piper')
|
self.engine_specific_config.set_engine(embedding_engine_name)
|
||||||
|
|
||||||
def save_settings(self):
|
def save_settings(self):
|
||||||
s = self.engine_specific_config.as_settings()
|
s = self.engine_specific_config.as_settings()
|
||||||
@ -571,4 +596,4 @@ def develop():
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
develop()
|
develop_embedding()
|
||||||
|
@ -133,7 +133,8 @@ class EngineSpecificSettings(NamedTuple):
|
|||||||
preferred_voices: dict[str, str] | None = None
|
preferred_voices: dict[str, str] | None = None
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create_from_prefs(cls, engine_name: str, prefs: dict[str, object]) -> 'EngineSpecificSettings':
|
def create_from_prefs(cls, engine_name: str, prefs: dict[str, object] | None = None) -> 'EngineSpecificSettings':
|
||||||
|
prefs = prefs or {}
|
||||||
adev = prefs.get('audio_device_id')
|
adev = prefs.get('audio_device_id')
|
||||||
audio_device_id = None
|
audio_device_id = None
|
||||||
if adev:
|
if adev:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user