107 lines
4.1 KiB
Python
107 lines
4.1 KiB
Python
from device_conf import class_comm_device_config
|
|
|
|
class class_menu_layer_info() :
|
|
def __init__(self,
|
|
menu_acitve : dict = None,
|
|
config: class_comm_device_config = None) :
|
|
|
|
self.menu_display_start = 0
|
|
self.menu_select = 0
|
|
self.menu_active = menu_acitve
|
|
self.config = config
|
|
|
|
if menu_acitve == None:
|
|
self.menu_item_count = 0
|
|
else :
|
|
self.menu_item_count = len(menu_acitve)
|
|
|
|
class class_device_menu() :
|
|
def __init__(self,
|
|
device_remap = 0,
|
|
device_config : class_comm_device_config = None):
|
|
|
|
self.config = device_config
|
|
self.menu_table = None if device_config == None else device_config.get_menu_top()
|
|
self.alias_table = None if device_config == None else device_config.get_alias_table()
|
|
self.mqtt_table = None if device_config == None else device_config.get_mqtt_table()
|
|
if device_config == None :
|
|
self.comm_table = None
|
|
self.func_comm_table_trigger_item = None
|
|
else :
|
|
self.comm_table, self.func_comm_table_trigger_item = device_config.get_comm_table()
|
|
|
|
self.device_remap = device_remap
|
|
self.menu_layers : dict = []
|
|
self.menu_layer_index = 0
|
|
menu_layer_item = class_menu_layer_info(self.menu_table, self.config)
|
|
self.menu_layers.append(menu_layer_item)
|
|
|
|
#更新菜单配置信息, 当设备发送变化时,菜单也会同步发生变化
|
|
def menu_update_device_config(self, device_config : class_comm_device_config) :
|
|
self.config = device_config
|
|
if device_config == None :
|
|
self.menu_table = None
|
|
self.alias_table = None
|
|
self.mqtt_table = None
|
|
self.comm_table = None
|
|
self.func_comm_table_trigger_item = None
|
|
else :
|
|
self.menu_table = device_config.get_menu_top()
|
|
self.alias_table = device_config.get_alias_table()
|
|
self.mqtt_table = device_config.get_mqtt_table()
|
|
self.comm_table, self.func_comm_table_trigger_item = device_config.get_comm_table()
|
|
|
|
#修改菜单remap地址
|
|
def menu_update_device_remap_addr(self, device_remap) :
|
|
self.device_remap = device_remap
|
|
|
|
|
|
#获取菜单层级信息
|
|
def menu_get_layer_info(self) :
|
|
return self.menu_layers[self.menu_layer_index]
|
|
|
|
#获取当前的活动菜单
|
|
def menu_get_active_menu(self) :
|
|
active_layer : class_menu_layer_info = self.menu_get_layer_info()
|
|
menu_active = active_layer.menu_active
|
|
return menu_active
|
|
|
|
#获取选中的有效菜单相
|
|
def menu_get_active_item(self) :
|
|
active_layer : class_menu_layer_info = self.menu_get_layer_info()
|
|
menu_active = active_layer.menu_active
|
|
menu_item = None
|
|
if menu_active != None :
|
|
if active_layer.menu_select < len(menu_active) :
|
|
menu_item = menu_active[active_layer.menu_select]
|
|
return menu_item
|
|
|
|
#返回上一层菜单
|
|
def menu_return_to_upper_layer(self) :
|
|
if self.menu_layer_index > 0 :
|
|
self.menu_layer_index -= 1
|
|
self.menu_layers.pop(-1)
|
|
|
|
active_layer : class_menu_layer_info = self.menu_get_layer_info()
|
|
if active_layer.config != self.config :
|
|
self.menu_update_device_config(active_layer.config)
|
|
return active_layer
|
|
|
|
#返回最上一层菜单
|
|
def menu_return_to_most_upper_layer(self) :
|
|
while self.menu_layer_index > 0 :
|
|
self.menu_layer_index -= 1
|
|
self.menu_layers.pop(-1)
|
|
|
|
active_layer : class_menu_layer_info = self.menu_get_layer_info()
|
|
if active_layer.config != self.config :
|
|
self.menu_update_device_config(active_layer.config)
|
|
return self.menu_get_layer_info()
|
|
|
|
#进入下一层菜单
|
|
def menu_enter_sub_menu(self, sub_menu) :
|
|
self.menu_layer_index += 1
|
|
menu_layers = class_menu_layer_info(sub_menu, self.config)
|
|
self.menu_layers.append(menu_layers)
|
|
return self.menu_get_layer_info()
|