From 758d7a71ec1c55d29d27e9531832783b74bf5a4c Mon Sep 17 00:00:00 2001 From: joBr99 <29555657+joBr99@users.noreply.github.com> Date: Sat, 26 Mar 2022 01:23:41 +0100 Subject: [PATCH] implemented navigation within tree --- apps/nspanel-lovelace-ui/luibackend/config.py | 21 +++++++++++++++++-- .../luibackend/controller.py | 8 +++++-- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/apps/nspanel-lovelace-ui/luibackend/config.py b/apps/nspanel-lovelace-ui/luibackend/config.py index ec487930..968a2c98 100644 --- a/apps/nspanel-lovelace-ui/luibackend/config.py +++ b/apps/nspanel-lovelace-ui/luibackend/config.py @@ -19,6 +19,9 @@ class PageNode(object): ptype = self.data.get("type", "unkown") if type(self.data) is dict else "leaf" self.name = f"{ptype}.{name}" if type(self.data) is dict else self.data + self.name = self.name.replace(".","_") + self.name = self.name.replace(",","_") + self.name = self.name.replace(" ","_") def add_child(self, obj): obj.pos = len(self.childs) @@ -39,6 +42,20 @@ class PageNode(object): else: return self + def search_page_by_name(self, name): + name = name.replace("navigate.", "") + pages = [] + for i in self.childs: + # compare name of current page + if i.name == name: + pages.append(i) + # current pages has also childs + if len(i.childs) > 0: + pages.extend(i.search_page_by_name(name)) + return pages + + return items + def dump(self, indent=0): """dump tree to string""" tab = ' '*(indent-1) + ' |- ' if indent > 0 else '' @@ -53,7 +70,7 @@ class PageNode(object): items = [] for i in self.childs: if len(i.childs) > 0: - items.append("navigate.todo") + items.append(f"navigate.{i.name}") else: items.append(i.data) return items @@ -70,7 +87,7 @@ class PageNode(object): else: items.append(i.data) return items - + class LuiBackendConfig(object): _DEFAULT_CONFIG = { diff --git a/apps/nspanel-lovelace-ui/luibackend/controller.py b/apps/nspanel-lovelace-ui/luibackend/controller.py index 836d97c9..cd4db39e 100644 --- a/apps/nspanel-lovelace-ui/luibackend/controller.py +++ b/apps/nspanel-lovelace-ui/luibackend/controller.py @@ -106,7 +106,7 @@ class LuiController(object): self._pages_gen.generate_light_detail_page(entity_id) def button_press(self, entity_id, button_type, value): - LOGGER.debug(f"Button Press Event; entity_id: {entity_id}; button_type: {button_type}; value: {value} ") + LOGGER.info(f"Button Press Event; entity_id: {entity_id}; button_type: {button_type}; value: {value} ") # internal buttons if entity_id == "screensaver" and button_type == "enter": self._pages_gen.render_page(self._current_page) @@ -142,7 +142,11 @@ class LuiController(object): self._ha_api.get_entity(entity_id).call_service("set_cover_position", position=pos) if button_type == "button": - if entity_id.startswith('scene'): + if entity_id.startswith('navigate'): + # internal for navigation to nested pages + topage = self._config.get_root_page().search_page_by_name(entity_id)[0] + self._pages_gen.render_page(topage) + elif entity_id.startswith('scene'): self._ha_api.get_entity(entity_id).call_service("turn_on") elif entity_id.startswith('light') or entity_id.startswith('switch') or entity_id.startswith('input_boolean'): self._ha_api.get_entity(entity_id).call_service("toggle")