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:
|
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):
|
||||||
|
@ -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:
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user