From 1080a03b8b1923c953c18e1b650e156f26f5a6ca Mon Sep 17 00:00:00 2001 From: Fabio Lenherr / DashieTM Date: Sun, 19 Nov 2023 23:52:16 +0100 Subject: [PATCH 01/10] fix: Don't use popups for wifi --- src/components/wifi/savedWifiEntry.rs | 35 +++-- src/components/wifi/wifiEntry.rs | 148 +++++++++++--------- src/components/wifi/wifiEntryImpl.rs | 3 + src/components/window/handleSidebarClick.rs | 1 + 4 files changed, 106 insertions(+), 81 deletions(-) diff --git a/src/components/wifi/savedWifiEntry.rs b/src/components/wifi/savedWifiEntry.rs index ff7f6a0..390dcf2 100644 --- a/src/components/wifi/savedWifiEntry.rs +++ b/src/components/wifi/savedWifiEntry.rs @@ -4,10 +4,11 @@ use crate::components::wifi::savedWifiEntryImpl; use adw::glib; use adw::glib::Object; use adw::prelude::{ButtonExt, WidgetExt}; -use dbus::{Error, Path}; use dbus::blocking::Connection; -use glib::{clone, PropertySet}; +use dbus::{Error, Path}; use glib::subclass::types::ObjectSubclassIsExt; +use glib::{clone, PropertySet}; +use gtk::gio; glib::wrapper! { pub struct SavedWifiEntry(ObjectSubclass) @@ -22,22 +23,28 @@ impl SavedWifiEntry { // TODO handle edit entryImp.resetSavedWifiLabel.set_text(name); entryImp.resetConnectionPath.set(path); - entryImp.resetDeleteSavedWifiButton.connect_clicked(clone!(@weak entry as entry => move |_| { + entryImp.resetDeleteSavedWifiButton.connect_clicked( + clone!(@weak entry as entry => move |_| { + delete_connection(entry.imp().resetConnectionPath.take()); + // TODO handle error + let parent = entry.parent().unwrap(); + parent.set_visible(false); + parent.unparent(); + }), + ); + entry + } +} + +fn delete_connection(path: Path<'static>) { + gio::spawn_blocking(move || { let conn = Connection::new_session().unwrap(); let proxy = conn.with_proxy( "org.xetibo.ReSet", "/org/xetibo/ReSet", Duration::from_millis(1000), ); - let res: Result<(bool,), Error> = proxy.method_call("org.xetibo.ReSet", "DeleteConnection", (entry.imp().resetConnectionPath.take(),)); - if res.is_err() || res.unwrap() == (false,) { - // TODO handle error -> inform user - return; - } - let parent = entry.parent().unwrap(); - parent.set_visible(false); - parent.unparent(); - })); - entry - } + let _: Result<(), Error> = + proxy.method_call("org.xetibo.ReSet", "DeleteConnection", (path,)); + }); } diff --git a/src/components/wifi/wifiEntry.rs b/src/components/wifi/wifiEntry.rs index a3d0bcb..63d5b15 100644 --- a/src/components/wifi/wifiEntry.rs +++ b/src/components/wifi/wifiEntry.rs @@ -7,15 +7,18 @@ use adw::glib::{Object, PropertySet}; use adw::prelude::{ButtonExt, EditableExt, PopoverExt}; use adw::subclass::prelude::ObjectSubclassIsExt; use dbus::blocking::Connection; -use dbus::Error; +use dbus::{Error, Path}; use glib::{clone, Cast}; -use gtk::prelude::WidgetExt; -use gtk::{AlertDialog, GestureClick}; +use gtk::prelude::{ListBoxRowExt, WidgetExt}; +use gtk::{gio, AlertDialog, GestureClick}; use ReSet_Lib::network::network::{AccessPoint, WifiStrength}; +use crate::components::base::listEntry::ListEntry; use crate::components::wifi::wifiBox::getConnectionSettings; use crate::components::wifi::wifiEntryImpl; +use super::savedWifiEntry::SavedWifiEntry; + glib::wrapper! { pub struct WifiEntry(ObjectSubclass) @extends gtk::Box, gtk::Widget, @@ -35,7 +38,6 @@ impl WifiEntry { let ssid = access_point.ssid.clone(); let name_opt = String::from_utf8(ssid).unwrap_or_else(|_| String::from("")); let name = name_opt.as_str(); - let stored = access_point.stored; entryImp.wifiStrength.set(strength); entryImp.resetWifiLabel.get().set_text(name); entryImp.resetWifiEncrypted.set_visible(false); @@ -49,7 +51,10 @@ impl WifiEntry { WifiStrength::Weak => Some("network-wireless-signal-weak-symbolic"), WifiStrength::None => Some("network-wireless-signal-none-symbolic"), }); - if access_point.connected == true { + if !access_point.stored { + entryImp.resetWifiEditButton.set_sensitive(false); + } + if access_point.connected { entryImp .resetWifiConnected .get() @@ -61,16 +66,16 @@ impl WifiEntry { } entryImp.accessPoint.set(access_point); let gesture = GestureClick::new(); - if stored { - gesture.connect_released(move |_, _, _, _| { + gesture.connect_released(clone!(@weak entryImp => move |_, _, _, _| { + let access_point = entryImp.accessPoint.borrow(); + if access_point.connected { + click_disconnect(); + } else if access_point.stored { click_stored_network(stored_entry.clone()); - }); - } else { - entryImp.resetWifiEditButton.set_sensitive(false); - gesture.connect_released(move |_, _, _, _| { + } else { click_new_network(new_entry.clone()); - }); - } + } + })); entry.add_controller(gesture); entry } @@ -84,63 +89,69 @@ impl WifiEntry { } } -pub fn click_stored_network(entry: Arc) { - let alert = AlertDialog::builder().build(); - let root = &entry.root().unwrap(); - let root = root.downcast_ref::(); - if root.is_none() { - return; - } - let root = root.unwrap(); - let entryImp = entry.imp(); - let conn = Connection::new_session().unwrap(); - let proxy = conn.with_proxy( - "org.xetibo.ReSet", - "/org/xetibo/ReSet", - Duration::from_millis(1000), - ); - let access_point = entryImp.accessPoint.clone().into_inner(); - if access_point.connected == true { +pub fn click_disconnect() { + println!("called disconnect"); + gio::spawn_blocking(move || { + let conn = Connection::new_session().unwrap(); + let proxy = conn.with_proxy( + "org.xetibo.ReSet", + "/org/xetibo/ReSet", + Duration::from_millis(10000), + ); let res: Result<(bool,), Error> = proxy.method_call("org.xetibo.ReSet", "DisconnectFromCurrentAccessPoint", ()); if res.is_err() { - alert.set_message("Error on connecting to dbus."); - alert.show(Some(root)); + println!("res of disconnect was error bro"); return; } - let (res,) = res.unwrap(); - if res == false { - alert.set_message("Could not disconnect from access point."); - alert.show(Some(root)); - } else { - entryImp.resetWifiConnected.get().set_from_icon_name(None); - let mut access_point = entryImp.accessPoint.borrow_mut(); - (*access_point).connected = false; - } - return; - } - let res: Result<(bool,), Error> = proxy.method_call( - "org.xetibo.ReSet", - "ConnectToKnownAccessPoint", - (access_point,), - ); - if res.is_err() { - alert.set_message("Error on connecting to dbus."); - alert.show(Some(root)); - } else { - let (res,) = res.unwrap(); - if res == false { - alert.set_message("Could not connect to access point."); - alert.show(Some(root)); - } else { - entryImp - .resetWifiConnected - .get() - .set_from_icon_name(Some("network-wireless-connected-symbolic")); - let mut access_point = entryImp.accessPoint.borrow_mut(); - (*access_point).connected = true; - } - } + println!("disconnect worked"); + }); +} +pub fn click_stored_network(entry: Arc) { + let result = Arc::new(AtomicBool::new(false)); + let entryImp = entry.imp(); + let access_point = entryImp.accessPoint.borrow().clone(); + let entry_ref = entry.clone(); + let popup = entry.imp().resetWifiPopup.imp(); + popup.resetPopupLabel.set_text("Connecting..."); + popup.resetPopupLabel.set_visible(true); + popup.resetPopupEntry.set_sensitive(false); + popup.resetPopupButton.set_sensitive(false); + + gio::spawn_blocking(move || { + let conn = Connection::new_session().unwrap(); + let proxy = conn.with_proxy( + "org.xetibo.ReSet", + "/org/xetibo/ReSet", + Duration::from_millis(10000), + ); + let res: Result<(bool,), Error> = proxy.method_call( + "org.xetibo.ReSet", + "ConnectToKnownAccessPoint", + (access_point,), + ); + glib::spawn_future(async move { + glib::idle_add_once(move || { + let imp = entry_ref.imp(); + let popup = imp.resetWifiPopup.imp(); + if res.is_err() { + popup.resetPopupLabel.set_text("Could not connect to dbus."); + result.store(false, std::sync::atomic::Ordering::SeqCst); + return; + } + if res.unwrap() == (false,) { + popup + .resetPopupLabel + .set_text("Could not connect to access point."); + result.store(false, std::sync::atomic::Ordering::SeqCst); + return; + } + entry_ref.imp().resetWifiPopup.popdown(); + result.store(true, std::sync::atomic::Ordering::SeqCst); + }); + }); + }); + // TODO crate spinner animation and block UI } pub fn click_new_network(entry: Arc) { @@ -155,7 +166,7 @@ pub fn click_new_network(entry: Arc) { popup.resetPopupEntry.set_sensitive(false); popup.resetPopupButton.set_sensitive(false); - glib::spawn_future_local(async move { + gio::spawn_blocking(move || { let conn = Connection::new_session().unwrap(); let proxy = conn.with_proxy( "org.xetibo.ReSet", @@ -167,9 +178,10 @@ pub fn click_new_network(entry: Arc) { "ConnectToNewAccessPoint", (access_point, password), ); - glib::MainContext::default().spawn_local(async move { + glib::spawn_future(async move { glib::idle_add_once(move || { if res.is_err() { + println!("error bro"); entry_ref .imp() .resetWifiPopup @@ -180,6 +192,7 @@ pub fn click_new_network(entry: Arc) { return; } if res.unwrap() == (false,) { + println!("wrong pw"); entry_ref .imp() .resetWifiPopup @@ -189,6 +202,7 @@ pub fn click_new_network(entry: Arc) { result.store(false, std::sync::atomic::Ordering::SeqCst); return; } + println!("worked?"); entry_ref.imp().resetWifiPopup.popdown(); result.store(true, std::sync::atomic::Ordering::SeqCst); }); diff --git a/src/components/wifi/wifiEntryImpl.rs b/src/components/wifi/wifiEntryImpl.rs index 0a1193d..0e52899 100644 --- a/src/components/wifi/wifiEntryImpl.rs +++ b/src/components/wifi/wifiEntryImpl.rs @@ -3,8 +3,11 @@ use crate::components::wifi::wifiEntry; use gtk::subclass::prelude::*; use gtk::{glib, Button, CompositeTemplate, Image, Label}; use std::cell::RefCell; +use std::sync::Arc; use ReSet_Lib::network::network::{AccessPoint, WifiStrength}; +use super::wifiBox::WifiBox; + #[allow(non_snake_case)] #[derive(Default, CompositeTemplate)] #[template(resource = "/org/Xetibo/ReSet/resetWifiEntry.ui")] diff --git a/src/components/window/handleSidebarClick.rs b/src/components/window/handleSidebarClick.rs index 5593949..b2c3bed 100644 --- a/src/components/window/handleSidebarClick.rs +++ b/src/components/window/handleSidebarClick.rs @@ -31,6 +31,7 @@ pub const HANDLE_WIFI_CLICK: fn(Arc, FlowBox) = listeners.stop_audio_listener(); listeners.stop_bluetooth_listener(); let wifiBox = Arc::new(WifiBox::new()); + show_stored_connections(wifiBox.clone()); scanForWifi(listeners.clone(), wifiBox.clone()); let wifiFrame = wrapInFrame(SettingBox::new(&*wifiBox)); resetMain.remove_all(); From 5311bb8c4c4c39840c6837c9c77fa1a80103dbcb Mon Sep 17 00:00:00 2001 From: takotori Date: Sat, 18 Nov 2023 17:26:56 +0100 Subject: [PATCH 02/10] Add wifiOptions (ui only) --- src/components/output/sinkBox.rs | 8 +- src/components/wifi/mod.rs | 2 + src/components/wifi/wifiBox.rs | 5 +- src/components/wifi/wifiBoxImpl.rs | 3 + src/components/wifi/wifiEntry.rs | 14 +- src/components/wifi/wifiEntryImpl.rs | 3 - src/components/wifi/wifiOptions.rs | 21 ++ src/components/wifi/wifiOptionsImpl.rs | 45 +++ src/resources/resetUI.cmb | 295 +++++++++++++-- src/resources/resetWiFi.ui | 2 +- src/resources/resetWifiOptions.ui | 490 +++++++++++++++++++++++++ src/resources/resources.gresource.xml | 9 +- 12 files changed, 847 insertions(+), 50 deletions(-) create mode 100644 src/components/wifi/wifiOptions.rs create mode 100644 src/components/wifi/wifiOptionsImpl.rs create mode 100644 src/resources/resetWifiOptions.ui diff --git a/src/components/output/sinkBox.rs b/src/components/output/sinkBox.rs index a26e967..24e34c6 100644 --- a/src/components/output/sinkBox.rs +++ b/src/components/output/sinkBox.rs @@ -122,7 +122,7 @@ pub fn populate_sinks(output_box: Arc) { sink, )); let sink_clone = sink_entry.clone(); - let entry = Arc::new(ListEntry::new(&*sink_entry)); + let entry = Arc::new(ListEntry::new(&*sink_entry, )); entry.set_activatable(false); list.insert(index, (entry.clone(), sink_clone, alias)); output_box_imp.resetSinks.append(&*entry); @@ -217,7 +217,7 @@ pub fn populate_inputstreams(output_box: Arc) { for stream in streams { let index = stream.index; let input_stream = Arc::new(InputStreamEntry::new(output_box.clone(), stream)); - let entry = Arc::new(ListEntry::new(&*input_stream)); + let entry = Arc::new(ListEntry::new(&*input_stream, )); entry.set_activatable(false); list.insert(index, (entry.clone(), input_stream.clone())); output_box_imp.resetInputStreams.append(&*entry); @@ -359,7 +359,7 @@ pub fn start_output_box_listener(conn: Connection, sink_box: Arc) -> Co ir.sink, )); let sink_clone = sink_entry.clone(); - let entry = Arc::new(ListEntry::new(&*sink_entry)); + let entry = Arc::new(ListEntry::new(&*sink_entry, )); entry.set_activatable(false); list.insert(sink_index, (entry.clone(), sink_clone, alias.clone())); output_box_imp.resetSinks.append(&*entry); @@ -462,7 +462,7 @@ pub fn start_output_box_listener(conn: Connection, sink_box: Arc) -> Co let mut list = output_box_imp.resetInputStreamList.write().unwrap(); let index = ir.stream.index; let input_stream = Arc::new(InputStreamEntry::new(output_box.clone(), ir.stream)); - let entry = Arc::new(ListEntry::new(&*input_stream)); + let entry = Arc::new(ListEntry::new(&*input_stream, )); entry.set_activatable(false); list.insert(index, (entry.clone(), input_stream.clone())); output_box_imp.resetInputStreams.append(&*entry); diff --git a/src/components/wifi/mod.rs b/src/components/wifi/mod.rs index 7b420de..1802c4c 100644 --- a/src/components/wifi/mod.rs +++ b/src/components/wifi/mod.rs @@ -5,3 +5,5 @@ pub mod wifiBox; pub mod wifiBoxImpl; pub mod wifiEntry; pub mod wifiEntryImpl; +pub mod wifiOptions; +pub mod wifiOptionsImpl; diff --git a/src/components/wifi/wifiBox.rs b/src/components/wifi/wifiBox.rs index d39ad86..6815dbc 100644 --- a/src/components/wifi/wifiBox.rs +++ b/src/components/wifi/wifiBox.rs @@ -15,6 +15,7 @@ use dbus::arg::{AppendAll, ReadAll, RefArg}; use dbus::blocking::Connection; use dbus::Error; use dbus::Path; +use glib::ObjectExt; use gtk::gio; use gtk::glib::Variant; use gtk::prelude::ActionableExt; @@ -74,7 +75,7 @@ pub fn scanForWifi(listeners: Arc, wifiBox: Arc) { let selfImp = wifibox_ref.imp(); for accessPoint in accessPoints { let ssid = accessPoint.ssid.clone(); - let entry = Arc::new(ListEntry::new(&*WifiEntry::new(accessPoint))); + let entry = Arc::new(ListEntry::new(&*WifiEntry::new(accessPoint, selfImp))); wifiEntries.insert(ssid, entry.clone()); selfImp.resetWifiList.append(&*entry); } @@ -123,7 +124,7 @@ pub fn scanForWifi(listeners: Arc, wifiBox: Arc) { return; } let entry = - Arc::new(ListEntry::new(&*WifiEntry::new(access_point.0))); + Arc::new(ListEntry::new(&*WifiEntry::new(access_point.0, wifiBoxImpl.imp()))); wifiEntries.insert(ssid, entry.clone()); wifiBoxImpl.imp().resetWifiList.append(&*entry); }); diff --git a/src/components/wifi/wifiBoxImpl.rs b/src/components/wifi/wifiBoxImpl.rs index 336df0f..8d15cbe 100644 --- a/src/components/wifi/wifiBoxImpl.rs +++ b/src/components/wifi/wifiBoxImpl.rs @@ -4,6 +4,7 @@ use gtk::subclass::prelude::*; use gtk::{glib, CompositeTemplate, ListBox, Switch}; use std::collections::HashMap; use std::sync::{Arc, Mutex}; +use adw::NavigationView; use crate::components::base::listEntry::ListEntry; use crate::components::wifi::wifiEntry::WifiEntry; @@ -12,6 +13,8 @@ use crate::components::wifi::wifiEntry::WifiEntry; #[derive(Default, CompositeTemplate)] #[template(resource = "/org/Xetibo/ReSet/resetWiFi.ui")] pub struct WifiBox { + #[template_child] + pub resetWifiNavigation: TemplateChild, #[template_child] pub resetWifiDetails: TemplateChild, #[template_child] diff --git a/src/components/wifi/wifiEntry.rs b/src/components/wifi/wifiEntry.rs index 63d5b15..105893e 100644 --- a/src/components/wifi/wifiEntry.rs +++ b/src/components/wifi/wifiEntry.rs @@ -13,9 +13,10 @@ use gtk::prelude::{ListBoxRowExt, WidgetExt}; use gtk::{gio, AlertDialog, GestureClick}; use ReSet_Lib::network::network::{AccessPoint, WifiStrength}; -use crate::components::base::listEntry::ListEntry; +use crate::components::wifi::{wifiEntryImpl}; use crate::components::wifi::wifiBox::getConnectionSettings; -use crate::components::wifi::wifiEntryImpl; +use crate::components::wifi::wifiBoxImpl::WifiBox; +use crate::components::wifi::wifiOptions::WifiOptions; use super::savedWifiEntry::SavedWifiEntry; @@ -29,7 +30,7 @@ unsafe impl Send for WifiEntry {} unsafe impl Sync for WifiEntry {} impl WifiEntry { - pub fn new(access_point: AccessPoint) -> Arc { + pub fn new(access_point: AccessPoint, wifiBox: &WifiBox) -> Arc { let entry: Arc = Arc::new(Object::builder().build()); let stored_entry = entry.clone(); let new_entry = entry.clone(); @@ -77,14 +78,15 @@ impl WifiEntry { } })); entry.add_controller(gesture); + entry.setupCallbacks(wifiBox); entry } - pub fn setupCallbacks(&self) { + pub fn setupCallbacks(&self, wifiBox: &WifiBox) { let selfImp = self.imp(); - selfImp.resetWifiEditButton.connect_clicked(clone!(@ weak selfImp => move |_| { - // TODO open navigationpage + selfImp.resetWifiEditButton.connect_clicked(clone!(@ weak selfImp, @ weak wifiBox => move |_| { let _option = getConnectionSettings(selfImp.accessPoint.borrow().associated_connection.clone()); + wifiBox.resetWifiNavigation.push(&WifiOptions::new(_option)); })); } } diff --git a/src/components/wifi/wifiEntryImpl.rs b/src/components/wifi/wifiEntryImpl.rs index 0e52899..2d58aaa 100644 --- a/src/components/wifi/wifiEntryImpl.rs +++ b/src/components/wifi/wifiEntryImpl.rs @@ -50,9 +50,6 @@ impl ObjectSubclass for WifiEntry { impl ObjectImpl for WifiEntry { fn constructed(&self) { self.parent_constructed(); - - let obj = self.obj(); - obj.setupCallbacks(); } } diff --git a/src/components/wifi/wifiOptions.rs b/src/components/wifi/wifiOptions.rs new file mode 100644 index 0000000..c89da0b --- /dev/null +++ b/src/components/wifi/wifiOptions.rs @@ -0,0 +1,21 @@ +use adw::glib; +use adw::glib::Object; +use adw::subclass::prelude::ObjectSubclassIsExt; +use glib::PropertySet; +use ReSet_Lib::network::connection::Connection; +use crate::components::wifi::{wifiOptionsImpl}; + +glib::wrapper! { + pub struct WifiOptions(ObjectSubclass) + @extends adw::NavigationPage, gtk::Widget, + @implements gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget; +} + +impl WifiOptions { + pub fn new(option: Option) -> Self { + let wifiOption: WifiOptions = Object::builder().build(); + wifiOption.imp().options.set(option); + wifiOption + } + +} diff --git a/src/components/wifi/wifiOptionsImpl.rs b/src/components/wifi/wifiOptionsImpl.rs new file mode 100644 index 0000000..4c5554c --- /dev/null +++ b/src/components/wifi/wifiOptionsImpl.rs @@ -0,0 +1,45 @@ +use std::cell::RefCell; +use adw::NavigationPage; +use adw::subclass::prelude::NavigationPageImpl; +use crate::components::wifi::{wifiOptions}; +use gtk::subclass::prelude::*; +use gtk::{glib, CompositeTemplate}; +use ReSet_Lib::network::connection::Connection; + +#[allow(non_snake_case)] +#[derive(Default, CompositeTemplate)] +#[template(resource = "/org/Xetibo/ReSet/resetWifiOptions.ui")] +pub struct WifiOptions { + pub options: RefCell> // Option>> +} + +#[glib::object_subclass] +impl ObjectSubclass for WifiOptions { + const NAME: &'static str = "resetWifiOptions"; + type Type = wifiOptions::WifiOptions; + type ParentType = NavigationPage; + + fn class_init(klass: &mut Self::Class) { + klass.bind_template(); + } + + fn instance_init(obj: &glib::subclass::InitializingObject) { + obj.init_template(); + } +} + +impl NavigationPageImpl for WifiOptions {} + +impl ObjectImpl for WifiOptions { + fn constructed(&self) { + self.parent_constructed(); + } +} + +impl BoxImpl for WifiOptions {} + +impl WidgetImpl for WifiOptions {} + +impl WindowImpl for WifiOptions {} + +impl ApplicationWindowImpl for WifiOptions {} diff --git a/src/resources/resetUI.cmb b/src/resources/resetUI.cmb index f188974..8970eef 100644 --- a/src/resources/resetUI.cmb +++ b/src/resources/resetUI.cmb @@ -18,7 +18,8 @@ (17,1,None,"resetSavedWifiEntry.ui",None,None,None,None,None,None,None), (18,1,None,"resetSinkEntry.ui",None,None,None,None,None,None,None), (19,1,None,"resetSourceEntry.ui",None,None,None,None,None,None,None), - (20,1,None,"resetCardEntry.ui",None,None,None,None,None,None,None) + (20,8,None,"resetWifiOptions.ui",None,None,None,None,None,None,None) + (21,1,None,"resetCardEntry.ui",None,None,None,None,None,None,None) (3,1,"AdwApplicationWindow","resetUI",None,None,None,None,-1," <child>\n <object id=\"resetSidebarBreakpoint\" class=\"AdwBreakpoint\">\n </object>\n </child>"), @@ -53,7 +54,7 @@ (3,50,"GtkLabel",None,34,None,None,None,3,None), (3,51,"GtkButton","resetShortcutsButton",36,None,None,None,None,None), (4,7,"GtkBox","resetWifi",None,None,None,None,None,None), - (4,152,"AdwNavigationView",None,7,None,None,None,1,None), + (4,152,"AdwNavigationView","resetWifiNavigation",7,None,None,None,1,None), (4,153,"AdwNavigationPage",None,152,None,None,None,None,None), (4,154,"GtkBox",None,153,None,None,None,None,None), (4,155,"GtkListBox","resetWifiDetails",154,None,None,None,1,None), @@ -275,11 +276,104 @@ (19,9,"GtkLabel","resetVolumePercentage",5,None,None,None,2,None), (19,10,"GtkProgressBar","resetVolumeMeter",1,None,None,None,2,None), (19,12,"GtkAdjustment",None,7,None,None,None,-1,None), - (20,1,"GtkBox","resetCardEntry",None,None,None,None,None,None), - (20,2,"GtkBox",None,1,None,None,None,None,None), - (20,3,"GtkLabel","resetCardName",2,None,None,None,None,None), - (20,5,"GtkDropDown","resetCardDropdown",2,None,None,None,1,None), - (20,6,"GtkStringList","resetCardList",5,None,None,None,-1,None) + (20,8,"AdwNavigationPage","resetWifiOptions",None,None,None,None,-1,None), + (20,9,"GtkNotebook",None,8,None,None,None,None,None), + (20,10,"GtkBox",None,9,None,None,None,None,None), + (20,11,"GtkLabel",None,9,None,"tab",None,1,None), + (20,15,"GtkBox",None,9,None,None,None,4,None), + (20,16,"GtkBox",None,9,None,None,None,6,None), + (20,18,"GtkLabel",None,9,None,"tab",None,5,None), + (20,19,"GtkLabel",None,9,None,"tab",None,7,None), + (20,29,"AdwPreferencesGroup",None,10,None,None,None,-1,None), + (20,30,"AdwActionRow",None,29,None,None,None,None,None), + (20,31,"AdwActionRow",None,29,None,None,None,1,None), + (20,32,"AdwActionRow",None,29,None,None,None,2,None), + (20,37,"AdwSwitchRow",None,29,None,None,None,3,None), + (20,38,"AdwSwitchRow",None,29,None,None,None,4,None), + (20,137,"AdwPreferencesGroup",None,15,None,None,None,None,None), + (20,138,"AdwComboRow",None,137,None,None,None,None,None), + (20,139,"GtkStringList",None,138,None,None,None,None,None), + (20,140,"AdwPreferencesGroup",None,15,None,None,None,1,None), + (20,141,"GtkListBoxRow",None,140,None,None,None,None,None), + (20,142,"GtkBox",None,141,None,None,None,None,None), + (20,143,"GtkEntry",None,142,None,None,None,None,None), + (20,144,"GtkSeparator",None,142,None,None,None,1,None), + (20,145,"GtkEntry",None,142,None,None,None,2,None), + (20,146,"GtkSeparator",None,142,None,None,None,3,None), + (20,147,"GtkEntry",None,142,None,None,None,4,None), + (20,148,"GtkSeparator",None,142,None,None,None,5,None), + (20,149,"GtkButton",None,142,None,None,None,6,None), + (20,150,"AdwPreferencesGroup",None,15,None,None,None,2,None), + (20,151,"GtkListBoxRow",None,150,None,None,None,None,None), + (20,152,"GtkBox",None,151,None,None,None,None,None), + (20,153,"GtkEntry",None,152,None,None,None,None,None), + (20,154,"GtkLabel",None,152,None,None,None,1,None), + (20,155,"AdwPreferencesGroup",None,15,None,None,None,3,None), + (20,156,"GtkListBoxRow",None,155,None,None,None,None,None), + (20,157,"GtkBox",None,156,None,None,None,None,None), + (20,158,"GtkEntry",None,157,None,None,None,None,None), + (20,159,"GtkSeparator",None,157,None,None,None,1,None), + (20,160,"GtkEntry",None,157,None,None,None,2,None), + (20,161,"GtkSeparator",None,157,None,None,None,3,None), + (20,162,"GtkEntry",None,157,None,None,None,4,None), + (20,163,"GtkSeparator",None,157,None,None,None,5,None), + (20,164,"GtkEntry",None,157,None,None,None,6,None), + (20,165,"GtkSeparator",None,157,None,None,None,7,None), + (20,166,"GtkButton",None,157,None,None,None,8,None), + (20,182,"AdwPreferencesGroup",None,16,None,None,None,None,None), + (20,183,"AdwComboRow",None,182,None,None,None,None,None), + (20,184,"GtkStringList",None,183,None,None,None,None,None), + (20,185,"AdwPasswordEntryRow",None,182,None,None,None,1,None), + (20,186,"GtkBox",None,155,None,None,None,-1,None), + (20,187,"GtkLabel",None,186,None,None,None,None,None), + (20,188,"GtkSwitch",None,186,None,None,None,1,None), + (20,189,"GtkBox",None,150,None,None,None,-1,None), + (20,190,"GtkLabel",None,189,None,None,None,None,None), + (20,191,"GtkSwitch",None,189,None,None,None,1,None), + (20,192,"GtkBox",None,9,None,None,None,2,None), + (20,193,"AdwPreferencesGroup",None,192,None,None,None,None,None), + (20,194,"AdwComboRow",None,193,None,None,None,None,None), + (20,195,"GtkStringList",None,194,None,None,None,None,None), + (20,196,"AdwPreferencesGroup",None,192,None,None,None,1,None), + (20,197,"GtkListBoxRow",None,196,None,None,None,None,None), + (20,198,"GtkBox",None,197,None,None,None,None,None), + (20,199,"GtkEntry",None,198,None,None,None,None,None), + (20,200,"GtkSeparator",None,198,None,None,None,1,None), + (20,201,"GtkEntry",None,198,None,None,None,2,None), + (20,202,"GtkSeparator",None,198,None,None,None,3,None), + (20,203,"GtkEntry",None,198,None,None,None,4,None), + (20,204,"GtkSeparator",None,198,None,None,None,5,None), + (20,205,"GtkButton",None,198,None,None,None,6,None), + (20,206,"AdwPreferencesGroup",None,192,None,None,None,2,None), + (20,207,"GtkBox",None,206,None,None,None,None,None), + (20,208,"GtkLabel",None,207,None,None,None,None,None), + (20,209,"GtkSwitch",None,207,None,None,None,1,None), + (20,210,"GtkListBoxRow",None,206,None,None,None,None,None), + (20,211,"GtkBox",None,210,None,None,None,None,None), + (20,212,"GtkEntry",None,211,None,None,None,None,None), + (20,213,"GtkLabel",None,211,None,None,None,1,None), + (20,214,"AdwPreferencesGroup",None,192,None,None,None,3,None), + (20,215,"GtkBox",None,214,None,None,None,None,None), + (20,216,"GtkLabel",None,215,None,None,None,None,None), + (20,217,"GtkSwitch",None,215,None,None,None,1,None), + (20,218,"GtkListBoxRow",None,214,None,None,None,None,None), + (20,219,"GtkBox",None,218,None,None,None,None,None), + (20,220,"GtkEntry",None,219,None,None,None,None,None), + (20,221,"GtkSeparator",None,219,None,None,None,1,None), + (20,222,"GtkEntry",None,219,None,None,None,2,None), + (20,223,"GtkSeparator",None,219,None,None,None,3,None), + (20,224,"GtkEntry",None,219,None,None,None,4,None), + (20,225,"GtkSeparator",None,219,None,None,None,5,None), + (20,226,"GtkEntry",None,219,None,None,None,6,None), + (20,227,"GtkSeparator",None,219,None,None,None,7,None), + (20,228,"GtkButton",None,219,None,None,None,8,None), + (20,229,"GtkLabel",None,9,None,"tab",None,3,None), + (20,230,"AdwEntryRow",None,193,None,None,None,1,None) + (21,1,"GtkBox","resetCardEntry",None,None,None,None,None,None), + (21,2,"GtkBox",None,1,None,None,None,None,None), + (21,3,"GtkLabel","resetCardName",2,None,None,None,None,None), + (21,5,"GtkDropDown","resetCardDropdown",2,None,None,None,1,None), + (21,6,"GtkStringList","resetCardList",5,None,None,None,-1,None) (3,1,"GtkWidget","height-request","200",None,None,None,None,None,None,None,None,None), @@ -901,35 +995,170 @@ (19,12,"GtkAdjustment","page-increment","2005.4016",None,None,None,None,None,None,None,None,None), (19,12,"GtkAdjustment","step-increment","2005.4016",None,None,None,None,None,None,None,None,None), (19,12,"GtkAdjustment","upper","100270.08",None,None,None,None,None,None,None,None,None), - (20,1,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None), - (20,1,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None), - (20,1,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None), - (20,1,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None), - (20,1,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None), - (20,2,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None), - (20,3,"GtkLabel","label","text",None,None,None,None,None,None,None,None,None), - (20,3,"GtkLabel","wrap","True",None,None,None,None,None,None,None,None,None), - (20,3,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None), - (20,5,"GtkDropDown","model",None,None,None,None,None,6,None,None,None,None), - (20,5,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None), - (20,5,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None), - (20,5,"GtkWidget","hexpand-set","True",None,None,None,None,None,None,None,None,None) + (20,9,"GtkNotebook","page","0",None,None,None,None,None,None,None,None,None), + (20,9,"GtkNotebook","scrollable","True",None,None,None,None,None,None,None,None,None), + (20,9,"GtkNotebook","show-border","False",None,None,None,None,None,None,None,None,None), + (20,10,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None), + (20,11,"GtkLabel","label","General",None,None,None,None,None,None,None,None,None), + (20,15,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None), + (20,15,"GtkWidget","width-request","500",None,None,None,None,None,None,None,None,None), + (20,16,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None), + (20,18,"GtkLabel","label","IPv6",None,None,None,None,None,None,None,None,None), + (20,19,"GtkLabel","label","Security",None,None,None,None,None,None,None,None,None), + (20,30,"AdwActionRow","subtitle","asdf",None,None,None,None,None,None,None,None,None), + (20,30,"AdwPreferencesRow","title","WiFi Name",None,None,None,None,None,None,None,None,None), + (20,30,"GtkWidget","css-classes","property",None,None,None,None,None,None,None,None,None), + (20,30,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None), + (20,30,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None), + (20,30,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None), + (20,30,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None), + (20,31,"AdwActionRow","subtitle","stronk",None,None,None,None,None,None,None,None,None), + (20,31,"AdwPreferencesRow","title","Signal Strength",None,None,None,None,None,None,None,None,None), + (20,31,"GtkWidget","css-classes","property",None,None,None,None,None,None,None,None,None), + (20,32,"AdwActionRow","subtitle","AA:BB:CC:DD:EE:FF",None,None,None,None,None,None,None,None,None), + (20,32,"AdwPreferencesRow","title","MAC-Address",None,None,None,None,None,None,None,None,None), + (20,32,"GtkWidget","css-classes","property",None,None,None,None,None,None,None,None,None), + (20,37,"AdwPreferencesRow","title","Connect automatically",None,None,None,None,None,None,None,None,None), + (20,38,"AdwPreferencesRow","title","Metered Connection",None,None,None,None,None,None,None,None,None), + (20,138,"AdwComboRow","model",None,None,None,None,None,139,None,None,None,None), + (20,138,"AdwPreferencesRow","title","IPv6 Method",None,None,None,None,None,None,None,None,None), + (20,140,"AdwPreferencesGroup","title","Addresses",None,None,None,None,None,None,None,None,None), + (20,140,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None), + (20,141,"GtkListBoxRow","activatable","False",None,None,None,None,None,None,None,None,None), + (20,143,"GtkEntry","placeholder-text","Address",None,None,None,None,None,None,None,None,None), + (20,143,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None), + (20,145,"GtkEntry","placeholder-text","Prefix",None,None,None,None,None,None,None,None,None), + (20,145,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None), + (20,147,"GtkEntry","placeholder-text","Gateway",None,None,None,None,None,None,None,None,None), + (20,147,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None), + (20,149,"GtkButton","icon-name","edit-delete-symbolic",None,None,None,None,None,None,None,None,None), + (20,150,"AdwPreferencesGroup","header-suffix",None,None,None,None,None,189,None,None,None,None), + (20,150,"AdwPreferencesGroup","title","DNS",None,None,None,None,None,None,None,None,None), + (20,150,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None), + (20,151,"GtkListBoxRow","activatable","False",None,None,None,None,None,None,None,None,None), + (20,152,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None), + (20,154,"GtkLabel","label","seperate ip by comma",None,None,None,None,None,None,None,None,None), + (20,154,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None), + (20,155,"AdwPreferencesGroup","header-suffix",None,None,None,None,None,186,None,None,None,None), + (20,155,"AdwPreferencesGroup","title","Routes",None,None,None,None,None,None,None,None,None), + (20,155,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None), + (20,156,"GtkListBoxRow","activatable","False",None,None,None,None,None,None,None,None,None), + (20,158,"GtkEntry","placeholder-text","Address",None,None,None,None,None,None,None,None,None), + (20,158,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None), + (20,160,"GtkEntry","placeholder-text","Prefix",None,None,None,None,None,None,None,None,None), + (20,160,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None), + (20,162,"GtkEntry","placeholder-text","Gateway",None,None,None,None,None,None,None,None,None), + (20,162,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None), + (20,164,"GtkEditable","max-width-chars","5",None,None,None,None,None,None,None,None,None), + (20,164,"GtkEntry","placeholder-text","Metric",None,None,None,None,None,None,None,None,None), + (20,164,"GtkWidget","width-request","50",None,None,None,None,None,None,None,None,None), + (20,166,"GtkButton","icon-name","edit-delete-symbolic",None,None,None,None,None,None,None,None,None), + (20,183,"AdwComboRow","model",None,None,None,None,None,184,None,None,None,None), + (20,183,"AdwPreferencesRow","title","Security",None,None,None,None,None,None,None,None,None), + (20,185,"AdwPreferencesRow","title","Password",None,None,None,None,None,None,None,None,None), + (20,187,"GtkLabel","label","Automatic",None,None,None,None,None,None,None,None,None), + (20,187,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None), + (20,188,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None), + (20,190,"GtkLabel","label","Automatic",None,None,None,None,None,None,None,None,None), + (20,190,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None), + (20,191,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None), + (20,192,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None), + (20,192,"GtkWidget","width-request","500",None,None,None,None,None,None,None,None,None), + (20,194,"AdwComboRow","model",None,None,None,None,None,195,None,None,None,None), + (20,194,"AdwPreferencesRow","title","IPv4 Method",None,None,None,None,None,None,None,None,None), + (20,196,"AdwPreferencesGroup","title","Addresses",None,None,None,None,None,None,None,None,None), + (20,196,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None), + (20,197,"GtkListBoxRow","activatable","False",None,None,None,None,None,None,None,None,None), + (20,199,"GtkEntry","max-length","1",None,None,None,None,None,None,None,None,None), + (20,199,"GtkEntry","placeholder-text","Address",None,None,None,None,None,None,None,None,None), + (20,199,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None), + (20,201,"GtkEntry","placeholder-text","Netmask",None,None,None,None,None,None,None,None,None), + (20,201,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None), + (20,203,"GtkEntry","placeholder-text","Gateway",None,None,None,None,None,None,None,None,None), + (20,203,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None), + (20,205,"GtkButton","icon-name","edit-delete-symbolic",None,None,None,None,None,None,None,None,None), + (20,206,"AdwPreferencesGroup","header-suffix",None,None,None,None,None,207,None,None,None,None), + (20,206,"AdwPreferencesGroup","title","DNS",None,None,None,None,None,None,None,None,None), + (20,206,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None), + (20,208,"GtkLabel","label","Automatic",None,None,None,None,None,None,None,None,None), + (20,208,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None), + (20,209,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None), + (20,210,"GtkListBoxRow","activatable","False",None,None,None,None,None,None,None,None,None), + (20,211,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None), + (20,213,"GtkLabel","label","seperate ip by comma",None,None,None,None,None,None,None,None,None), + (20,213,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None), + (20,214,"AdwPreferencesGroup","header-suffix",None,None,None,None,None,215,None,None,None,None), + (20,214,"AdwPreferencesGroup","title","Routes",None,None,None,None,None,None,None,None,None), + (20,214,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None), + (20,216,"GtkLabel","label","Automatic",None,None,None,None,None,None,None,None,None), + (20,216,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None), + (20,217,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None), + (20,218,"GtkListBoxRow","activatable","False",None,None,None,None,None,None,None,None,None), + (20,220,"GtkEntry","placeholder-text","Address",None,None,None,None,None,None,None,None,None), + (20,220,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None), + (20,222,"GtkEntry","placeholder-text","Netmask",None,None,None,None,None,None,None,None,None), + (20,222,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None), + (20,224,"GtkEntry","placeholder-text","Gateway",None,None,None,None,None,None,None,None,None), + (20,224,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None), + (20,226,"GtkEditable","max-width-chars","5",None,None,None,None,None,None,None,None,None), + (20,226,"GtkEntry","placeholder-text","Metric",None,None,None,None,None,None,None,None,None), + (20,226,"GtkWidget","width-request","50",None,None,None,None,None,None,None,None,None), + (20,228,"GtkButton","icon-name","edit-delete-symbolic",None,None,None,None,None,None,None,None,None), + (20,229,"GtkLabel","label","IPv4",None,None,None,None,None,None,None,None,None), + (20,230,"AdwPreferencesRow","title","DNS (separate IP by comma)",None,None,None,None,None,None,None,None,None) + (21,1,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None), + (21,1,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None), + (21,1,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None), + (21,1,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None), + (21,1,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None), + (21,2,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None), + (21,3,"GtkLabel","label","text",None,None,None,None,None,None,None,None,None), + (21,3,"GtkLabel","wrap","True",None,None,None,None,None,None,None,None,None), + (21,3,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None), + (21,5,"GtkDropDown","model",None,None,None,None,None,6,None,None,None,None), + (21,5,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None), + (21,5,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None), + (21,5,"GtkWidget","hexpand-set","True",None,None,None,None,None,None,None,None,None) + + (3,42,"GtkWidget",2,2,None,1,None,None,None,None), (3,42,"GtkWidget",1,1,None,None,None,None,None,None), - (3,42,"GtkWidget",2,2,None,1,None,None,None,None), - (7,9,"GtkScale",1,1,None,None,None,None,None,None), - (7,9,"GtkScale",2,2,"100%",1,None,None,None,None), - (8,99,"GtkScale",1,1,None,None,None,None,None,None), - (8,99,"GtkScale",2,2,"100%",1,None,None,None,None), - (12,25,"GtkScale",1,1,None,None,None,None,None,None), - (12,25,"GtkScale",2,2,"100%",1,None,None,None,None), - (13,17,"GtkScale",1,1,None,None,None,None,None,None), - (13,17,"GtkScale",2,2,"100%",1,None,None,None,None), - (18,7,"GtkScale",1,1,None,None,None,None,None,None), - (18,7,"GtkScale",2,2,"100%",1,None,None,None,None), - (19,7,"GtkScale",1,1,None,None,None,None,None,None), - (19,7,"GtkScale",2,2,"100%",1,None,None,None,None) + (7,9,"GtkScale",1,1,None,None,None,None,None,None), + (7,9,"GtkScale",2,2,"100%",1,None,None,None,None), + (8,99,"GtkScale",1,1,None,None,None,None,None,None), + (8,99,"GtkScale",2,2,"100%",1,None,None,None,None), + (12,25,"GtkScale",1,1,None,None,None,None,None,None), + (12,25,"GtkScale",2,2,"100%",1,None,None,None,None), + (13,17,"GtkScale",1,1,None,None,None,None,None,None), + (13,17,"GtkScale",2,2,"100%",1,None,None,None,None), + (18,7,"GtkScale",1,1,None,None,None,None,None,None), + (18,7,"GtkScale",2,2,"100%",1,None,None,None,None), + (19,7,"GtkScale",1,1,None,None,None,None,None,None), + (19,7,"GtkScale",2,2,"100%",1,None,None,None,None) + (20,139,"GtkStringList",1,1,None,None,None,None,None,None), + (20,139,"GtkStringList",2,2,"Automatic",1,None,None,None,None), + (20,139,"GtkStringList",2,3,"Automatic (DHCP only)",1,None,None,None,None), + (20,139,"GtkStringList",2,4,"Manual",1,None,None,None,None), + (20,139,"GtkStringList",2,5,"Shared to other computers",1,None,None,None,None), + (20,139,"GtkStringList",2,6,"Link-Local Only",1,None,None,None,None), + (20,139,"GtkStringList",2,7,"Disabled",1,None,None,None,None), + (20,184,"GtkStringList",2,10,"WPA3 Personal",1,None,None,None,None), + (20,184,"GtkStringList",2,9,"WPA & WPA2 Enterprise",1,None,None,None,None), + (20,184,"GtkStringList",2,8,"WPA & WPA2 Personal",1,None,None,None,None), + (20,184,"GtkStringList",2,7,"Dynamic WEP (802.1X)",1,None,None,None,None), + (20,184,"GtkStringList",1,1,None,None,None,None,None,None), + (20,184,"GtkStringList",2,2,"None",1,None,None,None,None), + (20,184,"GtkStringList",2,3,"Enhanced Open",1,None,None,None,None), + (20,184,"GtkStringList",2,4,"WEP 40/128-bit Key (Hex or ASCII)",1,None,None,None,None), + (20,184,"GtkStringList",2,5,"WEP 128-bit Passphrase",1,None,None,None,None), + (20,184,"GtkStringList",2,6,"LEAP",1,None,None,None,None), + (20,195,"GtkStringList",1,1,None,None,None,None,None,None), + (20,195,"GtkStringList",2,2,"Automatic (DHCP)",1,None,None,None,None), + (20,195,"GtkStringList",2,3,"Manual",1,None,None,None,None), + (20,195,"GtkStringList",2,4,"Shared to other computers",1,None,None,None,None), + (20,195,"GtkStringList",2,5,"Link-Local Only",1,None,None,None,None), + (20,195,"GtkStringList",2,6,"Disabled",1,None,None,None,None) (7,9,"GtkScale",2,2,"value","65536.0"), diff --git a/src/resources/resetWiFi.ui b/src/resources/resetWiFi.ui index 227b0ae..b02b965 100644 --- a/src/resources/resetWiFi.ui +++ b/src/resources/resetWiFi.ui @@ -30,7 +30,7 @@ - + main diff --git a/src/resources/resetWifiOptions.ui b/src/resources/resetWifiOptions.ui new file mode 100644 index 0000000..7e09ed4 --- /dev/null +++ b/src/resources/resetWifiOptions.ui @@ -0,0 +1,490 @@ + + + + + + + diff --git a/src/resources/resources.gresource.xml b/src/resources/resources.gresource.xml index fbb8f11..2808ab1 100644 --- a/src/resources/resources.gresource.xml +++ b/src/resources/resources.gresource.xml @@ -1,21 +1,28 @@ + resetMainWindow.ui resetSidebarEntry.ui resetSettingBox.ui resetListBoxRow.ui + resetWiFi.ui resetWifiEntry.ui resetSavedWifiEntry.ui + resetWifiOptions.ui + resetBluetooth.ui resetBluetoothEntry.ui + resetAudioOutput.ui resetOutputStreamEntry.ui + resetSinkEntry.ui + resetAudioInput.ui resetInputStreamEntry.ui - resetSinkEntry.ui resetSourceEntry.ui + resetPopup.ui resetCardEntry.ui From ed7b814e62944276672e8d347147035d0b3d5a29 Mon Sep 17 00:00:00 2001 From: takotori Date: Mon, 20 Nov 2023 17:52:07 +0100 Subject: [PATCH 03/10] Add Wifi Options (UI only) --- Cargo.toml | 2 +- src/components/wifi/mod.rs | 4 + src/components/wifi/wifiAddressEntry.rs | 34 ++ src/components/wifi/wifiAddressEntryImpl.rs | 47 +++ src/components/wifi/wifiBox.rs | 9 +- src/components/wifi/wifiEntry.rs | 2 +- src/components/wifi/wifiOptions.rs | 163 ++++++++- src/components/wifi/wifiOptionsImpl.rs | 38 +- src/components/wifi/wifiRouteEntry.rs | 38 ++ src/components/wifi/wifiRouteEntryImpl.rs | 51 +++ src/resources/resetUI.cmb | 313 ++++++++--------- src/resources/resetWifiAddressEntry.ui | 30 ++ src/resources/resetWifiOptions.ui | 370 ++++++-------------- src/resources/resetWifiRouteEntry.ui | 46 +++ src/resources/resources.gresource.xml | 2 + 15 files changed, 702 insertions(+), 447 deletions(-) create mode 100644 src/components/wifi/wifiAddressEntry.rs create mode 100644 src/components/wifi/wifiAddressEntryImpl.rs create mode 100644 src/components/wifi/wifiRouteEntry.rs create mode 100644 src/components/wifi/wifiRouteEntryImpl.rs create mode 100644 src/resources/resetWifiAddressEntry.ui create mode 100644 src/resources/resetWifiRouteEntry.ui diff --git a/Cargo.toml b/Cargo.toml index 98ee8cf..52b92d7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ description = "A wip universal Linux settings application." [dependencies] reset_daemon = "0.1.9" -ReSet-Lib = "0.3.5" +ReSet-Lib = "0.3.8" adw = { version = "0.5.3", package = "libadwaita", features = ["v1_4"] } dbus = "0.9.7" gtk = { version = "0.7.3", package = "gtk4", features = ["v4_12"] } diff --git a/src/components/wifi/mod.rs b/src/components/wifi/mod.rs index 1802c4c..8d59124 100644 --- a/src/components/wifi/mod.rs +++ b/src/components/wifi/mod.rs @@ -7,3 +7,7 @@ pub mod wifiEntry; pub mod wifiEntryImpl; pub mod wifiOptions; pub mod wifiOptionsImpl; +pub mod wifiAddressEntry; +pub mod wifiAddressEntryImpl; +pub mod wifiRouteEntry; +pub mod wifiRouteEntryImpl; \ No newline at end of file diff --git a/src/components/wifi/wifiAddressEntry.rs b/src/components/wifi/wifiAddressEntry.rs new file mode 100644 index 0000000..ca651ae --- /dev/null +++ b/src/components/wifi/wifiAddressEntry.rs @@ -0,0 +1,34 @@ +use adw::glib; +use adw::glib::Object; +use adw::prelude::PreferencesRowExt; +use glib::subclass::prelude::ObjectSubclassIsExt; +use gtk::prelude::EditableExt; +use ReSet_Lib::network::connection::Address; + +use crate::components::wifi::wifiAddressEntryImpl; +use crate::components::wifi::wifiOptions::getValueFromKey; + +glib::wrapper! { + pub struct WifiAddressEntry(ObjectSubclass) + @extends gtk::Box, gtk::Widget, + @implements gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget, gtk::Orientable; +} + +impl WifiAddressEntry { + pub fn new(address: Option<&Address>) -> Self { + let entry: WifiAddressEntry = Object::builder().build(); + + if let Some(address) = address { + let entryImp = entry.imp(); + let map = address.to_map(); + + let addr = getValueFromKey(&map, "address"); + let prefix = getValueFromKey(&map, "prefix-length"); + + entryImp.resetAddressAddress.set_text(&*addr); + entryImp.resetAddressNetmask.set_text(&*prefix); + entryImp.resetAddressRow.set_title(&*format!("{}, {}", addr, prefix)); + } + entry + } +} diff --git a/src/components/wifi/wifiAddressEntryImpl.rs b/src/components/wifi/wifiAddressEntryImpl.rs new file mode 100644 index 0000000..1e48982 --- /dev/null +++ b/src/components/wifi/wifiAddressEntryImpl.rs @@ -0,0 +1,47 @@ +use adw::{EntryRow, ExpanderRow}; +use crate::components::wifi::{wifiAddressEntry}; +use gtk::subclass::prelude::*; +use gtk::{glib, CompositeTemplate, Button}; + +#[allow(non_snake_case)] +#[derive(Default, CompositeTemplate)] +#[template(resource = "/org/Xetibo/ReSet/resetWifiAddressEntry.ui")] +pub struct WifiAddressEntryImpl { + #[template_child] + pub resetAddressRow: TemplateChild, + #[template_child] + pub resetAddressAddress: TemplateChild, + #[template_child] + pub resetAddressNetmask: TemplateChild, + #[template_child] + pub resetAddressRemove: TemplateChild