diff --git a/app.py b/app.py index 7732ea9..a0fc35b 100644 --- a/app.py +++ b/app.py @@ -49,8 +49,6 @@ def _apply_startup_display_defaults(): settings.setValue("display/brightness", 70) if not settings.contains("display/auto_brightness"): settings.setValue("display/auto_brightness", False) - if not settings.contains("display/sleep_minutes"): - settings.setValue("display/sleep_minutes", 10) if not settings.contains("display/theme"): settings.setValue("display/theme", "night") diff --git a/screens/setting/dev_screen.py b/screens/setting/dev_screen.py index ddadc6f..35f8c7c 100644 --- a/screens/setting/dev_screen.py +++ b/screens/setting/dev_screen.py @@ -1,7 +1,7 @@ from pathlib import Path import subprocess -from PySide6.QtCore import Qt +from PySide6.QtCore import Qt, QSettings from PySide6.QtGui import QFont from PySide6.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLabel @@ -16,6 +16,7 @@ def build_dev_screen(on_exit) -> QWidget: layout.setSpacing(12) layout.addWidget(_build_persist_toggle()) + layout.addWidget(_build_sound_toggles()) hdr = QHBoxLayout() hdr.setContentsMargins(0, 0, 0, 0) @@ -76,6 +77,83 @@ def _build_persist_toggle() -> QWidget: return row +def _build_sound_toggles() -> QWidget: + settings = QSettings("car_ui", "ui") + + container = QWidget() + layout = QVBoxLayout(container) + layout.setContentsMargins(12, 6, 12, 6) + layout.setSpacing(8) + + layout.addWidget( + _toggle_row( + "Премут", + settings, + "sound/premute_enabled", + False, + ) + ) + layout.addWidget( + _toggle_row( + "Ducking", + settings, + "sound/ducking_enabled", + False, + ) + ) + return container + + +def _toggle_row( + label: str, + settings: QSettings, + key: str, + default: bool, +) -> QWidget: + row = QWidget() + layout = QHBoxLayout(row) + layout.setContentsMargins(0, 0, 0, 0) + layout.setSpacing(12) + + lbl = QLabel(label) + lbl.setFont(QFont("", 13, 600)) + + btn = QPushButton("Выкл") + btn.setObjectName("SoundToggle") + btn.setCheckable(True) + btn.setChecked(_read_bool_setting(settings, key, default)) + btn.setMinimumHeight(40) + btn.setMinimumWidth(110) + btn.setFont(QFont("", 12, 700)) + + def _sync_text(is_checked: bool): + btn.setText("Вкл" if is_checked else "Выкл") + + def _persist_flag(is_checked: bool): + settings.setValue(key, is_checked) + + btn.toggled.connect(_sync_text) + btn.toggled.connect(_persist_flag) + _sync_text(btn.isChecked()) + + layout.addWidget(lbl) + layout.addStretch(1) + layout.addWidget(btn) + return row + + +def _read_bool_setting(settings: QSettings, key: str, default: bool) -> bool: + raw = settings.value(key, default) + if isinstance(raw, bool): + return raw + if isinstance(raw, str): + return raw.strip().lower() in ("1", "true", "yes", "on") + try: + return bool(int(raw)) + except (TypeError, ValueError): + return default + + def _dev_flag_path() -> Path: return Path(build_info.__file__).resolve().parent / "dev_mode_enable" diff --git a/screens/setting/display_screen.py b/screens/setting/display_screen.py index a27c209..eb7a91c 100644 --- a/screens/setting/display_screen.py +++ b/screens/setting/display_screen.py @@ -42,7 +42,6 @@ class DisplayScreen(QWidget): content_layout.setSpacing(12) content_layout.addWidget(self._build_brightness_card()) - content_layout.addWidget(self._build_sleep_card()) content_layout.addWidget(self._build_theme_card()) content_layout.addStretch(1) @@ -59,7 +58,7 @@ class DisplayScreen(QWidget): ) row_toggle, toggle_btn = _toggle_row( - "Автояркость", + "Автояркость (не работает)", checked=auto_brightness, ) row_slider, slider, value_label = _slider_row( @@ -83,26 +82,6 @@ class DisplayScreen(QWidget): body.addWidget(row_slider) return card - def _build_sleep_card(self) -> QWidget: - card, body = _card("Сон") - sleep_minutes = _read_int_setting( - self._settings, - "display/sleep_minutes", - 10, - ) - row, slider, value_label = _slider_row( - "Отключать экран через", - 0, - 30, - sleep_minutes, - _format_sleep_minutes, - ) - slider.valueChanged.connect( - lambda v: self._settings.setValue("display/sleep_minutes", v) - ) - body.addWidget(row) - return card - def _build_theme_card(self) -> QWidget: card, body = _card("Тема") row = QWidget() diff --git a/screens/setting/sound_screen.py b/screens/setting/sound_screen.py index 44e2c40..065d886 100644 --- a/screens/setting/sound_screen.py +++ b/screens/setting/sound_screen.py @@ -47,8 +47,6 @@ class SoundScreen(QWidget): content_layout.setSpacing(12) content_layout.addWidget(self._build_volume_card()) - content_layout.addWidget(self._build_premute_card()) - content_layout.addWidget(self._build_ducking_card()) content_layout.addWidget(self._build_balance_card()) content_layout.addWidget(self._build_tone_card()) content_layout.addWidget(self._build_eq_card()) @@ -90,54 +88,6 @@ class SoundScreen(QWidget): body.addWidget(row) return card - def _build_premute_card(self) -> QWidget: - card, body = _card("Премут") - premute_enabled = False - premute_value = self._read_int( - "sound/premute_volume", - build_info.DEFAULT_PREMUTE_VOLUME, - ) - - row_toggle, toggle_btn = _toggle_row("Премут", checked=premute_enabled) - row_slider, slider, value_label = _slider_row( - "Громкость премут", - 0, - 100, - premute_value, - lambda v: f"{v}%", - ) - slider.valueChanged.connect( - lambda v: self._settings.setValue("sound/premute_volume", v) - ) - - body.addWidget(row_toggle) - body.addWidget(row_slider) - return card - - def _build_ducking_card(self) -> QWidget: - card, body = _card("Ducking") - ducking_enabled = True - ducking_value = self._read_int( - "sound/ducking_volume", - build_info.DEFAULT_DUCKING_VOLUME, - ) - - row_toggle, toggle_btn = _toggle_row("Ducking", checked=ducking_enabled) - row_slider, slider, value_label = _slider_row( - "Громкость при Ducking", - 0, - 100, - ducking_value, - lambda v: f"{v}%", - ) - slider.valueChanged.connect( - lambda v: self._settings.setValue("sound/ducking_volume", v) - ) - - body.addWidget(row_toggle) - body.addWidget(row_slider) - return card - def _build_balance_card(self) -> QWidget: card, body = _card("Баланс и фейдер") row, slider, value_label = _slider_row( @@ -209,36 +159,6 @@ def _card(title: str) -> tuple[QWidget, QVBoxLayout]: return card, layout -def _toggle_row(label: str, checked: bool) -> tuple[QWidget, QPushButton]: - row = QWidget() - row.setObjectName("SoundToggleRow") - layout = QHBoxLayout(row) - layout.setContentsMargins(0, 0, 0, 0) - layout.setSpacing(12) - - lbl = QLabel(label) - lbl.setFont(QFont("", 13, 600)) - - btn = QPushButton("Выкл") - btn.setObjectName("SoundToggle") - btn.setCheckable(True) - btn.setChecked(checked) - btn.setMinimumHeight(36) - btn.setMinimumWidth(86) - btn.setFont(QFont("", 12, 700)) - - def _sync_text(is_checked: bool): - btn.setText("Вкл" if is_checked else "Выкл") - - btn.toggled.connect(_sync_text) - _sync_text(btn.isChecked()) - - layout.addWidget(lbl) - layout.addStretch(1) - layout.addWidget(btn) - return row, btn - - def _slider_row( label: str, minimum: int, @@ -299,4 +219,3 @@ def _read_int_setting(settings: QSettings, key: str, default: int) -> int: return int(raw) except (TypeError, ValueError): return default -