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