From c598d2dee58378c198639feb510030f5074a515e Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Fri, 25 Sep 2026 17:32:46 +0100 Subject: [PATCH] [display_menu_base] Use the apply helpers for the eight display_menu actions and is_active (#19626) --- .../components/display_menu_base/__init__.py | 98 +++---------------- .../components/display_menu_base/automation.h | 88 ----------------- tests/components/lcd_menu/common-actions.yaml | 17 ++++ .../lcd_menu/test-actions.esp8266-ard.yaml | 11 +++ 4 files changed, 43 insertions(+), 171 deletions(-) create mode 100644 tests/components/lcd_menu/common-actions.yaml create mode 100644 tests/components/lcd_menu/test-actions.esp8266-ard.yaml diff --git a/esphome/components/display_menu_base/__init__.py b/esphome/components/display_menu_base/__init__.py index a5204cfe2f..bb493ae8d3 100644 --- a/esphome/components/display_menu_base/__init__.py +++ b/esphome/components/display_menu_base/__init__.py @@ -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()" ) diff --git a/esphome/components/display_menu_base/automation.h b/esphome/components/display_menu_base/automation.h index be0044ffa4..477a971d47 100644 --- a/esphome/components/display_menu_base/automation.h +++ b/esphome/components/display_menu_base/automation.h @@ -5,94 +5,6 @@ namespace esphome::display_menu_base { -template class UpAction final : public Action { - public: - explicit UpAction(DisplayMenuComponent *menu) : menu_(menu) {} - - void play(const Ts &...x) override { this->menu_->up(); } - - protected: - DisplayMenuComponent *menu_; -}; - -template class DownAction final : public Action { - public: - explicit DownAction(DisplayMenuComponent *menu) : menu_(menu) {} - - void play(const Ts &...x) override { this->menu_->down(); } - - protected: - DisplayMenuComponent *menu_; -}; - -template class LeftAction final : public Action { - public: - explicit LeftAction(DisplayMenuComponent *menu) : menu_(menu) {} - - void play(const Ts &...x) override { this->menu_->left(); } - - protected: - DisplayMenuComponent *menu_; -}; - -template class RightAction final : public Action { - public: - explicit RightAction(DisplayMenuComponent *menu) : menu_(menu) {} - - void play(const Ts &...x) override { this->menu_->right(); } - - protected: - DisplayMenuComponent *menu_; -}; - -template class EnterAction final : public Action { - public: - explicit EnterAction(DisplayMenuComponent *menu) : menu_(menu) {} - - void play(const Ts &...x) override { this->menu_->enter(); } - - protected: - DisplayMenuComponent *menu_; -}; - -template class ShowAction final : public Action { - public: - explicit ShowAction(DisplayMenuComponent *menu) : menu_(menu) {} - - void play(const Ts &...x) override { this->menu_->show(); } - - protected: - DisplayMenuComponent *menu_; -}; - -template class HideAction final : public Action { - public: - explicit HideAction(DisplayMenuComponent *menu) : menu_(menu) {} - - void play(const Ts &...x) override { this->menu_->hide(); } - - protected: - DisplayMenuComponent *menu_; -}; - -template class ShowMainAction final : public Action { - public: - explicit ShowMainAction(DisplayMenuComponent *menu) : menu_(menu) {} - - void play(const Ts &...x) override { this->menu_->show_main(); } - - protected: - DisplayMenuComponent *menu_; -}; -template class IsActiveCondition final : public Condition { - 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 { public: explicit DisplayMenuOnEnterTrigger(MenuItem *parent) : parent_(parent) { diff --git a/tests/components/lcd_menu/common-actions.yaml b/tests/components/lcd_menu/common-actions.yaml new file mode 100644 index 0000000000..9c697a7a36 --- /dev/null +++ b/tests/components/lcd_menu/common-actions.yaml @@ -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 diff --git a/tests/components/lcd_menu/test-actions.esp8266-ard.yaml b/tests/components/lcd_menu/test-actions.esp8266-ard.yaml new file mode 100644 index 0000000000..49b48563c3 --- /dev/null +++ b/tests/components/lcd_menu/test-actions.esp8266-ard.yaml @@ -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