quick-settings: extract reusable submenu row builder

parent 009d8c3c
......@@ -148,6 +148,32 @@ namespace XimperShellNotificationCenter.Widgets {
submenu_box.prepend (header);
}
protected Gtk.Button build_submenu_row (
string icon_name,
string label_text,
Gtk.Widget ?trailing = null) {
var row = new Gtk.Box (
Gtk.Orientation.HORIZONTAL, 8);
row.add_css_class ("submenu-row");
row.append (
new Gtk.Image.from_icon_name (icon_name));
var lbl = new Gtk.Label (label_text);
lbl.set_ellipsize (Pango.EllipsizeMode.END);
lbl.set_hexpand (true);
lbl.set_halign (Gtk.Align.START);
row.append (lbl);
if (trailing != null) {
row.append (trailing);
}
var btn = new Gtk.Button ();
btn.set_child (row);
btn.add_css_class ("flat");
return btn;
}
protected void clear_submenu_content (
Gtk.Box submenu_box) {
for (var child =
......
......@@ -102,22 +102,6 @@ namespace XimperShellNotificationCenter.Widgets {
}
foreach (var dev in bt_proxy.devices) {
var row = new Gtk.Box (
Gtk.Orientation.HORIZONTAL, 8);
row.add_css_class ("submenu-row");
var row_icon = new Gtk.Image.from_icon_name (
BluetoothProxy.get_device_icon (
dev.icon_name));
var row_label = new Gtk.Label (dev.name);
row_label.set_ellipsize (
Pango.EllipsizeMode.END);
row_label.set_hexpand (true);
row_label.set_halign (Gtk.Align.START);
row.append (row_icon);
row.append (row_label);
ObjectPath dev_path = dev.path;
bool is_connected = dev.connected;
bool is_busy =
......@@ -125,22 +109,25 @@ namespace XimperShellNotificationCenter.Widgets {
&& (string) bt_proxy.connecting_device
== (string) dev.path;
Gtk.Widget trailing;
if (is_busy) {
var spinner = new Gtk.Spinner ();
spinner.start ();
row.append (spinner);
trailing = spinner;
} else {
var action_label = new Gtk.Label (
is_connected
? _("Disconnect")
: _("Connect"));
action_label.add_css_class ("dim-label");
row.append (action_label);
trailing = action_label;
}
var btn = new Gtk.Button ();
btn.set_child (row);
btn.add_css_class ("flat");
var btn = build_submenu_row (
BluetoothProxy.get_device_icon (
dev.icon_name),
dev.name,
trailing);
btn.set_sensitive (!is_busy);
btn.clicked.connect (() => {
......@@ -169,20 +156,9 @@ namespace XimperShellNotificationCenter.Widgets {
Gtk.Orientation.HORIZONTAL));
}
var row = new Gtk.Box (
Gtk.Orientation.HORIZONTAL, 8);
row.add_css_class ("submenu-row");
row.append (new Gtk.Image.from_icon_name (
"emblem-system-symbolic"));
var label = new Gtk.Label (
var btn = build_submenu_row (
"emblem-system-symbolic",
_("Bluetooth Settings"));
label.set_hexpand (true);
label.set_halign (Gtk.Align.START);
row.append (label);
var btn = new Gtk.Button ();
btn.set_child (row);
btn.add_css_class ("flat");
btn.clicked.connect (() => {
try {
......
......@@ -148,29 +148,16 @@ namespace XimperShellNotificationCenter.Widgets {
string current = proxy.active_profile;
foreach (string name in profile_names) {
var row = new Gtk.Box (
Gtk.Orientation.HORIZONTAL, 8);
row.add_css_class ("submenu-row");
var row_icon = new Gtk.Image.from_icon_name (
get_profile_icon (name));
var row_label = new Gtk.Label (
get_profile_label (name));
row_label.set_hexpand (true);
row_label.set_halign (Gtk.Align.START);
row.append (row_icon);
row.append (row_label);
Gtk.Widget ?check = null;
if (name == current) {
var check = new Gtk.Image.from_icon_name (
check = new Gtk.Image.from_icon_name (
"object-select-symbolic");
row.append (check);
}
var btn = new Gtk.Button ();
btn.set_child (row);
btn.add_css_class ("flat");
var btn = build_submenu_row (
get_profile_icon (name),
get_profile_label (name),
check);
string profile_name = name;
btn.clicked.connect (() => {
......
......@@ -281,18 +281,6 @@ namespace XimperShellNotificationCenter.Widgets {
}
foreach (var vpn in vpn_list) {
var row = new Gtk.Box (
Gtk.Orientation.HORIZONTAL, 8);
row.add_css_class ("submenu-row");
var row_icon = new Gtk.Image.from_icon_name (
"network-vpn-symbolic");
var row_label = new Gtk.Label (vpn.name);
row_label.set_ellipsize (
Pango.EllipsizeMode.END);
row_label.set_hexpand (true);
row_label.set_halign (Gtk.Align.START);
var vpn_switch = new Gtk.Switch ();
vpn_switch.set_valign (Gtk.Align.CENTER);
vpn_switch.set_active (vpn.is_active);
......@@ -313,13 +301,10 @@ namespace XimperShellNotificationCenter.Widgets {
});
});
row.append (row_icon);
row.append (row_label);
row.append (vpn_switch);
var btn = new Gtk.Button ();
btn.set_child (row);
btn.add_css_class ("flat");
var btn = build_submenu_row (
"network-vpn-symbolic",
vpn.name,
vpn_switch);
btn.clicked.connect (() => {
vpn_switch.set_active (
!vpn_switch.active);
......@@ -341,20 +326,9 @@ namespace XimperShellNotificationCenter.Widgets {
Gtk.Orientation.HORIZONTAL));
}
var row = new Gtk.Box (
Gtk.Orientation.HORIZONTAL, 8);
row.add_css_class ("submenu-row");
row.append (new Gtk.Image.from_icon_name (
"emblem-system-symbolic"));
var label = new Gtk.Label (
var btn = build_submenu_row (
"emblem-system-symbolic",
_("VPN Settings"));
label.set_hexpand (true);
label.set_halign (Gtk.Align.START);
row.append (label);
var btn = new Gtk.Button ();
btn.set_child (row);
btn.add_css_class ("flat");
btn.clicked.connect (() => {
try {
......
......@@ -362,19 +362,6 @@ namespace XimperShellNotificationCenter.Widgets {
}
foreach (var ap in aps) {
var row = new Gtk.Box (
Gtk.Orientation.HORIZONTAL, 8);
row.add_css_class ("submenu-row");
var row_icon = new Gtk.Image.from_icon_name (
NetworkManagerProxy.get_signal_icon (
ap.strength));
var row_label = new Gtk.Label (ap.ssid);
row_label.set_ellipsize (
Pango.EllipsizeMode.END);
row_label.set_hexpand (true);
row_label.set_halign (Gtk.Align.START);
var status_stack = new Gtk.Stack ();
status_stack.set_transition_type (
Gtk.StackTransitionType.CROSSFADE);
......@@ -401,15 +388,14 @@ namespace XimperShellNotificationCenter.Widgets {
"empty");
}
row.append (row_icon);
row.append (row_label);
row.append (status_stack);
var btn = build_submenu_row (
NetworkManagerProxy.get_signal_icon (
ap.strength),
ap.ssid,
status_stack);
var item_box = new Gtk.Box (
Gtk.Orientation.VERTICAL, 0);
var btn = new Gtk.Button ();
btn.set_child (row);
btn.add_css_class ("flat");
item_box.append (btn);
if (ap.secured && !ap.has_saved
......@@ -525,20 +511,9 @@ namespace XimperShellNotificationCenter.Widgets {
box.append (new Gtk.Separator (
Gtk.Orientation.HORIZONTAL));
var row = new Gtk.Box (
Gtk.Orientation.HORIZONTAL, 8);
row.add_css_class ("submenu-row");
row.append (new Gtk.Image.from_icon_name (
"emblem-system-symbolic"));
var label = new Gtk.Label (
var btn = build_submenu_row (
"emblem-system-symbolic",
_("Network Settings"));
label.set_hexpand (true);
label.set_halign (Gtk.Align.START);
row.append (label);
var btn = new Gtk.Button ();
btn.set_child (row);
btn.add_css_class ("flat");
btn.clicked.connect (() => {
try {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment