diff --git a/src/calibre/gui2/tts/linux_config.py b/src/calibre/gui2/tts/linux_config.py index 2eab61443c..d0d099a830 100644 --- a/src/calibre/gui2/tts/linux_config.py +++ b/src/calibre/gui2/tts/linux_config.py @@ -4,8 +4,9 @@ from contextlib import suppress from PyQt5.Qt import ( - QAbstractItemView, QAbstractTableModel, QComboBox, QFontMetrics, QFormLayout, - QItemSelectionModel, QSortFilterProxyModel, QSlider, Qt, QTableView, QWidget + QAbstractItemView, QAbstractTableModel, QByteArray, QComboBox, QFontMetrics, + QFormLayout, QItemSelectionModel, QSlider, QSortFilterProxyModel, Qt, QTableView, + QWidget ) from calibre.gui2.preferences.look_feel import BusyCursor @@ -100,7 +101,8 @@ class Widget(QWidget): v.setModel(p) v.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows) v.setSortingEnabled(True) - v.horizontalHeader().resizeSection(0, QFontMetrics(self.font()).averageCharWidth() * 30) + h = v.horizontalHeader() + h.resizeSection(0, QFontMetrics(self.font()).averageCharWidth() * 30) v.verticalHeader().close() v.setSelectionMode(QAbstractItemView.SelectionMode.SingleSelection) v.sortByColumn(0, Qt.SortOrder.AscendingOrder) @@ -109,6 +111,15 @@ class Widget(QWidget): self.backend_settings = initial_backend_settings or {} + def restore_state(self, prefs): + data = prefs.get(f'{self.tts_client.name}-voice-table-state') + if data is not None: + self.voices.horizontalHeader().restoreState(QByteArray(data)) + + def save_state(self, prefs): + data = bytearray(self.voices.horizontalHeader().saveState()) + prefs.set(f'{self.tts_client.name}-voice-table-state', data) + def restore_to_defaults(self): self.backend_settings = {} diff --git a/src/calibre/gui2/tts/macos_config.py b/src/calibre/gui2/tts/macos_config.py index 0f0f84a596..b6831ff207 100644 --- a/src/calibre/gui2/tts/macos_config.py +++ b/src/calibre/gui2/tts/macos_config.py @@ -4,8 +4,8 @@ from contextlib import suppress from PyQt5.Qt import ( - QAbstractItemView, QAbstractTableModel, QFontMetrics, QFormLayout, - QItemSelectionModel, QSortFilterProxyModel, QSlider, Qt, QTableView, QWidget + QAbstractItemView, QAbstractTableModel, QByteArray, QFontMetrics, QFormLayout, + QItemSelectionModel, QSlider, QSortFilterProxyModel, Qt, QTableView, QWidget ) from calibre.gui2.preferences.look_feel import BusyCursor @@ -105,6 +105,15 @@ class Widget(QWidget): self.backend_settings = initial_backend_settings or {} + def restore_state(self, prefs): + data = prefs.get(f'{self.tts_client.name}-voice-table-state') + if data is not None: + self.voices.horizontalHeader().restoreState(QByteArray(data)) + + def save_state(self, prefs): + data = bytearray(self.voices.horizontalHeader().saveState()) + prefs.set(f'{self.tts_client.name}-voice-table-state', data) + def restore_to_defaults(self): self.backend_settings = {} diff --git a/src/calibre/gui2/tts/windows_config.py b/src/calibre/gui2/tts/windows_config.py index 848f64d4e6..7a6f62d05b 100644 --- a/src/calibre/gui2/tts/windows_config.py +++ b/src/calibre/gui2/tts/windows_config.py @@ -4,8 +4,9 @@ from contextlib import suppress from PyQt5.Qt import ( - QAbstractItemView, QAbstractTableModel, QComboBox, QFontMetrics, QFormLayout, - QItemSelectionModel, QSlider, QSortFilterProxyModel, Qt, QTableView, QWidget + QAbstractItemView, QAbstractTableModel, QByteArray, QComboBox, QFontMetrics, + QFormLayout, QItemSelectionModel, QSlider, QSortFilterProxyModel, Qt, QTableView, + QWidget ) from calibre.gui2.preferences.look_feel import BusyCursor @@ -108,6 +109,15 @@ class Widget(QWidget): self.backend_settings = initial_backend_settings or {} + def restore_state(self, prefs): + data = prefs.get(f'{self.tts_client.name}-voice-table-state') + if data is not None: + self.voices.horizontalHeader().restoreState(QByteArray(data)) + + def save_state(self, prefs): + data = bytearray(self.voices.horizontalHeader().saveState()) + prefs.set(f'{self.tts_client.name}-voice-table-state', data) + def restore_to_defaults(self): self.backend_settings = {} diff --git a/src/calibre/gui2/viewer/tts.py b/src/calibre/gui2/viewer/tts.py index 4d2e596065..eefd39ff42 100644 --- a/src/calibre/gui2/viewer/tts.py +++ b/src/calibre/gui2/viewer/tts.py @@ -25,6 +25,10 @@ class Config(Dialog): self.config_widget.restore_to_defaults b = self.bb.addButton(QDialogButtonBox.StandardButton.RestoreDefaults) b.clicked.connect(self.restore_to_defaults) + self.config_widget.restore_state(vprefs) + + def save_state(self): + self.config_widget.save_state(vprefs) def restore_to_defaults(self): self.config_widget.restore_to_defaults() @@ -135,6 +139,7 @@ class TTS(QObject): self.settings_changed.emit(d.ui_settings) else: self.settings_changed.emit(None) + d.save_state() def slower(self, data): settings = self.tts_client.change_rate(steps=-1)