base_panel improvements

* generalize macro shortcut to allow changing it in the future
* action_bar functionality is now handled in one place for better maintainability
This commit is contained in:
alfrix 2023-08-08 15:06:10 -03:00 committed by Alfredo Monclus
parent aa25a96f2b
commit bd98e758ec
7 changed files with 40 additions and 85 deletions

View File

@ -259,7 +259,7 @@ class KlipperScreenConfig:
{"24htime": {"section": "main", "name": _("24 Hour Time"), "type": "binary", "value": "True"}},
{"side_macro_shortcut": {
"section": "main", "name": _("Macro shortcut on sidebar"), "type": "binary",
"value": "True", "callback": screen.toggle_macro_shortcut}},
"value": "True", "callback": screen.toggle_shortcut}},
{"font_size": {
"section": "main", "name": _("Font Size"), "type": "dropdown",
"value": "medium", "callback": screen.restart_ks, "options": [

View File

@ -21,10 +21,6 @@ class BasePanel(ScreenPanel):
self.time_update = None
self.titlebar_items = []
self.titlebar_name_type = None
self.buttons_showing = {
'macros_shortcut': False,
'printer_select': len(self._config.get_printers()) > 1,
}
self.current_extruder = None
# Action bar buttons
abscale = self.bts * 1.1
@ -32,19 +28,22 @@ class BasePanel(ScreenPanel):
self.control['back'].connect("clicked", self.back)
self.control['home'] = self._gtk.Button('main', scale=abscale)
self.control['home'].connect("clicked", self._screen._menu_go_back, True)
if len(self._config.get_printers()) > 1:
self.control['printer_select'] = self._gtk.Button('shuffle', scale=abscale)
self.control['printer_select'].connect("clicked", self._screen.show_printer_select)
self.control['macros_shortcut'] = self._gtk.Button('custom-script', scale=abscale)
self.control['macros_shortcut'].connect("clicked", self.menu_item_clicked, {
"name": "Macros",
"panel": "gcode_macros"
})
self.control['estop'] = self._gtk.Button('emergency', scale=abscale)
self.control['estop'].connect("clicked", self.emergency_stop)
for control in self.control:
self.set_control_sensitive(False, control)
self.control['printer_select'] = self._gtk.Button('shuffle', scale=abscale)
self.control['printer_select'].connect("clicked", self._screen.show_printer_select)
self.control['printer_select'].set_no_show_all(True)
self.shorcut = {
"name": "Macros",
"panel": "gcode_macros",
"icon": "custom-script",
}
self.control['shortcut'] = self._gtk.Button(self.shorcut['icon'], scale=abscale)
self.control['shortcut'].connect("clicked", self.menu_item_clicked, self.shorcut)
self.control['shortcut'].set_no_show_all(True)
# Any action bar button should close the keyboard
for item in self.control:
@ -62,13 +61,10 @@ class BasePanel(ScreenPanel):
self.action_bar.set_size_request(self._gtk.action_bar_width, self._gtk.action_bar_height)
self.action_bar.add(self.control['back'])
self.action_bar.add(self.control['home'])
self.show_back(False)
self.show_home(False)
if self.buttons_showing['printer_select']:
self.action_bar.add(self.control['printer_select'])
self.show_macro_shortcut(self._config.get_main_config().getboolean('side_macro_shortcut', True))
self.action_bar.add(self.control['printer_select'])
self.action_bar.add(self.control['shortcut'])
self.action_bar.add(self.control['estop'])
self.show_estop(False)
self.show_printer_select(len(self._config.get_printers()) > 1)
# Titlebar
@ -113,11 +109,12 @@ class BasePanel(ScreenPanel):
try:
for child in self.control['temp_box'].get_children():
self.control['temp_box'].remove(child)
if not show or self._printer.get_temp_store_devices() is None:
devices = (self._printer.get_tools() + self._printer.get_heaters())
if not show or not devices:
return
img_size = self._gtk.img_scale * self.bts
for device in self._printer.get_temp_store_devices():
for device in devices:
self.labels[device] = Gtk.Label()
self.labels[device].set_ellipsize(Pango.EllipsizeMode.START)
@ -142,7 +139,7 @@ class BasePanel(ScreenPanel):
n += 1
# Options in the config have priority
for device in self._printer.get_temp_store_devices():
for device in devices:
# Users can fill the bar if they want
if n >= nlimit + 1:
break
@ -154,7 +151,7 @@ class BasePanel(ScreenPanel):
break
# If there is enough space fill with heater_generic
for device in self._printer.get_temp_store_devices():
for device in self._printer.get_heaters():
if n >= nlimit:
break
if device.startswith("heater_generic"):
@ -189,6 +186,12 @@ class BasePanel(ScreenPanel):
self.time_update = GLib.timeout_add_seconds(1, self.update_time)
def add_content(self, panel):
show = self._printer.state not in ('disconnected', 'startup', 'shutdown', 'error')
self.show_shortcut(show and self._config.get_main_config().getboolean('side_macro_shortcut', True))
self.show_heaters(show)
self.set_control_sensitive(show, control='estop')
for control in ('back', 'home'):
self.set_control_sensitive(len(self._screen._cur_panels) > 1, control=control)
self.current_panel = panel
self.set_title(panel.title)
self.content.add(panel.content)
@ -196,9 +199,7 @@ class BasePanel(ScreenPanel):
def back(self, widget=None):
if self.current_panel is None:
return
self._screen.remove_keyboard()
if hasattr(self.current_panel, "back") \
and not self.current_panel.back() \
or not hasattr(self.current_panel, "back"):
@ -227,7 +228,7 @@ class BasePanel(ScreenPanel):
if action != "notify_status_update" or self._screen.printer is None:
return
devices = self._printer.get_temp_store_devices()
devices = (self._printer.get_tools() + self._printer.get_heaters())
if devices is not None:
for device in devices:
temp = self._printer.get_dev_stat(device, "temperature")
@ -255,37 +256,15 @@ class BasePanel(ScreenPanel):
def remove(self, widget):
self.content.remove(widget)
def show_back(self, show=True):
self.control['back'].set_sensitive(show)
def set_control_sensitive(self, value=True, control='shortcut'):
self.control[control].set_sensitive(value)
def show_home(self, show=True):
self.control['home'].set_sensitive(show)
def show_macro_shortcut(self, show=True):
if show is True and self.buttons_showing['macros_shortcut'] is False:
self.action_bar.add(self.control['macros_shortcut'])
if self.buttons_showing['printer_select'] is False:
self.action_bar.reorder_child(self.control['macros_shortcut'], 2)
else:
self.action_bar.reorder_child(self.control['macros_shortcut'], 3)
self.control['macros_shortcut'].show()
self.buttons_showing['macros_shortcut'] = True
elif show is False and self.buttons_showing['macros_shortcut'] is True:
self.action_bar.remove(self.control['macros_shortcut'])
self.buttons_showing['macros_shortcut'] = False
def toggle_macro_shorcut_sensitive(self, value=True):
self.control['macros_shortcut'].set_sensitive(value)
def show_shortcut(self, show=True):
self.control['shortcut'].set_visible(show)
self.set_control_sensitive(self._screen._cur_panels[-1] != self.shorcut['panel'])
def show_printer_select(self, show=True):
if show and self.buttons_showing['printer_select'] is False:
self.action_bar.add(self.control['printer_select'])
self.action_bar.reorder_child(self.control['printer_select'], 2)
self.buttons_showing['printer_select'] = True
self.control['printer_select'].show()
elif show is False and self.buttons_showing['printer_select']:
self.action_bar.remove(self.control['printer_select'])
self.buttons_showing['printer_select'] = False
self.control['printer_select'].set_visible(show)
def set_title(self, title):
if not title:
@ -313,12 +292,6 @@ class BasePanel(ScreenPanel):
self.time_format = confopt
return True
def show_estop(self, show=True):
if show:
self.control['estop'].set_sensitive(True)
return
self.control['estop'].set_sensitive(False)
def set_ks_printer_cfg(self, printer):
ScreenPanel.ks_printer_cfg = self._config.get_printer_config(printer)
if self.ks_printer_cfg is not None:

View File

@ -47,10 +47,6 @@ class Panel(ScreenPanel):
while len(self.menu) > 1:
self.unload_menu()
self.reload_macros()
self._screen.base_panel.toggle_macro_shorcut_sensitive(False)
def deactivate(self):
self._screen.base_panel.toggle_macro_shorcut_sensitive(True)
def add_gcode_macro(self, macro):
# Support for hiding macros by name

View File

@ -349,7 +349,6 @@ class Panel(ScreenPanel):
def activate(self):
if self.flow_timeout is None:
self.flow_timeout = GLib.timeout_add_seconds(2, self.update_flow)
self._screen.base_panel_show_all()
def deactivate(self):
if self.flow_timeout is not None:

View File

@ -82,7 +82,6 @@ class Panel(MenuPanel):
def activate(self):
self.update_graph_visibility()
self._screen.base_panel_show_all()
def deactivate(self):
if self.graph_update is not None:
@ -265,7 +264,7 @@ class Panel(MenuPanel):
self.main_menu.attach(self.labels['menu'], 1, 0, 1, 1)
self.main_menu.show_all()
self.numpad_visible = False
self._screen.base_panel.show_back(False)
self._screen.base_panel.set_control_sensitive(False, control='back')
def process_update(self, action, data):
if action != "notify_status_update":
@ -301,7 +300,7 @@ class Panel(MenuPanel):
self.main_menu.attach(self.labels["keypad"], 1, 0, 1, 1)
self.main_menu.show_all()
self.numpad_visible = True
self._screen.base_panel.show_back(True)
self._screen.base_panel.set_control_sensitive(True, control='back')
def update_graph(self):
self.labels['da'].queue_draw()

View File

@ -91,9 +91,6 @@ class Panel(ScreenPanel):
def activate(self):
self.check_power_status()
self._screen.base_panel.show_macro_shortcut(False)
self._screen.base_panel.show_heaters(False)
self._screen.base_panel.show_estop(False)
def check_power_status(self):
if 'power' in self.labels:

View File

@ -299,8 +299,6 @@ class KlipperScreen(Gtk.Window):
def attach_panel(self, panel):
self.base_panel.add_content(self.panels[panel])
logging.debug(f"Current panel hierarchy: {' > '.join(self._cur_panels)}")
self.base_panel.show_back(len(self._cur_panels) > 1)
self.base_panel.show_home(len(self._cur_panels) > 1)
if hasattr(self.panels[panel], "process_update"):
self.process_update("notify_status_update", self.printer.data)
self.process_update("notify_busy", self.printer.busy)
@ -656,7 +654,6 @@ class KlipperScreen(Gtk.Window):
def state_printing(self):
self.close_screensaver()
self.base_panel_show_all()
for dialog in self.dialogs:
self.gtk.remove_dialog(dialog)
self.show_panel("job_status", _("Printing"), remove_all=True)
@ -670,7 +667,6 @@ class KlipperScreen(Gtk.Window):
self.printer.state = "not ready"
return
self.show_panel("main_menu", None, remove_all=True, items=self._config.get_menu_items("__main"))
self.base_panel_show_all()
def state_startup(self):
self.printer_initializing(_("Klipper is attempting to start"))
@ -681,8 +677,8 @@ class KlipperScreen(Gtk.Window):
msg = msg if "ready" not in msg else ""
self.printer_initializing(_("Klipper has shutdown") + "\n\n" + msg, remove=True)
def toggle_macro_shortcut(self, value):
self.base_panel.show_macro_shortcut(value)
def toggle_shortcut(self, value):
self.base_panel.show_shortcut(value)
def change_language(self, widget, lang):
self._config.install_language(lang)
@ -915,11 +911,6 @@ class KlipperScreen(Gtk.Window):
except KeyError:
logging.error("Couldn't get the temperature store size")
def base_panel_show_all(self):
self.base_panel.show_macro_shortcut(self._config.get_main_config().getboolean('side_macro_shortcut', True))
self.base_panel.show_heaters(True)
self.base_panel.show_estop(True)
def show_keyboard(self, entry=None, event=None):
if self.keyboard is not None:
return