Implement --no-click-confirm

This commit is contained in:
2026-06-13 16:51:22 +02:00
parent 490f8eb437
commit 61bbb5b434
+70 -20
View File
@@ -20,8 +20,7 @@ def config_events(
click_confirm=click_confirm,
))
if click_confirm:
config = deep_merge(config, event_confirm_script())
config = deep_merge(config, event_confirm_script(click_confirm=click_confirm))
return config
@@ -34,33 +33,42 @@ def events(
"button_events": _generate_event_names(page_names, click_types)
}
}
event_cpp = ""
for event_name in _generate_event_names(page_names, click_types):
event_cpp += (
f'if(event_type == "{event_name}"){{\n'
' // Handle this event locally\n'
'}\n'
)
event_dict["event"] = []
if num_bars < 4:
event_dict["event"].extend(_event_display_entry(Side.LEFT))
event_dict["event"].extend(_event_display_entry(Side.RIGHT))
event_dict["event"].extend(_event_display_entry(Side.LEFT, event_cpp))
event_dict["event"].extend(_event_display_entry(Side.RIGHT, event_cpp))
if num_bars > 0:
event_dict["event"].extend(_event_bar_entry(1, Side.LEFT))
event_dict["event"].extend(_event_bar_entry(1, Side.RIGHT))
event_dict["event"].extend(_event_bar_entry(1, Side.LEFT, event_cpp))
event_dict["event"].extend(_event_bar_entry(1, Side.RIGHT, event_cpp))
if num_bars > 1:
event_dict["event"].extend(_event_bar_entry(2, Side.LEFT))
event_dict["event"].extend(_event_bar_entry(2, Side.RIGHT))
event_dict["event"].extend(_event_bar_entry(2, Side.LEFT, event_cpp))
event_dict["event"].extend(_event_bar_entry(2, Side.RIGHT, event_cpp))
if num_bars > 2:
event_dict["event"].extend(_event_bar_entry(3, Side.LEFT))
event_dict["event"].extend(_event_bar_entry(3, Side.RIGHT))
event_dict["event"].extend(_event_bar_entry(3, Side.LEFT, event_cpp))
event_dict["event"].extend(_event_bar_entry(3, Side.RIGHT, event_cpp))
if num_bars > 3:
event_dict["event"].extend(_event_bar_entry(4, Side.LEFT))
event_dict["event"].extend(_event_bar_entry(4, Side.RIGHT))
event_dict["event"].extend(_event_bar_entry(4, Side.LEFT, event_cpp))
event_dict["event"].extend(_event_bar_entry(4, Side.RIGHT, event_cpp))
return event_dict
def _event_display_entry(display_side: Side) -> List[Dict[str, Any]]:
def _event_display_entry(display_side: Side, on_event_cpp: str) -> List[Dict[str, Any]]:
return [
{
"platform": "template",
@@ -68,11 +76,16 @@ def _event_display_entry(display_side: Side) -> List[Dict[str, Any]]:
"name": f"DISPLAY Button {str(display_side).capitalize()}",
"device_class": "button",
"event_types": r"${button_events}",
"on_event": {
"then":[
{"lambda": on_event_cpp}
]
}
}
]
def _event_bar_entry(bar_nr: int, bar_side: Side) -> List[Dict[str, Any]]:
def _event_bar_entry(bar_nr: int, bar_side: Side, on_event_cpp: str) -> List[Dict[str, Any]]:
return [
{
"platform": "template",
@@ -80,6 +93,11 @@ def _event_bar_entry(bar_nr: int, bar_side: Side) -> List[Dict[str, Any]]:
"name": f"BAR {bar_nr} Button {str(bar_side).capitalize()}",
"device_class": "button",
"event_types": r"${button_events}",
"on_event": {
"then":[
{"lambda": on_event_cpp}
]
}
}
]
@@ -94,7 +112,21 @@ def _generate_event_names(
]
def event_confirm_script() -> Dict[str, Any]:
def event_confirm_script(click_confirm: bool) -> Dict[str, Any]:
if not click_confirm:
return {
"script": [
{
"id": "event_trigger_feedback",
"parameters": {
"event_id": "esphome::template_::TemplateEvent*",
"event_msg": "std::string",
},
"then": [{"lambda": "event_id->trigger(event_msg);"}],
}
]
}
generated_cpp = (
"event_id->trigger(event_msg);\n"
"\n"
@@ -179,8 +211,6 @@ def _bar_button_entry(
) -> List[Dict[str, Any]]:
multi_click_list = []
# TODO click_confirm implement
for ct in click_types:
multi_click_list.extend(
_timing_entry(
@@ -189,6 +219,7 @@ def _bar_button_entry(
event_type=ct,
timing=click_type_timing(ct),
color=click_type_color(ct),
confirm=click_confirm
)
)
@@ -209,8 +240,6 @@ def _display_button_entry(
) -> List[Dict[str, Any]]:
multi_click_list = []
# TODO click_confirm implement
led_id = display_id(IdSuffix.LED, display_side, Direction.FRONT)
if version == 1: # No leds
@@ -237,6 +266,7 @@ def _display_button_entry(
event_type=ct,
timing=click_type_timing(ct),
color=click_type_color(ct),
confirm=click_confirm
)
)
@@ -250,8 +280,28 @@ def _display_button_entry(
def _timing_entry(
event_id: str, led_id: str, event_type: str, timing: List[str], color: Color
event_id: str, led_id: YAMLLambda | str, event_type: str, timing: List[str], color: Color, confirm: bool
) -> List[Dict[str, Any]]:
if not confirm:
return [
{
"timing": timing,
"then": [
{
"script.execute": {
"id": "event_trigger_feedback",
"event_id": event_id,
"event_msg": YAMLLambda(
'return "'
+ event_type
+ ' " + id(active_page_name);'
),
}
}
],
}
]
return [
{
"timing": timing,