mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-09-07 18:23:43 +08:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 311d7b2fee | |||
| 71c1645157 | |||
| a26939ea86 |
@@ -62,7 +62,25 @@ class MiciFccModal(NavRawScrollPanel):
|
|||||||
rl.draw_texture_ex(self._fcc_logo, fcc_pos, 0.0, 1.0, rl.WHITE)
|
rl.draw_texture_ex(self._fcc_logo, fcc_pos, 0.0, 1.0, rl.WHITE)
|
||||||
|
|
||||||
|
|
||||||
def _engaged_confirmation_click(callback: Callable, action_text: str, icon: rl.Texture, exit_on_confirm: bool = True, red: bool = False):
|
class DisengageDialog(BigDialog):
|
||||||
|
def __init__(self, title: str, description: str, disengaged_callback: Callable[[], None]):
|
||||||
|
super().__init__(title, description)
|
||||||
|
self._disengaged_callback = disengaged_callback
|
||||||
|
|
||||||
|
def _update_state(self):
|
||||||
|
super()._update_state()
|
||||||
|
if not ui_state.engaged and not self.is_dismissing:
|
||||||
|
self.dismiss(self._disengaged_callback)
|
||||||
|
|
||||||
|
|
||||||
|
class EngagedConfirmationDialog(BigConfirmationDialog):
|
||||||
|
def _update_state(self):
|
||||||
|
super()._update_state()
|
||||||
|
if ui_state.engaged and not self.is_dismissing:
|
||||||
|
self.dismiss()
|
||||||
|
|
||||||
|
|
||||||
|
def engaged_confirmation_click(callback: Callable, action_text: str, icon: rl.Texture, exit_on_confirm: bool = True, red: bool = False):
|
||||||
if not ui_state.engaged:
|
if not ui_state.engaged:
|
||||||
def confirm_callback():
|
def confirm_callback():
|
||||||
# Check engaged again in case it changed while the dialog was open
|
# Check engaged again in case it changed while the dialog was open
|
||||||
@@ -70,23 +88,26 @@ def _engaged_confirmation_click(callback: Callable, action_text: str, icon: rl.T
|
|||||||
if not ui_state.engaged:
|
if not ui_state.engaged:
|
||||||
callback()
|
callback()
|
||||||
|
|
||||||
gui_app.push_widget(BigConfirmationDialog(f"slide to\n{action_text.lower()}", icon, confirm_callback, exit_on_confirm=exit_on_confirm, red=red))
|
gui_app.push_widget(EngagedConfirmationDialog(f"slide to\n{action_text.lower()}", icon, confirm_callback,
|
||||||
|
exit_on_confirm=exit_on_confirm, red=red))
|
||||||
else:
|
else:
|
||||||
gui_app.push_widget(BigDialog("", f"Disengage to {action_text}"))
|
gui_app.push_widget(DisengageDialog("", f"Disengage to {action_text}",
|
||||||
|
lambda: engaged_confirmation_click(callback, action_text, icon,
|
||||||
|
exit_on_confirm=exit_on_confirm, red=red)))
|
||||||
|
|
||||||
|
|
||||||
class EngagedConfirmationCircleButton(BigCircleButton):
|
class EngagedConfirmationCircleButton(BigCircleButton):
|
||||||
def __init__(self, title: str, icon: rl.Texture, callback: Callable[[], None], exit_on_confirm: bool = True,
|
def __init__(self, title: str, icon: rl.Texture, callback: Callable[[], None], exit_on_confirm: bool = True,
|
||||||
red: bool = False, icon_offset: tuple[int, int] = (0, 0)):
|
red: bool = False, icon_offset: tuple[int, int] = (0, 0)):
|
||||||
super().__init__(icon, red, icon_offset)
|
super().__init__(icon, red, icon_offset)
|
||||||
self.set_click_callback(lambda: _engaged_confirmation_click(callback, title, icon, exit_on_confirm=exit_on_confirm, red=red))
|
self.set_click_callback(lambda: engaged_confirmation_click(callback, title, icon, exit_on_confirm=exit_on_confirm, red=red))
|
||||||
|
|
||||||
|
|
||||||
class EngagedConfirmationButton(BigButton):
|
class EngagedConfirmationButton(BigButton):
|
||||||
def __init__(self, text: str, action_text: str, icon: rl.Texture, callback: Callable[[], None],
|
def __init__(self, text: str, action_text: str, icon: rl.Texture, callback: Callable[[], None],
|
||||||
exit_on_confirm: bool = True, red: bool = False):
|
exit_on_confirm: bool = True, red: bool = False):
|
||||||
super().__init__(text, "", icon)
|
super().__init__(text, "", icon)
|
||||||
self.set_click_callback(lambda: _engaged_confirmation_click(callback, action_text, icon, exit_on_confirm=exit_on_confirm, red=red))
|
self.set_click_callback(lambda: engaged_confirmation_click(callback, action_text, icon, exit_on_confirm=exit_on_confirm, red=red))
|
||||||
|
|
||||||
|
|
||||||
class DeviceInfoLayoutMici(Widget):
|
class DeviceInfoLayoutMici(Widget):
|
||||||
|
|||||||
@@ -6,9 +6,9 @@ See the LICENSE.md file in the root directory for more details.
|
|||||||
"""
|
"""
|
||||||
from openpilot.selfdrive.ui.mici.layouts.settings import settings as OP
|
from openpilot.selfdrive.ui.mici.layouts.settings import settings as OP
|
||||||
from openpilot.selfdrive.ui.mici.layouts.settings.settings import SettingsBigButton
|
from openpilot.selfdrive.ui.mici.layouts.settings.settings import SettingsBigButton
|
||||||
from openpilot.selfdrive.ui.mici.layouts.settings.device import DeviceLayoutMici
|
from openpilot.selfdrive.ui.mici.layouts.settings.device import DeviceLayoutMici, engaged_confirmation_click
|
||||||
from openpilot.selfdrive.ui.mici.widgets.button import BigCircleButton
|
from openpilot.selfdrive.ui.mici.widgets.button import BigCircleButton
|
||||||
from openpilot.selfdrive.ui.mici.widgets.dialog import BigConfirmationDialog, BigDialog
|
from openpilot.selfdrive.ui.mici.widgets.dialog import BigConfirmationDialog
|
||||||
from openpilot.selfdrive.ui.sunnypilot.mici.layouts.sunnylink import SunnylinkLayoutMici
|
from openpilot.selfdrive.ui.sunnypilot.mici.layouts.sunnylink import SunnylinkLayoutMici
|
||||||
from openpilot.selfdrive.ui.sunnypilot.mici.layouts.models import ModelsLayoutMici
|
from openpilot.selfdrive.ui.sunnypilot.mici.layouts.models import ModelsLayoutMici
|
||||||
from openpilot.selfdrive.ui.ui_state import ui_state
|
from openpilot.selfdrive.ui.ui_state import ui_state
|
||||||
@@ -93,10 +93,6 @@ class SettingsLayoutSP(OP.SettingsLayout):
|
|||||||
dlg = BigConfirmationDialog(tr("slide to exit always offroad"), self.icon_offroad_slider, red=False,
|
dlg = BigConfirmationDialog(tr("slide to exit always offroad"), self.icon_offroad_slider, red=False,
|
||||||
confirm_callback=lambda: _set_offroad_status(False))
|
confirm_callback=lambda: _set_offroad_status(False))
|
||||||
else:
|
else:
|
||||||
if ui_state.engaged:
|
engaged_confirmation_click(lambda: _set_offroad_status(True), "force offroad", self.icon_offroad_slider, red=True)
|
||||||
gui_app.push_widget(BigDialog(tr("disengage to enable always offroad"), "", ))
|
return
|
||||||
return
|
|
||||||
|
|
||||||
dlg = BigConfirmationDialog(tr("slide to force offroad"), self.icon_offroad_slider, red=True,
|
|
||||||
confirm_callback=lambda: _set_offroad_status(True))
|
|
||||||
gui_app.push_widget(dlg)
|
gui_app.push_widget(dlg)
|
||||||
|
|||||||
Reference in New Issue
Block a user