From 3c21ea52c0ae545cacc52306a93168f9f469a677 Mon Sep 17 00:00:00 2001 From: Vasiliy Doylov Date: Mon, 23 Jun 2025 15:41:27 +0300 Subject: [PATCH] UI: Make schema labels pretty, keep it same size Signed-off-by: Vasiliy Doylov --- src/gtk/outbound-row.vala | 6 +++++- src/gtk/window.vala | 23 +++++++++++++++-------- src/logic/outbounds/outbound.vala | 4 ++++ src/logic/outbounds/shadowsocks.vala | 4 ++++ src/logic/outbounds/trojan.vala | 4 ++++ src/logic/outbounds/vless.vala | 4 ++++ 6 files changed, 36 insertions(+), 9 deletions(-) diff --git a/src/gtk/outbound-row.vala b/src/gtk/outbound-row.vala index c0c4421..0218a6d 100644 --- a/src/gtk/outbound-row.vala +++ b/src/gtk/outbound-row.vala @@ -27,7 +27,11 @@ class Singularity.Ui.OutboundRow : Gtk.Box { construct { } public void set_outbound(Outbound.Outbound outbound) { - schema.label = outbound.type_name; + schema.label = outbound.pretty_schema(); descr.label = outbound.name; } + + public void add_to_sizegroup(Gtk.SizeGroup group) { + group.add_widget(schema); + } } diff --git a/src/gtk/window.vala b/src/gtk/window.vala index 2665a6f..3a79063 100644 --- a/src/gtk/window.vala +++ b/src/gtk/window.vala @@ -39,17 +39,14 @@ public class Singularity.Window : Adw.ApplicationWindow { } } - public Window(Gtk.Application app) { - Object(application: app); - - SingBox.instance.notify["singbox-status"].connect(() => on_singbox_status_change()); - SingBox.instance.singbox_message.connect((message) => singbox_log.text += "\n" + message); - on_singbox_status_change(); - + private void setup_outbound_list() { + var sg = new Gtk.SizeGroup(Gtk.SizeGroupMode.HORIZONTAL); // Keep schema labels same size var factory = new Gtk.SignalListItemFactory(); factory.setup.connect((obj) => { var item = (Gtk.ListItem) obj; - item.set_child(new Ui.OutboundRow()); + var row = new Ui.OutboundRow(); + row.add_to_sizegroup(sg); + item.set_child(row); }); factory.bind.connect((obj) => { var item = (Gtk.ListItem) obj; @@ -59,6 +56,16 @@ public class Singularity.Window : Adw.ApplicationWindow { }); outbounds.set_model(SingBox.instance.outbound_selection); outbounds.set_factory(factory); + } + + public Window(Gtk.Application app) { + Object(application: app); + + SingBox.instance.notify["singbox-status"].connect(() => on_singbox_status_change()); + SingBox.instance.singbox_message.connect((message) => singbox_log.text += "\n" + message); + on_singbox_status_change(); + + setup_outbound_list(); close_request.connect(() => { SingBox.instance.singbox.force_exit(); diff --git a/src/logic/outbounds/outbound.vala b/src/logic/outbounds/outbound.vala index 8806f81..a294460 100644 --- a/src/logic/outbounds/outbound.vala +++ b/src/logic/outbounds/outbound.vala @@ -24,6 +24,10 @@ class Singularity.Outbound.Outbound : Object, Json.Serializable { public string tag { get; set; default = "proxy"; } public string name; // Not a property + public virtual string pretty_schema () { + return "FIXME"; + } + public static Outbound parse_uri (string profile) throws UriError, ParseError { Uri uri = null; uri = Uri.parse (profile, UriFlags.HAS_PASSWORD | UriFlags.NON_DNS | UriFlags.PARSE_RELAXED); diff --git a/src/logic/outbounds/shadowsocks.vala b/src/logic/outbounds/shadowsocks.vala index cf4af61..d8aaf1f 100644 --- a/src/logic/outbounds/shadowsocks.vala +++ b/src/logic/outbounds/shadowsocks.vala @@ -40,4 +40,8 @@ class Singularity.Outbound.ShadowSocks : Dial, Json.Serializable { construct { type_name = "shadowsocks"; } + + public override string pretty_schema() { + return "SSocks"; + } } diff --git a/src/logic/outbounds/trojan.vala b/src/logic/outbounds/trojan.vala index 2ad3dff..4f85ae2 100644 --- a/src/logic/outbounds/trojan.vala +++ b/src/logic/outbounds/trojan.vala @@ -50,4 +50,8 @@ class Singularity.Outbound.Trojan : Dial, Json.Serializable { } return node; } + + public override string pretty_schema () { + return "Trojan"; + } } diff --git a/src/logic/outbounds/vless.vala b/src/logic/outbounds/vless.vala index c05a866..e179bec 100644 --- a/src/logic/outbounds/vless.vala +++ b/src/logic/outbounds/vless.vala @@ -51,4 +51,8 @@ class Singularity.Outbound.Vless : Dial, Json.Serializable { } return node; } + + public override string pretty_schema () { + return "Vless"; + } }