make wifi entries consistent with other entries

This commit is contained in:
takotori 2023-12-11 14:59:30 +01:00
parent 323aab4aa8
commit d3ad017fc0
5 changed files with 95 additions and 135 deletions

View file

@ -8,7 +8,7 @@ use crate::components::base::utils::Listeners;
use crate::components::utils::set_combo_row_ellipsis;
use adw::glib;
use adw::glib::Object;
use adw::prelude::{ComboRowExt, ListBoxRowExt, PreferencesGroupExt};
use adw::prelude::{ComboRowExt, ListBoxRowExt, PreferencesGroupExt, PreferencesRowExt};
use adw::subclass::prelude::ObjectSubclassIsExt;
use dbus::blocking::Connection;
use dbus::message::SignalArgs;
@ -377,12 +377,11 @@ pub fn start_event_listener(listeners: Arc<Listeners>, wifi_box: Arc<WifiBox>) {
let name_opt = String::from_utf8(ssid).unwrap_or_else(|_| String::from(""));
let name = name_opt.as_str();
entry_imp.wifi_strength.set(strength);
entry_imp.reset_wifi_label.get().set_text(name);
entry_imp.reset_wifi_encrypted.set_visible(false);
entry.set_title(name);
// TODO handle encryption thing
entry_imp
.reset_wifi_strength
.get()
.borrow()
.set_from_icon_name(match strength {
WifiStrength::Excellent => {
Some("network-wireless-signal-excellent-symbolic")
@ -392,14 +391,14 @@ pub fn start_event_listener(listeners: Arc<Listeners>, wifi_box: Arc<WifiBox>) {
WifiStrength::None => Some("network-wireless-signal-none-symbolic"),
});
if !ir.access_point.stored {
entry_imp.reset_wifi_edit_button.set_sensitive(false);
entry_imp.reset_wifi_edit_button.borrow().set_sensitive(false);
}
if ir.access_point.dbus_path
== imp.reset_current_wifi_device.borrow().active_access_point
{
entry_imp.reset_wifi_connected.set_text("Connected");
entry_imp.reset_wifi_connected.borrow().set_text("Connected");
} else {
entry_imp.reset_wifi_connected.set_text("");
entry_imp.reset_wifi_connected.borrow().set_text("");
}
{
let mut wifi_name = entry_imp.wifi_name.borrow_mut();
@ -430,9 +429,9 @@ pub fn start_event_listener(listeners: Arc<Listeners>, wifi_box: Arc<WifiBox>) {
let mut connected = imp.connected.borrow_mut();
*connected = imp.access_point.borrow().dbus_path == current_device.path;
if *connected {
imp.reset_wifi_connected.set_text("Connected");
imp.reset_wifi_connected.borrow().set_text("Connected");
} else {
imp.reset_wifi_connected.set_text("");
imp.reset_wifi_connected.borrow().set_text("");
}
}
});

View file

@ -1,16 +1,17 @@
use std::ops::Deref;
use std::sync::Arc;
use std::time::Duration;
use crate::components::wifi::utils::get_connection_settings;
use adw::glib;
use adw::glib::{Object, PropertySet};
use adw::prelude::{ActionRowExt, ButtonExt, EditableExt, PopoverExt};
use adw::prelude::{ActionRowExt, ButtonExt, EditableExt, PopoverExt, PreferencesRowExt};
use adw::subclass::prelude::ObjectSubclassIsExt;
use dbus::blocking::Connection;
use dbus::Error;
use glib::clone;
use gtk::gio;
use gtk::prelude::{ListBoxRowExt, WidgetExt};
use gtk::{Align, Button, gio, Image, Orientation};
use gtk::prelude::{BoxExt, ListBoxRowExt, WidgetExt};
use re_set_lib::network::network_structures::{AccessPoint, WifiStrength};
use crate::components::wifi::wifi_box_impl::WifiBox;
@ -20,7 +21,7 @@ use crate::components::wifi::wifi_options::WifiOptions;
glib::wrapper! {
pub struct WifiEntry(ObjectSubclass<wifi_entry_impl::WifiEntry>)
@extends adw::ActionRow, gtk::Widget,
@implements gtk::Accessible, gtk::Buildable, gtk::Actionable, gtk::ConstraintTarget, gtk::ListBoxRow;
@implements gtk::Accessible, gtk::Buildable, gtk::Actionable, gtk::ConstraintTarget, adw::PreferencesRow, gtk::ListBoxRow;
}
unsafe impl Send for WifiEntry {}
@ -37,24 +38,41 @@ impl WifiEntry {
let name_opt = String::from_utf8(ssid).unwrap_or_else(|_| String::from(""));
let name = name_opt.as_str();
entry_imp.wifi_strength.set(strength);
entry_imp.reset_wifi_label.get().set_text(name);
entry_imp.reset_wifi_encrypted.set_visible(false);
entry.set_title(name);
entry_imp.connected.set(connected);
entry_imp.reset_wifi_edit_button.replace(Button::builder()
.icon_name("document-edit-symbolic")
.valign(Align::Center)
.build());
// TODO handle encryption thing
entry_imp
.reset_wifi_strength
.get()
.set_from_icon_name(match strength {
WifiStrength::Excellent => Some("network-wireless-signal-excellent-symbolic"),
WifiStrength::Ok => Some("network-wireless-signal-ok-symbolic"),
WifiStrength::Weak => Some("network-wireless-signal-weak-symbolic"),
WifiStrength::None => Some("network-wireless-signal-none-symbolic"),
});
let wifi_strength = Image::builder().icon_name(match strength {
WifiStrength::Excellent => "network-wireless-signal-excellent-symbolic",
WifiStrength::Ok => "network-wireless-signal-ok-symbolic",
WifiStrength::Weak => "network-wireless-signal-weak-symbolic",
WifiStrength::None => "network-wireless-signal-none-symbolic",
}).build();
let prefix_box = gtk::Box::new(Orientation::Horizontal, 0);
prefix_box.append(&wifi_strength);
prefix_box.append(&Image::builder()
.icon_name("system-lock-screen-symbolic")
.valign(Align::End)
.pixel_size(9)
.margin_bottom(12)
.build());
entry.add_prefix(&prefix_box);
let suffix_box = gtk::Box::new(Orientation::Horizontal, 5);
suffix_box.append(entry_imp.reset_wifi_connected.borrow().deref());
suffix_box.append(entry_imp.reset_wifi_edit_button.borrow().deref());
entry.add_suffix(&suffix_box);
if !access_point.stored {
entry_imp.reset_wifi_edit_button.set_sensitive(false);
entry_imp.reset_wifi_edit_button.borrow().set_sensitive(false);
}
if connected {
entry_imp.reset_wifi_connected.set_text("Connected");
entry_imp.reset_wifi_connected.borrow().set_text("Connected");
}
{
let mut wifi_name = entry_imp.wifi_name.borrow_mut();
@ -79,7 +97,7 @@ impl WifiEntry {
pub fn setup_callbacks(&self, wifi_box: &WifiBox) {
let self_imp = self.imp();
self_imp.reset_wifi_edit_button.connect_clicked(clone!(@ weak self_imp, @ weak wifi_box => move |_| {
self_imp.reset_wifi_edit_button.borrow().connect_clicked(clone!(@ weak self_imp, @ weak wifi_box => move |_| {
let _option = get_connection_settings(self_imp.access_point.borrow().associated_connection.clone());
wifi_box.reset_wifi_navigation.push(&*WifiOptions::new(_option, self_imp.access_point.borrow().dbus_path.clone()));
}));
@ -106,7 +124,7 @@ pub fn click_disconnect(entry: Arc<WifiEntry>) {
imp.connected.replace(false);
return;
}
imp.reset_wifi_connected.set_text("");
imp.reset_wifi_connected.borrow().set_text("");
imp.connected.replace(false);
glib::spawn_future(async move {
glib::idle_add_once(move || {
@ -146,7 +164,7 @@ pub fn click_stored_network(entry: Arc<WifiEntry>) {
return;
}
let imp = entry_ref.imp();
imp.reset_wifi_connected.set_text("Connected");
imp.reset_wifi_connected.borrow().set_text("Connected");
imp.connected.replace(true);
});
});
@ -198,8 +216,8 @@ pub fn click_new_network(entry: Arc<WifiEntry>) {
}
let imp = entry_ref.imp();
imp.reset_wifi_popup.popdown();
imp.reset_wifi_edit_button.set_sensitive(true);
imp.reset_wifi_connected.set_text("Connected");
imp.reset_wifi_edit_button.borrow().set_sensitive(true);
imp.reset_wifi_connected.borrow().set_text("Connected");
imp.connected.replace(true);
});
});

View file

@ -11,18 +11,12 @@ use std::cell::RefCell;
#[derive(Default, CompositeTemplate)]
#[template(resource = "/org/Xetibo/ReSet/resetWifiEntry.ui")]
pub struct WifiEntry {
#[template_child]
pub reset_wifi_strength: TemplateChild<Image>,
#[template_child]
pub reset_wifi_encrypted: TemplateChild<Image>,
#[template_child]
pub reset_wifi_label: TemplateChild<Label>,
#[template_child]
pub reset_wifi_edit_button: TemplateChild<Button>,
#[template_child]
pub reset_wifi_connected: TemplateChild<Label>,
#[template_child]
pub reset_wifi_popup: TemplateChild<Popup>,
pub reset_wifi_strength: RefCell<Image>,
pub reset_wifi_encrypted: RefCell<Image>,
pub reset_wifi_connected: RefCell<Label>,
pub reset_wifi_edit_button: RefCell<Button>,
pub wifi_name: RefCell<String>,
pub wifi_strength: RefCell<WifiStrength>,
pub access_point: RefCell<AccessPoint>,

View file

@ -21,7 +21,8 @@
(20,None,None,"resetCardEntry.ui",None,None,None,None,None,None,None),
(21,1,None,"resetWifiOptions.ui",None,None,None,None,None,None,None),
(22,1,None,"resetWifiAddressEntry.ui",None,None,None,None,None,None,None),
(23,1,None,"resetWifiRouteEntry.ui",None,None,None,None,None,None,None)
(23,1,None,"resetWifiRouteEntry.ui",None,None,None,None,None,None,None),
(24,None,None,None,None,None,None,None,None,None,None)
</ui>
<ui_library>
(21,"gtk","4.12",None),
@ -70,14 +71,7 @@
(4,207,"GtkImage",None,206,None,None,None,None,None),
(4,208,"AdwPreferencesGroup","reset_wifi_list",154,None,None,None,1,None),
(5,12,"AdwActionRow","resetWifiEntry",None,None,None,None,-1,None),
(5,13,"GtkBox",None,12,None,None,None,None,None),
(5,14,"GtkBox",None,13,None,None,None,None,None),
(5,15,"GtkImage","reset_wifi_strength",14,None,None,None,None,None),
(5,16,"GtkImage","reset_wifi_encrypted",14,None,None,None,1,None),
(5,18,"GtkLabel","reset_wifi_label",13,None,None,None,1,None),
(5,20,"GtkButton","reset_wifi_edit_button",13,None,None,None,3,None),
(5,21,"resetPopup","reset_wifi_popup",13,None,None,None,4,None),
(5,22,"GtkLabel","reset_wifi_connected",13,None,None,None,2,None),
(5,13,"resetPopup","reset_wifi_popup",12,None,None,None,None,None),
(6,1,"GtkListBoxRow","resetSidebarEntry",None,None,None,None,None,None),
(6,2,"GtkBox",None,1,None,None,None,-1,None),
(6,6,"GtkImage","reset_sidebar_image",2,None,None,None,None,None),
@ -307,7 +301,16 @@
(23,8,"AdwEntryRow","reset_route_metric",6,None,None,None,1,None),
(23,9,"GtkBox",None,2,None,None,None,None,None),
(23,10,"AdwEntryRow","reset_route_address",9,None,None,None,None,None),
(23,11,"AdwEntryRow","reset_route_prefix",9,None,None,None,1,None)
(23,11,"AdwEntryRow","reset_route_prefix",9,None,None,None,1,None),
(24,9,"AdwActionRow","resetWifiEntry",None,None,None,None,None,None),
(24,10,"GtkBox",None,9,None,None,None,-1,None),
(24,11,"GtkBox",None,10,None,None,None,None,None),
(24,12,"GtkBox",None,11,None,None,None,None,None),
(24,13,"GtkImage","reset_wifi_strength",12,None,None,None,None,None),
(24,14,"GtkImage","reset_wifi_encrypted",12,None,None,None,1,None),
(24,15,"GtkLabel","reset_wifi_label",11,None,None,None,1,None),
(24,16,"GtkLabel","reset_wifi_connected",11,None,None,None,2,None),
(24,17,"GtkButton","reset_wifi_edit_button",11,None,None,None,3,None)
</object>
<object_property>
(3,1,"GtkWidget","height-request","200",None,None,None,None,None,None,None,None,None),
@ -398,32 +401,6 @@
(4,207,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(4,208,"AdwPreferencesGroup","title","Available networks",None,None,None,None,None,None,None,None,None),
(4,208,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None),
(5,12,"GtkListBoxRow","child",None,None,None,None,None,13,None,None,None,None),
(5,13,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(5,14,"GtkWidget","width-request","35",None,None,None,None,None,None,None,None,None),
(5,15,"GtkImage","icon-name","network-wireless-signal-excellent-symbolic",None,None,None,None,None,None,None,None,None),
(5,16,"GtkImage","icon-name","system-lock-screen-symbolic",None,None,None,None,None,None,None,None,None),
(5,16,"GtkImage","pixel-size","9",None,None,None,None,None,None,None,None,None),
(5,16,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(5,16,"GtkWidget","margin-bottom","6",None,None,None,None,None,None,None,None,None),
(5,16,"GtkWidget","valign","end",None,None,None,None,None,None,None,None,None),
(5,18,"GtkLabel","ellipsize","end",None,None,None,None,None,None,None,None,None),
(5,18,"GtkLabel","label","LoremIpsumInternet",None,None,None,None,None,None,None,None,None),
(5,18,"GtkLabel","single-line-mode","True",None,None,None,None,None,None,None,None,None),
(5,18,"GtkLabel","xalign","0.0",None,None,None,None,None,None,None,None,None),
(5,18,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(5,18,"GtkWidget","margin-end","10",None,None,None,None,None,None,None,None,None),
(5,18,"GtkWidget","width-request","200",None,None,None,None,None,None,None,None,None),
(5,20,"GtkButton","has-frame","False",None,None,None,None,None,None,None,None,None),
(5,20,"GtkButton","icon-name","document-edit-symbolic",None,None,None,None,None,None,None,None,None),
(5,20,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(5,20,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
(5,22,"GtkLabel","justify","right",None,None,None,None,None,None,None,None,None),
(5,22,"GtkLabel","single-line-mode","True",None,None,None,None,None,None,None,None,None),
(5,22,"GtkLabel","xalign","0.0",None,None,None,None,None,None,None,None,None),
(5,22,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(5,22,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(5,22,"GtkWidget","margin-end","10",None,None,None,None,None,None,None,None,None),
(6,1,"GtkListBoxRow","child",None,None,None,None,None,2,None,None,None,None),
(6,1,"GtkWidget","css-classes","resetSidebarEntry",None,None,None,None,None,None,None,None,None),
(6,1,"GtkWidget","margin-bottom","2",None,None,None,None,None,None,None,None,None),
@ -898,7 +875,33 @@
(23,10,"AdwPreferencesRow","title","Address",None,None,None,None,None,None,None,None,None),
(23,10,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(23,11,"AdwPreferencesRow","title","Prefix",None,None,None,None,None,None,None,None,None),
(23,11,"GtkEditable","max-width-chars","5",None,None,None,None,None,None,None,None,None)
(23,11,"GtkEditable","max-width-chars","5",None,None,None,None,None,None,None,None,None),
(24,9,"GtkListBoxRow","child",None,None,None,None,None,10,None,None,None,None),
(24,11,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(24,12,"GtkWidget","width-request","35",None,None,None,None,None,None,None,None,None),
(24,13,"GtkImage","icon-name","network-wireless-signal-excellent-symbolic",None,None,None,None,None,None,None,None,None),
(24,14,"GtkImage","icon-name","system-lock-screen-symbolic",None,None,None,None,None,None,None,None,None),
(24,14,"GtkImage","pixel-size","9",None,None,None,None,None,None,None,None,None),
(24,14,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(24,14,"GtkWidget","margin-bottom","6",None,None,None,None,None,None,None,None,None),
(24,14,"GtkWidget","valign","end",None,None,None,None,None,None,None,None,None),
(24,15,"GtkLabel","ellipsize","end",None,None,None,None,None,None,None,None,None),
(24,15,"GtkLabel","label","LoremIpsumInternet",None,None,None,None,None,None,None,None,None),
(24,15,"GtkLabel","single-line-mode","True",None,None,None,None,None,None,None,None,None),
(24,15,"GtkLabel","xalign","0.0",None,None,None,None,None,None,None,None,None),
(24,15,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(24,15,"GtkWidget","margin-end","10",None,None,None,None,None,None,None,None,None),
(24,15,"GtkWidget","width-request","200",None,None,None,None,None,None,None,None,None),
(24,16,"GtkLabel","justify","right",None,None,None,None,None,None,None,None,None),
(24,16,"GtkLabel","single-line-mode","True",None,None,None,None,None,None,None,None,None),
(24,16,"GtkLabel","xalign","0.0",None,None,None,None,None,None,None,None,None),
(24,16,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(24,16,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(24,16,"GtkWidget","margin-end","10",None,None,None,None,None,None,None,None,None),
(24,17,"GtkButton","has-frame","False",None,None,None,None,None,None,None,None,None),
(24,17,"GtkButton","icon-name","document-edit-symbolic",None,None,None,None,None,None,None,None,None),
(24,17,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(24,17,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None)
</object_property>
<object_data>
(3,42,"GtkWidget",1,1,None,None,None,None,None,None),

View file

@ -1,64 +1,10 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Cambalache 0.17.0 -->
<interface>
<requires lib="gtk" version="4.12"/>
<requires lib="libadwaita" version="1.0"/>
<template class="resetWifiEntry" parent="AdwActionRow">
<property name="child">
<object class="GtkBox">
<property name="margin-start">5</property>
<child>
<object class="GtkBox">
<property name="width-request">35</property>
<child>
<object class="GtkImage" id="reset_wifi_strength">
<property name="icon-name">network-wireless-signal-excellent-symbolic</property>
</object>
</child>
<child>
<object class="GtkImage" id="reset_wifi_encrypted">
<property name="halign">start</property>
<property name="icon-name">system-lock-screen-symbolic</property>
<property name="margin-bottom">6</property>
<property name="pixel-size">9</property>
<property name="valign">end</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkLabel" id="reset_wifi_label">
<property name="ellipsize">end</property>
<property name="hexpand">True</property>
<property name="label">LoremIpsumInternet</property>
<property name="margin-end">10</property>
<property name="single-line-mode">True</property>
<property name="width-request">200</property>
<property name="xalign">0.0</property>
</object>
</child>
<child>
<object class="GtkLabel" id="reset_wifi_connected">
<property name="halign">end</property>
<property name="hexpand">True</property>
<property name="justify">right</property>
<property name="margin-end">10</property>
<property name="single-line-mode">True</property>
<property name="xalign">0.0</property>
</object>
</child>
<child>
<object class="GtkButton" id="reset_wifi_edit_button">
<property name="halign">start</property>
<property name="has-frame">False</property>
<property name="icon-name">document-edit-symbolic</property>
<property name="valign">center</property>
</object>
</child>
<child>
<object class="resetPopup" id="reset_wifi_popup"/>
</child>
</object>
</property>
<child>
<object class="resetPopup" id="reset_wifi_popup"/>
</child>
</template>
</interface>