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)
|
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")
|
||||||
|
|
||||||
|
|||||||
@ -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"
|
||||||
|
|
||||||
|
|||||||
@ -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()
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user