mirror of
https://github.com/dragonpilot/dragonpilot.git
synced 2026-08-21 16:23:50 +08:00
openpilot v0.11.1 release
date: 2026-06-04T09:49:56 master commit: c0ab3550eca2e9daf197c46b7e4b24aa9637cf2e
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
import pyray as rl
|
||||
from openpilot.common.time_helpers import system_time_valid
|
||||
from openpilot.selfdrive.ui.ui_state import ui_state
|
||||
from openpilot.selfdrive.ui.widgets.pairing_dialog import PairingDialog
|
||||
from openpilot.system.ui.lib.application import gui_app, FontWeight, FONT_SCALE
|
||||
from openpilot.system.ui.lib.multilang import tr
|
||||
from openpilot.system.ui.lib.wrap_text import wrap_text
|
||||
from openpilot.system.ui.widgets import Widget
|
||||
from openpilot.system.ui.widgets.confirm_dialog import alert_dialog
|
||||
from openpilot.system.ui.widgets.button import Button, ButtonStyle
|
||||
from openpilot.system.ui.widgets.label import Label
|
||||
|
||||
|
||||
class SetupWidget(Widget):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self._open_settings_callback = None
|
||||
self._pair_device_btn = Button(lambda: tr("Pair device"), self._show_pairing, button_style=ButtonStyle.PRIMARY)
|
||||
self._open_settings_btn = Button(lambda: tr("Open"), lambda: self._open_settings_callback() if self._open_settings_callback else None,
|
||||
button_style=ButtonStyle.PRIMARY)
|
||||
self._firehose_label = Label(lambda: tr("🔥 Firehose Mode 🔥"), font_weight=FontWeight.MEDIUM, font_size=64)
|
||||
|
||||
def set_open_settings_callback(self, callback):
|
||||
self._open_settings_callback = callback
|
||||
|
||||
def _render(self, rect: rl.Rectangle):
|
||||
if not ui_state.prime_state.is_paired():
|
||||
self._render_registration(rect)
|
||||
else:
|
||||
self._render_firehose_prompt(rect)
|
||||
|
||||
def _render_registration(self, rect: rl.Rectangle):
|
||||
"""Render registration prompt."""
|
||||
|
||||
rl.draw_rectangle_rounded(rl.Rectangle(rect.x, rect.y, rect.width, rect.height), 0.03, 20, rl.Color(51, 51, 51, 255))
|
||||
|
||||
x = rect.x + 64
|
||||
y = rect.y + 48
|
||||
w = rect.width - 128
|
||||
|
||||
# Title
|
||||
font = gui_app.font(FontWeight.BOLD)
|
||||
rl.draw_text_ex(font, tr("Finish Setup"), rl.Vector2(x, y), 75, 0, rl.WHITE)
|
||||
y += 113 # 75 + 38 spacing
|
||||
|
||||
# Description
|
||||
desc = tr("Pair your device with comma connect (connect.comma.ai) and claim your comma prime offer.")
|
||||
light_font = gui_app.font(FontWeight.NORMAL)
|
||||
wrapped = wrap_text(light_font, desc, 50, int(w))
|
||||
for line in wrapped:
|
||||
rl.draw_text_ex(light_font, line, rl.Vector2(x, y), 50, 0, rl.WHITE)
|
||||
y += 50 * FONT_SCALE
|
||||
|
||||
button_rect = rl.Rectangle(x, y + 30, w, 200)
|
||||
self._pair_device_btn.render(button_rect)
|
||||
|
||||
def _render_firehose_prompt(self, rect: rl.Rectangle):
|
||||
"""Render firehose prompt widget."""
|
||||
|
||||
rl.draw_rectangle_rounded(rl.Rectangle(rect.x, rect.y, rect.width, 500), 0.04, 20, rl.Color(51, 51, 51, 255))
|
||||
|
||||
# Content margins (56, 40, 56, 40)
|
||||
x = rect.x + 56
|
||||
y = rect.y + 40
|
||||
w = rect.width - 112
|
||||
spacing = 42
|
||||
|
||||
# Title with fire emojis
|
||||
self._firehose_label.render(rl.Rectangle(rect.x, y, rect.width, 64))
|
||||
y += 64 + spacing
|
||||
|
||||
# Description
|
||||
desc_font = gui_app.font(FontWeight.NORMAL)
|
||||
desc_text = tr("Maximize your training data uploads to improve openpilot's driving models.")
|
||||
wrapped_desc = wrap_text(desc_font, desc_text, 40, int(w))
|
||||
|
||||
for line in wrapped_desc:
|
||||
rl.draw_text_ex(desc_font, line, rl.Vector2(x, y), 40, 0, rl.WHITE)
|
||||
y += 40 * FONT_SCALE
|
||||
|
||||
y += spacing
|
||||
|
||||
# Open button
|
||||
button_height = 48 + 64 # font size + padding
|
||||
button_rect = rl.Rectangle(x, y, w, button_height)
|
||||
self._open_settings_btn.render(button_rect)
|
||||
|
||||
@staticmethod
|
||||
def _show_pairing():
|
||||
if not system_time_valid():
|
||||
dlg = alert_dialog(tr("Please connect to Wi-Fi to complete initial pairing"))
|
||||
gui_app.push_widget(dlg)
|
||||
return
|
||||
|
||||
gui_app.push_widget(PairingDialog())
|
||||
Reference in New Issue
Block a user