[display_menu_base] Use the apply helpers for the eight display_menu actions and is_active (#19626)

This commit is contained in:
J. Nick Koston
2026-09-25 12:32:46 -04:00
committed by GitHub
parent 73548b0f15
commit c598d2dee5
4 changed files with 43 additions and 171 deletions
@@ -55,18 +55,6 @@ MenuItemSwitch = display_menu_base_ns.class_("MenuItemSwitch")
MenuItemCommand = display_menu_base_ns.class_("MenuItemCommand")
MenuItemCustom = display_menu_base_ns.class_("MenuItemCustom")
UpAction = display_menu_base_ns.class_("UpAction", automation.Action)
DownAction = display_menu_base_ns.class_("DownAction", automation.Action)
LeftAction = display_menu_base_ns.class_("LeftAction", automation.Action)
RightAction = display_menu_base_ns.class_("RightAction", automation.Action)
EnterAction = display_menu_base_ns.class_("EnterAction", automation.Action)
ShowAction = display_menu_base_ns.class_("ShowAction", automation.Action)
HideAction = display_menu_base_ns.class_("HideAction", automation.Action)
ShowMainAction = display_menu_base_ns.class_("ShowMainAction", automation.Action)
IsActiveCondition = display_menu_base_ns.class_(
"IsActiveCondition", automation.Condition
)
MenuItemType = display_menu_base_ns.enum("MenuItemType")
@@ -294,78 +282,22 @@ MENU_ACTION_SCHEMA = maybe_simple_id(
)
automation.register_simple_action(
"display_menu.up",
UpAction,
MENU_ACTION_SCHEMA,
synchronous=True,
)
for _name, _call in (
("display_menu.up", "up()"),
("display_menu.down", "down()"),
("display_menu.left", "left()"),
("display_menu.right", "right()"),
("display_menu.enter", "enter()"),
("display_menu.show", "show()"),
("display_menu.hide", "hide()"),
("display_menu.show_main", "show_main()"),
):
automation.register_apply_action(
_name, MENU_ACTION_SCHEMA, automation.ApplyCall(_call)
)
automation.register_simple_action(
"display_menu.down",
DownAction,
MENU_ACTION_SCHEMA,
synchronous=True,
)
automation.register_simple_action(
"display_menu.left",
LeftAction,
MENU_ACTION_SCHEMA,
synchronous=True,
)
automation.register_simple_action(
"display_menu.right",
RightAction,
MENU_ACTION_SCHEMA,
synchronous=True,
)
automation.register_simple_action(
"display_menu.enter",
EnterAction,
MENU_ACTION_SCHEMA,
synchronous=True,
)
automation.register_simple_action(
"display_menu.show",
ShowAction,
MENU_ACTION_SCHEMA,
synchronous=True,
)
automation.register_simple_action(
"display_menu.hide",
HideAction,
MENU_ACTION_SCHEMA,
synchronous=True,
)
automation.register_simple_action(
"display_menu.show_main",
ShowMainAction,
MENU_ACTION_SCHEMA,
synchronous=True,
)
automation.register_simple_condition(
"display_menu.is_active",
IsActiveCondition,
automation.maybe_simple_id(
{
cv.GenerateID(CONF_ID): cv.use_id(DisplayMenuComponent),
}
),
automation.register_apply_condition(
"display_menu.is_active", MENU_ACTION_SCHEMA, "is_active()"
)
@@ -5,94 +5,6 @@
namespace esphome::display_menu_base {
template<typename... Ts> class UpAction final : public Action<Ts...> {
public:
explicit UpAction(DisplayMenuComponent *menu) : menu_(menu) {}
void play(const Ts &...x) override { this->menu_->up(); }
protected:
DisplayMenuComponent *menu_;
};
template<typename... Ts> class DownAction final : public Action<Ts...> {
public:
explicit DownAction(DisplayMenuComponent *menu) : menu_(menu) {}
void play(const Ts &...x) override { this->menu_->down(); }
protected:
DisplayMenuComponent *menu_;
};
template<typename... Ts> class LeftAction final : public Action<Ts...> {
public:
explicit LeftAction(DisplayMenuComponent *menu) : menu_(menu) {}
void play(const Ts &...x) override { this->menu_->left(); }
protected:
DisplayMenuComponent *menu_;
};
template<typename... Ts> class RightAction final : public Action<Ts...> {
public:
explicit RightAction(DisplayMenuComponent *menu) : menu_(menu) {}
void play(const Ts &...x) override { this->menu_->right(); }
protected:
DisplayMenuComponent *menu_;
};
template<typename... Ts> class EnterAction final : public Action<Ts...> {
public:
explicit EnterAction(DisplayMenuComponent *menu) : menu_(menu) {}
void play(const Ts &...x) override { this->menu_->enter(); }
protected:
DisplayMenuComponent *menu_;
};
template<typename... Ts> class ShowAction final : public Action<Ts...> {
public:
explicit ShowAction(DisplayMenuComponent *menu) : menu_(menu) {}
void play(const Ts &...x) override { this->menu_->show(); }
protected:
DisplayMenuComponent *menu_;
};
template<typename... Ts> class HideAction final : public Action<Ts...> {
public:
explicit HideAction(DisplayMenuComponent *menu) : menu_(menu) {}
void play(const Ts &...x) override { this->menu_->hide(); }
protected:
DisplayMenuComponent *menu_;
};
template<typename... Ts> class ShowMainAction final : public Action<Ts...> {
public:
explicit ShowMainAction(DisplayMenuComponent *menu) : menu_(menu) {}
void play(const Ts &...x) override { this->menu_->show_main(); }
protected:
DisplayMenuComponent *menu_;
};
template<typename... Ts> class IsActiveCondition final : public Condition<Ts...> {
public:
explicit IsActiveCondition(DisplayMenuComponent *menu) : menu_(menu) {}
bool check(const Ts &...x) override { return this->menu_->is_active(); }
protected:
DisplayMenuComponent *menu_;
};
class DisplayMenuOnEnterTrigger final : public Trigger<const MenuItem *> {
public:
explicit DisplayMenuOnEnterTrigger(MenuItem *parent) : parent_(parent) {
@@ -0,0 +1,17 @@
button:
- platform: template
name: Menu Actions
on_press:
- display_menu.show: test_lcd_menu
- display_menu.up: test_lcd_menu
- display_menu.down: test_lcd_menu
- display_menu.left: test_lcd_menu
- display_menu.right: test_lcd_menu
- display_menu.enter: test_lcd_menu
- if:
condition:
display_menu.is_active: test_lcd_menu
then:
- display_menu.hide: test_lcd_menu
else:
- display_menu.show_main: test_lcd_menu
@@ -0,0 +1,11 @@
substitutions:
d0_pin: GPIO0
d1_pin: GPIO2
d2_pin: GPIO14
d3_pin: GPIO15
enable_pin: GPIO16
rs_pin: GPIO5
packages:
lcd_menu: !include common.yaml
actions: !include common-actions.yaml