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)
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")

View File

@ -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"

View File

@ -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()

View File

@ -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