From dfdc791d0763d03e9ffdcd48e468f73e15e6f4da Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 9 Jan 2026 05:17:20 +0300 Subject: [PATCH] update design dev_screen --- screens/setting/dev_screen.py | 19 +++++++++++++++++++ screens/settings.py | 15 ++++++++++++++- themes/day.py | 9 +++++++++ themes/night.py | 8 ++++++++ 4 files changed, 50 insertions(+), 1 deletion(-) diff --git a/screens/setting/dev_screen.py b/screens/setting/dev_screen.py index 6e38c31..6f0b28a 100644 --- a/screens/setting/dev_screen.py +++ b/screens/setting/dev_screen.py @@ -32,9 +32,15 @@ def build_dev_screen(on_exit) -> QWidget: reboot_btn.setMinimumHeight(72) reboot_btn.clicked.connect(_confirm_reboot) + reset_btn = QPushButton("Сброс до заводских") + reset_btn.setObjectName("DevResetBtn") + reset_btn.setMinimumHeight(72) + reset_btn.clicked.connect(_confirm_factory_reset) + layout.addLayout(hdr) layout.addWidget(exit_btn) layout.addWidget(reboot_btn) + layout.addWidget(reset_btn) layout.addStretch(1) return screen @@ -177,3 +183,16 @@ def _confirm_reboot(): ) if dialog.exec() == ConfirmDialog.Accepted: subprocess.run(["sudo", "reboot"], check=False) + + +def _confirm_factory_reset(): + dialog = ConfirmDialog( + "Подтверждение", + "Сбросить настройки до заводских? Приложение будет закрыто.", + "Сбросить", + ok_object_name="ConfirmOkDanger", + ) + if dialog.exec() == ConfirmDialog.Accepted: + reset_marker = Path(build_info.__file__).resolve().parent / "reset" + reset_marker.touch(exist_ok=True) + subprocess.run(["sudo", "reboot"], check=False) diff --git a/screens/settings.py b/screens/settings.py index 8b8c123..f631f37 100644 --- a/screens/settings.py +++ b/screens/settings.py @@ -9,7 +9,7 @@ from PySide6.QtWidgets import ( QStackedWidget, QApplication, ) -from PySide6.QtCore import Qt, Signal +from PySide6.QtCore import Qt, Signal, QSettings from PySide6.QtGui import QFont from PySide6.QtWidgets import QScroller from screens.setting.bluetooth_screen import BluetoothScreen @@ -19,6 +19,7 @@ from screens.setting.sound_screen import SoundScreen from screens.setting.eq_screen import EqualizerScreen from screens.setting.display_screen import DisplayScreen import build_info +from ui.language_dialog import LanguageDialog class SettingsRow(QPushButton): @@ -118,10 +119,14 @@ class SettingsScreen(QWidget): [ ("Экран", "Яркость, сон, тема"), ("Звук", "Громкость, эквалайзер"), + ("Язык", "Выбор языка интерфейса"), ], ) display_row = display_rows.get("Экран") sound_row = display_rows.get("Звук") + language_row = display_rows.get("Язык") + + self._add_section(content_layout, "Данные", []) system_rows = self._add_section( content_layout, @@ -167,6 +172,8 @@ class SettingsScreen(QWidget): display_row.clicked.connect(self._show_display) if sound_row is not None: sound_row.clicked.connect(self._show_sound) + if language_row is not None: + language_row.clicked.connect(self._show_language) self._show_list() def _add_section( @@ -219,6 +226,12 @@ class SettingsScreen(QWidget): self.stack.setCurrentWidget(self._eq_screen) self.view_changed.emit("Эквалайзер", True) + def _show_language(self): + dialog = LanguageDialog() + if dialog.exec() == LanguageDialog.Accepted: + settings = QSettings("car_ui", "ui") + settings.setValue("ui/language", dialog.selected_language()) + def _exit_app(self): app = QApplication.instance() if app is not None: diff --git a/themes/day.py b/themes/day.py index 7d3f31b..5f63b29 100644 --- a/themes/day.py +++ b/themes/day.py @@ -122,6 +122,15 @@ QScrollArea > QWidget > QWidget { background: transparent; } font-weight: 700; } #DevRebootBtn:hover { background: #FECACA; } +#DevResetBtn { + background: #FEE2E2; + color: #991B1B; + border-radius: 14px; + border: 1px solid #FCA5A5; + font-size: 16px; + font-weight: 700; +} +#DevResetBtn:hover { background: #FECACA; } #BluetoothStatus { color: rgba(107,114,128,0.95); } #BluetoothList { diff --git a/themes/night.py b/themes/night.py index d5fdbdf..17205ff 100644 --- a/themes/night.py +++ b/themes/night.py @@ -113,6 +113,14 @@ QScrollArea > QWidget > QWidget { background: transparent; } font-weight: 700; } #DevRebootBtn:hover { background: #991B1B; } +#DevResetBtn { + background: #7F1D1D; + color: #FEE2E2; + border-radius: 14px; + font-size: 16px; + font-weight: 700; +} +#DevResetBtn:hover { background: #991B1B; } #BluetoothStatus { color: rgba(138,147,166,0.95); } #BluetoothList {