mirror of
https://github.com/joBr99/nspanel-lovelace-ui.git
synced 2025-12-22 15:34:26 +01:00
implemented navigation within tree
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
Reference in New Issue
Block a user