100 lines
3.0 KiB
Python
100 lines
3.0 KiB
Python
import gi
|
|
import logging
|
|
|
|
gi.require_version("Gtk", "3.0")
|
|
from gi.repository import Gtk, Gdk, GLib
|
|
|
|
from ks_includes.KlippyGtk import KlippyGtk
|
|
from ks_includes.screen_panel import ScreenPanel
|
|
|
|
from jinja2 import Template
|
|
|
|
logger = logging.getLogger("KlipperScreen.MenuPanel")
|
|
|
|
def create_panel(*args):
|
|
return MenuPanel(*args)
|
|
|
|
class MenuPanel(ScreenPanel):
|
|
def initialize(self, panel_name, display_name, items):
|
|
_ = self.lang.gettext
|
|
|
|
self.activate()
|
|
|
|
grid = self.arrangeMenuItems(items, 4)
|
|
grid.set_size_request(self._screen.width, self._screen.height-45)
|
|
|
|
self.content.add(grid)
|
|
self.panel = self.layout
|
|
|
|
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)
|
|
|
|
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)
|
|
|
|
l = len(items)
|
|
i = 0
|
|
for i in range(l):
|
|
col = i % columns
|
|
row = int(i/columns)
|
|
width = 1
|
|
|
|
if expandLast == True and i+1 == l and l%2 == 1:
|
|
width = 2
|
|
|
|
key = list(items[i])[0]
|
|
item = items[i][key]
|
|
b = KlippyGtk.ButtonImage(
|
|
item['icon'], item['name'], "color"+str((i%4)+1)
|
|
)
|
|
if item['panel'] != False:
|
|
b.connect("clicked", self.menu_item_clicked, item['panel'], item)
|
|
elif item['method'] != False:
|
|
params = item['params'] if item['params'] != False else {}
|
|
if item['confirm'] != False:
|
|
b.connect("clicked", self._screen._confirm_send_action, item['confirm'], item['method'], params)
|
|
else:
|
|
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
|
|
|
|
def evaluate_enable(self, enable):
|
|
if enable == True:
|
|
return True
|
|
if enable == False:
|
|
return False
|
|
|
|
try:
|
|
logger.debug("Template: '%s'" % enable)
|
|
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
|
|
except:
|
|
logger.debug("Error evaluating enable statement: %s", enable)
|
|
return False
|