diff --git a/build_info.py b/build_info.py new file mode 100644 index 0000000..7f041a6 --- /dev/null +++ b/build_info.py @@ -0,0 +1,5 @@ +APP_NAME = "Car UI" +VERSION = "0.1.0-dev" +BUILD_DATE = "dev" +GIT_HASH = "dev" +DEVICE_MODEL = "Raspberry Pi" diff --git a/screens/settings.py b/screens/settings.py index 48c12cf..3566b8f 100644 --- a/screens/settings.py +++ b/screens/settings.py @@ -13,6 +13,7 @@ from PySide6.QtCore import Qt, Signal from PySide6.QtGui import QFont from PySide6.QtWidgets import QScroller from screens.bluetooth import BluetoothScreen +import build_info class SettingsRow(QPushButton): @@ -93,25 +94,26 @@ class SettingsScreen(QWidget): content_layout.setContentsMargins(0, 0, 0, 0) content_layout.setSpacing(12) - bt_row = self._add_section( + bt_rows = self._add_section( content_layout, "Сеть", [ ("Wi-Fi", "Доступные сети и подключение"), ("Bluetooth", "Сопряжение и устройства"), ], - return_row_title="Bluetooth", ) + bt_row = bt_rows.get("Bluetooth") - dev_row = self._add_section( + system_rows = self._add_section( content_layout, "Система", [ ("Об устройстве", "Версия, память, серийный номер"), ("Параметры разработчика", "Отладка и логирование"), ], - return_row_title="Параметры разработчика", ) + about_row = system_rows.get("Об устройстве") + dev_row = system_rows.get("Параметры разработчика") self._add_section( content_layout, @@ -127,13 +129,17 @@ class SettingsScreen(QWidget): list_layout.addWidget(scroll, 1) self._dev_screen = self._build_dev_screen() + self._about_screen = self._build_about_screen() self._bt_screen = BluetoothScreen(self._show_list) self.stack.addWidget(self._list_screen) self.stack.addWidget(self._dev_screen) + self.stack.addWidget(self._about_screen) self.stack.addWidget(self._bt_screen) if dev_row is not None: 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: bt_row.clicked.connect(self._show_bluetooth) self._show_list() @@ -175,21 +181,61 @@ class SettingsScreen(QWidget): root: QVBoxLayout, title: str, items: list[tuple[str, str]], - return_row_title: str | None = None, - ): + ) -> dict[str, SettingsRow]: section = QLabel(title) section.setObjectName("SettingsSection") section.setFont(QFont("", 14, 700)) section.setContentsMargins(2, 8, 2, 0) root.addWidget(section) - target_row = None + rows: dict[str, SettingsRow] = {} for row_title, row_subtitle in items: row = SettingsRow(row_title, row_subtitle) root.addWidget(row) - if return_row_title and row_title == return_row_title: - target_row = row - return target_row + rows[row_title] = row + return rows + + 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): self.stack.setCurrentWidget(self._dev_screen) @@ -203,6 +249,10 @@ class SettingsScreen(QWidget): self.stack.setCurrentWidget(self._bt_screen) 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): self._show_list()