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: if data['device'] in self.power_devices:
self.power_devices[data['device']]['status'] = data['status'] 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=""): def get_config_section_list(self, search=""):
return [i for i in list(self.config) if i.startswith(search)] return [i for i in list(self.config) if i.startswith(search)]
@ -96,6 +99,24 @@ class Printer:
def get_data(self): def get_data(self):
return self.data 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): def get_klipper_version(self):
return self.klipper['version'] return self.klipper['version']
@ -108,8 +129,12 @@ class Printer:
return self.power_devices[device]['status'] return self.power_devices[device]['status']
def get_stat(self, stat, substat = None): def get_stat(self, stat, substat = None):
if stat not in self.data:
return None
if substat != 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] return self.data[stat]
def set_dev_temps(self, dev, temp, target=None): 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): def initialize(self, panel_name, items, extrudercount):
print("### Making MainMenu") print("### Making MainMenu")
self.layout = Gtk.Layout()
self.layout.set_size(self._screen.width, self._screen.height)
grid = KlippyGtk.HomogeneousGrid() grid = KlippyGtk.HomogeneousGrid()
grid.set_size_request(self._screen.width, self._screen.height)
# Create Extruders and bed icons # Create Extruders and bed icons
eq_grid = KlippyGtk.HomogeneousGrid() eq_grid = KlippyGtk.HomogeneousGrid()
@ -36,6 +40,14 @@ class MainPanel(MenuPanel):
eq_grid.attach(self.labels['heater_bed'], 0, i/2+1, width, 1) eq_grid.attach(self.labels['heater_bed'], 0, i/2+1, width, 1)
grid.attach(eq_grid, 0, 0, 1, 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) grid.attach(self.arrangeMenuItems(items, 2, True), 1, 0, 1, 1)
self.grid = grid self.grid = grid
@ -43,11 +55,12 @@ class MainPanel(MenuPanel):
"heater_bed": 0, "heater_bed": 0,
"extruder": 0 "extruder": 0
} }
self.layout.put(grid, 0, 0)
self._screen.add_subscription(panel_name) self._screen.add_subscription(panel_name)
def get(self): def activate(self):
return self.grid return
def update_temp(self, dev, temp, target): def update_temp(self, dev, temp, target):
if dev in self.labels: if dev in self.labels:

View File

@ -15,41 +15,34 @@ def create_panel(*args):
return MenuPanel(*args) return MenuPanel(*args)
class MenuPanel(ScreenPanel): class MenuPanel(ScreenPanel):
i = 0
def initialize(self, panel_name, display_name, items): def initialize(self, panel_name, display_name, items):
_ = self.lang.gettext _ = self.lang.gettext
self.activate() self.items = items
self.create_menu_items()
grid = self.arrangeMenuItems(items, 4) self.grid = Gtk.Grid()
grid.set_size_request(self._screen.width, self._screen.height-45) self.grid.set_row_homogeneous(True)
self.grid.set_column_homogeneous(True)
self.content.add(grid) self.content.add(self.grid)
self.panel = self.layout
def activate(self): def activate(self):
self.j2_data = { self.j2_data = self._printer.get_printer_status_data()
"printer": { self.arrangeMenuItems(self.items, 4)
"power_devices": {
"count": len(self._screen.printer.get_power_devices())
}
}
}
logger.debug("j2_data: %s" % self.j2_data)
def arrangeMenuItems (self, items, columns, expandLast=False): def arrangeMenuItems (self, items, columns, expandLast=False):
grid = Gtk.Grid() for child in self.grid.get_children():
grid.set_row_homogeneous(True) self.grid.remove(child)
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)
l = len(items) l = len(items)
i = 0 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 col = i % columns
row = int(i/columns) row = int(i/columns)
width = 1 width = 1
@ -57,8 +50,15 @@ class MenuPanel(ScreenPanel):
if expandLast == True and i+1 == l and l%2 == 1: if expandLast == True and i+1 == l and l%2 == 1:
width = 2 width = 2
key = list(items[i])[0] self.grid.attach(self.labels[key], col, row, width, 1)
item = items[i][key] 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( b = KlippyGtk.ButtonImage(
item['icon'], item['name'], "color"+str((i%4)+1) 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) b.connect("clicked", self._screen._send_action, item['method'], params)
else: else:
b.connect("clicked", self._screen._go_to_submenu, key) b.connect("clicked", self._screen._go_to_submenu, key)
self.labels[key] = b
grid.attach(b, col, row, width, 1)
i += 1
return grid
def evaluate_enable(self, enable): def evaluate_enable(self, enable):
if enable == True: if enable == True:
@ -90,7 +85,6 @@ class MenuPanel(ScreenPanel):
logger.debug("Date: %s" % self.j2_data) logger.debug("Date: %s" % self.j2_data)
j2_temp = Template(enable) j2_temp = Template(enable)
result = j2_temp.render(self.j2_data) result = j2_temp.render(self.j2_data)
logger.debug("Result: %s" % result)
if result == 'True': if result == 'True':
return True return True
return False return False