diff --git a/ks_includes/KlippyGtk.py b/ks_includes/KlippyGtk.py index af6c84ff..23d76b59 100644 --- a/ks_includes/KlippyGtk.py +++ b/ks_includes/KlippyGtk.py @@ -110,13 +110,6 @@ class KlippyGtk: for key in self.color_list: self.color_list[key]['state'] = 0 - @staticmethod - def Label(label, style=None): - la = Gtk.Label(label) - if style is not None: - la.get_style_context().add_class(style) - return la - def Image(self, image_name=None, width=None, height=None): if image_name is None: return Gtk.Image() @@ -158,14 +151,9 @@ class KlippyGtk: def Button(self, image_name=None, label=None, style=None, scale=None, position=Gtk.PositionType.TOP, lines=2): if self.font_size_type == "max" and label is not None and scale is None: image_name = None - b = Gtk.Button() + b = Gtk.Button(hexpand=True, vexpand=True, can_focus=False, image_position=position, always_show_image=True) if label is not None: b.set_label(label.replace("\n", " ")) - b.set_hexpand(True) - b.set_vexpand(True) - b.set_can_focus(False) - b.set_image_position(position) - b.set_always_show_image(True) if image_name is not None: if scale is None: scale = self.button_image_scale @@ -173,9 +161,7 @@ class KlippyGtk: scale = scale * 1.4 width = height = self.img_scale * scale b.set_image(self.Image(image_name, width, height)) - spinner = Gtk.Spinner.new() - spinner.set_no_show_all(True) - spinner.set_size_request(width, height) + spinner = Gtk.Spinner(width_request=width, height_request=height, no_show_all=True) spinner.hide() box = find_widget(b, Gtk.Box) if box: @@ -210,11 +196,8 @@ class KlippyGtk: widget.set_sensitive(True) def Dialog(self, title, buttons, content, callback=None, *args): - dialog = Gtk.Dialog(title=title) - dialog.set_resizable(False) - dialog.set_transient_for(self.screen) - dialog.set_modal(True) - dialog.set_default_size(self.width, self.height) + dialog = Gtk.Dialog(title=title, modal=True, transient_for=self.screen, + default_width=self.width, default_height=self.height) if not self.screen.windowed: dialog.fullscreen() @@ -238,11 +221,10 @@ class KlippyGtk: dialog.get_style_context().add_class("dialog") content_area = dialog.get_content_area() - content_area.set_margin_start(5) - content_area.set_margin_end(5) - content_area.set_margin_top(5) - content_area.set_margin_bottom(0) - content.set_valign(Gtk.Align.CENTER) + content_area.set_margin_start(15) + content_area.set_margin_end(15) + content_area.set_margin_top(15) + content_area.set_margin_bottom(15) content_area.add(content) dialog.show_all() @@ -268,30 +250,16 @@ class KlippyGtk: return logging.debug(f"Cannot remove dialog {dialog}") - @staticmethod - def HomogeneousGrid(width=None, height=None): - g = Gtk.Grid() - g.set_row_homogeneous(True) - g.set_column_homogeneous(True) - if width is not None and height is not None: - g.set_size_request(width, height) - return g - def ToggleButton(self, text): - b = Gtk.ToggleButton(text) - b.props.relief = Gtk.ReliefStyle.NONE - b.set_hexpand(True) - b.set_vexpand(True) + b = Gtk.ToggleButton(label=text, hexpand=True, vexpand=True) b.connect("clicked", self.screen.reset_screensaver_timeout) return b def ScrolledWindow(self, steppers=True): - scroll = Gtk.ScrolledWindow(vexpand=True) - scroll.set_property("overlay-scrolling", False) + scroll = Gtk.ScrolledWindow(hexpand=True, vexpand=True, overlay_scrolling=False) scroll.add_events(Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.TOUCH_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK) - scroll.set_kinetic_scrolling(True) if self.screen._config.get_main_config().getboolean("show_scroll_steppers", fallback=False) and steppers: scroll.get_vscrollbar().get_style_context().add_class("with-steppers") return scroll diff --git a/ks_includes/screen_panel.py b/ks_includes/screen_panel.py index c811aeb8..aea6655b 100644 --- a/ks_includes/screen_panel.py +++ b/ks_includes/screen_panel.py @@ -26,10 +26,8 @@ class ScreenPanel: self.title = title self.devices = {} self.active_heaters = [] - self.content = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) + self.content = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, hexpand=True, vexpand=True) self.content.get_style_context().add_class("content") - self.content.set_hexpand(True) - self.content.set_vexpand(True) self._show_heater_power = self._config.get_main_config().getboolean('show_heater_power', False) self.bts = self._gtk.bsidescale diff --git a/ks_includes/widgets/keyboard.py b/ks_includes/widgets/keyboard.py index fae107c7..e4451424 100644 --- a/ks_includes/widgets/keyboard.py +++ b/ks_includes/widgets/keyboard.py @@ -122,8 +122,6 @@ class Keyboard(Gtk.Box): self.buttons[p][r][k] = screen.gtk.Button("arrow-down", scale=.6) else: self.buttons[p][r][k] = screen.gtk.Button(label=key, lines=1) - self.buttons[p][r][k].set_hexpand(True) - self.buttons[p][r][k].set_vexpand(True) self.buttons[p][r][k].connect('button-press-event', self.repeat, key) self.buttons[p][r][k].connect('button-release-event', self.release) self.buttons[p][r][k].get_style_context().add_class("keyboard_pad") diff --git a/ks_includes/widgets/keypad.py b/ks_includes/widgets/keypad.py index 26d82282..4f029bb1 100644 --- a/ks_includes/widgets/keypad.py +++ b/ks_includes/widgets/keypad.py @@ -14,7 +14,7 @@ class Keypad(Gtk.Box): self.screen = screen self._gtk = screen.gtk - numpad = self._gtk.HomogeneousGrid() + numpad = Gtk.Grid(row_homogeneous=True, column_homogeneous=True) numpad.set_direction(Gtk.TextDirection.LTR) numpad.get_style_context().add_class('numpad') @@ -59,7 +59,7 @@ class Keypad(Gtk.Box): self.add(self.labels['entry']) self.add(numpad) - self.bottom = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) + self.bottom = Gtk.Box() self.bottom.add(self.pid) self.bottom.add(b) self.add(self.bottom) diff --git a/panels/base_panel.py b/panels/base_panel.py index 6b10139b..f3d01c3f 100644 --- a/panels/base_panel.py +++ b/panels/base_panel.py @@ -71,20 +71,15 @@ class BasePanel(ScreenPanel): # This box will be populated by show_heaters self.control['temp_box'] = Gtk.Box(spacing=10) - self.titlelbl = Gtk.Label() - self.titlelbl.set_hexpand(True) - self.titlelbl.set_halign(Gtk.Align.CENTER) - self.titlelbl.set_ellipsize(Pango.EllipsizeMode.END) + self.titlelbl = Gtk.Label(hexpand=True, halign=Gtk.Align.CENTER, ellipsize=Pango.EllipsizeMode.END) self.set_title(title) self.control['time'] = Gtk.Label(label="00:00 AM") - self.control['time_box'] = Gtk.Box() - self.control['time_box'].set_halign(Gtk.Align.END) + self.control['time_box'] = Gtk.Box(halign=Gtk.Align.END) self.control['time_box'].pack_end(self.control['time'], True, True, 10) - self.titlebar = Gtk.Box(spacing=5) + self.titlebar = Gtk.Box(spacing=5, valign=Gtk.Align.CENTER) self.titlebar.get_style_context().add_class("title_bar") - self.titlebar.set_valign(Gtk.Align.CENTER) self.titlebar.add(self.control['temp_box']) self.titlebar.add(self.titlelbl) self.titlebar.add(self.control['time_box']) @@ -115,8 +110,7 @@ class BasePanel(ScreenPanel): img_size = self._gtk.img_scale * self.bts for device in devices: - self.labels[device] = Gtk.Label() - self.labels[device].set_ellipsize(Pango.EllipsizeMode.START) + self.labels[device] = Gtk.Label(ellipsize=Pango.EllipsizeMode.START) self.labels[f'{device}_box'] = Gtk.Box() icon = self.get_icon(device, img_size) @@ -309,13 +303,9 @@ class BasePanel(ScreenPanel): def show_update_dialog(self): if self.update_dialog is not None: return - button = [{"name": _("Finish"), "response": Gtk.ResponseType.OK, "style": 'dialog-default'}] - self.labels['update_progress'] = Gtk.Label() - self.labels['update_progress'].set_halign(Gtk.Align.START) - self.labels['update_progress'].set_valign(Gtk.Align.START) - self.labels['update_progress'].set_ellipsize(Pango.EllipsizeMode.END) + button = [{"name": _("Finish"), "response": Gtk.ResponseType.OK}] + self.labels['update_progress'] = Gtk.Label(hexpand=True, vexpand=True, ellipsize=Pango.EllipsizeMode.END) self.labels['update_scroll'] = self._gtk.ScrolledWindow(steppers=False) - self.labels['update_scroll'].set_size_request(self._gtk.width - 30, self._gtk.height * .6) self.labels['update_scroll'].set_property("overlay-scrolling", True) self.labels['update_scroll'].add(self.labels['update_progress']) self.labels['update_scroll'].connect("size-allocate", self._autoscroll) diff --git a/panels/bed_level.py b/panels/bed_level.py index 5b552d5c..ae98cd40 100644 --- a/panels/bed_level.py +++ b/panels/bed_level.py @@ -52,7 +52,7 @@ class Panel(ScreenPanel): self.horizontal_move_z = 5 self.horizontal_speed = 50 - grid = self._gtk.HomogeneousGrid() + grid = Gtk.Grid(row_homogeneous=True, column_homogeneous=True) grid.attach(self.buttons['dm'], 0, 0, 1, 1) if "screws_tilt_adjust" in self._printer.get_config_section_list(): @@ -188,12 +188,11 @@ class Panel(ScreenPanel): bedgrid.attach(self.buttons['center'], 2, 1, 1, 1) self.buttons['center'].connect("clicked", self.go_to_position, center) else: - label = Gtk.Label( + label = Gtk.Label(wrap=True, wrap_mode=Pango.WrapMode.WORD_CHAR) + label.set_text( _("Bed screw configuration:") + f" {nscrews}\n\n" + _("Not supported for auto-detection, it needs to be configured in klipperscreen.conf") ) - label.set_line_wrap_mode(Pango.WrapMode.WORD_CHAR) - label.set_line_wrap(True) grid.attach(label, 1, 0, 3, 2) self.content.add(grid) return diff --git a/panels/bed_mesh.py b/panels/bed_mesh.py index e905675d..c9047846 100644 --- a/panels/bed_mesh.py +++ b/panels/bed_mesh.py @@ -22,31 +22,23 @@ class Panel(ScreenPanel): 'clear': self._gtk.Button("cancel", " " + _("Clear"), "color2", self.bts, Gtk.PositionType.LEFT, 1), } self.buttons['add'].connect("clicked", self.show_create_profile) - self.buttons['add'].set_hexpand(True) self.buttons['clear'].connect("clicked", self.send_clear_mesh) - self.buttons['clear'].set_hexpand(True) self.buttons['calib'].connect("clicked", self.calibrate_mesh) - self.buttons['calib'].set_hexpand(True) - topbar = Gtk.Box(spacing=5) - topbar.set_hexpand(True) - topbar.set_vexpand(False) + topbar = Gtk.Box(spacing=5, hexpand=True, vexpand=False) topbar.add(self.buttons['add']) topbar.add(self.buttons['clear']) topbar.add(self.buttons['calib']) # Create a grid for all profiles - self.labels['profiles'] = Gtk.Grid() - self.labels['profiles'].set_valign(Gtk.Align.CENTER) + self.labels['profiles'] = Gtk.Grid(valign=Gtk.Align.CENTER) scroll = self._gtk.ScrolledWindow() scroll.add(self.labels['profiles']) - scroll.set_vexpand(True) self.load_meshes() - grid = self._gtk.HomogeneousGrid() - grid.set_row_homogeneous(False) + grid = Gtk.Grid(column_homogeneous=True) grid.attach(topbar, 0, 0, 2, 1) self.labels['map'] = BedMap(self._gtk.font_size, self.active_mesh) if self._screen.vertical_mode: @@ -130,12 +122,12 @@ class Panel(ScreenPanel): b.set_vexpand(False) b.set_halign(Gtk.Align.END) - button_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5) + button_box = Gtk.Box(spacing=5) if profile != "default": button_box.add(buttons["save"]) button_box.add(buttons["delete"]) - box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5) + box = Gtk.Box(spacing=5) box.get_style_context().add_class("frame-item") box.pack_start(name, True, True, 0) box.pack_start(button_box, False, False, 0) @@ -213,11 +205,8 @@ class Panel(ScreenPanel): self.content.remove(child) if "create_profile" not in self.labels: - pl = self._gtk.Label(_("Profile Name:")) - pl.set_hexpand(False) - self.labels['profile_name'] = Gtk.Entry() - self.labels['profile_name'].set_text('') - self.labels['profile_name'].set_hexpand(True) + pl = Gtk.Label(label=_("Profile Name:"), hexpand=False) + self.labels['profile_name'] = Gtk.Entry(hexpand=True, text='') self.labels['profile_name'].connect("activate", self.create_profile) self.labels['profile_name'].connect("focus-in-event", self._screen.show_keyboard) @@ -229,10 +218,8 @@ class Panel(ScreenPanel): box.pack_start(self.labels['profile_name'], True, True, 5) box.pack_start(save, False, False, 5) - self.labels['create_profile'] = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=5) - self.labels['create_profile'].set_valign(Gtk.Align.CENTER) - self.labels['create_profile'].set_hexpand(True) - self.labels['create_profile'].set_vexpand(True) + self.labels['create_profile'] = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=5, + valign=Gtk.Align.CENTER, hexpand=True, vexpand=True) self.labels['create_profile'].pack_start(pl, True, True, 5) self.labels['create_profile'].pack_start(box, True, True, 5) @@ -243,7 +230,7 @@ class Panel(ScreenPanel): def create_profile(self, widget): name = self.labels['profile_name'].get_text() if self.active_mesh is None: - self.calibrate_mesh(None) + self.calibrate_mesh(widget) self._screen._send_action(widget, "printer.gcode.script", {"script": f"BED_MESH_PROFILE SAVE={name}"}) self.remove_create() diff --git a/panels/console.py b/panels/console.py index 3618a055..f026564c 100644 --- a/panels/console.py +++ b/panels/console.py @@ -37,33 +37,23 @@ class Panel(ScreenPanel): o3_button.get_style_context().add_class("buttons_slim") o3_button.connect("clicked", self.clear) - options = Gtk.Grid() - options.set_vexpand(False) + options = Gtk.Grid(vexpand=False) options.attach(o1_button, 0, 0, 1, 1) options.attach(o2_button, 1, 0, 1, 1) options.attach(o3_button, 2, 0, 1, 1) - sw = Gtk.ScrolledWindow() - sw.set_hexpand(True) - sw.set_vexpand(True) + sw = Gtk.ScrolledWindow(hexpand=True, vexpand=True) tb = Gtk.TextBuffer() - tv = Gtk.TextView() - tv.set_buffer(tb) - tv.set_editable(False) - tv.set_cursor_visible(False) + tv = Gtk.TextView(buffer=tb, editable=False, cursor_visible=False) tv.connect("size-allocate", self._autoscroll) tv.connect("focus-in-event", self._screen.remove_keyboard) sw.add(tv) - ebox = Gtk.Box() - ebox.set_hexpand(True) - ebox.set_vexpand(False) + ebox = Gtk.Box(hexpand=True, vexpand=False) - entry = Gtk.Entry() - entry.set_hexpand(True) - entry.set_vexpand(False) + entry = Gtk.Entry(hexpand=True, vexpand=False) entry.connect("button-press-event", self._screen.show_keyboard) entry.connect("focus-in-event", self._screen.show_keyboard) entry.connect("activate", self._send_command) diff --git a/panels/exclude.py b/panels/exclude.py index f0d92f73..040c8f16 100644 --- a/panels/exclude.py +++ b/panels/exclude.py @@ -11,9 +11,7 @@ class Panel(ScreenPanel): def __init__(self, screen, title): super().__init__(screen, title) self._screen = screen - self.object_list = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0) - self.object_list.set_valign(Gtk.Align.CENTER) - self.object_list.set_halign(Gtk.Align.START) + self.object_list = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, hexpand=True, vexpand=True) self.buttons = {} self.current_object = self._gtk.Button("extrude", "", scale=self.bts, position=Gtk.PositionType.LEFT, lines=1) self.current_object.connect("clicked", self.exclude_current) @@ -28,10 +26,8 @@ class Panel(ScreenPanel): scroll = self._gtk.ScrolledWindow() scroll.add(self.object_list) - scroll.set_halign(Gtk.Align.CENTER) - grid = self._gtk.HomogeneousGrid() - grid.set_row_homogeneous(False) + grid = Gtk.Grid(column_homogeneous=True) grid.attach(self.current_object, 0, 0, 2, 1) grid.attach(Gtk.Separator(), 0, 1, 2, 1) @@ -40,14 +36,11 @@ class Panel(ScreenPanel): if self._screen.vertical_mode: grid.attach(self.labels['map'], 0, 2, 2, 1) grid.attach(scroll, 0, 3, 2, 1) - scroll.set_size_request(self._gtk.content_width - 30, -1) else: grid.attach(self.labels['map'], 0, 2, 1, 1) grid.attach(scroll, 1, 2, 1, 1) - scroll.set_size_request(self._gtk.content_width / 2 - 30, -1) else: grid.attach(scroll, 0, 2, 2, 1) - scroll.set_size_request(self._gtk.content_width - 30, -1) self.content.add(grid) self.content.show_all() diff --git a/panels/extrude.py b/panels/extrude.py index 949692ca..7d4825c3 100644 --- a/panels/extrude.py +++ b/panels/extrude.py @@ -53,7 +53,7 @@ class Panel(ScreenPanel): "name": "Spoolman", "panel": "spoolman" }) - extgrid = self._gtk.HomogeneousGrid() + extgrid = Gtk.Grid(row_homogeneous=True, column_homogeneous=True) limit = 5 i = 0 for extruder in self._printer.get_tools(): @@ -116,35 +116,26 @@ class Panel(ScreenPanel): speedbox.add(speedgrid) filament_sensors = self._printer.get_filament_sensors() - sensors = Gtk.Grid() - sensors.set_size_request(self._gtk.content_width - 30, -1) + sensors = Gtk.Grid(valign=Gtk.Align.CENTER, row_spacing=5, column_spacing=5) if len(filament_sensors) > 0: - sensors.set_column_spacing(5) - sensors.set_row_spacing(5) - sensors.set_halign(Gtk.Align.CENTER) - sensors.set_valign(Gtk.Align.CENTER) for s, x in enumerate(filament_sensors): if s > limit: break name = x[23:].strip() self.labels[x] = { - 'label': Gtk.Label(self.prettify(name)), - 'switch': Gtk.Switch(), + 'label': Gtk.Label(label=self.prettify(name), hexpand=True, halign=Gtk.Align.CENTER, + ellipsize=Pango.EllipsizeMode.END), + 'switch': Gtk.Switch(width_request=round(self._gtk.font_size * 2), + height_request=round(self._gtk.font_size)), 'box': Gtk.Box() } - self.labels[x]['label'].set_halign(Gtk.Align.CENTER) - self.labels[x]['label'].set_hexpand(True) - self.labels[x]['label'].set_ellipsize(Pango.EllipsizeMode.END) - self.labels[x]['switch'].set_property("width-request", round(self._gtk.font_size * 2)) - self.labels[x]['switch'].set_property("height-request", round(self._gtk.font_size)) self.labels[x]['switch'].connect("notify::active", self.enable_disable_fs, name, x) self.labels[x]['box'].pack_start(self.labels[x]['label'], True, True, 10) self.labels[x]['box'].pack_start(self.labels[x]['switch'], False, False, 0) self.labels[x]['box'].get_style_context().add_class("filament_sensor") sensors.attach(self.labels[x]['box'], s, 0, 1, 1) - grid = Gtk.Grid() - grid.set_column_homogeneous(True) + grid = Gtk.Grid(column_homogeneous=True) grid.attach(extgrid, 0, 0, 4, 1) if self._screen.vertical_mode: diff --git a/panels/fan.py b/panels/fan.py index 28c4b10f..ec167170 100644 --- a/panels/fan.py +++ b/panels/fan.py @@ -15,8 +15,7 @@ class Panel(ScreenPanel): self.fan_speed = {} self.devices = {} # Create a grid for all devices - self.labels['devices'] = Gtk.Grid() - self.labels['devices'].set_valign(Gtk.Align.CENTER) + self.labels['devices'] = Gtk.Grid(valign=Gtk.Align.CENTER) self.load_fans() @@ -54,17 +53,12 @@ class Panel(ScreenPanel): logging.info(f"Adding fan: {fan}") changeable = any(fan.startswith(x) or fan == x for x in CHANGEABLE_FANS) - name = Gtk.Label() + name = Gtk.Label(halign=Gtk.Align.START, valign=Gtk.Align.CENTER, hexpand=True, vexpand=True, + wrap=True, wrap_mode=Pango.WrapMode.WORD_CHAR) fan_name = _("Part Fan") if fan == "fan" else fan.split()[1] name.set_markup(f"\n{fan_name}\n") - name.set_hexpand(True) - name.set_vexpand(True) - 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) - fan_col = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5) + fan_col = Gtk.Box(spacing=5) stop_btn = self._gtk.Button("cancel", None, "color1") stop_btn.set_hexpand(False) stop_btn.connect("clicked", self.update_fan_speed, fan, 0) @@ -75,7 +69,7 @@ class Panel(ScreenPanel): speed = float(self._printer.get_fan_speed(fan)) if changeable: speed = round(speed * 100) - scale = Gtk.Scale.new_with_range(orientation=Gtk.Orientation.HORIZONTAL, min=0, max=100, step=1) + scale = Gtk.Scale.new_with_range(Gtk.Orientation.HORIZONTAL, min=0, max=100, step=1) scale.set_value(speed) scale.set_digits(0) scale.set_hexpand(True) @@ -86,10 +80,7 @@ class Panel(ScreenPanel): fan_col.add(scale) fan_col.add(max_btn) else: - scale = Gtk.ProgressBar() - scale.set_fraction(speed) - scale.set_show_text(True) - scale.set_hexpand(True) + scale = Gtk.ProgressBar(hexpand=True, show_text=True, fraction=speed) fan_col.pack_start(scale, True, True, 10) fan_row = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) diff --git a/panels/fine_tune.py b/panels/fine_tune.py index 5b323031..d198637c 100644 --- a/panels/fine_tune.py +++ b/panels/fine_tune.py @@ -72,8 +72,7 @@ class Panel(ScreenPanel): if i == self.e_delta: ctx.add_class("distbutton_active") extgrid.attach(self.labels[f"edelta{i}"], j, 0, 1, 1) - grid = self._gtk.HomogeneousGrid() - grid.set_row_homogeneous(False) + grid = Gtk.Grid(column_homogeneous=True) self.labels['z+'] = self._gtk.Button("z-farther", "Z+", "color1") self.labels['z-'] = self._gtk.Button("z-closer", "Z-", "color1") diff --git a/panels/gcode_macros.py b/panels/gcode_macros.py index 0615025b..f1c693a2 100644 --- a/panels/gcode_macros.py +++ b/panels/gcode_macros.py @@ -24,8 +24,7 @@ class Panel(ScreenPanel): adjust.connect("clicked", self.load_menu, 'options', _("Settings")) adjust.set_hexpand(False) - sbox = Gtk.Box() - sbox.set_vexpand(False) + sbox = Gtk.Box(vexpand=False) sbox.pack_start(self.sort_btn, True, True, 5) sbox.pack_start(adjust, True, True, 5) @@ -33,8 +32,7 @@ class Panel(ScreenPanel): self.labels['macros'] = Gtk.Grid() self.labels['macros_list'].add(self.labels['macros']) - self.labels['macros_menu'] = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) - self.labels['macros_menu'].set_vexpand(True) + self.labels['macros_menu'] = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, vexpand=True) self.labels['macros_menu'].pack_start(sbox, False, False, 0) self.labels['macros_menu'].pack_start(self.labels['macros_list'], True, True, 0) @@ -61,14 +59,9 @@ class Panel(ScreenPanel): else: logging.debug(f"Couldn't load {macro}\n{section}") return - name = Gtk.Label() + name = Gtk.Label(hexpand=True, vexpand=True, halign=Gtk.Align.START, valign=Gtk.Align.CENTER, + wrap=True, wrap_mode=Pango.WrapMode.WORD_CHAR) name.set_markup(f"{macro}") - name.set_hexpand(True) - name.set_vexpand(True) - name.set_halign(Gtk.Align.START) - name.set_valign(Gtk.Align.CENTER) - name.set_line_wrap(True) - name.set_line_wrap_mode(Pango.WrapMode.CHAR) btn = self._gtk.Button("resume", style="color3") btn.connect("clicked", self.run_gcode_macro, macro) @@ -151,31 +144,20 @@ class Panel(ScreenPanel): self.labels['macros'].show_all() def add_option(self, boxname, opt_array, opt_name, option): - name = Gtk.Label() + name = Gtk.Label(hexpand=True, vexpand=True, halign=Gtk.Align.START, valign=Gtk.Align.CENTER, + wrap=True, wrap_mode=Pango.WrapMode.WORD_CHAR) name.set_markup(f"{option['name']}") - name.set_hexpand(True) - name.set_vexpand(True) - 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) - box = Gtk.Box() - box.set_vexpand(False) - switch = Gtk.Switch() - switch.set_hexpand(False) - switch.set_vexpand(False) - switch.set_active(self._config.get_config().getboolean(option['section'], opt_name, fallback=True)) + box = Gtk.Box(vexpand=False) + switch = Gtk.Switch(hexpand=False, vexpand=False, + width_request=round(self._gtk.font_size * 7), + height_request=round(self._gtk.font_size * 3.5), + active=self._config.get_config().getboolean(option['section'], opt_name, fallback=True)) switch.connect("notify::active", self.switch_config_option, option['section'], opt_name) - switch.set_property("width-request", round(self._gtk.font_size * 7)) - switch.set_property("height-request", round(self._gtk.font_size * 3.5)) box.add(switch) - dev = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5) + dev = Gtk.Box(hexpand=True, vexpand=False, valign=Gtk.Align.CENTER) dev.get_style_context().add_class("frame-item") - dev.set_hexpand(True) - dev.set_vexpand(False) - dev.set_valign(Gtk.Align.CENTER) dev.add(name) dev.add(box) diff --git a/panels/input_shaper.py b/panels/input_shaper.py index d55ae8a7..917236c5 100644 --- a/panels/input_shaper.py +++ b/panels/input_shaper.py @@ -22,50 +22,35 @@ class Panel(ScreenPanel): self.calibrate_btn = self._gtk.Button("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() - self.status.set_hexpand(True) - self.status.set_vexpand(False) - self.status.set_halign(Gtk.Align.START) - self.status.set_ellipsize(Pango.EllipsizeMode.END) + self.status = Gtk.Label(hexpand=True, vexpand=False, halign=Gtk.Align.START, ellipsize=Pango.EllipsizeMode.END) self.calibrating_axis = None self.calibrating_axis = None - auto_calibration_label = Gtk.Label() + auto_calibration_label = Gtk.Label(hexpand=True) auto_calibration_label.set_markup('Auto Calibration') - auto_calibration_label.set_hexpand(True) auto_grid = Gtk.Grid() auto_grid.attach(auto_calibration_label, 0, 0, 1, 1) auto_grid.attach(self.calibrate_btn, 1, 0, 1, 1) - manual_calibration_label = Gtk.Label() + manual_calibration_label = Gtk.Label(vexpand=True) manual_calibration_label.set_markup('Manual Calibration') - manual_calibration_label.set_vexpand(True) - disclaimer = Gtk.Label() + disclaimer = Gtk.Label(wrap=True, halign=Gtk.Align.CENTER) disclaimer.set_markup('NOTE: Edit your printer.cfg to save manual calibration changes.') - disclaimer.set_line_wrap(True) - disclaimer.set_halign(Gtk.Align.CENTER) input_grid = Gtk.Grid() input_grid.attach(manual_calibration_label, 0, 0, 3, 1) input_grid.attach(disclaimer, 0, 1, 3, 1) for i, dim_freq in enumerate(XY_FREQ): - axis_lbl = Gtk.Label() + axis_lbl = Gtk.Label(hexpand=False, vexpand=True, halign=Gtk.Align.START, valign=Gtk.Align.CENTER, + wrap=True) axis_lbl.set_markup(f"{dim_freq['name']}") - axis_lbl.set_hexpand(False) - axis_lbl.set_vexpand(True) - axis_lbl.set_halign(Gtk.Align.START) - axis_lbl.set_valign(Gtk.Align.CENTER) - axis_lbl.set_line_wrap(True) self.freq_xy_adj[dim_freq['config']] = Gtk.Adjustment(0, dim_freq['min'], dim_freq['max'], 0.1) - scale = Gtk.Scale(orientation=Gtk.Orientation.HORIZONTAL, adjustment=self.freq_xy_adj[dim_freq['config']]) - scale.set_digits(1) - scale.set_hexpand(True) - scale.set_valign(Gtk.Align.END) - scale.set_has_origin(True) + scale = Gtk.Scale(adjustment=self.freq_xy_adj[dim_freq['config']], + digits=1, hexpand=True, valign=Gtk.Align.END, has_origin=True) scale.get_style_context().add_class("option_slider") scale.connect("button-release-event", self.set_opt_value, dim_freq['config']) diff --git a/panels/job_status.py b/panels/job_status.py index 62e48f54..6d519f38 100644 --- a/panels/job_status.py +++ b/panels/job_status.py @@ -16,8 +16,7 @@ from ks_includes.KlippyGtk import find_widget class Panel(ScreenPanel): def __init__(self, screen, title): super().__init__(screen, title) - self.grid = self._gtk.HomogeneousGrid() - self.grid.set_row_homogeneous(False) + self.grid = Gtk.Grid(column_homogeneous=True) self.pos_z = 0.0 self.extrusion = 100 self.speed_factor = 1.0 @@ -47,9 +46,7 @@ class Panel(ScreenPanel): 'flowrate'] for item in data: - self.labels[item] = Gtk.Label(label="-") - self.labels[item].set_vexpand(True) - self.labels[item].set_hexpand(True) + self.labels[item] = Gtk.Label(label="-", hexpand=True, vexpand=True) self.labels['left'] = Gtk.Label(_("Left:")) self.labels['elapsed'] = Gtk.Label(_("Elapsed:")) @@ -83,9 +80,8 @@ class Panel(ScreenPanel): "speed": "-" } - self.labels['file'] = Gtk.Label(label="Filename") + self.labels['file'] = Gtk.Label(label="Filename", hexpand=True) self.labels['file'].get_style_context().add_class("printing-filename") - self.labels['file'].set_hexpand(True) self.labels['status'] = Gtk.Label(label="Status") self.labels['status'].get_style_context().add_class("printing-status") self.labels['lcdmessage'] = Gtk.Label() @@ -104,14 +100,12 @@ class Panel(ScreenPanel): self.labels['darea'] = Gtk.DrawingArea() self.labels['darea'].connect("draw", self.on_draw) - box = Gtk.Box() - box.set_halign(Gtk.Align.CENTER) + box = Gtk.Box(halign=Gtk.Align.CENTER) self.labels['progress_text'] = Gtk.Label(label="0%") self.labels['progress_text'].get_style_context().add_class("printing-progress-text") box.add(self.labels['progress_text']) - overlay = Gtk.Overlay() - overlay.set_hexpand(True) + overlay = Gtk.Overlay(hexpand=True) overlay.add(self.labels['darea']) overlay.add_overlay(box) self.grid.attach(overlay, 0, 0, 1, 1) @@ -128,8 +122,7 @@ class Panel(ScreenPanel): self.buttons = {} self.create_buttons() - self.buttons['button_grid'] = self._gtk.HomogeneousGrid() - self.buttons['button_grid'].set_vexpand(False) + self.buttons['button_grid'] = Gtk.Grid(row_homogeneous=True, column_homogeneous=True, vexpand=False) self.grid.attach(self.buttons['button_grid'], 0, 3, 4, 1) self.create_status_grid() @@ -223,8 +216,7 @@ class Panel(ScreenPanel): n += 1 break - szfe = Gtk.Grid() - szfe.set_column_homogeneous(True) + szfe = Gtk.Grid(column_homogeneous=True) szfe.attach(self.buttons['speed'], 0, 0, 3, 1) szfe.attach(self.buttons['z'], 2, 0, 2, 1) if self._printer.get_tools(): @@ -232,8 +224,7 @@ class Panel(ScreenPanel): if self._printer.get_fans(): szfe.attach(self.buttons['fan'], 2, 1, 2, 1) - info = Gtk.Grid() - info.set_row_homogeneous(True) + info = Gtk.Grid(row_homogeneous=True) info.get_style_context().add_class("printing-info") info.attach(self.labels['temp_grid'], 0, 0, 1, 1) info.attach(szfe, 0, 1, 1, 2) @@ -247,10 +238,7 @@ class Panel(ScreenPanel): goback.set_hexpand(False) goback.get_style_context().add_class("printing-info") - info = Gtk.Grid() - info.set_hexpand(True) - info.set_vexpand(True) - info.set_halign(Gtk.Align.START) + info = Gtk.Grid(hexpand=True, vexpand=True, halign=Gtk.Align.START) info.get_style_context().add_class("printing-info-secondary") info.attach(goback, 0, 0, 1, 6) info.attach(self.labels['flow'], 1, 0, 1, 1) @@ -277,10 +265,7 @@ class Panel(ScreenPanel): pos_box.add(self.labels['pos_y']) pos_box.add(self.labels['pos_z']) - info = Gtk.Grid() - info.set_hexpand(True) - info.set_vexpand(True) - info.set_halign(Gtk.Align.START) + info = Gtk.Grid(hexpand=True, vexpand=True, halign=Gtk.Align.START) info.get_style_context().add_class("printing-info-secondary") info.attach(goback, 0, 0, 1, 6) info.attach(self.labels['speed_lbl'], 1, 0, 1, 1) @@ -383,7 +368,7 @@ class Panel(ScreenPanel): def save_offset(self, widget, device): sign = "+" if self.zoffset > 0 else "-" - label = Gtk.Label() + label = Gtk.Label(hexpand=True, vexpand=True, wrap=True) if device == "probe": probe = self._printer.get_probe() saved_z_offset = probe['z_offset'] if probe else "?" @@ -392,20 +377,12 @@ class Panel(ScreenPanel): + _("Saved offset: %s") % saved_z_offset) elif device == "endstop": label.set_label(_("Apply %s%.3f offset to Endstop?") % (sign, abs(self.zoffset))) - label.set_hexpand(True) - label.set_halign(Gtk.Align.CENTER) - label.set_vexpand(True) - label.set_valign(Gtk.Align.CENTER) - label.set_line_wrap(True) - label.set_line_wrap_mode(Pango.WrapMode.WORD_CHAR) - grid = self._gtk.HomogeneousGrid() - grid.attach(label, 0, 0, 1, 1) buttons = [ {"name": _("Apply"), "response": Gtk.ResponseType.APPLY, "style": 'dialog-default'}, {"name": _("Cancel"), "response": Gtk.ResponseType.CANCEL, "style": 'dialog-error'} ] - self._gtk.Dialog(_("Save Z"), buttons, grid, self.save_confirm, device) + self._gtk.Dialog(_("Save Z"), buttons, label, self.save_confirm, device) def save_confirm(self, dialog, response_id, device): self._gtk.remove_dialog(dialog) @@ -443,14 +420,8 @@ class Panel(ScreenPanel): ] if len(self._printer.get_stat("exclude_object", "objects")) > 1: buttons.insert(0, {"name": _("Exclude Object"), "response": Gtk.ResponseType.APPLY}) - label = Gtk.Label() + label = Gtk.Label(hexpand=True, vexpand=True, wrap=True) label.set_markup(_("Are you sure you wish to cancel this print?")) - label.set_hexpand(True) - label.set_halign(Gtk.Align.CENTER) - label.set_vexpand(True) - label.set_valign(Gtk.Align.CENTER) - label.set_line_wrap(True) - label.set_line_wrap_mode(Pango.WrapMode.WORD_CHAR) self._gtk.Dialog(_("Cancel"), buttons, label, self.cancel_confirm) def cancel_confirm(self, dialog, response_id): @@ -780,15 +751,12 @@ class Panel(ScreenPanel): buttons = [ {"name": _("Close"), "response": Gtk.ResponseType.CANCEL} ] - height = self._screen.height * .9 - self._gtk.font_size * 7.5 - pixbuf = self.get_file_image(self.filename, self._screen.width * .9, height) + pixbuf = self.get_file_image(self.filename, self._screen.width * .9, self._screen.height * .75) if pixbuf is None: return image = Gtk.Image.new_from_pixbuf(pixbuf) - box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) - box.add(image) - box.set_vexpand(True) - self._gtk.Dialog(self.filename, buttons, box, self.close_fullscreen_thumbnail) + image.set_vexpand(True) + self._gtk.Dialog(self.filename, buttons, image, self.close_fullscreen_thumbnail) def close_fullscreen_thumbnail(self, dialog, response_id): self._gtk.remove_dialog(dialog) diff --git a/panels/led.py b/panels/led.py index 698a0045..ee5f11fd 100644 --- a/panels/led.py +++ b/panels/led.py @@ -16,8 +16,8 @@ class Panel(ScreenPanel): self.preview = Gtk.DrawingArea(width_request=self.da_size, height_request=self.da_size) self.preview.set_size_request(-1, self.da_size * 2) self.preview.connect("draw", self.on_draw) - self.preview_label = Gtk.Label(label='') - self.preset_list = self._gtk.HomogeneousGrid() + self.preview_label = Gtk.Label() + self.preset_list = Gtk.Grid(row_homogeneous=True, column_homogeneous=True) self.color_data = [0, 0, 0, 0] self.color_order = 'RGBW' self.presets = {"off": [0.0, 0.0, 0.0, 0.0]} @@ -61,7 +61,7 @@ class Panel(ScreenPanel): def led_selector(self): self.current_led = None columns = 3 if self._screen.vertical_mode else 4 - grid = self._gtk.HomogeneousGrid() + grid = Gtk.Grid(row_homogeneous=True, column_homogeneous=True) for i, led in enumerate(self.leds): name = led.split()[1] if len(led.split()) > 1 else led button = self._gtk.Button(None, name.upper(), style=f"color{(i % 4) + 1}") @@ -75,7 +75,7 @@ class Panel(ScreenPanel): logging.info(led) self.current_led = led self.set_title(f"{self.current_led}") - grid = self._gtk.HomogeneousGrid() + grid = Gtk.Grid(row_homogeneous=True, column_homogeneous=True) self.color_order = self._printer.get_led_color_order(led) if self.color_order is None: logging.error("Error: Color order is None") @@ -83,7 +83,7 @@ class Panel(ScreenPanel): return on = [1 if self.color_available(i) else 0 for i in range(4)] self.presets["on"] = on - scale_grid = self._gtk.HomogeneousGrid() + scale_grid = Gtk.Grid(row_homogeneous=True, column_homogeneous=True) for idx, col_value in enumerate(self.color_data): if not self.color_available(idx): continue @@ -95,7 +95,7 @@ class Panel(ScreenPanel): button.set_image(preview) button.connect("clicked", self.apply_preset, color) button.set_hexpand(False) - scale = Gtk.Scale.new_with_range(orientation=Gtk.Orientation.HORIZONTAL, min=0, max=255, step=1) + scale = Gtk.Scale.new_with_range(Gtk.Orientation.HORIZONTAL, min=0, max=255, step=1) scale.set_value(round(col_value * 255)) scale.set_digits(0) scale.set_hexpand(True) @@ -126,10 +126,9 @@ class Panel(ScreenPanel): scroll = self._gtk.ScrolledWindow() scroll.add(self.preset_list) - preview_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) + preview_box = Gtk.Box(homogeneous=True) preview_box.add(self.preview_label) preview_box.add(self.preview) - preview_box.set_homogeneous(True) box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) box.add(preview_box) box.add(scroll) diff --git a/panels/limits.py b/panels/limits.py index 2c81c5b8..bd8ac996 100644 --- a/panels/limits.py +++ b/panels/limits.py @@ -69,21 +69,14 @@ class Panel(ScreenPanel): def add_option(self, option, optname, units, value): logging.info(f"Adding option: {option}") - name = Gtk.Label() + name = Gtk.Label(hexpand=True, vexpand=True, halign=Gtk.Align.START, valign=Gtk.Align.CENTER, + wrap=True, wrap_mode=Pango.WrapMode.WORD_CHAR) name.set_markup(f"{optname} ({units})") - name.set_hexpand(True) - name.set_vexpand(True) - 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) # adj (value, lower, upper, step_increment, page_increment, page_size) adj = Gtk.Adjustment(value, 1, (value * 1.5), 1, 5, 0) - scale = Gtk.Scale.new(orientation=Gtk.Orientation.HORIZONTAL, adjustment=adj) - scale.set_digits(0) - scale.set_hexpand(True) - scale.set_has_origin(True) + scale = Gtk.Scale(adjustment=adj, + digits=0, hexpand=True, has_origin=True) scale.get_style_context().add_class("option_slider") scale.connect("button-release-event", self.set_opt_value, option) self.values[option] = value diff --git a/panels/main_menu.py b/panels/main_menu.py index 46a1f29b..7f2bab0e 100644 --- a/panels/main_menu.py +++ b/panels/main_menu.py @@ -16,9 +16,7 @@ class Panel(MenuPanel): self.graph_update = None self.active_heater = None self.h = self.f = 0 - self.main_menu = self._gtk.HomogeneousGrid() - self.main_menu.set_hexpand(True) - self.main_menu.set_vexpand(True) + self.main_menu = Gtk.Grid(row_homogeneous=True, column_homogeneous=True, hexpand=True, vexpand=True) scroll = self._gtk.ScrolledWindow() self.numpad_visible = False @@ -215,26 +213,24 @@ class Panel(MenuPanel): def create_left_panel(self): - self.labels['devices'] = Gtk.Grid() + self.labels['devices'] = Gtk.Grid(vexpand=False) self.labels['devices'].get_style_context().add_class('heater-grid') - self.labels['devices'].set_vexpand(False) name = Gtk.Label() - temp = Gtk.Label(_("Temp (°C)")) + temp = Gtk.Label(label=_("Temp (°C)")) temp.get_style_context().add_class("heater-grid-temp") self.labels['devices'].attach(name, 0, 0, 1, 1) self.labels['devices'].attach(temp, 1, 0, 1, 1) self.labels['da'] = HeaterGraph(self._printer, self._gtk.font_size) - self.labels['da'].set_vexpand(True) scroll = self._gtk.ScrolledWindow(steppers=False) scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) scroll.get_style_context().add_class('heater-list') scroll.add(self.labels['devices']) - self.left_panel = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0) + self.left_panel = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.left_panel.add(scroll) for d in self._printer.get_temp_devices(): diff --git a/panels/menu.py b/panels/menu.py index 5356cd3a..344d3306 100644 --- a/panels/menu.py +++ b/panels/menu.py @@ -15,7 +15,7 @@ class Panel(ScreenPanel): self.items = items self.j2_data = self._printer.get_printer_status_data() self.create_menu_items() - self.grid = self._gtk.HomogeneousGrid() + self.grid = Gtk.Grid(row_homogeneous=True, column_homogeneous=True) self.scroll = self._gtk.ScrolledWindow() self.scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) diff --git a/panels/move.py b/panels/move.py index 4ed1e044..8a2e4859 100644 --- a/panels/move.py +++ b/panels/move.py @@ -49,7 +49,7 @@ class Panel(ScreenPanel): adjust = self._gtk.Button("settings", None, "color2", 1, Gtk.PositionType.LEFT, 1) adjust.connect("clicked", self.load_menu, 'options', _('Settings')) adjust.set_hexpand(False) - grid = self._gtk.HomogeneousGrid() + grid = Gtk.Grid(row_homogeneous=True, column_homogeneous=True) if self._screen.vertical_mode: if self._screen.lang_ltr: grid.attach(self.buttons['x+'], 2, 1, 1, 1) @@ -98,9 +98,9 @@ class Panel(ScreenPanel): for p in ('pos_x', 'pos_y', 'pos_z'): self.labels[p] = Gtk.Label() - self.labels['move_dist'] = Gtk.Label(_("Move Distance (mm)")) + self.labels['move_dist'] = Gtk.Label(label=_("Move Distance (mm)")) - bottomgrid = self._gtk.HomogeneousGrid() + bottomgrid = Gtk.Grid(row_homogeneous=True, column_homogeneous=True) bottomgrid.set_direction(Gtk.TextDirection.LTR) bottomgrid.attach(self.labels['pos_x'], 0, 0, 1, 1) bottomgrid.attach(self.labels['pos_y'], 1, 0, 1, 1) @@ -109,7 +109,7 @@ class Panel(ScreenPanel): if not self._screen.vertical_mode: bottomgrid.attach(adjust, 3, 0, 1, 2) - self.labels['move_menu'] = self._gtk.HomogeneousGrid() + self.labels['move_menu'] = Gtk.Grid(row_homogeneous=True, column_homogeneous=True) self.labels['move_menu'].attach(grid, 0, 0, 1, 3) self.labels['move_menu'].attach(bottomgrid, 0, 3, 1, 1) self.labels['move_menu'].attach(distgrid, 0, 4, 1, 1) @@ -194,37 +194,27 @@ class Panel(ScreenPanel): self._screen._ws.klippy.gcode_script("G90") def add_option(self, boxname, opt_array, opt_name, option): - name = Gtk.Label() + name = Gtk.Label(hexpand=True, vexpand=True, halign=Gtk.Align.START, valign=Gtk.Align.CENTER, wrap=True) name.set_markup(f"{option['name']}") - name.set_hexpand(True) - name.set_vexpand(True) - 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) - dev = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5) + dev = Gtk.Box(spacing=5, + hexpand=True, vexpand=False, valign=Gtk.Align.CENTER) dev.get_style_context().add_class("frame-item") - dev.set_hexpand(True) - dev.set_vexpand(False) - dev.set_valign(Gtk.Align.CENTER) dev.add(name) if option['type'] == "binary": - box = Gtk.Box() - box.set_vexpand(False) - switch = Gtk.Switch() - switch.set_hexpand(False) - switch.set_vexpand(False) - switch.set_active(self._config.get_config().getboolean(option['section'], opt_name)) + box = Gtk.Box(hexpand=False) + switch = Gtk.Switch(hexpand=False, vexpand=False, + width_request=round(self._gtk.font_size * 7), + height_request=round(self._gtk.font_size * 3.5), + active=self._config.get_config().getboolean(option['section'], opt_name)) switch.connect("notify::active", self.switch_config_option, option['section'], opt_name) - switch.set_property("width-request", round(self._gtk.font_size * 7)) - switch.set_property("height-request", round(self._gtk.font_size * 3.5)) box.add(switch) dev.add(box) elif option['type'] == "scale": dev.set_orientation(Gtk.Orientation.VERTICAL) - scale = Gtk.Scale.new_with_range(orientation=Gtk.Orientation.HORIZONTAL, + scale = Gtk.Scale.new_with_range(Gtk.Orientation.HORIZONTAL, min=option['range'][0], max=option['range'][1], step=option['step']) scale.set_hexpand(True) scale.set_value(int(self._config.get_config().get(option['section'], opt_name, fallback=option['value']))) diff --git a/panels/network.py b/panels/network.py index 399548c2..6a7f7a9c 100644 --- a/panels/network.py +++ b/panels/network.py @@ -56,18 +56,14 @@ class Panel(ScreenPanel): self.labels['networks'] = {} - self.labels['interface'] = Gtk.Label() + self.labels['interface'] = Gtk.Label(hexpand=True) self.labels['interface'].set_text(" %s: %s " % (_("Interface"), self.interface)) - self.labels['interface'].set_hexpand(True) - self.labels['ip'] = Gtk.Label() - self.labels['ip'].set_hexpand(True) + self.labels['ip'] = Gtk.Label(hexpand=True) reload_networks = self._gtk.Button("refresh", None, "color1", .66) reload_networks.connect("clicked", self.reload_networks) reload_networks.set_hexpand(False) - sbox = Gtk.Box() - sbox.set_hexpand(True) - sbox.set_vexpand(False) + sbox = Gtk.Box(hexpand=True, vexpand=False) sbox.add(self.labels['interface']) if ip is not None: self.labels['ip'].set_text(f"IP: {ip} ") @@ -76,8 +72,7 @@ class Panel(ScreenPanel): scroll = self._gtk.ScrolledWindow() - box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0) - box.set_vexpand(True) + box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, vexpand=True) self.labels['networklist'] = Gtk.Grid() @@ -142,21 +137,14 @@ class Panel(ScreenPanel): if connected_ssid == ssid: display_name += " (" + _("Connected") + ")" - name = Gtk.Label() + name = Gtk.Label(hexpand=True, halign=Gtk.Align.START, wrap=True, wrap_mode=Pango.WrapMode.WORD_CHAR) name.set_markup(f"{display_name}") - name.set_hexpand(True) - name.set_halign(Gtk.Align.START) - name.set_line_wrap(True) - name.set_line_wrap_mode(Pango.WrapMode.WORD_CHAR) - info = Gtk.Label() - info.set_halign(Gtk.Align.START) - labels = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) + info = Gtk.Label(halign=Gtk.Align.START) + labels = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, vexpand=True, + halign=Gtk.Align.START, valign=Gtk.Align.CENTER) labels.add(name) labels.add(info) - labels.set_vexpand(True) - labels.set_valign(Gtk.Align.CENTER) - labels.set_halign(Gtk.Align.START) connect = self._gtk.Button("load", None, "color3", .66) connect.connect("clicked", self.connect_network, ssid) @@ -168,14 +156,12 @@ class Panel(ScreenPanel): delete.set_hexpand(False) delete.set_halign(Gtk.Align.END) - network = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5) + network = Gtk.Box(spacing=5, hexpand=True, vexpand=False) network.get_style_context().add_class("frame-item") - network.set_hexpand(True) - network.set_vexpand(False) network.add(labels) - buttons = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5) + buttons = Gtk.Box(spacing=5) if network_id != -1 or netinfo['connected']: buttons.pack_end(connect, False, False, 0) buttons.pack_end(delete, False, False, 0) @@ -281,9 +267,8 @@ class Panel(ScreenPanel): ] scroll = self._gtk.ScrolledWindow() - self.labels['connecting_info'] = Gtk.Label(_("Starting WiFi Association")) - self.labels['connecting_info'].set_halign(Gtk.Align.START) - self.labels['connecting_info'].set_valign(Gtk.Align.START) + self.labels['connecting_info'] = Gtk.Label( + label=_("Starting WiFi Association"), halign=Gtk.Align.START, valign=Gtk.Align.START) scroll.add(self.labels['connecting_info']) self._gtk.Dialog(_("Starting WiFi Association"), buttons, scroll, self._gtk.remove_dialog) self._screen.show_all() @@ -333,11 +318,8 @@ class Panel(ScreenPanel): if "add_network" in self.labels: del self.labels['add_network'] - label = self._gtk.Label(_("PSK for") + ' ssid') - label.set_hexpand(False) - self.labels['network_psk'] = Gtk.Entry() - self.labels['network_psk'].set_text('') - self.labels['network_psk'].set_hexpand(True) + label = Gtk.Label(label=_("PSK for") + ' ssid', hexpand=False) + self.labels['network_psk'] = Gtk.Entry(hexpand=True) self.labels['network_psk'].connect("activate", self.add_new_network, ssid, True) self.labels['network_psk'].connect("focus-in-event", self._screen.show_keyboard) @@ -349,10 +331,8 @@ class Panel(ScreenPanel): box.pack_start(self.labels['network_psk'], True, True, 5) box.pack_start(save, False, False, 5) - self.labels['add_network'] = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=5) - self.labels['add_network'].set_valign(Gtk.Align.CENTER) - self.labels['add_network'].set_hexpand(True) - self.labels['add_network'].set_vexpand(True) + self.labels['add_network'] = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=5, valign=Gtk.Align.CENTER, + hexpand=True, vexpand=True) self.labels['add_network'].pack_start(label, True, True, 5) self.labels['add_network'].pack_start(box, True, True, 5) diff --git a/panels/notifications.py b/panels/notifications.py index 5be1c30f..38a40e0c 100644 --- a/panels/notifications.py +++ b/panels/notifications.py @@ -26,9 +26,7 @@ class Panel(ScreenPanel): tv.set_buffer(self.tb) tv.connect("size-allocate", self._autoscroll) - scroll = Gtk.ScrolledWindow() - scroll.set_hexpand(True) - scroll.set_vexpand(True) + scroll = Gtk.ScrolledWindow(hexpand=True, vexpand=True) scroll.add(tv) self.content.add(scroll) diff --git a/panels/pins.py b/panels/pins.py index 35aa7cc6..87c7524b 100644 --- a/panels/pins.py +++ b/panels/pins.py @@ -12,8 +12,7 @@ class Panel(ScreenPanel): super().__init__(screen, title) self.devices = {} # Create a grid for all devices - self.labels['devices'] = Gtk.Grid() - self.labels['devices'].set_valign(Gtk.Align.CENTER) + self.labels['devices'] = Gtk.Grid(valign=Gtk.Align.CENTER) self.load_pins() @@ -34,16 +33,11 @@ class Panel(ScreenPanel): def add_pin(self, pin): logging.info(f"Adding pin: {pin}") - name = Gtk.Label() + name = Gtk.Label( + hexpand=True, vexpand=True, halign=Gtk.Align.START, valign=Gtk.Align.CENTER, + wrap=True, wrap_mode=Pango.WrapMode.WORD_CHAR) name.set_markup(f'\n{" ".join(pin.split(" ")[1:])}\n') - name.set_hexpand(True) - name.set_vexpand(True) - 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) - - scale = Gtk.Scale.new_with_range(orientation=Gtk.Orientation.HORIZONTAL, min=0, max=100, step=1) + scale = Gtk.Scale.new_with_range(Gtk.Orientation.HORIZONTAL, min=0, max=100, step=1) scale.set_value(self.check_pin_value(pin)) scale.set_digits(0) scale.set_hexpand(True) @@ -55,7 +49,7 @@ class Panel(ScreenPanel): min_btn.set_hexpand(False) min_btn.connect("clicked", self.update_pin_value, pin, 0) - pin_col = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5) + pin_col = Gtk.Box(spacing=5) pin_col.add(min_btn) pin_col.add(scale) diff --git a/panels/power.py b/panels/power.py index feeb8b36..d550c06c 100644 --- a/panels/power.py +++ b/panels/power.py @@ -12,8 +12,7 @@ class Panel(ScreenPanel): self.devices = {} # Create a grid for all devices - self.labels['devices'] = Gtk.Grid() - self.labels['devices'].set_valign(Gtk.Align.CENTER) + self.labels['devices'] = Gtk.Grid(valign=Gtk.Align.CENTER) self.load_power_devices() @@ -32,29 +31,20 @@ class Panel(ScreenPanel): self.devices[x]['switch'].connect("notify::active", self.on_switch, x) def add_device(self, device): - name = Gtk.Label() + name = Gtk.Label( + hexpand=True, vexpand=True, halign=Gtk.Align.START, valign=Gtk.Align.CENTER, + wrap=True, wrap_mode=Pango.WrapMode.WORD_CHAR) name.set_markup(f"{device}") - name.set_hexpand(True) - name.set_vexpand(True) - 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) - - switch = Gtk.Switch() - switch.set_hexpand(False) - switch.set_active(self._printer.get_power_device_status(device) == "on") + switch = Gtk.Switch(hexpand=False, active=(self._printer.get_power_device_status(device) == "on"), + width_request=round(self._gtk.font_size * 7), + height_request=round(self._gtk.font_size * 3.5)) switch.connect("notify::active", self.on_switch, device) - switch.set_property("width-request", round(self._gtk.font_size * 7)) - switch.set_property("height-request", round(self._gtk.font_size * 3.5)) labels = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) labels.add(name) - dev = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5) - dev.set_hexpand(True) - dev.set_vexpand(False) - dev.set_valign(Gtk.Align.CENTER) + dev = Gtk.Box( + spacing=5, hexpand=True, vexpand=False, valign=Gtk.Align.CENTER) dev.add(labels) dev.add(switch) diff --git a/panels/print.py b/panels/print.py index e02020b1..719a804b 100644 --- a/panels/print.py +++ b/panels/print.py @@ -36,8 +36,7 @@ class Panel(ScreenPanel): self.space = ' ' if self._screen.width > 480 else '\n' logging.info(f"24h time is {self.time_24}") - sbox = Gtk.Box(spacing=0) - sbox.set_vexpand(False) + sbox = Gtk.Box(hexpand=True, vexpand=False) for i, (name, val) in enumerate(self.sort_items.items(), start=1): s = self._gtk.Button(None, val, f"color{i % 4}", .5, Gtk.PositionType.RIGHT, 1) s.get_style_context().add_class("buttons_slim") @@ -50,18 +49,13 @@ class Panel(ScreenPanel): refresh.get_style_context().add_class("buttons_slim") refresh.connect('clicked', self._refresh_files) sbox.add(refresh) - sbox.set_hexpand(True) - sbox.set_vexpand(False) - pbox = Gtk.Box(spacing=0) - pbox.set_hexpand(True) - pbox.set_vexpand(False) + pbox = Gtk.Box(hexpand=True, vexpand=False) self.labels['path'] = Gtk.Label() pbox.add(self.labels['path']) self.labels['path_box'] = pbox - self.main = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0) - self.main.set_vexpand(True) + self.main = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, vexpand=True) self.main.pack_start(sbox, False, False, 0) self.main.pack_start(pbox, False, False, 0) self.main.pack_start(self.scroll, True, True, 0) @@ -156,22 +150,14 @@ class Panel(ScreenPanel): return False def _create_row(self, fullpath, filename=None): - name = Gtk.Label() + name = Gtk.Label(hexpand=True, halign=Gtk.Align.START, wrap=True, wrap_mode=Pango.WrapMode.CHAR) name.get_style_context().add_class("print-filename") if filename: name.set_markup(f'{os.path.splitext(filename)[0].replace("_", " ")}') else: name.set_markup(f"{os.path.split(fullpath)[-1]}") - name.set_hexpand(True) - name.set_halign(Gtk.Align.START) - name.set_line_wrap(True) - name.set_line_wrap_mode(Pango.WrapMode.CHAR) - info = Gtk.Label() - name.set_line_wrap(True) - info.set_line_wrap_mode(Pango.WrapMode.CHAR) - info.set_hexpand(True) - info.set_halign(Gtk.Align.START) + info = Gtk.Label(hexpand=True, halign=Gtk.Align.START, wrap=True, wrap_mode=Pango.WrapMode.CHAR) info.get_style_context().add_class("print-info") delete = self._gtk.Button("delete", style="color1", scale=self.bts) @@ -201,10 +187,8 @@ class Panel(ScreenPanel): delete.connect("clicked", self.confirm_delete_file, f"gcodes/{fullpath}") - row = Gtk.Grid() + row = Gtk.Grid(hexpand=True, vexpand=False) row.get_style_context().add_class("frame-item") - row.set_hexpand(True) - row.set_vexpand(False) row.attach(icon, 0, 0, 1, 2) row.attach(name, 1, 0, 3, 1) row.attach(info, 1, 1, 1, 1) @@ -303,28 +287,19 @@ class Panel(ScreenPanel): {"name": _("Cancel"), "response": Gtk.ResponseType.CANCEL, "style": 'dialog-error'} ] - label = Gtk.Label() + label = Gtk.Label(hexpand=True, vexpand=True, wrap=True, wrap_mode=Pango.WrapMode.WORD_CHAR) label.set_markup(f"{filename}\n") - label.set_hexpand(True) - label.set_halign(Gtk.Align.CENTER) - label.set_vexpand(True) - label.set_valign(Gtk.Align.CENTER) - label.set_line_wrap(True) - label.set_line_wrap_mode(Pango.WrapMode.WORD_CHAR) - grid = Gtk.Grid() - grid.set_vexpand(True) - grid.set_halign(Gtk.Align.CENTER) - grid.set_valign(Gtk.Align.CENTER) - grid.add(label) + box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) + box.add(label) height = self._screen.height * .9 - self._gtk.font_size * 10 pixbuf = self.get_file_image(filename, self._screen.width * .9, height) if pixbuf is not None: image = Gtk.Image.new_from_pixbuf(pixbuf) - grid.attach_next_to(image, label, Gtk.PositionType.BOTTOM, 1, 1) + box.add(image) - self._gtk.Dialog(_("Print") + f' {filename}', buttons, grid, self.confirm_print_response, filename) + self._gtk.Dialog(_("Print") + f' {filename}', buttons, box, self.confirm_print_response, filename) def confirm_print_response(self, dialog, response_id, filename): self._gtk.remove_dialog(dialog) @@ -433,12 +408,8 @@ class Panel(ScreenPanel): self.showing_rename = True def _create_rename_box(self, fullpath): - lbl = self._gtk.Label(_("Rename/Move:")) - lbl.set_halign(Gtk.Align.START) - lbl.set_hexpand(False) - self.labels['new_name'] = Gtk.Entry() - self.labels['new_name'].set_text(fullpath) - self.labels['new_name'].set_hexpand(True) + lbl = Gtk.Label(label=_("Rename/Move:"), halign=Gtk.Align.START, hexpand=False) + self.labels['new_name'] = Gtk.Entry(text=fullpath, hexpand=True) self.labels['new_name'].connect("activate", self.rename) self.labels['new_name'].connect("focus-in-event", self._screen.show_keyboard) @@ -450,10 +421,8 @@ class Panel(ScreenPanel): box.pack_start(self.labels['new_name'], True, True, 5) box.pack_start(save, False, False, 5) - self.labels['rename_file'] = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=5) - self.labels['rename_file'].set_valign(Gtk.Align.CENTER) - self.labels['rename_file'].set_hexpand(True) - self.labels['rename_file'].set_vexpand(True) + self.labels['rename_file'] = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=5, + hexpand=True, vexpand=True, valign=Gtk.Align.CENTER) self.labels['rename_file'].pack_start(lbl, True, True, 5) self.labels['rename_file'].pack_start(box, True, True, 5) diff --git a/panels/printer_select.py b/panels/printer_select.py index 25647c34..90556162 100644 --- a/panels/printer_select.py +++ b/panels/printer_select.py @@ -10,7 +10,7 @@ class Panel(ScreenPanel): super().__init__(screen, title) printers = self._config.get_printers() - grid = self._gtk.HomogeneousGrid() + grid = Gtk.Grid(row_homogeneous=True, column_homogeneous=True) scroll = self._gtk.ScrolledWindow() scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) scroll.add(grid) diff --git a/panels/retraction.py b/panels/retraction.py index c0259102..e03961a3 100644 --- a/panels/retraction.py +++ b/panels/retraction.py @@ -106,22 +106,16 @@ class Panel(ScreenPanel): def add_option(self, option, optname, units, value, digits, maxval): logging.info(f"Adding option: {option}") - name = Gtk.Label() + name = Gtk.Label( + hexpand=True, vexpand=True, halign=Gtk.Align.START, valign=Gtk.Align.CENTER, + wrap=True, wrap_mode=Pango.WrapMode.WORD_CHAR) name.set_markup(f"{optname} ({units})") - name.set_hexpand(True) - name.set_vexpand(True) - 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) minimum = 1 if option in ["retract_speed", "unretract_speed"] else 0 self.values[option] = value # adj (value, lower, upper, step_increment, page_increment, page_size) adj = Gtk.Adjustment(value, minimum, maxval, 1, 5, 0) - scale = Gtk.Scale.new(orientation=Gtk.Orientation.HORIZONTAL, adjustment=adj) - scale.set_digits(digits) - scale.set_hexpand(True) - scale.set_has_origin(True) + scale = Gtk.Scale(adjustment=adj, digits=digits, hexpand=True, + has_origin=True) scale.get_style_context().add_class("option_slider") scale.connect("button-release-event", self.set_opt_value, option) diff --git a/panels/settings.py b/panels/settings.py index c9f4107a..5b8fcc8a 100644 --- a/panels/settings.py +++ b/panels/settings.py @@ -68,28 +68,21 @@ class Panel(ScreenPanel): def add_option(self, boxname, opt_array, opt_name, option): if option['type'] is None: return - name = Gtk.Label() + name = Gtk.Label( + hexpand=True, vexpand=True, halign=Gtk.Align.START, valign=Gtk.Align.CENTER, + wrap=True, wrap_mode=Pango.WrapMode.WORD_CHAR) name.set_markup(f"{option['name']}") - name.set_hexpand(True) - name.set_vexpand(True) - 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) labels = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) labels.add(name) - dev = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5) + dev = Gtk.Box(spacing=5, + valign=Gtk.Align.CENTER, hexpand=True, vexpand=False) dev.get_style_context().add_class("frame-item") - dev.set_hexpand(True) - dev.set_vexpand(False) - dev.set_valign(Gtk.Align.CENTER) dev.add(labels) if option['type'] == "binary": - switch = Gtk.Switch() - switch.set_active(self._config.get_config().getboolean(option['section'], opt_name)) + switch = Gtk.Switch(active=self._config.get_config().getboolean(option['section'], opt_name)) switch.connect("notify::active", self.switch_config_option, option['section'], opt_name, option['callback'] if "callback" in option else None) dev.add(switch) @@ -105,7 +98,7 @@ class Panel(ScreenPanel): dev.add(dropdown) elif option['type'] == "scale": dev.set_orientation(Gtk.Orientation.VERTICAL) - scale = Gtk.Scale.new_with_range(orientation=Gtk.Orientation.HORIZONTAL, + scale = Gtk.Scale.new_with_range(Gtk.Orientation.HORIZONTAL, min=option['range'][0], max=option['range'][1], step=option['step']) scale.set_hexpand(True) scale.set_value(int(self._config.get_config().get(option['section'], opt_name, fallback=option['value']))) @@ -113,8 +106,7 @@ class Panel(ScreenPanel): scale.connect("button-release-event", self.scale_moved, option['section'], opt_name) dev.add(scale) elif option['type'] == "printer": - box = Gtk.Box() - box.set_vexpand(False) + box = Gtk.Box(vexpand=False) label = Gtk.Label(f"{option['moonraker_host']}:{option['moonraker_port']}") box.add(label) dev.add(box) diff --git a/panels/splash_screen.py b/panels/splash_screen.py index fbf5d459..863a5f0a 100644 --- a/panels/splash_screen.py +++ b/panels/splash_screen.py @@ -12,11 +12,9 @@ class Panel(ScreenPanel): def __init__(self, screen, title): super().__init__(screen, title) image = self._gtk.Image("klipper", self._gtk.content_width * .2, self._gtk.content_height * .5) - self.labels['text'] = Gtk.Label(_("Initializing printer...")) - self.labels['text'].set_line_wrap(True) - self.labels['text'].set_line_wrap_mode(Pango.WrapMode.WORD_CHAR) - self.labels['text'].set_halign(Gtk.Align.CENTER) - self.labels['text'].set_valign(Gtk.Align.CENTER) + self.labels['text'] = Gtk.Label( + label=_("Initializing printer..."), wrap=True, wrap_mode=Pango.WrapMode.WORD_CHAR, + halign=Gtk.Align.CENTER, valign=Gtk.Align.CENTER) self.labels['menu'] = self._gtk.Button("settings", _("Menu"), "color4") self.labels['menu'].connect("clicked", self._screen._go_to_submenu, "") @@ -31,23 +29,17 @@ class Panel(ScreenPanel): self.labels['retry'] = self._gtk.Button("load", _('Retry'), "color3") self.labels['retry'].connect("clicked", self.retry) - self.labels['actions'] = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) - self.labels['actions'].set_hexpand(True) - self.labels['actions'].set_vexpand(False) - self.labels['actions'].set_halign(Gtk.Align.CENTER) - self.labels['actions'].set_homogeneous(True) - self.labels['actions'].set_size_request(self._gtk.content_width - 30, -1) + self.labels['actions'] = Gtk.Box(hexpand=True, vexpand=False, homogeneous=True) scroll = self._gtk.ScrolledWindow() - scroll.set_hexpand(True) scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) scroll.add(self.labels['text']) - info = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=0) + info = Gtk.Box() info.pack_start(image, False, True, 8) info.pack_end(scroll, True, True, 8) - main = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0) + main = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) main.pack_start(info, True, True, 8) main.pack_end(self.labels['actions'], False, False, 0) diff --git a/panels/spoolman.py b/panels/spoolman.py index a727cdd6..ba885e1f 100644 --- a/panels/spoolman.py +++ b/panels/spoolman.py @@ -174,9 +174,6 @@ class Panel(ScreenPanel): else: self.scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) - sbox = Gtk.Box(spacing=0) - sbox.set_vexpand(False) - clear_active_spool = self._gtk.Button("cancel", _("Clear"), "color2", self.bts, Gtk.PositionType.LEFT, 1) clear_active_spool.get_style_context().add_class("buttons_slim") clear_active_spool.connect('clicked', self.clear_active_spool) @@ -193,48 +190,38 @@ class Panel(ScreenPanel): sort_btn_used.connect("clicked", self.change_sort, "last_used") sort_btn_used.get_style_context().add_class("buttons_slim") - switch = Gtk.Switch() - switch.set_hexpand(False) - switch.set_vexpand(False) + switch = Gtk.Switch(hexpand=False, vexpand=False) switch.set_active(self._config.get_config().getboolean("spoolman", "hide_archived", fallback=True)) switch.connect("notify::active", self.switch_config_option, "spoolman", "hide_archived", self.load_spools) - name = Gtk.Label() + name = Gtk.Label(halign=Gtk.Align.START, valign=Gtk.Align.CENTER, wrap=True, wrap_mode=Pango.WrapMode.WORD_CHAR) name.set_markup(_("Archived")) - 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) - archived = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) - archived.set_valign(Gtk.Align.CENTER) + archived = Gtk.Box(valign=Gtk.Align.CENTER) archived.add(name) archived.add(switch) + sbox = Gtk.Box(hexpand=True, vexpand=False) sbox.pack_start(sort_btn_id, True, True, 0) sbox.pack_start(sort_btn_used, True, True, 0) sbox.pack_start(clear_active_spool, True, True, 0) sbox.pack_start(refresh, True, True, 0) sbox.pack_start(archived, False, False, 5) - sbox.set_hexpand(True) - sbox.set_vexpand(False) - filter_box = Gtk.ListBox() - filter_box.set_selection_mode(Gtk.SelectionMode.NONE) + filter_box = Gtk.ListBox(selection_mode=Gtk.SelectionMode.NONE) self._filter_expander = Gtk.Expander(label=_("Filter")) self._filter_expander.add(filter_box) row = Gtk.ListBoxRow() - hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5) + hbox = Gtk.Box(spacing=5) row.add(hbox) label = Gtk.Label(_("Material")) - _material_filter = Gtk.ComboBox.new_with_model(self._materials) + _material_filter = Gtk.ComboBox(model=self._materials, hexpand=True) _material_filter.connect("changed", self._on_material_filter_changed) cellrenderertext = Gtk.CellRendererText() _material_filter.pack_start(cellrenderertext, True) _material_filter.add_attribute(cellrenderertext, "text", 1) - _material_filter.set_hexpand(True) _material_reset_filter = self._gtk.Button("cancel", _("Clear"), "color2", self.bts, Gtk.PositionType.LEFT, 1) _material_reset_filter.get_style_context().add_class("buttons_slim") @@ -246,21 +233,17 @@ class Panel(ScreenPanel): filter_box.add(row) - self.main = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0) - self.main.set_vexpand(True) + self.main = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, vexpand=True) self.main.pack_start(sbox, False, False, 0) self.main.pack_start(self._filter_expander, False, True, 0) self.main.pack_start(self.scroll, True, True, 0) self.load_spools() self.get_active_spool() - self._treeview = Gtk.TreeView(model=sortable) - self._treeview.set_headers_visible(False) - self._treeview.set_show_expanders(False) + self._treeview = Gtk.TreeView(model=sortable, headers_visible=False, show_expanders=False) text_renderer = Gtk.CellRendererText() - pixbuf_renderer = Gtk.CellRendererPixbuf() - pixbuf_renderer.set_padding(5, 5) + pixbuf_renderer = Gtk.CellRendererPixbuf(xpad=5, ypad=5) checkbox_renderer = Gtk.CellRendererToggle() column_id = Gtk.TreeViewColumn(cell_renderer=text_renderer) column_id.set_cell_data_func( diff --git a/panels/system.py b/panels/system.py index 2bb4e052..375d0450 100644 --- a/panels/system.py +++ b/panels/system.py @@ -30,8 +30,7 @@ class Panel(ScreenPanel): super().__init__(screen, title) self.refresh = None self.update_dialog = None - grid = self._gtk.HomogeneousGrid() - grid.set_row_homogeneous(False) + grid = Gtk.Grid(column_homogeneous=True) update_all = self._gtk.Button('arrow-up', _('Full Update'), 'color1') update_all.connect("clicked", self.show_update_info, "full") @@ -123,29 +122,23 @@ class Panel(ScreenPanel): info = self.update_status['version_info'][program] if program in self.update_status['version_info'] else {} scroll = self._gtk.ScrolledWindow(steppers=False) - scroll.set_size_request(self._gtk.width - 30, self._gtk.height * .6) scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) - vbox.set_halign(Gtk.Align.CENTER) - vbox.set_valign(Gtk.Align.CENTER) - label = Gtk.Label() - label.set_line_wrap(True) + label = Gtk.Label(wrap=True, vexpand=True) if program == "full": label.set_markup('' + _("Perform a full upgrade?") + '') vbox.add(label) elif 'configured_type' in info and info['configured_type'] == 'git_repo': if not info['is_valid'] or info['is_dirty']: label.set_markup(_("Do you want to recover %s?") % program) - vbox.add(label) - scroll.add(vbox) recoverybuttons = [ {"name": _("Recover Hard"), "response": Gtk.ResponseType.OK, "style": 'dialog-warning'}, {"name": _("Recover Soft"), "response": Gtk.ResponseType.APPLY, "style": 'dialog-info'}, {"name": _("Cancel"), "response": Gtk.ResponseType.CANCEL, "style": 'dialog-error'} ] - self._gtk.Dialog(_("Recover"), recoverybuttons, scroll, self.reset_confirm, program) + self._gtk.Dialog(_("Recover"), recoverybuttons, label, self.reset_confirm, program) return else: if info['version'] == info['remote_version']: @@ -156,19 +149,14 @@ class Panel(ScreenPanel): " " + ngettext("commit", "commits", ncommits) + ":\n") vbox.add(label) - + label.set_vexpand(False) for c in info['commits_behind']: commit_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) - title = Gtk.Label() - title.set_line_wrap(True) - title.set_line_wrap_mode(Pango.WrapMode.CHAR) + title = Gtk.Label(wrap=True, hexpand=True) title.set_markup(f"\n{c['subject']}\n{c['author']}\n") - title.set_halign(Gtk.Align.START) commit_box.add(title) - details = Gtk.Label(label=f"{c['message']}") - details.set_line_wrap(True) - details.set_halign(Gtk.Align.START) + details = Gtk.Label(label=f"{c['message']}", wrap=True, hexpand=True) commit_box.add(details) commit_box.add(Gtk.Separator()) vbox.add(commit_box) @@ -179,18 +167,13 @@ class Panel(ScreenPanel): + ngettext("Package will be updated", "Packages will be updated", info["package_count"]) + ':\n' )) - label.set_halign(Gtk.Align.CENTER) + label.set_vexpand(False) vbox.add(label) - grid = Gtk.Grid() - grid.set_column_homogeneous(True) - grid.set_halign(Gtk.Align.CENTER) - grid.set_valign(Gtk.Align.CENTER) + grid = Gtk.Grid(column_homogeneous=True, halign=Gtk.Align.CENTER, valign=Gtk.Align.CENTER) i = 0 for j, c in enumerate(info["package_list"]): - label = Gtk.Label() + label = Gtk.Label(halign=Gtk.Align.START, ellipsize=Pango.EllipsizeMode.END) label.set_markup(f" {c} ") - label.set_halign(Gtk.Align.START) - label.set_ellipsize(Pango.EllipsizeMode.END) pos = (j % 3) grid.attach(label, pos, i, 1, 1) if pos == 2: @@ -309,17 +292,11 @@ class Panel(ScreenPanel): self.labels[f"{p}_status"].set_sensitive(True) def reboot_poweroff(self, widget, method): - scroll = self._gtk.ScrolledWindow() - scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) - vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) - vbox.set_halign(Gtk.Align.CENTER) - vbox.set_valign(Gtk.Align.CENTER) + label = Gtk.Label(wrap=True, hexpand=True, vexpand=True) if method == "reboot": - label = Gtk.Label(label=_("Are you sure you wish to reboot the system?")) + label.set_label(_("Are you sure you wish to reboot the system?")) else: - label = Gtk.Label(label=_("Are you sure you wish to shutdown the system?")) - vbox.add(label) - scroll.add(vbox) + label.set_label(_("Are you sure you wish to shutdown the system?")) buttons = [ {"name": _("Host"), "response": Gtk.ResponseType.OK, "style": 'dialog-info'}, {"name": _("Printer"), "response": Gtk.ResponseType.APPLY, "style": 'dialog-warning'}, @@ -329,7 +306,7 @@ class Panel(ScreenPanel): title = _("Restart") else: title = _("Shutdown") - self._gtk.Dialog(title, buttons, scroll, self.reboot_poweroff_confirm, method) + self._gtk.Dialog(title, buttons, label, self.reboot_poweroff_confirm, method) def reboot_poweroff_confirm(self, dialog, response_id, method): self._gtk.remove_dialog(dialog) diff --git a/panels/temperature.py b/panels/temperature.py index 559f8e19..c476e01e 100644 --- a/panels/temperature.py +++ b/panels/temperature.py @@ -23,7 +23,7 @@ class Panel(ScreenPanel): self.tempdelta = self.tempdeltas[-2] self.show_preheat = False self.preheat_options = self._screen._config.get_preheat_options() - self.grid = self._gtk.HomogeneousGrid() + self.grid = Gtk.Grid(row_homogeneous=True, column_homogeneous=True) self._gtk.reset_temp_color() self.grid.attach(self.create_left_panel(), 0, 0, 1, 1) @@ -59,7 +59,7 @@ class Panel(ScreenPanel): cooldown.connect("clicked", self.set_temperature, "cooldown") adjust.connect("clicked", self.switch_preheat_adjust) - right = self._gtk.HomogeneousGrid() + right = Gtk.Grid(row_homogeneous=True, column_homogeneous=True) right.attach(cooldown, 0, 0, 2, 1) right.attach(adjust, 2, 0, 1, 1) if self.show_preheat: @@ -79,7 +79,7 @@ class Panel(ScreenPanel): self.grid.show_all() def preheat(self): - self.labels["preheat_grid"] = self._gtk.HomogeneousGrid() + self.labels["preheat_grid"] = Gtk.Grid(row_homogeneous=True, column_homogeneous=True) i = 0 for option in self.preheat_options: if option != "cooldown": @@ -92,7 +92,7 @@ class Panel(ScreenPanel): return scroll def delta_adjust(self): - deltagrid = self._gtk.HomogeneousGrid() + deltagrid = Gtk.Grid(row_homogeneous=True, column_homogeneous=True) self.labels["increase"] = self._gtk.Button("increase", None, "color1") self.labels["increase"].connect("clicked", self.change_target_temp_incremental, "+") self.labels["decrease"] = self._gtk.Button("decrease", None, "color3") @@ -431,9 +431,8 @@ class Panel(ScreenPanel): def create_left_panel(self): - self.labels['devices'] = Gtk.Grid() + self.labels['devices'] = Gtk.Grid(vexpand=False) self.labels['devices'].get_style_context().add_class('heater-grid') - self.labels['devices'].set_vexpand(False) name = Gtk.Label() temp = Gtk.Label(_("Temp (°C)")) @@ -443,14 +442,13 @@ class Panel(ScreenPanel): self.labels['devices'].attach(temp, 1, 0, 1, 1) self.labels['da'] = HeaterGraph(self._printer, self._gtk.font_size) - self.labels['da'].set_vexpand(True) scroll = self._gtk.ScrolledWindow(steppers=False) scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) scroll.get_style_context().add_class('heater-list') scroll.add(self.labels['devices']) - self.left_panel = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0) + self.left_panel = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.left_panel.add(scroll) self.labels['graph_settemp'] = self._gtk.Button(label=_("Set Temp")) diff --git a/panels/zcalibrate.py b/panels/zcalibrate.py index ce1d3f48..ad4030c6 100644 --- a/panels/zcalibrate.py +++ b/panels/zcalibrate.py @@ -20,7 +20,7 @@ class Panel(ScreenPanel): logging.info(f"Z offset: {self.z_offset}") self.widgets['zposition'] = Gtk.Label(label="Z: ?") - pos = self._gtk.HomogeneousGrid() + pos = Gtk.Grid(row_homogeneous=True, column_homogeneous=True) pos.attach(self.widgets['zposition'], 0, 1, 2, 1) if self.z_offset is not None: self.widgets['zoffset'] = Gtk.Label(label="?") @@ -64,9 +64,8 @@ class Panel(ScreenPanel): logging.info(f"Available functions for calibration: {functions}") - self.labels['popover'] = Gtk.Popover() + self.labels['popover'] = Gtk.Popover(position=Gtk.PositionType.BOTTOM) self.labels['popover'].add(pobox) - self.labels['popover'].set_position(Gtk.PositionType.BOTTOM) if len(functions) > 1: self.buttons['start'].connect("clicked", self.on_popover_clicked) @@ -94,8 +93,7 @@ class Panel(ScreenPanel): distances.pack_start(self.widgets['move_dist'], True, True, 0) distances.pack_start(distgrid, True, True, 0) - grid = Gtk.Grid() - grid.set_column_homogeneous(True) + grid = Gtk.Grid(column_homogeneous=True) if self._screen.vertical_mode: grid.attach(self.buttons['zpos'], 0, 1, 1, 1) grid.attach(self.buttons['zneg'], 0, 2, 1, 1) diff --git a/screen.py b/screen.py index c2c3288b..18381cb0 100755 --- a/screen.py +++ b/screen.py @@ -334,12 +334,12 @@ class KlipperScreen(Gtk.Window): self.log_notification(message, level) - msg = Gtk.Button(label=f"{message}") - msg.set_hexpand(True) - msg.set_vexpand(True) - msg.get_child().set_line_wrap(True) - msg.get_child().set_line_wrap_mode(Pango.WrapMode.WORD_CHAR) - msg.get_child().set_max_width_chars(40) + msg = Gtk.Button(label=f"{message}", hexpand=True, vexpand=True) + for widget in msg.get_children(): + if isinstance(widget, Gtk.Label): + widget.set_line_wrap(True) + widget.set_line_wrap_mode(Pango.WrapMode.WORD_CHAR) + widget.set_max_width_chars(40) msg.connect("clicked", self.close_popup_message) msg.get_style_context().add_class("message_popup") if level == 1: @@ -352,10 +352,9 @@ class KlipperScreen(Gtk.Window): msg.get_style_context().add_class("message_popup_error") logging.info(f'error: {message}') - popup = Gtk.Popover.new(self.base_panel.titlebar) + popup = Gtk.Popover(relative_to=self.base_panel.titlebar, + halign=Gtk.Align.CENTER, width_request=int(self.width * .9)) popup.get_style_context().add_class("message_popup_popover") - popup.set_size_request(self.width * .9, -1) - popup.set_halign(Gtk.Align.CENTER) popup.add(msg) popup.popup() @@ -382,24 +381,13 @@ class KlipperScreen(Gtk.Window): def show_error_modal(self, err, e=""): logging.error(f"Showing error modal: {err} {e}") - title = Gtk.Label() + title = Gtk.Label(wrap=True, wrap_mode=Pango.WrapMode.CHAR, hexpand=True, halign=Gtk.Align.START) title.set_markup(f"{err}\n") - title.set_line_wrap(True) - title.set_line_wrap_mode(Pango.WrapMode.CHAR) - title.set_halign(Gtk.Align.START) - title.set_hexpand(True) - version = Gtk.Label(label=f"{functions.get_software_version()}") - version.set_halign(Gtk.Align.END) + version = Gtk.Label(label=f"{functions.get_software_version()}", halign=Gtk.Align.END) help_msg = _("Provide KlipperScreen.log when asking for help.\n") - message = Gtk.Label(label=f"{help_msg}\n\n{e}") - message.set_line_wrap(True) + message = Gtk.Label(label=f"{help_msg}\n\n{e}", wrap=True) scroll = self.gtk.ScrolledWindow(steppers=False) - scroll.set_vexpand(True) - if self.vertical_mode: - scroll.set_size_request(self.gtk.width - 30, self.gtk.height * .6) - else: - scroll.set_size_request(self.gtk.width - 30, self.gtk.height * .45) scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) scroll.add(message) @@ -548,10 +536,8 @@ class KlipperScreen(Gtk.Window): close = Gtk.Button() close.connect("clicked", self.close_screensaver) - box = Gtk.Box() - box.set_size_request(self.width, self.height) + box = Gtk.Box(halign=Gtk.Align.CENTER, width_request=self.width, height_request=self.height) box.pack_start(close, True, True, 0) - box.set_halign(Gtk.Align.CENTER) box.get_style_context().add_class("screensaver") self.remove(self.base_panel.main_grid) self.add(box) @@ -810,14 +796,9 @@ class KlipperScreen(Gtk.Window): except Exception as e: logging.debug(f"Error parsing jinja for confirm_send_action\n{e}\n\n{traceback.format_exc()}") - label = Gtk.Label() + label = Gtk.Label(hexpand=True, vexpand=True, halign=Gtk.Align.CENTER, valign=Gtk.Align.CENTER, + wrap=True, wrap_mode=Pango.WrapMode.WORD_CHAR) label.set_markup(text) - label.set_hexpand(True) - label.set_halign(Gtk.Align.CENTER) - label.set_vexpand(True) - label.set_valign(Gtk.Align.CENTER) - label.set_line_wrap(True) - label.set_line_wrap_mode(Pango.WrapMode.WORD_CHAR) if self.confirm is not None: self.gtk.remove_dialog(self.confirm)