add sound info

This commit is contained in:
Your Name 2026-01-09 02:46:32 +03:00
parent 399357dc95
commit 4d67ddcc9b

View File

@ -1,4 +1,4 @@
from PySide6.QtCore import Qt from PySide6.QtCore import Qt, QSettings
from PySide6.QtGui import QFont from PySide6.QtGui import QFont
from PySide6.QtWidgets import ( from PySide6.QtWidgets import (
QWidget, QWidget,
@ -17,6 +17,7 @@ class SoundScreen(QWidget):
def __init__(self, on_eq): def __init__(self, on_eq):
super().__init__() super().__init__()
self._on_eq = on_eq self._on_eq = on_eq
self._settings = QSettings("car_ui", "ui")
root = QVBoxLayout(self) root = QVBoxLayout(self)
root.setContentsMargins(0, 0, 0, 0) root.setContentsMargins(0, 0, 0, 0)
@ -50,67 +51,103 @@ class SoundScreen(QWidget):
scroll.setWidget(content) scroll.setWidget(content)
root.addWidget(scroll, 1) root.addWidget(scroll, 1)
def _read_int(self, key: str, default: int) -> int:
return _read_int_setting(self._settings, key, default)
def _read_bool(self, key: str, default: bool) -> bool:
return _read_bool_setting(self._settings, key, default)
def _build_volume_card(self) -> QWidget: def _build_volume_card(self) -> QWidget:
card, body = _card("Громкость") card, body = _card("Громкость")
body.addWidget( default_value = 60
_slider_row( value = self._read_int("sound/base_volume", default_value)
row, slider, value_label = _slider_row(
"Базовая громкость", "Базовая громкость",
0, 0,
100, 100,
60, value,
lambda v: f"{v}%", lambda v: f"{v}%",
) )
slider.valueChanged.connect(
lambda v: self._settings.setValue("sound/base_volume", v)
) )
body.addWidget(row)
return card return card
def _build_premute_card(self) -> QWidget: def _build_premute_card(self) -> QWidget:
card, body = _card("Премут") card, body = _card("Премут")
body.addWidget(_toggle_row("Премут", checked=False)) premute_enabled = self._read_bool("sound/premute_enabled", False)
body.addWidget( premute_value = self._read_int("sound/premute_volume", 10)
_slider_row(
row_toggle, toggle_btn = _toggle_row("Премут", checked=premute_enabled)
toggle_btn.toggled.connect(
lambda checked: self._settings.setValue(
"sound/premute_enabled",
checked,
)
)
row_slider, slider, value_label = _slider_row(
"Громкость премут", "Громкость премут",
0, 0,
100, 100,
10, premute_value,
lambda v: f"{v}%", 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 return card
def _build_ducking_card(self) -> QWidget: def _build_ducking_card(self) -> QWidget:
card, body = _card("Ducking") card, body = _card("Ducking")
body.addWidget(_toggle_row("Ducking", checked=True)) ducking_enabled = self._read_bool("sound/ducking_enabled", True)
body.addWidget( ducking_value = self._read_int("sound/ducking_volume", 35)
_slider_row(
row_toggle, toggle_btn = _toggle_row("Ducking", checked=ducking_enabled)
toggle_btn.toggled.connect(
lambda checked: self._settings.setValue(
"sound/ducking_enabled",
checked,
)
)
row_slider, slider, value_label = _slider_row(
"Громкость при Ducking", "Громкость при Ducking",
0, 0,
100, 100,
35, ducking_value,
lambda v: f"{v}%", 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 return card
def _build_balance_card(self) -> QWidget: def _build_balance_card(self) -> QWidget:
card, body = _card("Баланс и фейдер") card, body = _card("Баланс и фейдер")
body.addWidget( row, slider, value_label = _slider_row(
_slider_row(
"Баланс L/R", "Баланс L/R",
-50, -50,
50, 50,
0, 0,
_format_balance, _format_balance,
) )
) body.addWidget(row)
body.addWidget( row, slider, value_label = _slider_row(
_slider_row(
"Фейдер F/R", "Фейдер F/R",
-50, -50,
50, 50,
0, 0,
_format_fader, _format_fader,
) )
) body.addWidget(row)
return card return card
def _build_tone_card(self) -> QWidget: def _build_tone_card(self) -> QWidget:
@ -164,7 +201,7 @@ def _card(title: str) -> tuple[QWidget, QVBoxLayout]:
return card, layout return card, layout
def _toggle_row(label: str, checked: bool) -> QWidget: def _toggle_row(label: str, checked: bool) -> tuple[QWidget, QPushButton]:
row = QWidget() row = QWidget()
row.setObjectName("SoundToggleRow") row.setObjectName("SoundToggleRow")
layout = QHBoxLayout(row) layout = QHBoxLayout(row)
@ -191,7 +228,7 @@ def _toggle_row(label: str, checked: bool) -> QWidget:
layout.addWidget(lbl) layout.addWidget(lbl)
layout.addStretch(1) layout.addStretch(1)
layout.addWidget(btn) layout.addWidget(btn)
return row return row, btn
def _slider_row( def _slider_row(
@ -200,7 +237,7 @@ def _slider_row(
maximum: int, maximum: int,
value: int, value: int,
formatter, formatter,
) -> QWidget: ) -> tuple[QWidget, QSlider, QLabel]:
row = QWidget() row = QWidget()
row.setObjectName("SoundSliderRow") row.setObjectName("SoundSliderRow")
layout = QVBoxLayout(row) layout = QVBoxLayout(row)
@ -231,7 +268,7 @@ def _slider_row(
layout.addWidget(header) layout.addWidget(header)
layout.addWidget(slider) layout.addWidget(slider)
return row return row, slider, val
def _format_balance(value: int) -> str: def _format_balance(value: int) -> str:
@ -246,3 +283,20 @@ def _format_fader(value: int) -> str:
return "Центр" return "Центр"
side = "F" if value < 0 else "R" side = "F" if value < 0 else "R"
return f"{side} {abs(value)}" return f"{side} {abs(value)}"
def _read_int_setting(settings: QSettings, key: str, default: int) -> int:
raw = settings.value(key, default)
try:
return int(raw)
except (TypeError, ValueError):
return default
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")
return bool(raw)