menu: refactor adding items to menu so they can be dynamically added/rmeoved.
This commit is contained in:
parent
b37ba531f7
commit
25b89cb7e9
@ -85,6 +85,9 @@ class Printer:
|
||||
if data['device'] in self.power_devices:
|
||||
self.power_devices[data['device']]['status'] = data['status']
|
||||
|
||||
def config_section_exists(self, section):
|
||||
return section in list(self.config)
|
||||
|
||||
def get_config_section_list(self, search=""):
|
||||
return [i for i in list(self.config) if i.startswith(search)]
|
||||
|
||||
@ -96,6 +99,24 @@ class Printer:
|
||||
def get_data(self):
|
||||
return self.data
|
||||
|
||||
def get_printer_status_data(self):
|
||||
data = {
|
||||
"printer": {
|
||||
"idle_timeout": self.get_stat("idle_timeout").copy(),
|
||||
"pause_resume": self.get_stat("pause_resume").copy(),
|
||||
"power_devices": {
|
||||
"count": len(self.get_power_devices())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sections = ["bed_mesh","bltouch","probe"]
|
||||
for section in sections:
|
||||
if self.config_section_exists(section):
|
||||
data["printer"][section] = self.get_config_section(section).copy()
|
||||
|
||||
return data
|
||||
|
||||
def get_klipper_version(self):
|
||||
return self.klipper['version']
|
||||
|
||||
@ -108,8 +129,12 @@ class Printer:
|
||||
return self.power_devices[device]['status']
|
||||
|
||||
def get_stat(self, stat, substat = None):
|
||||
if stat not in self.data:
|
||||
return None
|
||||
if substat != None:
|
||||
if substat in self.data[stat]:
|
||||
return self.data[stat][substat]
|
||||
return None
|
||||
return self.data[stat]
|
||||
|
||||
def set_dev_temps(self, dev, temp, target=None):
|
||||
|
@ -16,7 +16,11 @@ class MainPanel(MenuPanel):
|
||||
|
||||
def initialize(self, panel_name, items, extrudercount):
|
||||
print("### Making MainMenu")
|
||||
|
||||
self.layout = Gtk.Layout()
|
||||
self.layout.set_size(self._screen.width, self._screen.height)
|
||||
grid = KlippyGtk.HomogeneousGrid()
|
||||
grid.set_size_request(self._screen.width, self._screen.height)
|
||||
|
||||
# Create Extruders and bed icons
|
||||
eq_grid = KlippyGtk.HomogeneousGrid()
|
||||
@ -36,6 +40,14 @@ class MainPanel(MenuPanel):
|
||||
eq_grid.attach(self.labels['heater_bed'], 0, i/2+1, width, 1)
|
||||
|
||||
grid.attach(eq_grid, 0, 0, 1, 1)
|
||||
|
||||
self.items = items
|
||||
self.create_menu_items()
|
||||
|
||||
self.grid = Gtk.Grid()
|
||||
self.grid.set_row_homogeneous(True)
|
||||
self.grid.set_column_homogeneous(True)
|
||||
|
||||
grid.attach(self.arrangeMenuItems(items, 2, True), 1, 0, 1, 1)
|
||||
self.grid = grid
|
||||
|
||||
@ -43,11 +55,12 @@ class MainPanel(MenuPanel):
|
||||
"heater_bed": 0,
|
||||
"extruder": 0
|
||||
}
|
||||
self.layout.put(grid, 0, 0)
|
||||
|
||||
self._screen.add_subscription(panel_name)
|
||||
|
||||
def get(self):
|
||||
return self.grid
|
||||
def activate(self):
|
||||
return
|
||||
|
||||
def update_temp(self, dev, temp, target):
|
||||
if dev in self.labels:
|
||||
|
@ -15,41 +15,34 @@ def create_panel(*args):
|
||||
return MenuPanel(*args)
|
||||
|
||||
class MenuPanel(ScreenPanel):
|
||||
i = 0
|
||||
def initialize(self, panel_name, display_name, items):
|
||||
_ = self.lang.gettext
|
||||
|
||||
self.activate()
|
||||
self.items = items
|
||||
self.create_menu_items()
|
||||
|
||||
grid = self.arrangeMenuItems(items, 4)
|
||||
grid.set_size_request(self._screen.width, self._screen.height-45)
|
||||
|
||||
self.content.add(grid)
|
||||
self.panel = self.layout
|
||||
self.grid = Gtk.Grid()
|
||||
self.grid.set_row_homogeneous(True)
|
||||
self.grid.set_column_homogeneous(True)
|
||||
self.content.add(self.grid)
|
||||
|
||||
def activate(self):
|
||||
self.j2_data = {
|
||||
"printer": {
|
||||
"power_devices": {
|
||||
"count": len(self._screen.printer.get_power_devices())
|
||||
}
|
||||
}
|
||||
}
|
||||
logger.debug("j2_data: %s" % self.j2_data)
|
||||
self.j2_data = self._printer.get_printer_status_data()
|
||||
self.arrangeMenuItems(self.items, 4)
|
||||
|
||||
def arrangeMenuItems (self, items, columns, expandLast=False):
|
||||
grid = Gtk.Grid()
|
||||
grid.set_row_homogeneous(True)
|
||||
grid.set_column_homogeneous(True)
|
||||
logger.debug(items)
|
||||
for item in items:
|
||||
key = list(item)[0]
|
||||
logger.debug(item)
|
||||
if not self.evaluate_enable(item[key]['enable']):
|
||||
items.remove(item)
|
||||
for child in self.grid.get_children():
|
||||
self.grid.remove(child)
|
||||
|
||||
l = len(items)
|
||||
i = 0
|
||||
for i in range(l):
|
||||
for item in items:
|
||||
key = list(item)[0]
|
||||
logger.debug("Evaluating item: %s" % key)
|
||||
if not self.evaluate_enable(item[key]['enable']):
|
||||
continue
|
||||
|
||||
col = i % columns
|
||||
row = int(i/columns)
|
||||
width = 1
|
||||
@ -57,8 +50,15 @@ class MenuPanel(ScreenPanel):
|
||||
if expandLast == True and i+1 == l and l%2 == 1:
|
||||
width = 2
|
||||
|
||||
key = list(items[i])[0]
|
||||
item = items[i][key]
|
||||
self.grid.attach(self.labels[key], col, row, width, 1)
|
||||
i += 1
|
||||
|
||||
return self.grid
|
||||
|
||||
def create_menu_items(self):
|
||||
for i in range(len(self.items)):
|
||||
key = list(self.items[i])[0]
|
||||
item = self.items[i][key]
|
||||
b = KlippyGtk.ButtonImage(
|
||||
item['icon'], item['name'], "color"+str((i%4)+1)
|
||||
)
|
||||
@ -72,12 +72,7 @@ class MenuPanel(ScreenPanel):
|
||||
b.connect("clicked", self._screen._send_action, item['method'], params)
|
||||
else:
|
||||
b.connect("clicked", self._screen._go_to_submenu, key)
|
||||
|
||||
grid.attach(b, col, row, width, 1)
|
||||
|
||||
i += 1
|
||||
|
||||
return grid
|
||||
self.labels[key] = b
|
||||
|
||||
def evaluate_enable(self, enable):
|
||||
if enable == True:
|
||||
@ -90,7 +85,6 @@ class MenuPanel(ScreenPanel):
|
||||
logger.debug("Date: %s" % self.j2_data)
|
||||
j2_temp = Template(enable)
|
||||
result = j2_temp.render(self.j2_data)
|
||||
logger.debug("Result: %s" % result)
|
||||
if result == 'True':
|
||||
return True
|
||||
return False
|
||||
|
Loading…
x
Reference in New Issue
Block a user