add about device

This commit is contained in:
Your Name 2026-01-09 00:48:57 +03:00
parent f542d5f7bc
commit 4b9e326034
2 changed files with 65 additions and 10 deletions

5
build_info.py Normal file
View File

@ -0,0 +1,5 @@
APP_NAME = "Car UI"
VERSION = "0.1.0-dev"
BUILD_DATE = "dev"
GIT_HASH = "dev"
DEVICE_MODEL = "Raspberry Pi"

View File

@ -13,6 +13,7 @@ from PySide6.QtCore import Qt, Signal
from PySide6.QtGui import QFont from PySide6.QtGui import QFont
from PySide6.QtWidgets import QScroller from PySide6.QtWidgets import QScroller
from screens.bluetooth import BluetoothScreen from screens.bluetooth import BluetoothScreen
import build_info
class SettingsRow(QPushButton): class SettingsRow(QPushButton):
@ -93,25 +94,26 @@ class SettingsScreen(QWidget):
content_layout.setContentsMargins(0, 0, 0, 0) content_layout.setContentsMargins(0, 0, 0, 0)
content_layout.setSpacing(12) content_layout.setSpacing(12)
bt_row = self._add_section( bt_rows = self._add_section(
content_layout, content_layout,
"Сеть", "Сеть",
[ [
("Wi-Fi", "Доступные сети и подключение"), ("Wi-Fi", "Доступные сети и подключение"),
("Bluetooth", "Сопряжение и устройства"), ("Bluetooth", "Сопряжение и устройства"),
], ],
return_row_title="Bluetooth",
) )
bt_row = bt_rows.get("Bluetooth")
dev_row = self._add_section( system_rows = self._add_section(
content_layout, content_layout,
"Система", "Система",
[ [
("Об устройстве", "Версия, память, серийный номер"), ("Об устройстве", "Версия, память, серийный номер"),
("Параметры разработчика", "Отладка и логирование"), ("Параметры разработчика", "Отладка и логирование"),
], ],
return_row_title="Параметры разработчика",
) )
about_row = system_rows.get("Об устройстве")
dev_row = system_rows.get("Параметры разработчика")
self._add_section( self._add_section(
content_layout, content_layout,
@ -127,13 +129,17 @@ class SettingsScreen(QWidget):
list_layout.addWidget(scroll, 1) list_layout.addWidget(scroll, 1)
self._dev_screen = self._build_dev_screen() self._dev_screen = self._build_dev_screen()
self._about_screen = self._build_about_screen()
self._bt_screen = BluetoothScreen(self._show_list) self._bt_screen = BluetoothScreen(self._show_list)
self.stack.addWidget(self._list_screen) self.stack.addWidget(self._list_screen)
self.stack.addWidget(self._dev_screen) self.stack.addWidget(self._dev_screen)
self.stack.addWidget(self._about_screen)
self.stack.addWidget(self._bt_screen) self.stack.addWidget(self._bt_screen)
if dev_row is not None: if dev_row is not None:
dev_row.clicked.connect(self._show_dev) dev_row.clicked.connect(self._show_dev)
if about_row is not None:
about_row.clicked.connect(self._show_about)
if bt_row is not None: if bt_row is not None:
bt_row.clicked.connect(self._show_bluetooth) bt_row.clicked.connect(self._show_bluetooth)
self._show_list() self._show_list()
@ -175,21 +181,61 @@ class SettingsScreen(QWidget):
root: QVBoxLayout, root: QVBoxLayout,
title: str, title: str,
items: list[tuple[str, str]], items: list[tuple[str, str]],
return_row_title: str | None = None, ) -> dict[str, SettingsRow]:
):
section = QLabel(title) section = QLabel(title)
section.setObjectName("SettingsSection") section.setObjectName("SettingsSection")
section.setFont(QFont("", 14, 700)) section.setFont(QFont("", 14, 700))
section.setContentsMargins(2, 8, 2, 0) section.setContentsMargins(2, 8, 2, 0)
root.addWidget(section) root.addWidget(section)
target_row = None rows: dict[str, SettingsRow] = {}
for row_title, row_subtitle in items: for row_title, row_subtitle in items:
row = SettingsRow(row_title, row_subtitle) row = SettingsRow(row_title, row_subtitle)
root.addWidget(row) root.addWidget(row)
if return_row_title and row_title == return_row_title: rows[row_title] = row
target_row = row return rows
return target_row
def _build_about_screen(self) -> QWidget:
screen = QWidget()
layout = QVBoxLayout(screen)
layout.setContentsMargins(0, 0, 0, 0)
layout.setSpacing(12)
title = QLabel("Об устройстве")
title.setFont(QFont("", 22, 700))
layout.addWidget(title)
info = QVBoxLayout()
info.setContentsMargins(0, 0, 0, 0)
info.setSpacing(8)
info.addWidget(self._info_row("Приложение", build_info.APP_NAME))
info.addWidget(self._info_row("Версия", build_info.VERSION))
info.addWidget(self._info_row("Сборка", build_info.BUILD_DATE))
info.addWidget(self._info_row("Коммит", build_info.GIT_HASH))
info.addWidget(self._info_row("Устройство", build_info.DEVICE_MODEL))
layout.addLayout(info)
layout.addStretch(1)
return screen
def _info_row(self, label: str, value: str) -> QWidget:
row = QWidget()
layout = QHBoxLayout(row)
layout.setContentsMargins(12, 6, 12, 6)
layout.setSpacing(12)
lbl = QLabel(label)
lbl.setFont(QFont("", 15, 600))
val = QLabel(value)
val.setFont(QFont("", 15))
val.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
layout.addWidget(lbl)
layout.addStretch(1)
layout.addWidget(val)
return row
def _show_dev(self): def _show_dev(self):
self.stack.setCurrentWidget(self._dev_screen) self.stack.setCurrentWidget(self._dev_screen)
@ -203,6 +249,10 @@ class SettingsScreen(QWidget):
self.stack.setCurrentWidget(self._bt_screen) self.stack.setCurrentWidget(self._bt_screen)
self.view_changed.emit("Bluetooth", True) self.view_changed.emit("Bluetooth", True)
def _show_about(self):
self.stack.setCurrentWidget(self._about_screen)
self.view_changed.emit("Об устройстве", True)
def show_list(self): def show_list(self):
self._show_list() self._show_list()