macros add parameters
This commit is contained in:
parent
ab4d4af7f8
commit
e658f562be
@ -1,5 +1,5 @@
|
||||
import logging
|
||||
|
||||
import re
|
||||
import gi
|
||||
|
||||
gi.require_version("Gtk", "3.0")
|
||||
@ -16,16 +16,14 @@ class MacroPanel(ScreenPanel):
|
||||
def __init__(self, screen, title):
|
||||
super().__init__(screen, title)
|
||||
self.sort_reverse = False
|
||||
self.sort_lbl = _("Name")
|
||||
self.sort_btn = self._gtk.Button("arrow-up", self.sort_lbl, "color1", self.bts, Gtk.PositionType.RIGHT, 1)
|
||||
self.sort_btn = self._gtk.Button("arrow-up", _("Name"), "color1", self.bts, Gtk.PositionType.RIGHT, 1)
|
||||
self.sort_btn.connect("clicked", self.change_sort)
|
||||
self.sort_btn.set_hexpand(True)
|
||||
self.allmacros = {}
|
||||
self.loaded_macros = []
|
||||
self.options = {}
|
||||
self.macros = {}
|
||||
self.menu = ['macros_menu']
|
||||
|
||||
adjust = self._gtk.Button("settings", None, "color2", self.bts, Gtk.PositionType.LEFT, 1)
|
||||
adjust = self._gtk.Button("settings", " " + _("Settings"), "color2", self.bts, Gtk.PositionType.LEFT, 1)
|
||||
adjust.connect("clicked", self.load_menu, 'options', _("Settings"))
|
||||
adjust.set_hexpand(False)
|
||||
|
||||
@ -65,7 +63,7 @@ class MacroPanel(ScreenPanel):
|
||||
name.set_halign(Gtk.Align.START)
|
||||
name.set_valign(Gtk.Align.CENTER)
|
||||
name.set_line_wrap(True)
|
||||
name.set_line_wrap_mode(Pango.WrapMode.WORD_CHAR)
|
||||
name.set_line_wrap_mode(Pango.WrapMode.CHAR)
|
||||
|
||||
btn = self._gtk.Button("resume", style="color3")
|
||||
btn.connect("clicked", self.run_gcode_macro, macro)
|
||||
@ -75,24 +73,44 @@ class MacroPanel(ScreenPanel):
|
||||
labels = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
||||
labels.add(name)
|
||||
|
||||
dev = Gtk.Box(spacing=5)
|
||||
dev.get_style_context().add_class("frame-item")
|
||||
dev.add(labels)
|
||||
dev.add(btn)
|
||||
row = Gtk.Box(spacing=5)
|
||||
row.get_style_context().add_class("frame-item")
|
||||
row.add(labels)
|
||||
row.add(btn)
|
||||
|
||||
self.macros[macro] = {
|
||||
"row": dev
|
||||
"row": row,
|
||||
"params": {},
|
||||
}
|
||||
pattern = r'params\.(?P<param>..*)\|default\((?P<default>..*)\).*'
|
||||
gcode = self._printer.get_config_section(f"gcode_macro {macro}")["gcode"].split("\n")
|
||||
i = 0
|
||||
for line in gcode:
|
||||
if line.startswith("{") and "params." in line:
|
||||
result = re.search(pattern, line)
|
||||
if result:
|
||||
result = result.groupdict()
|
||||
default = result["default"] if "default" in result else ""
|
||||
entry = Gtk.Entry()
|
||||
entry.set_text(default)
|
||||
self.macros[macro]["params"].update({result["param"]: entry})
|
||||
|
||||
macros = sorted(self.macros, reverse=self.sort_reverse, key=str.casefold)
|
||||
pos = macros.index(macro)
|
||||
for param in self.macros[macro]["params"]:
|
||||
labels.add(Gtk.Label(param))
|
||||
self.macros[macro]["params"][param].connect("focus-in-event", self._show_keyboard)
|
||||
self.macros[macro]["params"][param].connect("focus-out-event", self._screen.remove_keyboard)
|
||||
labels.add(self.macros[macro]["params"][param])
|
||||
|
||||
self.loaded_macros.append(macro)
|
||||
self.labels['macros'].insert_row(pos)
|
||||
self.labels['macros'].attach(self.macros[macro]['row'], 0, pos, 1, 1)
|
||||
def _show_keyboard(self, widget=None, event=None):
|
||||
self._screen.show_keyboard(entry=widget)
|
||||
|
||||
def run_gcode_macro(self, widget, macro):
|
||||
self._screen._ws.klippy.gcode_script(macro)
|
||||
params = ""
|
||||
for param in self.macros[macro]["params"]:
|
||||
value = self.macros[macro]["params"][param].get_text()
|
||||
if value:
|
||||
params += f'{param}={value} '
|
||||
self._screen._ws.klippy.gcode_script(f"{macro} {params}")
|
||||
|
||||
def change_sort(self, widget):
|
||||
self.sort_reverse ^= True
|
||||
@ -107,40 +125,31 @@ class MacroPanel(ScreenPanel):
|
||||
def reload_macros(self):
|
||||
self.labels['macros'].remove_column(0)
|
||||
self.macros = {}
|
||||
self.loaded_macros = []
|
||||
self.allmacros = {}
|
||||
self.options = {}
|
||||
self.labels['options'].remove_column(0)
|
||||
self.load_gcode_macros()
|
||||
|
||||
def load_gcode_macros(self):
|
||||
macros = self._screen.printer.get_gcode_macros()
|
||||
section_name = f"displayed_macros {self._screen.connected_printer}"
|
||||
logging.info(f"Macro section name [{section_name}]")
|
||||
|
||||
for x in macros:
|
||||
macro = x[12:].strip()
|
||||
|
||||
if macro in self.loaded_macros:
|
||||
for macro in self._printer.get_gcode_macros():
|
||||
macro = macro[12:].strip()
|
||||
if macro.startswith("_"): # Support for hiding macros by name
|
||||
continue
|
||||
|
||||
if (section_name not in self._config.get_config().sections() or
|
||||
self._config.get_config().getboolean(section_name, macro.lower(), fallback=True)):
|
||||
self.add_gcode_macro(macro)
|
||||
|
||||
for macro in self._printer.get_config_section_list("gcode_macro "):
|
||||
macro = macro[12:]
|
||||
# Support for hiding macros by name
|
||||
if macro.startswith("_"):
|
||||
continue
|
||||
|
||||
self.allmacros[macro] = {
|
||||
self.options[macro] = {
|
||||
"name": macro,
|
||||
"section": f"displayed_macros {self._screen.connected_printer}",
|
||||
}
|
||||
for macro in list(self.allmacros):
|
||||
self.add_option('options', self.allmacros, macro, self.allmacros[macro])
|
||||
show = self._config.get_config().getboolean(self.options[macro]["section"], macro.lower(), fallback=True)
|
||||
if macro not in self.macros and show:
|
||||
self.add_gcode_macro(macro)
|
||||
|
||||
self.labels['macros'].show_all()
|
||||
for macro in list(self.options):
|
||||
self.add_option('options', self.options, macro, self.options[macro])
|
||||
macros = sorted(self.macros, reverse=self.sort_reverse, key=str.casefold)
|
||||
for macro in macros:
|
||||
pos = macros.index(macro)
|
||||
self.labels['macros'].insert_row(pos)
|
||||
self.labels['macros'].attach(self.macros[macro]['row'], 0, pos, 1, 1)
|
||||
self.labels['macros'].show_all()
|
||||
|
||||
def add_option(self, boxname, opt_array, opt_name, option):
|
||||
name = Gtk.Label()
|
||||
@ -176,7 +185,7 @@ class MacroPanel(ScreenPanel):
|
||||
"row": dev
|
||||
}
|
||||
|
||||
opts = sorted(self.allmacros, key=str.casefold)
|
||||
opts = sorted(self.options, key=str.casefold)
|
||||
pos = opts.index(opt_name)
|
||||
|
||||
self.labels[boxname].insert_row(pos)
|
||||
|
Loading…
x
Reference in New Issue
Block a user