change button location
This commit is contained in:
parent
4ff5eea299
commit
f80cbf7c6e
2
app.py
2
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")
|
||||
|
||||
|
||||
@ -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"
|
||||
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user