add sound info
This commit is contained in:
parent
399357dc95
commit
4d67ddcc9b
@ -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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user