implemented navigation within tree

This commit is contained in:
joBr99
2022-03-26 01:23:41 +01:00
parent 00adcebcf2
commit 758d7a71ec
2 changed files with 25 additions and 4 deletions

View File

@@ -19,6 +19,9 @@ class PageNode(object):
ptype = self.data.get("type", "unkown") if type(self.data) is dict else "leaf" 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 = 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): def add_child(self, obj):
obj.pos = len(self.childs) obj.pos = len(self.childs)
@@ -39,6 +42,20 @@ class PageNode(object):
else: else:
return self 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): def dump(self, indent=0):
"""dump tree to string""" """dump tree to string"""
tab = ' '*(indent-1) + ' |- ' if indent > 0 else '' tab = ' '*(indent-1) + ' |- ' if indent > 0 else ''
@@ -53,7 +70,7 @@ class PageNode(object):
items = [] items = []
for i in self.childs: for i in self.childs:
if len(i.childs) > 0: if len(i.childs) > 0:
items.append("navigate.todo") items.append(f"navigate.{i.name}")
else: else:
items.append(i.data) items.append(i.data)
return items return items
@@ -70,7 +87,7 @@ class PageNode(object):
else: else:
items.append(i.data) items.append(i.data)
return items return items
class LuiBackendConfig(object): class LuiBackendConfig(object):
_DEFAULT_CONFIG = { _DEFAULT_CONFIG = {

View File

@@ -106,7 +106,7 @@ class LuiController(object):
self._pages_gen.generate_light_detail_page(entity_id) self._pages_gen.generate_light_detail_page(entity_id)
def button_press(self, entity_id, button_type, value): 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 # internal buttons
if entity_id == "screensaver" and button_type == "enter": if entity_id == "screensaver" and button_type == "enter":
self._pages_gen.render_page(self._current_page) 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) self._ha_api.get_entity(entity_id).call_service("set_cover_position", position=pos)
if button_type == "button": 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") 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'): 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") self._ha_api.get_entity(entity_id).call_service("toggle")