add params for ir

This commit is contained in:
cheykrym 2026-04-01 05:35:28 +03:00
parent 9bb3c1b2df
commit 65f5f1fee3
4 changed files with 58 additions and 5 deletions

2
app.py
View File

@ -69,6 +69,8 @@ def _apply_startup_display_defaults():
settings.setValue("display/theme", "night") settings.setValue("display/theme", "night")
if not settings.contains("media/source_mode"): if not settings.contains("media/source_mode"):
settings.setValue("media/source_mode", "bluetooth") settings.setValue("media/source_mode", "bluetooth")
if not settings.contains("ir_remote/enabled"):
settings.setValue("ir_remote/enabled", False)
def _apply_reset_if_requested(): def _apply_reset_if_requested():

View File

@ -3,13 +3,13 @@ import subprocess
from PySide6.QtCore import Qt, QSettings 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, QFrame
import build_info import build_info
from ui.confirm_dialog import ConfirmDialog from ui.confirm_dialog import ConfirmDialog
def build_dev_screen(on_exit) -> QWidget: def build_dev_screen(on_exit, on_ir_toggle=None) -> QWidget:
screen = QWidget() screen = QWidget()
layout = QVBoxLayout(screen) layout = QVBoxLayout(screen)
layout.setContentsMargins(0, 0, 0, 0) layout.setContentsMargins(0, 0, 0, 0)
@ -18,6 +18,7 @@ def build_dev_screen(on_exit) -> QWidget:
layout.addWidget(_build_persist_toggle()) layout.addWidget(_build_persist_toggle())
layout.addWidget(_build_sound_toggles()) layout.addWidget(_build_sound_toggles())
layout.addWidget(_build_mock_devices_toggle()) layout.addWidget(_build_mock_devices_toggle())
layout.addWidget(_build_ir_remote_toggle(on_ir_toggle))
hdr = QHBoxLayout() hdr = QHBoxLayout()
hdr.setContentsMargins(0, 0, 0, 0) hdr.setContentsMargins(0, 0, 0, 0)
@ -184,6 +185,30 @@ def _build_mock_devices_toggle() -> QWidget:
return container return container
def _build_ir_remote_toggle(on_ir_toggle=None) -> QWidget:
"""Переключатель ИК-пульта."""
settings = QSettings("car_ui", "ui")
container = QWidget()
layout = QVBoxLayout(container)
layout.setContentsMargins(12, 6, 12, 6)
layout.setSpacing(8)
row = _toggle_row(
"ИК-пульт (требуется перезапуск)",
settings,
"ir_remote/enabled",
False,
)
layout.addWidget(row)
# Подключаем callback
if on_ir_toggle:
row.findChild(QPushButton).toggled.connect(on_ir_toggle)
return container
def _confirm_exit(on_exit): def _confirm_exit(on_exit):
dialog = ConfirmDialog( dialog = ConfirmDialog(
"Подтверждение", "Подтверждение",

View File

@ -153,7 +153,7 @@ class SettingsScreen(QWidget):
scroll.setWidget(content) scroll.setWidget(content)
list_layout.addWidget(scroll, 1) list_layout.addWidget(scroll, 1)
self._dev_screen = build_dev_screen(self._exit_app) self._dev_screen = build_dev_screen(self._exit_app, self._on_ir_toggle)
self._about_screen = AboutScreen() self._about_screen = AboutScreen()
self._about_screen.dev_unlocked.connect(self._enable_dev_mode) self._about_screen.dev_unlocked.connect(self._enable_dev_mode)
self._bt_screen = BluetoothScreen(self._show_list) self._bt_screen = BluetoothScreen(self._show_list)
@ -211,6 +211,16 @@ class SettingsScreen(QWidget):
self.stack.setCurrentWidget(self._list_screen) self.stack.setCurrentWidget(self._list_screen)
self.view_changed.emit("Настройки", False) self.view_changed.emit("Настройки", False)
def _on_ir_toggle(self, enabled: bool):
"""Обработчик переключения ИК-пульта."""
# Находим main_window и вызываем метод
from ui.main_window_new import MainWindowNew
main_window = self.parent()
while main_window and not isinstance(main_window, MainWindowNew):
main_window = main_window.parent()
if main_window:
main_window.set_ir_remote_enabled(enabled)
def _show_bluetooth(self): def _show_bluetooth(self):
self.stack.setCurrentWidget(self._bt_screen) self.stack.setCurrentWidget(self._bt_screen)
self.view_changed.emit("Bluetooth", True) self.view_changed.emit("Bluetooth", True)

View File

@ -108,9 +108,12 @@ class MainWindowNew(QMainWindow):
self._bt_service = BluetoothService(self) self._bt_service = BluetoothService(self)
self._media_controller = MediaController(self._bt_service, self) self._media_controller = MediaController(self._bt_service, self)
# ИК-пульт # ИК-пульт (только если включено в настройках)
self._ir_service = IrRemoteService(self) self._ir_service = IrRemoteService(self)
self._connect_ir_remote() self._ir_enabled = self._settings.value("ir_remote/enabled", False)
if self._ir_enabled:
self._connect_ir_remote()
self._ir_service.start()
self.media_screen = MediaScreen(self._media_controller) self.media_screen = MediaScreen(self._media_controller)
self.stack.addWidget(self.media_screen) # 0 self.stack.addWidget(self.media_screen) # 0
@ -221,6 +224,19 @@ class MainWindowNew(QMainWindow):
# TODO: реализовать быстрое уменьшение громкости # TODO: реализовать быстрое уменьшение громкости
pass pass
def set_ir_remote_enabled(self, enabled: bool):
"""Включить или выключить ИК-пульт."""
self._settings.setValue("ir_remote/enabled", enabled)
self._ir_enabled = enabled
if enabled:
self._connect_ir_remote()
self._ir_service.start()
logger.info("IR remote enabled")
else:
self._ir_service.stop()
logger.info("IR remote disabled")
def apply_theme(self): def apply_theme(self):
self.app.setStyleSheet(THEME_NIGHT if self.is_night else THEME_DAY) self.app.setStyleSheet(THEME_NIGHT if self.is_night else THEME_DAY)