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.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,
|
"Базовая громкость",
|
||||||
100,
|
0,
|
||||||
60,
|
100,
|
||||||
lambda v: f"{v}%",
|
value,
|
||||||
)
|
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)
|
||||||
0,
|
toggle_btn.toggled.connect(
|
||||||
100,
|
lambda checked: self._settings.setValue(
|
||||||
10,
|
"sound/premute_enabled",
|
||||||
lambda v: f"{v}%",
|
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
|
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(
|
|
||||||
"Громкость при Ducking",
|
row_toggle, toggle_btn = _toggle_row("Ducking", checked=ducking_enabled)
|
||||||
0,
|
toggle_btn.toggled.connect(
|
||||||
100,
|
lambda checked: self._settings.setValue(
|
||||||
35,
|
"sound/ducking_enabled",
|
||||||
lambda v: f"{v}%",
|
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
|
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(
|
body.addWidget(row)
|
||||||
_slider_row(
|
row, slider, value_label = _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)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user