mirror of
https://github.com/joBr99/nspanel-lovelace-ui.git
synced 2025-12-22 23:44:25 +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"
|
||||
|
||||
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 = {
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user