diff --git a/selfdrive/ui/sunnypilot/layouts/settings/steering_sub_layouts/mads_settings.py b/selfdrive/ui/sunnypilot/layouts/settings/steering_sub_layouts/mads_settings.py
index d3f38e04d1..3542adf285 100644
--- a/selfdrive/ui/sunnypilot/layouts/settings/steering_sub_layouts/mads_settings.py
+++ b/selfdrive/ui/sunnypilot/layouts/settings/steering_sub_layouts/mads_settings.py
@@ -9,6 +9,7 @@ import pyray as rl
from opendbc.sunnypilot.car.tesla.values import TeslaFlagsSP
from openpilot.selfdrive.ui.ui_state import ui_state
+from openpilot.sunnypilot.mads.helpers import MadsSteeringModeOnBrake
from openpilot.system.ui.lib.multilang import tr, tr_noop
from openpilot.system.ui.widgets import Widget
from openpilot.system.ui.widgets.network import NavButton
@@ -112,7 +113,7 @@ class MadsSettingsLayout(Widget):
if self._mads_limited_settings():
ui_state.params.remove("MadsMainCruiseAllowed")
ui_state.params.put_bool("MadsUnifiedEngagementMode", True)
- ui_state.params.put("MadsSteeringMode", 2)
+ ui_state.params.put("MadsSteeringMode", MadsSteeringModeOnBrake.DISENGAGE)
self._main_cruise_toggle.action_item.set_enabled(False)
self._main_cruise_toggle.action_item.set_state(False)
@@ -122,9 +123,9 @@ class MadsSettingsLayout(Widget):
self._unified_engagement_toggle.action_item.set_state(True)
self._unified_engagement_toggle.set_description("" + DEFAULT_TO_ON + "
" + MADS_UNIFIED_ENGAGEMENT_MODE_BASE_DESC)
- self._steering_mode.action_item.set_enabled(False)
self._steering_mode.set_description(STATUS_DISENGAGE_ONLY)
- self._steering_mode.action_item.set_selected_button(2)
+ self._steering_mode.action_item.set_selected_button(MadsSteeringModeOnBrake.DISENGAGE)
+ self._steering_mode.action_item.set_enabled_buttons({MadsSteeringModeOnBrake.DISENGAGE})
else:
self._main_cruise_toggle.action_item.set_enabled(True)
self._main_cruise_toggle.set_description(MADS_MAIN_CRUISE_BASE_DESC)
@@ -133,3 +134,4 @@ class MadsSettingsLayout(Widget):
self._unified_engagement_toggle.set_description(MADS_UNIFIED_ENGAGEMENT_MODE_BASE_DESC)
self._steering_mode.action_item.set_enabled(True)
+ self._steering_mode.action_item.set_enabled_buttons(None)
diff --git a/system/ui/sunnypilot/widgets/list_view.py b/system/ui/sunnypilot/widgets/list_view.py
index 30a2d992a7..1dd69c24cb 100644
--- a/system/ui/sunnypilot/widgets/list_view.py
+++ b/system/ui/sunnypilot/widgets/list_view.py
@@ -134,6 +134,10 @@ class MultipleButtonActionSP(MultipleButtonAction):
if self.param_key:
self.selected_button = int(self.params.get(self.param_key, return_default=True))
self._anim_x: float | None = None
+ self.enabled_buttons: set[int] | None = None
+
+ def set_enabled_buttons(self, indices: set[int] | None):
+ self.enabled_buttons = indices
def _render(self, rect: rl.Rectangle):
@@ -171,10 +175,31 @@ class MultipleButtonActionSP(MultipleButtonAction):
text_x = button_x + (self.button_width - text_size.x) / 2
text_y = button_y + (style.BUTTON_HEIGHT - text_size.y) / 2
- rl.draw_text_ex(self._font, text, rl.Vector2(text_x, text_y), 40, 0, text_color)
+ # Check individual button enabled state
+ is_button_enabled = self.enabled and (self.enabled_buttons is None or i in self.enabled_buttons)
+ current_text_color = text_color if is_button_enabled else style.MBC_DISABLED
+
+ rl.draw_text_ex(self._font, text, rl.Vector2(text_x, text_y), 40, 0, current_text_color)
def _handle_mouse_release(self, mouse_pos: MousePos):
- MultipleButtonAction._handle_mouse_release(self, mouse_pos)
+ # Override parent method to check individual button enabled state
+ if not self.enabled:
+ return
+
+ button_y = self._rect.y + (self._rect.height - style.BUTTON_HEIGHT) / 2
+ for i, _ in enumerate(self.buttons):
+ button_x = self._rect.x + i * self.button_width
+ button_rect = rl.Rectangle(button_x, button_y, self.button_width, style.BUTTON_HEIGHT)
+
+ if rl.check_collision_point_rec(mouse_pos, button_rect):
+ # Check if this specific button is enabled
+ if self.enabled_buttons is not None and i not in self.enabled_buttons:
+ return
+
+ self.selected_button = i
+ if self.callback:
+ self.callback(i)
+
if self.param_key:
self.params.put(self.param_key, self.selected_button)