diff --git a/ks_includes/KlippyGtk.py b/ks_includes/KlippyGtk.py index 4dac1cd3..b8a92a2e 100644 --- a/ks_includes/KlippyGtk.py +++ b/ks_includes/KlippyGtk.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- -import contextlib import gi import logging import os @@ -164,9 +163,7 @@ class KlippyGtk: b.connect("clicked", self.screen.reset_screensaver_timeout) return b - def ButtonImage(self, image_name=None, label=None, style=None, scale=1.38, - position=Gtk.PositionType.TOP, word_wrap=True): - + def ButtonImage(self, image_name=None, label=None, style=None, scale=1.38, position=Gtk.PositionType.TOP, lines=2): b = Gtk.Button(label=label) b.set_hexpand(True) b.set_vexpand(True) @@ -176,12 +173,17 @@ class KlippyGtk: b.set_image_position(position) b.set_always_show_image(True) - if word_wrap is True: - with contextlib.suppress(Exception): - # Get the label object - child = b.get_children()[0].get_children()[0].get_children()[1] - child.set_line_wrap_mode(Pango.WrapMode.WORD_CHAR) - child.set_line_wrap(True) + try: + # Get the label object + child = b.get_children()[0].get_children()[0].get_children()[1] + child.set_line_wrap_mode(Pango.WrapMode.WORD_CHAR) + child.set_line_wrap(True) + child.set_ellipsize(True) + child.set_ellipsize(Pango.EllipsizeMode.END) + child.set_lines(lines) + except Exception as e: + logging.debug(f"Unable to wrap and ellipsize label: {e}") + if style is not None: b.get_style_context().add_class(style) b.connect("clicked", self.screen.reset_screensaver_timeout) diff --git a/ks_includes/widgets/keypad.py b/ks_includes/widgets/keypad.py index 886236d1..edadd9ba 100644 --- a/ks_includes/widgets/keypad.py +++ b/ks_includes/widgets/keypad.py @@ -35,9 +35,9 @@ class Keypad(Gtk.Box): for i in range(len(keys)): k_id = f'button_{str(keys[i][0])}' if keys[i][0] == "B": - self.labels[k_id] = self._gtk.ButtonImage("backspace", None, None, 1) + self.labels[k_id] = self._gtk.ButtonImage("backspace", scale=1) elif keys[i][0] == "E": - self.labels[k_id] = self._gtk.ButtonImage("complete", None, None, 1) + self.labels[k_id] = self._gtk.ButtonImage("complete", scale=1) else: self.labels[k_id] = Gtk.Button(keys[i][0]) self.labels[k_id].connect('clicked', self.update_entry, keys[i][0]) @@ -49,7 +49,7 @@ class Keypad(Gtk.Box): self.labels['entry'].props.xalign = 0.5 self.labels['entry'].connect("activate", self.update_entry, "E") - b = self._gtk.ButtonImage('cancel', _('Close'), None, .66, Gtk.PositionType.LEFT, False) + b = self._gtk.ButtonImage('cancel', _('Close'), None, .66, Gtk.PositionType.LEFT, 1) b.connect("clicked", close_function) self.add(self.labels['entry']) diff --git a/panels/base_panel.py b/panels/base_panel.py index 3bc0352f..571f2029 100644 --- a/panels/base_panel.py +++ b/panels/base_panel.py @@ -26,22 +26,22 @@ class BasePanel(ScreenPanel): } self.current_extruder = None # Action bar buttons - self.control['back'] = self._gtk.ButtonImage('back', None, None, 1) + self.control['back'] = self._gtk.ButtonImage('back', scale=1) self.control['back'].connect("clicked", self.back) - self.control['home'] = self._gtk.ButtonImage('main', None, None, 1) + self.control['home'] = self._gtk.ButtonImage('main', scale=1) self.control['home'].connect("clicked", self.menu_return, True) if len(self._config.get_printers()) > 1: - self.control['printer_select'] = self._gtk.ButtonImage('shuffle', None, None, 1) + self.control['printer_select'] = self._gtk.ButtonImage('shuffle', scale=1) self.control['printer_select'].connect("clicked", self._screen.show_printer_select) - self.control['macros_shortcut'] = self._gtk.ButtonImage('custom-script', None, None, 1) + self.control['macros_shortcut'] = self._gtk.ButtonImage('custom-script', scale=1) self.control['macros_shortcut'].connect("clicked", self.menu_item_clicked, "gcode_macros", { "name": "Macros", "panel": "gcode_macros" }) - self.control['estop'] = self._gtk.ButtonImage('emergency', None, None, 1) + self.control['estop'] = self._gtk.ButtonImage('emergency', scale=1) self.control['estop'].connect("clicked", self.emergency_stop) # Any action bar button should close the keyboard diff --git a/panels/bed_level.py b/panels/bed_level.py index 6b2d8f6a..4993f4ab 100644 --- a/panels/bed_level.py +++ b/panels/bed_level.py @@ -91,14 +91,14 @@ class BedLevelPanel(ScreenPanel): logging.debug(f"Using {len(self.screws)}-screw locations [x,y] [{self.x_cnt}x{self.y_cnt}]") - self.labels['bl'] = self._gtk.ButtonImage("bed-level-t-l", None, None, 2.5) - self.labels['br'] = self._gtk.ButtonImage("bed-level-t-r", None, None, 2.5) - self.labels['fl'] = self._gtk.ButtonImage("bed-level-b-l", None, None, 2.5) - self.labels['fr'] = self._gtk.ButtonImage("bed-level-b-r", None, None, 2.5) - self.labels['lm'] = self._gtk.ButtonImage("bed-level-l-m", None, None, 2.5) - self.labels['rm'] = self._gtk.ButtonImage("bed-level-r-m", None, None, 2.5) - self.labels['fm'] = self._gtk.ButtonImage("bed-level-b-m", None, None, 2.5) - self.labels['bm'] = self._gtk.ButtonImage("bed-level-t-m", None, None, 2.5) + self.labels['bl'] = self._gtk.ButtonImage("bed-level-t-l", scale=2.5) + self.labels['br'] = self._gtk.ButtonImage("bed-level-t-r", scale=2.5) + self.labels['fl'] = self._gtk.ButtonImage("bed-level-b-l", scale=2.5) + self.labels['fr'] = self._gtk.ButtonImage("bed-level-b-r", scale=2.5) + self.labels['lm'] = self._gtk.ButtonImage("bed-level-l-m", scale=2.5) + self.labels['rm'] = self._gtk.ButtonImage("bed-level-r-m", scale=2.5) + self.labels['fm'] = self._gtk.ButtonImage("bed-level-b-m", scale=2.5) + self.labels['bm'] = self._gtk.ButtonImage("bed-level-t-m", scale=2.5) valid_positions = True printer_cfg = self._config.get_printer_config(self._screen.connected_printer) diff --git a/panels/bed_mesh.py b/panels/bed_mesh.py index f443eeff..9d5e84aa 100644 --- a/panels/bed_mesh.py +++ b/panels/bed_mesh.py @@ -31,15 +31,13 @@ class BedMeshPanel(ScreenPanel): def initialize(self, panel_name): - addprofile = self._gtk.ButtonImage("increase", " " + _("Add profile"), - "color1", .66, Gtk.PositionType.LEFT, False) + addprofile = self._gtk.ButtonImage("increase", " " + _("Add profile"), "color1", .66, Gtk.PositionType.LEFT, 1) addprofile.connect("clicked", self.show_create_profile) addprofile.set_hexpand(True) - clear = self._gtk.ButtonImage("cancel", " " + _("Clear"), "color2", .66, Gtk.PositionType.LEFT, False) + clear = self._gtk.ButtonImage("cancel", " " + _("Clear"), "color2", .66, Gtk.PositionType.LEFT, 1) clear.connect("clicked", self._clear_mesh) clear.set_hexpand(True) - top_calibrate = self._gtk.ButtonImage("refresh", " " + _("Calibrate"), - "color3", .66, Gtk.PositionType.LEFT, False) + top_calibrate = self._gtk.ButtonImage("refresh", " " + _("Calibrate"), "color3", .66, Gtk.PositionType.LEFT, 1) top_calibrate.connect("clicked", self._send_calibrate) top_calibrate.set_hexpand(True) diff --git a/panels/console.py b/panels/console.py index b0f37083..c11274c0 100644 --- a/panels/console.py +++ b/panels/console.py @@ -47,7 +47,7 @@ class ConsolePanel(ScreenPanel): o2_switch.set_active(self.hidetemps) o2_switch.connect("notify::active", self.hide_temps) - o3_button = self._gtk.ButtonImage("refresh", _('Clear') + " ", None, .66, Gtk.PositionType.RIGHT, False) + o3_button = self._gtk.ButtonImage("refresh", _('Clear') + " ", None, .66, Gtk.PositionType.RIGHT, 1) o3_button.connect("clicked", self.clear) options = Gtk.Box() @@ -85,7 +85,7 @@ class ConsolePanel(ScreenPanel): entry.connect("activate", self._send_command) entry.grab_focus_without_selecting() - enter = self._gtk.ButtonImage("resume", " " + _('Send') + " ", None, .66, Gtk.PositionType.RIGHT, False) + enter = self._gtk.ButtonImage("resume", " " + _('Send') + " ", None, .66, Gtk.PositionType.RIGHT, 1) enter.set_hexpand(False) enter.connect("clicked", self._send_command) diff --git a/panels/fine_tune.py b/panels/fine_tune.py index cb30d69c..d4a1b549 100644 --- a/panels/fine_tune.py +++ b/panels/fine_tune.py @@ -74,17 +74,17 @@ class FineTunePanel(ScreenPanel): self.labels['z+'] = self._gtk.ButtonImage("z-farther", _("Z+"), "color1") self.labels['z-'] = self._gtk.ButtonImage("z-closer", _("Z-"), "color1") self.labels['zoffset'] = self._gtk.ButtonImage("refresh", " 0.00" + _("mm"), - "color1", .6, Gtk.PositionType.LEFT, False) + "color1", .6, Gtk.PositionType.LEFT, 1) self.labels['speed+'] = self._gtk.ButtonImage("speed+", _("Speed +"), "color3") self.labels['speed-'] = self._gtk.ButtonImage("speed-", _("Speed -"), "color3") self.labels['speedfactor'] = self._gtk.ButtonImage("refresh", " 100%", - "color3", .6, Gtk.PositionType.LEFT, False) + "color3", .6, Gtk.PositionType.LEFT, 1) self.labels['extrude+'] = self._gtk.ButtonImage("flow+", _("Extrusion +"), "color4") self.labels['extrude-'] = self._gtk.ButtonImage("flow-", _("Extrusion -"), "color4") self.labels['extrudefactor'] = self._gtk.ButtonImage("refresh", " 100%", - "color4", .6, Gtk.PositionType.LEFT, False) + "color4", .6, Gtk.PositionType.LEFT, 1) grid.attach(self.labels['z+'], 0, 0, 1, 1) grid.attach(self.labels['z-'], 1, 0, 1, 1) @@ -102,17 +102,17 @@ class FineTunePanel(ScreenPanel): else: self.labels['z+'] = self._gtk.ButtonImage("z-farther", _("Z+"), "color1") self.labels['zoffset'] = self._gtk.ButtonImage("refresh", " 0.00" + _("mm"), - "color1", .6, Gtk.PositionType.LEFT, False) + "color1", .6, Gtk.PositionType.LEFT, 1) self.labels['z-'] = self._gtk.ButtonImage("z-closer", _("Z-"), "color1") self.labels['speed+'] = self._gtk.ButtonImage("speed+", _("Speed +"), "color3") self.labels['speedfactor'] = self._gtk.ButtonImage("refresh", " 100%", - "color3", .6, Gtk.PositionType.LEFT, False) + "color3", .6, Gtk.PositionType.LEFT, 1) self.labels['speed-'] = self._gtk.ButtonImage("speed-", _("Speed -"), "color3") self.labels['extrude+'] = self._gtk.ButtonImage("flow+", _("Extrusion +"), "color4") self.labels['extrudefactor'] = self._gtk.ButtonImage("refresh", " 100%", - "color4", .6, Gtk.PositionType.LEFT, False) + "color4", .6, Gtk.PositionType.LEFT, 1) self.labels['extrude-'] = self._gtk.ButtonImage("flow-", _("Extrusion -"), "color4") grid.attach(self.labels['zoffset'], 0, 0, 1, 1) grid.attach(self.labels['z+'], 0, 1, 1, 1) diff --git a/panels/gcode_macros.py b/panels/gcode_macros.py index f2940609..ec689019 100644 --- a/panels/gcode_macros.py +++ b/panels/gcode_macros.py @@ -16,7 +16,7 @@ class MacroPanel(ScreenPanel): super().__init__(screen, title, back) self.sort_reverse = False self.sort_lbl = _("Name") - self.sort_btn = self._gtk.ButtonImage("arrow-up", self.sort_lbl, "color1", .66, Gtk.PositionType.RIGHT, False) + self.sort_btn = self._gtk.ButtonImage("arrow-up", self.sort_lbl, "color1", .66, Gtk.PositionType.RIGHT, 1) self.sort_btn.connect("clicked", self.change_sort) self.sort_btn.set_hexpand(True) self.allmacros = {} @@ -28,7 +28,7 @@ class MacroPanel(ScreenPanel): sort = Gtk.Label(_("Sort:")) sort.set_hexpand(False) - adjust = self._gtk.ButtonImage("settings", None, "color2", 1, Gtk.PositionType.LEFT, False) + adjust = self._gtk.ButtonImage("settings", None, "color2", 1, Gtk.PositionType.LEFT, 1) adjust.connect("clicked", self.load_menu, 'options') adjust.set_hexpand(False) @@ -71,7 +71,7 @@ class MacroPanel(ScreenPanel): name.set_line_wrap(True) name.set_line_wrap_mode(Pango.WrapMode.WORD_CHAR) - btn = self._gtk.ButtonImage("resume", None, "color3") + btn = self._gtk.ButtonImage("resume", style="color3") btn.connect("clicked", self.run_gcode_macro, macro) btn.set_hexpand(False) btn.set_halign(Gtk.Align.END) diff --git a/panels/input_shaper.py b/panels/input_shaper.py index b5f3f2f9..02361611 100644 --- a/panels/input_shaper.py +++ b/panels/input_shaper.py @@ -25,7 +25,7 @@ class InputShaperPanel(ScreenPanel): super().__init__(screen, title, back) self.freq_xy_adj = {} self.freq_xy_combo = {} - self.calibrate_btn = self._gtk.ButtonImage("move", _('Finding ADXL'), "color1", word_wrap=False) + self.calibrate_btn = self._gtk.ButtonImage("move", _('Finding ADXL'), "color1", lines=1) self.calibrate_btn.connect("clicked", self.on_popover_clicked) self.calibrate_btn.set_sensitive(False) self.status = Gtk.Label("") diff --git a/panels/limits.py b/panels/limits.py index d98a2196..7ff6dabe 100644 --- a/panels/limits.py +++ b/panels/limits.py @@ -92,7 +92,7 @@ class LimitsPanel(ScreenPanel): scale.connect("button-release-event", self.set_opt_value, option) self.values[option] = value - reset = self._gtk.ButtonImage("refresh", None, "color1") + reset = self._gtk.ButtonImage("refresh", style="color1") reset.connect("clicked", self.reset_value, option) reset.set_hexpand(False) diff --git a/panels/main_menu.py b/panels/main_menu.py index 858ec180..85d99b78 100644 --- a/panels/main_menu.py +++ b/panels/main_menu.py @@ -107,13 +107,10 @@ class MainPanel(MenuPanel): if can_target: self.labels['da'].add_object(device, "targets", rgb, True, False) - name = self._gtk.ButtonImage(image, devname.capitalize().replace("_", " "), - None, .5, Gtk.PositionType.LEFT, False) + name = self._gtk.ButtonImage(image, devname.capitalize().replace("_", " "), None, .5, Gtk.PositionType.LEFT, 1) name.connect("clicked", self.toggle_visibility, device) name.set_alignment(0, .5) name.get_style_context().add_class(class_name) - child = name.get_children()[0].get_children()[0].get_children()[1] - child.set_ellipsize(Pango.EllipsizeMode.END) temp = self._gtk.Button("") if can_target: diff --git a/panels/menu.py b/panels/menu.py index a785874e..5f216a00 100644 --- a/panels/menu.py +++ b/panels/menu.py @@ -81,9 +81,7 @@ class MenuPanel(ScreenPanel): j2_temp = env.from_string(item['name']) parsed_name = j2_temp.render() - b = self._gtk.ButtonImage( - item['icon'], parsed_name, f"color{(i % 4) + 1}" - ) + b = self._gtk.ButtonImage(item['icon'], parsed_name, f"color{(i % 4) + 1}") if item['panel'] is not False: b.connect("clicked", self.menu_item_clicked, item['panel'], item) elif item['method'] is not False: diff --git a/panels/move.py b/panels/move.py index 2ad1b297..3d613c9f 100644 --- a/panels/move.py +++ b/panels/move.py @@ -118,7 +118,7 @@ class MovePanel(ScreenPanel): self.labels['pos_x'] = Gtk.Label("X: 0") self.labels['pos_y'] = Gtk.Label("Y: 0") self.labels['pos_z'] = Gtk.Label("Z: 0") - adjust = self._gtk.ButtonImage("settings", None, "color2", 1, Gtk.PositionType.LEFT, False) + adjust = self._gtk.ButtonImage("settings", None, "color2", 1, Gtk.PositionType.LEFT, 1) adjust.connect("clicked", self.load_menu, 'options') adjust.set_hexpand(False) self.labels['move_dist'] = Gtk.Label(_("Move Distance (mm)")) diff --git a/panels/network.py b/panels/network.py index 7e9173e5..330a0ce9 100644 --- a/panels/network.py +++ b/panels/network.py @@ -160,12 +160,12 @@ class NetworkPanel(ScreenPanel): labels.set_valign(Gtk.Align.CENTER) labels.set_halign(Gtk.Align.START) - connect = self._gtk.ButtonImage("load", None, "color3") + connect = self._gtk.ButtonImage("load", style="color3") connect.connect("clicked", self.connect_network, ssid) connect.set_hexpand(False) connect.set_halign(Gtk.Align.END) - delete = self._gtk.ButtonImage("delete", None, "color3") + delete = self._gtk.ButtonImage("delete", style="color3") delete.connect("clicked", self.remove_wifi_network, ssid) delete.set_size_request(60, 0) delete.set_hexpand(False) diff --git a/panels/print.py b/panels/print.py index 5f2b4bfa..a16b851c 100644 --- a/panels/print.py +++ b/panels/print.py @@ -43,13 +43,13 @@ class PrintPanel(ScreenPanel): sbox.set_vexpand(False) sbox.add(sort) for i, (name, val) in enumerate(self.sort_items.items(), start=1): - s = self._gtk.ButtonImage(None, val, f"color{i % 4}", .66, Gtk.PositionType.RIGHT, False) + s = self._gtk.ButtonImage(None, val, f"color{i % 4}", .66, Gtk.PositionType.RIGHT, 1) if name == self.sort_current[0]: s.set_image(self._gtk.Image(self.sort_icon[self.sort_current[1]], .66)) s.connect("clicked", self.change_sort, name) self.labels[f'sort_{name}'] = s sbox.add(s) - refresh = self._gtk.ButtonImage("refresh", None, None, .66) + refresh = self._gtk.ButtonImage("refresh", scale=.66) refresh.connect('clicked', self._refresh_files) sbox.add(refresh) sbox.set_hexpand(True) @@ -166,7 +166,7 @@ class PrintPanel(ScreenPanel): labels.set_valign(Gtk.Align.CENTER) labels.set_halign(Gtk.Align.START) - actions = self._gtk.ButtonImage("load", None, "color3") + actions = self._gtk.ButtonImage("load", style="color3") actions.connect("clicked", self.change_dir, directory) actions.set_hexpand(False) actions.set_halign(Gtk.Align.END) @@ -213,7 +213,7 @@ class PrintPanel(ScreenPanel): labels.set_valign(Gtk.Align.CENTER) labels.set_halign(Gtk.Align.START) - actions = self._gtk.ButtonImage("print", None, "color3") + actions = self._gtk.ButtonImage("print", style="color3") actions.connect("clicked", self.confirm_print, filepath) actions.set_hexpand(False) actions.set_halign(Gtk.Align.END) diff --git a/panels/retraction.py b/panels/retraction.py index 94cb8bf2..09c30d66 100644 --- a/panels/retraction.py +++ b/panels/retraction.py @@ -124,7 +124,7 @@ class FWRetractionPanel(ScreenPanel): scale.get_style_context().add_class("option_slider") scale.connect("button-release-event", self.set_opt_value, option) - reset = self._gtk.ButtonImage("refresh", None, "color1") + reset = self._gtk.ButtonImage("refresh", style="color1") reset.connect("clicked", self.reset_value, option) reset.set_hexpand(False) diff --git a/panels/settings.py b/panels/settings.py index 10638b35..f775d176 100644 --- a/panels/settings.py +++ b/panels/settings.py @@ -131,7 +131,7 @@ class SettingsPanel(ScreenPanel): box.add(label) dev.add(box) elif option['type'] == "menu": - open_menu = self._gtk.ButtonImage("settings", None, "color3") + open_menu = self._gtk.ButtonImage("settings", style="color3") open_menu.connect("clicked", self.load_menu, option['menu']) open_menu.set_hexpand(False) open_menu.set_halign(Gtk.Align.END) diff --git a/panels/system.py b/panels/system.py index 66c72319..f48a078d 100644 --- a/panels/system.py +++ b/panels/system.py @@ -68,7 +68,7 @@ class SystemPanel(ScreenPanel): self.labels[f"{prog}_status"].connect("clicked", self.show_update_info, prog) if prog in ALLOWED_SERVICES: - self.labels[f"{prog}_restart"] = self._gtk.ButtonImage("refresh", None, None, .7, .7) + self.labels[f"{prog}_restart"] = self._gtk.ButtonImage("refresh", scale=.7) self.labels[f"{prog}_restart"].connect("clicked", self.restart, prog) infogrid.attach(self.labels[f"{prog}_restart"], 0, i, 1, 1) diff --git a/panels/temperature.py b/panels/temperature.py index 9a466a74..5f34bf92 100644 --- a/panels/temperature.py +++ b/panels/temperature.py @@ -64,8 +64,8 @@ class TemperaturePanel(ScreenPanel): def create_right_panel(self): - cooldown = self._gtk.ButtonImage('cool-down', _('Cooldown'), "color4", .66, Gtk.PositionType.LEFT, False) - adjust = self._gtk.ButtonImage('fine-tune', '', "color3", 1, Gtk.PositionType.LEFT, False) + cooldown = self._gtk.ButtonImage('cool-down', _('Cooldown'), "color4", .66, Gtk.PositionType.LEFT, 1) + adjust = self._gtk.ButtonImage('fine-tune', '', "color3", 1, Gtk.PositionType.LEFT, 1) right = self._gtk.HomogeneousGrid() right.attach(cooldown, 0, 0, 2, 1) @@ -319,12 +319,10 @@ class TemperaturePanel(ScreenPanel): self.labels['da'].add_object(device, "targets", rgb, True, False) name = self._gtk.ButtonImage(image, devname.capitalize().replace("_", " "), - None, .5, Gtk.PositionType.LEFT, False) + None, .5, Gtk.PositionType.LEFT, 1) name.connect('clicked', self.on_popover_clicked, device) name.set_alignment(0, .5) name.get_style_context().add_class(class_name) - child = name.get_children()[0].get_children()[0].get_children()[1] - child.set_ellipsize(Pango.EllipsizeMode.END) temp = self._gtk.Button("") temp.connect('clicked', self.select_heater, device) diff --git a/styles/base.css b/styles/base.css index 10c24882..c9ad26e3 100644 --- a/styles/base.css +++ b/styles/base.css @@ -22,12 +22,12 @@ button { -gtk-icon-shadow: none; } -button:active { +button:active, .button_active { background-color: #304C62; } -.button_active { - background-color: #20303D; +button label { + margin-top: .3em; } button.color1 {