From 1887124df417d0863379341595197ca5b6db352c Mon Sep 17 00:00:00 2001
From: schneider <schneider@blinkenlichts.net>
Date: Fri, 3 Apr 2020 20:05:24 +0200
Subject: [PATCH] feat(simple_menu): Add a method to detect a long (>1 second)
 press

---
 pycardium/modules/py/simple_menu.py | 28 ++++++++++++++++++++++++----
 1 file changed, 24 insertions(+), 4 deletions(-)

diff --git a/pycardium/modules/py/simple_menu.py b/pycardium/modules/py/simple_menu.py
index b4b27ef57..8ff0f62da 100644
--- a/pycardium/modules/py/simple_menu.py
+++ b/pycardium/modules/py/simple_menu.py
@@ -141,6 +141,18 @@ class Menu:
         """
         pass
 
+    def on_long_select(self, item, index):
+        """
+        Hook when an item as selected using a long press.
+
+        The given ``index`` was selected with a long SELECT button press.  Overwrite
+        this function in your menu to perform an action on select.
+
+        :param item: The item which was selected.
+        :param int index: Index into the ``entries`` list of the ``item``.
+        """
+        pass
+
     def on_select(self, item, index):
         """
         Hook when an item as selected.
@@ -238,9 +250,7 @@ class Menu:
             offset + 20,
             col=self.color_1 if index % 2 == 0 else self.color_2,
         )
-        self.disp.print(
-            string, posx=14, posy=offset, fg=self.color_text, bg=None,
-        )
+        self.disp.print(string, posx=14, posy=offset, fg=self.color_text, bg=None)
 
     def draw_menu(self, offset=0):
         """
@@ -318,8 +328,18 @@ class Menu:
                         print("Exception during menu.on_scroll():")
                         sys.print_exception(e)
                 elif ev == self.button_select:
+                    t0 = utime.time()
+                    long_press = False
+                    while buttons.read(buttons.TOP_RIGHT) > 0:
+                        if utime.time() - t0 > 1:
+                            long_press = True
+                            break
+
                     try:
-                        self.on_select(self.entries[self.idx], self.idx)
+                        if long_press:
+                            self.on_long_select(self.entries[self.idx], self.idx)
+                        else:
+                            self.on_select(self.entries[self.idx], self.idx)
                         self.select_time = utime.time_ms()
                     except _ExitMenuException:
                         raise
-- 
GitLab