menu: refactor adding items to menu so they can be dynamically added/rmeoved.

This commit is contained in:
Jordan Ruthe 2020-12-04 14:03:14 -05:00
parent b37ba531f7
commit 25b89cb7e9
3 changed files with 68 additions and 36 deletions

View File

@ -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:
return self.data[stat][substat]
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):

View File

@ -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:

View File

@ -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