From 91d7e10bdcc4257585d95fa01b34e5bac44af0cc Mon Sep 17 00:00:00 2001 From: "Tom A. Wagner" Date: Sun, 12 Feb 2023 20:58:34 +0100 Subject: [PATCH] view: Improve layout of labels on nodes and ports This sets a maximum width of 20 chars on labels on nodes and ports. Longer labels will wrap to a second line. For labels longer than two lines, the label is ellipsized at the end. The full label can still be viewed via hovering for a tooltip. Co-authored-by: Roger Roger --- src/view/graph_view.rs | 2 +- src/view/node.rs | 10 +++++++++- src/view/port.rs | 10 +++++++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/view/graph_view.rs b/src/view/graph_view.rs index dad1970..975137a 100644 --- a/src/view/graph_view.rs +++ b/src/view/graph_view.rs @@ -640,7 +640,7 @@ impl GraphView { // Get max in column y1.partial_cmp(y2).unwrap_or(Ordering::Equal) }) - .map_or(20_f32, |(_x, y)| y + 100.0); + .map_or(20_f32, |(_x, y)| y + 120.0); imp.nodes.borrow_mut().insert(id, (node, Point::new(x, y))); } diff --git a/src/view/node.rs b/src/view/node.rs index a1445a4..844cd67 100644 --- a/src/view/node.rs +++ b/src/view/node.rs @@ -48,7 +48,12 @@ mod imp { fn new() -> Self { let grid = gtk::Grid::new(); + let label = gtk::Label::new(None); + label.set_wrap(true); + label.set_lines(2); + label.set_max_width_chars(20); + label.set_ellipsize(gtk::pango::EllipsizeMode::End); grid.attach(&label, 0, 0, 2, 1); @@ -95,7 +100,10 @@ mod imp { fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) { match pspec.name() { - "name" => self.label.set_text(value.get().unwrap()), + "name" => { + self.label.set_text(value.get().unwrap()); + self.label.set_tooltip_text(value.get().ok()); + } "pipewire-id" => self.pipewire_id.set(value.get().unwrap()), _ => unimplemented!(), } diff --git a/src/view/port.rs b/src/view/port.rs index 802164e..2e8af18 100644 --- a/src/view/port.rs +++ b/src/view/port.rs @@ -69,7 +69,12 @@ mod imp { impl ObjectImpl for Port { fn constructed(&self) { self.parent_constructed(); + self.label.set_parent(&*self.obj()); + self.label.set_wrap(true); + self.label.set_lines(2); + self.label.set_max_width_chars(20); + self.label.set_ellipsize(gtk::pango::EllipsizeMode::End); } fn dispose(&self) { @@ -99,7 +104,10 @@ mod imp { fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) { match pspec.name() { - "name" => self.label.set_text(value.get().unwrap()), + "name" => { + self.label.set_text(value.get().unwrap()); + self.label.set_tooltip_text(value.get().ok()); + } "pipewire-id" => self.pipewire_id.set(value.get().unwrap()).unwrap(), _ => unimplemented!(), }