gtk: improve wrapping of labels

This commit is contained in:
alfrix 2022-08-17 07:36:36 -03:00 committed by Alfredo Monclus
parent 836e4a3aea
commit 38ceea5204
20 changed files with 62 additions and 69 deletions

View File

@ -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)

View File

@ -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'])

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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("")

View File

@ -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)

View File

@ -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:

View File

@ -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:

View File

@ -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)"))

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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 {