-
-
Notifications
You must be signed in to change notification settings - Fork 25
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
InfoBox: GTK4 prep, code style (#387)
Co-authored-by: Jeremy Wootten <jeremywootten@gmail.com>
- Loading branch information
1 parent
eb9540d
commit f1af917
Showing
1 changed file
with
144 additions
and
188 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,210 +1,166 @@ | ||
/*- | ||
* Copyright (c) 2015-2016 elementary LLC. | ||
* | ||
* This program is free software: you can redistribute it and/or modify | ||
* it under the terms of the GNU Lesser General Public License as published by | ||
* the Free Software Foundation, either version 2.1 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU Lesser General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU Lesser General Public License | ||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
* | ||
/* | ||
* SPDX-License-Identifier: LGPL-2.1-or-later | ||
* SPDX-FileCopyrightText: 2015-2024 elementary, Inc. (https://elementary.io) | ||
* Authored by: Adam Bieńkowski <donadigos159@gmail.com> | ||
*/ | ||
|
||
namespace Network.Widgets { | ||
public class InfoBox : Gtk.Grid { | ||
public signal void update_sidebar (DeviceItem item); | ||
public signal void info_changed (); | ||
public NM.Device device { get; construct; } | ||
public DeviceItem? owner { get; construct; } | ||
|
||
private Gtk.Label ip4address; | ||
private Gtk.Label ip6address; | ||
private Gtk.Label mask; | ||
private Gtk.Label router; | ||
private Gtk.Label dns; | ||
private Gtk.Label sent; | ||
private Gtk.Label received; | ||
|
||
private Gtk.Label ip6address_head; | ||
|
||
public InfoBox.from_device (NM.Device device) { | ||
Object (device: device); | ||
} | ||
public class Network.Widgets.InfoBox : Gtk.Box { | ||
public signal void update_sidebar (DeviceItem item); | ||
public signal void info_changed (); | ||
public NM.Device device { get; construct; } | ||
public DeviceItem? owner { get; construct; } | ||
|
||
public InfoBox.from_owner (DeviceItem owner) { | ||
Object (owner: owner, device: owner.device); | ||
} | ||
private Gtk.Box ip6address_box; | ||
private Gtk.Label ip4address; | ||
private Gtk.Label mask; | ||
private Gtk.Label router; | ||
private Gtk.Label dns; | ||
private Gtk.Label sent; | ||
private Gtk.Label received; | ||
|
||
construct { | ||
column_spacing = 12; | ||
row_spacing = 6; | ||
|
||
var sent_head = new Gtk.Image.from_icon_name ("go-up-symbolic", Gtk.IconSize.BUTTON); | ||
sent = new Gtk.Label (null); | ||
|
||
var sent_grid = new Gtk.Grid () { | ||
column_spacing = 12, | ||
tooltip_text = (_("Sent")) | ||
}; | ||
sent_grid.add (sent_head); | ||
sent_grid.add (sent); | ||
|
||
var received_head = new Gtk.Image.from_icon_name ("go-down-symbolic", Gtk.IconSize.BUTTON); | ||
received = new Gtk.Label (null); | ||
|
||
var received_grid = new Gtk.Grid () { | ||
column_spacing = 12, | ||
tooltip_text = (_("Received")) | ||
}; | ||
received_grid.add (received_head); | ||
received_grid.add (received); | ||
|
||
var send_receive_grid = new Gtk.Grid () { | ||
halign = Gtk.Align.CENTER, | ||
column_spacing = 12, | ||
margin_top = 12 | ||
}; | ||
send_receive_grid.add (sent_grid); | ||
send_receive_grid.add (received_grid); | ||
|
||
var ip4address_head = new Gtk.Label (_("IP Address:")) { | ||
halign = Gtk.Align.END | ||
}; | ||
|
||
ip4address = new Gtk.Label (null) { | ||
selectable = true, | ||
xalign = 0 | ||
}; | ||
|
||
ip6address_head = new Gtk.Label (_("IPv6 Address:")) { | ||
no_show_all = true, | ||
halign = Gtk.Align.END | ||
}; | ||
|
||
ip6address = new Gtk.Label (null) { | ||
selectable = true, | ||
no_show_all = true, | ||
xalign = 0 | ||
}; | ||
|
||
var mask_head = new Gtk.Label (_("Subnet mask:")) { | ||
halign = Gtk.Align.END | ||
}; | ||
|
||
mask = new Gtk.Label (null) { | ||
selectable = true, | ||
xalign = 0 | ||
}; | ||
|
||
var router_head = new Gtk.Label (_("Router:")) { | ||
halign = Gtk.Align.END | ||
}; | ||
|
||
router = new Gtk.Label (null) { | ||
selectable = true, | ||
xalign = 0 | ||
}; | ||
|
||
var dns_head = new Gtk.Label (_("DNS:")) { | ||
halign = Gtk.Align.END | ||
}; | ||
|
||
dns = new Gtk.Label (null) { | ||
selectable = true, | ||
xalign = 0 | ||
}; | ||
|
||
attach (ip4address_head, 0, 0); | ||
attach_next_to (ip4address, ip4address_head, Gtk.PositionType.RIGHT); | ||
|
||
attach_next_to (ip6address_head, ip4address_head, Gtk.PositionType.BOTTOM); | ||
attach_next_to (ip6address, ip6address_head, Gtk.PositionType.RIGHT); | ||
|
||
attach_next_to (mask_head, ip6address_head, Gtk.PositionType.BOTTOM); | ||
attach_next_to (mask, mask_head, Gtk.PositionType.RIGHT); | ||
|
||
attach_next_to (router_head, mask_head, Gtk.PositionType.BOTTOM); | ||
attach_next_to (router, router_head, Gtk.PositionType.RIGHT); | ||
|
||
attach_next_to (dns_head, router_head, Gtk.PositionType.BOTTOM); | ||
attach_next_to (dns, dns_head, Gtk.PositionType.RIGHT); | ||
|
||
attach_next_to (send_receive_grid, dns_head, Gtk.PositionType.BOTTOM, 4, 1); | ||
|
||
device.state_changed.connect (() => { | ||
update_status (); | ||
info_changed (); | ||
}); | ||
private Gtk.Label ip6address_head; | ||
|
||
public InfoBox.from_device (NM.Device device) { | ||
Object (device: device); | ||
} | ||
|
||
construct { | ||
var sent_image = new Gtk.Image.from_icon_name ("go-up-symbolic", BUTTON) { | ||
tooltip_text = _("Sent") | ||
}; | ||
|
||
sent = new Gtk.Label (null); | ||
|
||
var received_image = new Gtk.Image.from_icon_name ("go-down-symbolic", BUTTON) { | ||
tooltip_text = _("Received") | ||
}; | ||
|
||
received = new Gtk.Label (null); | ||
|
||
var send_receive_box = new Gtk.Box (HORIZONTAL, 6) { | ||
halign = CENTER, | ||
margin_top = 12 | ||
}; | ||
send_receive_box.add (sent_image); | ||
send_receive_box.add (sent); | ||
send_receive_box.add (received_image); | ||
send_receive_box.add (received); | ||
|
||
var ip4address_head = new Granite.HeaderLabel (_("IP Address")); | ||
|
||
ip4address = new Gtk.Label (null) { | ||
selectable = true, | ||
xalign = 0 | ||
}; | ||
|
||
ip6address_head = new Granite.HeaderLabel (_("IPv6 Addresses")) { | ||
no_show_all = true | ||
}; | ||
|
||
ip6address_box = new Gtk.Box (VERTICAL, 6) { | ||
no_show_all = true | ||
}; | ||
|
||
var mask_head = new Granite.HeaderLabel (_("Subnet Mask")); | ||
|
||
mask = new Gtk.Label (null) { | ||
selectable = true, | ||
xalign = 0 | ||
}; | ||
|
||
var router_head = new Granite.HeaderLabel (_("Router")); | ||
|
||
router = new Gtk.Label (null) { | ||
selectable = true, | ||
xalign = 0 | ||
}; | ||
|
||
var dns_head = new Granite.HeaderLabel (_("DNS")); | ||
|
||
dns = new Gtk.Label (null) { | ||
selectable = true, | ||
xalign = 0 | ||
}; | ||
|
||
orientation = VERTICAL; | ||
add (ip4address_head); | ||
add (ip4address); | ||
add (ip6address_head); | ||
add (ip6address_box); | ||
add (mask_head); | ||
add (mask); | ||
add (router_head); | ||
add (router); | ||
add (dns_head); | ||
add (dns); | ||
add (send_receive_box); | ||
|
||
device.state_changed.connect (() => { | ||
update_status (); | ||
show_all (); | ||
} | ||
info_changed (); | ||
}); | ||
|
||
public void update_activity (string sent_bytes, string received_bytes) { | ||
sent.label = sent_bytes ?? UNKNOWN_STR; | ||
received.label = received_bytes ?? UNKNOWN_STR; | ||
} | ||
update_status (); | ||
show_all (); | ||
} | ||
|
||
public void update_status () { | ||
var ipv4 = device.get_ip4_config (); | ||
if (ipv4 != null) { | ||
if (ipv4.get_addresses ().length > 0) { | ||
unowned NM.IPAddress address = ipv4.get_addresses ().get (0); | ||
ip4address.label = address.get_address (); | ||
uint32 mask_addr = Posix.htonl ((uint32)0xffffffff << (32 - address.get_prefix ())); | ||
var source_addr = Posix.InAddr () { s_addr = mask_addr }; | ||
mask.label = (Posix.inet_ntoa (source_addr) ?? UNKNOWN_STR); | ||
} | ||
public void update_activity (string sent_bytes, string received_bytes) { | ||
sent.label = sent_bytes ?? UNKNOWN_STR; | ||
received.label = received_bytes ?? UNKNOWN_STR; | ||
} | ||
|
||
public void update_status () { | ||
var ipv4 = device.get_ip4_config (); | ||
if (ipv4 != null) { | ||
if (ipv4.get_addresses ().length > 0) { | ||
unowned NM.IPAddress address = ipv4.get_addresses ().get (0); | ||
ip4address.label = address.get_address (); | ||
uint32 mask_addr = Posix.htonl ((uint32)0xffffffff << (32 - address.get_prefix ())); | ||
var source_addr = Posix.InAddr () { s_addr = mask_addr }; | ||
mask.label = (Posix.inet_ntoa (source_addr) ?? UNKNOWN_STR); | ||
} | ||
|
||
router.label = (ipv4.get_gateway () ?? UNKNOWN_STR); | ||
router.label = (ipv4.get_gateway () ?? UNKNOWN_STR); | ||
|
||
dns.label = ""; | ||
if (ipv4.get_nameservers ().length > 0) { | ||
string [] dns_addr = ipv4.get_nameservers (); | ||
dns.label = dns_addr[0]; | ||
for (int i=1; i < dns_addr.length; i++) { | ||
dns.label = dns.label + ", " + dns_addr[i]; | ||
} | ||
dns.label = ""; | ||
if (ipv4.get_nameservers ().length > 0) { | ||
string [] dns_addr = ipv4.get_nameservers (); | ||
dns.label = dns_addr[0]; | ||
for (int i=1; i < dns_addr.length; i++) { | ||
dns.label = dns.label + ", " + dns_addr[i]; | ||
} | ||
} else { | ||
ip4address.label = UNKNOWN_STR; | ||
mask.label = UNKNOWN_STR; | ||
router.label = UNKNOWN_STR; | ||
dns.label = UNKNOWN_STR; | ||
} | ||
} else { | ||
ip4address.label = UNKNOWN_STR; | ||
mask.label = UNKNOWN_STR; | ||
router.label = UNKNOWN_STR; | ||
dns.label = UNKNOWN_STR; | ||
} | ||
|
||
var ip6 = device.get_ip6_config (); | ||
ip6address.visible = ip6address_head.visible = (ip6 != null); | ||
ip6address.label = ""; | ||
if (ip6 != null) { | ||
int i = 1; | ||
var addresses = ip6.get_addresses (); | ||
addresses.foreach ((addr) => { | ||
addr.@ref (); | ||
string inet_str = addr.get_address () + "/" + addr.get_prefix ().to_string (); | ||
ip6address.visible = ip6address_head.visible = (inet_str.strip () != ""); | ||
ip6address.label += inet_str; | ||
if (i < addresses.length) { | ||
ip6address.label += "\n"; | ||
} | ||
|
||
i++; | ||
}); | ||
var ip6 = device.get_ip6_config (); | ||
ip6address_box.visible = ip6address_head.visible = (ip6 != null); | ||
if (ip6 != null) { | ||
foreach (unowned var child in ip6address_box.get_children ()) { | ||
child.destroy (); | ||
} | ||
|
||
foreach (unowned var address in ip6.get_addresses ()) { | ||
var inet_str = address.get_address () + "/" + address.get_prefix ().to_string (); | ||
|
||
if (owner != null) { | ||
update_sidebar (owner); | ||
var address_label = new Gtk.Label (inet_str) { | ||
selectable = true, | ||
xalign = 0 | ||
}; | ||
address_label.show_all (); | ||
|
||
ip6address_box.add (address_label); | ||
} | ||
} | ||
|
||
this.show_all (); | ||
if (owner != null) { | ||
update_sidebar (owner); | ||
} | ||
|
||
this.show_all (); | ||
} | ||
} |