change button location

This commit is contained in:
Your Name 2026-01-09 04:32:08 +03:00
parent 4ff5eea299
commit f80cbf7c6e
4 changed files with 80 additions and 106 deletions

2
app.py
View File

@ -49,8 +49,6 @@ def _apply_startup_display_defaults():
settings.setValue("display/brightness", 70) settings.setValue("display/brightness", 70)
if not settings.contains("display/auto_brightness"): if not settings.contains("display/auto_brightness"):
settings.setValue("display/auto_brightness", False) 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"): if not settings.contains("display/theme"):
settings.setValue("display/theme", "night") settings.setValue("display/theme", "night")

View File

@ -1,7 +1,7 @@
from pathlib import Path from pathlib import Path
import subprocess import subprocess
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 QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLabel from PySide6.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLabel
@ -16,6 +16,7 @@ def build_dev_screen(on_exit) -> QWidget:
layout.setSpacing(12) layout.setSpacing(12)
layout.addWidget(_build_persist_toggle()) layout.addWidget(_build_persist_toggle())
layout.addWidget(_build_sound_toggles())
hdr = QHBoxLayout() hdr = QHBoxLayout()
hdr.setContentsMargins(0, 0, 0, 0) hdr.setContentsMargins(0, 0, 0, 0)
@ -76,6 +77,83 @@ def _build_persist_toggle() -> QWidget:
return row 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: def _dev_flag_path() -> Path:
return Path(build_info.__file__).resolve().parent / "dev_mode_enable" return Path(build_info.__file__).resolve().parent / "dev_mode_enable"

View File

@ -42,7 +42,6 @@ class DisplayScreen(QWidget):
content_layout.setSpacing(12) content_layout.setSpacing(12)
content_layout.addWidget(self._build_brightness_card()) content_layout.addWidget(self._build_brightness_card())
content_layout.addWidget(self._build_sleep_card())
content_layout.addWidget(self._build_theme_card()) content_layout.addWidget(self._build_theme_card())
content_layout.addStretch(1) content_layout.addStretch(1)
@ -59,7 +58,7 @@ class DisplayScreen(QWidget):
) )
row_toggle, toggle_btn = _toggle_row( row_toggle, toggle_btn = _toggle_row(
"Автояркость", "Автояркость (не работает)",
checked=auto_brightness, checked=auto_brightness,
) )
row_slider, slider, value_label = _slider_row( row_slider, slider, value_label = _slider_row(
@ -83,26 +82,6 @@ class DisplayScreen(QWidget):
body.addWidget(row_slider) body.addWidget(row_slider)
return card 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: def _build_theme_card(self) -> QWidget:
card, body = _card("Тема") card, body = _card("Тема")
row = QWidget() row = QWidget()

View File

@ -47,8 +47,6 @@ class SoundScreen(QWidget):
content_layout.setSpacing(12) content_layout.setSpacing(12)
content_layout.addWidget(self._build_volume_card()) 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_balance_card())
content_layout.addWidget(self._build_tone_card()) content_layout.addWidget(self._build_tone_card())
content_layout.addWidget(self._build_eq_card()) content_layout.addWidget(self._build_eq_card())
@ -90,54 +88,6 @@ class SoundScreen(QWidget):
body.addWidget(row) body.addWidget(row)
return card 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: def _build_balance_card(self) -> QWidget:
card, body = _card("Баланс и фейдер") card, body = _card("Баланс и фейдер")
row, slider, value_label = _slider_row( row, slider, value_label = _slider_row(
@ -209,36 +159,6 @@ def _card(title: str) -> tuple[QWidget, QVBoxLayout]:
return card, layout 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( def _slider_row(
label: str, label: str,
minimum: int, minimum: int,
@ -299,4 +219,3 @@ def _read_int_setting(settings: QSettings, key: str, default: int) -> int:
return int(raw) return int(raw)
except (TypeError, ValueError): except (TypeError, ValueError):
return default return default