Merge pull request #61 from Xetibo/ina

Ina
This commit is contained in:
Dashie 2023-11-21 20:26:19 +01:00 committed by GitHub
commit afe311a16b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
38 changed files with 1885 additions and 837 deletions

View file

@ -5,8 +5,8 @@ edition = "2021"
description = "A wip universal Linux settings application."
[dependencies]
reset_daemon = "0.1.9"
ReSet-Lib = "0.3.5"
reset_daemon = "0.2.3"
ReSet-Lib = "0.4.0"
adw = { version = "0.5.3", package = "libadwaita", features = ["v1_4"] }
dbus = "0.9.7"
gtk = { version = "0.7.3", package = "gtk4", features = ["v4_12"] }

View file

@ -2,44 +2,48 @@ use std::time::Duration;
use adw::glib;
use adw::glib::Object;
use adw::prelude::{ComboRowExt, PreferencesRowExt};
use dbus::blocking::Connection;
use dbus::Error;
use glib::{Cast, clone, ObjectExt, ToValue};
use glib::subclass::types::ObjectSubclassIsExt;
use glib::{clone, Cast};
use gtk::{gio, StringObject};
use gtk::{Align, gio, SignalListItemFactory, StringList, StringObject};
use gtk::prelude::{GObjectPropertyExpressionExt, ListItemExt, WidgetExt};
use ReSet_Lib::audio::audio::Card;
use super::cardEntryImpl;
glib::wrapper! {
pub struct CardEntry(ObjectSubclass<cardEntryImpl::CardEntry>)
@extends gtk::Box, gtk::Widget,
@implements gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget, gtk::Orientable;
@extends adw::ComboRow, gtk::Widget,
@implements gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget, gtk::Orientable, adw::PreferencesRow;
}
impl CardEntry {
pub fn new(card: Card) -> Self {
let entry: Self = Object::builder().build();
let entry: CardEntry = Object::builder().build();
{
let imp = entry.imp();
let mut map = imp.resetCardMap.borrow_mut();
imp.resetCardName.set_text(&card.name);
entry.set_title(&card.name);
let mut i: u32 = 0;
let mut index: u32 = 0;
let list = StringList::new(&[]);
for profile in card.profiles.iter() {
if profile.name == card.active_profile {
index = i;
}
imp.resetCardList.append(&profile.description);
list.append(&profile.description);
map.insert(
profile.description.clone(),
(card.index, profile.name.clone()),
);
i += 1;
}
imp.resetCardDropdown.set_selected(index);
imp.resetCardDropdown
.connect_selected_notify(clone!(@weak imp => move |dropdown| {
entry.set_model(Some(&list));
entry.set_selected(index);
entry.set_use_subtitle(true);
entry.connect_selected_notify(clone!(@weak imp => move |dropdown| {
let selected = dropdown.selected_item();
if selected.is_none() {
return;
@ -51,6 +55,18 @@ impl CardEntry {
let (device_index, profile_name) = map.get(&selected).unwrap();
set_card_profile_of_device(*device_index, profile_name.clone());
}));
let factory = &SignalListItemFactory::new();
factory.connect_setup(|_, item| {
let item = item.downcast_ref::<gtk::ListItem>().unwrap();
let label = gtk::Label::new(None);
label.set_halign(Align::Start);
item.property_expression("item")
.chain_property::<StringObject>("string")
.bind(&label, "label", gtk::Widget::NONE);
item.set_child(Some(&label));
});
entry.set_factory(Some(factory));
}
entry
}

View file

@ -1,8 +1,12 @@
use std::cell::RefCell;
use std::collections::HashMap;
use adw::ComboRow;
use adw::subclass::action_row::ActionRowImpl;
use adw::subclass::preferences_row::PreferencesRowImpl;
use adw::subclass::prelude::ComboRowImpl;
use gtk::subclass::prelude::*;
use gtk::{glib, CompositeTemplate, DropDown, Label, StringList, TemplateChild};
use gtk::{glib, CompositeTemplate};
use super::cardEntry;
@ -10,12 +14,6 @@ use super::cardEntry;
#[derive(Default, CompositeTemplate)]
#[template(resource = "/org/Xetibo/ReSet/resetCardEntry.ui")]
pub struct CardEntry {
#[template_child]
pub resetCardName: TemplateChild<Label>,
#[template_child]
pub resetCardDropdown: TemplateChild<DropDown>,
#[template_child]
pub resetCardList: TemplateChild<StringList>,
// first string is the alias name, the first return string is the index of the adapter and the
// second the name of the profile
pub resetCardMap: RefCell<HashMap<String, (u32, String)>>,
@ -25,7 +23,7 @@ pub struct CardEntry {
impl ObjectSubclass for CardEntry {
const NAME: &'static str = "resetCardEntry";
type Type = cardEntry::CardEntry;
type ParentType = gtk::Box;
type ParentType = ComboRow;
fn class_init(klass: &mut Self::Class) {
klass.bind_template();
@ -36,7 +34,11 @@ impl ObjectSubclass for CardEntry {
}
}
impl BoxImpl for CardEntry {}
impl ActionRowImpl for CardEntry {}
impl PreferencesRowImpl for CardEntry {}
impl ComboRowImpl for CardEntry {}
impl ObjectImpl for CardEntry {
fn constructed(&self) {}

View file

@ -392,6 +392,8 @@ pub fn start_audio_listener(
return;
}
let mut conn = start_dbus_audio_listener(conn);
if sink_box.is_some() {
conn = start_output_box_listener(conn, sink_box.unwrap());
}
@ -405,6 +407,7 @@ pub fn start_audio_listener(
let _ = conn.process(Duration::from_millis(1000));
if !listeners.pulse_listener.load(Ordering::SeqCst) {
println!("stopping audio listener");
stop_dbus_audio_listener(conn);
break;
}
// thread::sleep(Duration::from_millis(1000));
@ -412,3 +415,23 @@ pub fn start_audio_listener(
}
});
}
fn start_dbus_audio_listener(conn: Connection) -> Connection {
let proxy = conn.with_proxy(
"org.xetibo.ReSet",
"/org/xetibo/ReSet",
Duration::from_millis(1000),
);
let _: Result<(), Error> = proxy.method_call("org.xetibo.ReSet", "StartAudioListener", ());
conn
}
fn stop_dbus_audio_listener(conn: Connection) {
let proxy = conn.with_proxy(
"org.xetibo.ReSet",
"/org/xetibo/ReSet",
Duration::from_millis(1000),
);
let _: Result<(), Error> = proxy.method_call("org.xetibo.ReSet", "StopAudioListener", ());
}

View file

@ -11,7 +11,7 @@ use dbus::message::SignalArgs;
use dbus::{Error, Path};
use gtk::gio;
use gtk::glib::Variant;
use gtk::prelude::ActionableExt;
use gtk::prelude::{ActionableExt, ListBoxRowExt};
use ReSet_Lib::signals::{BluetoothDeviceAdded, BluetoothDeviceRemoved};
use crate::components::base::listEntry::ListEntry;
@ -36,6 +36,7 @@ impl BluetoothBox {
pub fn setupCallbacks(&self) {
let selfImp = self.imp();
selfImp.resetVisibility.set_activatable(true);
selfImp
.resetVisibility
.set_action_name(Some("navigation.push"));

View file

@ -5,6 +5,7 @@ use gtk::{glib, CompositeTemplate, ListBox, Switch};
use std::cell::RefCell;
use std::collections::HashMap;
use std::sync::Arc;
use adw::ActionRow;
use crate::components::base::listEntry::ListEntry;
use crate::components::bluetooth::bluetoothBox;
@ -21,7 +22,7 @@ pub struct BluetoothBox {
#[template_child]
pub resetBluetoothConnectedDevices: TemplateChild<ListBox>,
#[template_child]
pub resetVisibility: TemplateChild<ListEntry>,
pub resetVisibility: TemplateChild<ActionRow>,
#[template_child]
pub resetBluetoothMainTab: TemplateChild<ListEntry>,
pub availableDevices: RefCell<HashMap<Path<'static>, (Arc<BluetoothEntry>, Arc<ListEntry>)>>,

View file

@ -1,6 +1,18 @@
use std::sync::Arc;
use std::time::{Duration, SystemTime};
use adw::glib;
use adw::glib::Object;
use adw::prelude::{BoxExt, ButtonExt, CheckButtonExt, ComboRowExt, ListBoxRowExt, PreferencesGroupExt, RangeExt};
use dbus::{Error, Path};
use dbus::blocking::Connection;
use dbus::message::SignalArgs;
use glib::{Cast, clone, Propagation, Variant};
use glib::subclass::prelude::ObjectSubclassIsExt;
use gtk::{Align, gio, SignalListItemFactory, StringObject};
use gtk::prelude::{ActionableExt, GObjectPropertyExpressionExt, ListItemExt, WidgetExt};
use ReSet_Lib::audio::audio::{Card, OutputStream, Source};
use crate::components::base::cardEntry::CardEntry;
use crate::components::base::listEntry::ListEntry;
use crate::components::base::utils::{
@ -9,20 +21,9 @@ use crate::components::base::utils::{
};
use crate::components::input::sourceBoxImpl;
use crate::components::input::sourceEntry::set_source_volume;
use adw::glib;
use adw::glib::Object;
use adw::prelude::{BoxExt, ButtonExt, CheckButtonExt, ListBoxRowExt, RangeExt};
use dbus::blocking::Connection;
use dbus::message::SignalArgs;
use dbus::{Error, Path};
use glib::subclass::prelude::ObjectSubclassIsExt;
use glib::{clone, Cast, Propagation, Variant};
use gtk::prelude::ActionableExt;
use gtk::{gio, StringObject};
use ReSet_Lib::audio::audio::{Card, OutputStream, Source};
use super::outputStreamEntry::OutputStreamEntry;
use super::sourceEntry::{set_default_source, toggle_source_mute, SourceEntry};
use super::sourceEntry::{set_default_source, SourceEntry, toggle_source_mute};
glib::wrapper! {
pub struct SourceBox(ObjectSubclass<sourceBoxImpl::SourceBox>)
@ -40,12 +41,14 @@ impl SourceBox {
pub fn setupCallbacks(&self) {
let selfImp = self.imp();
selfImp.resetSourceRow.set_activatable(true);
selfImp
.resetSourceRow
.set_action_name(Some("navigation.push"));
selfImp
.resetSourceRow
.set_action_target_value(Some(&Variant::from("sources")));
selfImp.resetCardsRow.set_activatable(true);
selfImp
.resetCardsRow
.set_action_name(Some("navigation.push"));
@ -58,6 +61,19 @@ impl SourceBox {
selfImp
.resetInputCardsBackButton
.set_action_name(Some("navigation.pop"));
let factory = &SignalListItemFactory::new();
factory.connect_setup(|_, item| {
let item = item.downcast_ref::<gtk::ListItem>().unwrap();
let label = gtk::Label::new(None);
label.set_halign(Align::Start);
item.property_expression("item")
.chain_property::<StringObject>("string")
.bind(&label, "label", gtk::Widget::NONE);
item.set_child(Some(&label));
});
selfImp.resetSourceDropdown.set_factory(Some(factory));
}
}
@ -230,7 +246,7 @@ pub fn populate_cards(input_box: Arc<SourceBox>) {
let imp = output_box_ref.imp();
for card in cards {
imp.resetCards
.append(&ListEntry::new(&CardEntry::new(card)));
.add(&CardEntry::new(card));
}
});
});
@ -424,25 +440,27 @@ pub fn start_input_box_listener(conn: Connection, source_box: Arc<SourceBox>) ->
glib::idle_add_once(move || {
let output_box = source_box.clone();
let output_box_imp = output_box.imp();
let is_default = ir.source.name == default_source.name;
let volume = ir.source.volume.first().unwrap_or_else(|| &(0 as u32));
let fraction = (*volume as f64 / 655.36).round();
let percentage = (fraction).to_string() + "%";
let list = output_box_imp.resetSourceList.read().unwrap();
let entry = list.get(&ir.source.index);
if entry.is_none() {
return;
}
let imp = entry.unwrap().1.imp();
let is_default = ir.source.name == default_source.name;
imp.resetSourceName
.set_text(ir.source.alias.clone().as_str());
let volume = ir.source.volume.first().unwrap_or_else(|| &(0 as u32));
let fraction = (*volume as f64 / 655.36).round();
let percentage = (fraction).to_string() + "%";
imp.resetVolumePercentage.set_text(&percentage);
imp.resetVolumeSlider.set_value(*volume as f64);
if is_default {
output_box_imp.resetVolumePercentage.set_text(&percentage);
output_box_imp.resetVolumeSlider.set_value(*volume as f64);
imp.resetSelectedSource.set_active(true);
} else {
imp.resetSelectedSource.set_active(false);
}
imp.resetSourceName.set_text(ir.source.alias.clone().as_str());
imp.resetVolumePercentage.set_text(&percentage);
imp.resetVolumeSlider.set_value(*volume as f64);
});
});
true

View file

@ -2,6 +2,7 @@ use std::cell::RefCell;
use std::collections::HashMap;
use std::sync::{Arc, RwLock};
use std::time::SystemTime;
use adw::{ActionRow, ComboRow, PreferencesGroup};
use crate::components::base::listEntry::ListEntry;
use crate::components::input::sourceBox;
@ -18,11 +19,11 @@ use super::sourceEntry::SourceEntry;
#[template(resource = "/org/Xetibo/ReSet/resetAudioInput.ui")]
pub struct SourceBox {
#[template_child]
pub resetSourceRow: TemplateChild<ListEntry>,
pub resetSourceRow: TemplateChild<ActionRow>,
#[template_child]
pub resetCardsRow: TemplateChild<ListEntry>,
pub resetCardsRow: TemplateChild<ActionRow>,
#[template_child]
pub resetSourceDropdown: TemplateChild<DropDown>,
pub resetSourceDropdown: TemplateChild<ComboRow>,
#[template_child]
pub resetSourceMute: TemplateChild<Button>,
#[template_child]
@ -40,7 +41,7 @@ pub struct SourceBox {
#[template_child]
pub resetInputCardsBackButton: TemplateChild<ListEntry>,
#[template_child]
pub resetCards: TemplateChild<gtk::Box>,
pub resetCards: TemplateChild<PreferencesGroup>,
pub resetDefaultCheckButton: Arc<CheckButton>,
pub resetDefaultSource: Arc<RefCell<Source>>,
pub resetSourceList: Arc<RwLock<HashMap<u32, (Arc<ListEntry>, Arc<SourceEntry>, String)>>>,

View file

@ -1,27 +1,30 @@
use adw::prelude::PreferencesGroupExt;
use std::sync::Arc;
use std::time::{Duration, SystemTime};
use adw::{glib, prelude::ListBoxRowExt};
use adw::glib::Object;
use adw::prelude::{BoxExt, ButtonExt, CheckButtonExt, ComboRowExt, RangeExt};
use dbus::{Error, Path};
use dbus::blocking::Connection;
use dbus::message::SignalArgs;
use glib::{Cast, clone, Propagation, Variant};
use glib::subclass::prelude::ObjectSubclassIsExt;
use gtk::{Align, gio, SignalListItemFactory, StringObject};
use gtk::prelude::*;
use gtk::prelude::{ActionableExt, GObjectPropertyExpressionExt, ListItemExt};
use ReSet_Lib::audio::audio::{Card, InputStream, Sink};
use crate::components::base::cardEntry::CardEntry;
use crate::components::base::listEntry::ListEntry;
use crate::components::base::utils::{
InputStreamAdded, InputStreamChanged, InputStreamRemoved, SinkAdded, SinkChanged, SinkRemoved,
};
use crate::components::output::sinkEntry::set_sink_volume;
use adw::glib::Object;
use adw::prelude::{BoxExt, ButtonExt, CheckButtonExt, RangeExt};
use adw::{glib, prelude::ListBoxRowExt};
use dbus::blocking::Connection;
use dbus::message::SignalArgs;
use dbus::{Error, Path};
use glib::subclass::prelude::ObjectSubclassIsExt;
use glib::{clone, Cast, Propagation, Variant};
use gtk::prelude::ActionableExt;
use gtk::{gio, StringObject};
use ReSet_Lib::audio::audio::{Card, InputStream, Sink};
use super::inputStreamEntry::InputStreamEntry;
use super::sinkBoxImpl;
use super::sinkEntry::{set_default_sink, toggle_sink_mute, SinkEntry};
use super::sinkEntry::{set_default_sink, SinkEntry, toggle_sink_mute};
glib::wrapper! {
pub struct SinkBox(ObjectSubclass<sinkBoxImpl::SinkBox>)
@ -45,12 +48,14 @@ impl SinkBox {
pub fn setupCallbacks(&self) {
let selfImp = self.imp();
selfImp.resetSinksRow.set_activatable(true);
selfImp
.resetSinksRow
.set_action_name(Some("navigation.push"));
selfImp
.resetSinksRow
.set_action_target_value(Some(&Variant::from("outputDevices")));
selfImp.resetCardsRow.set_activatable(true);
selfImp
.resetCardsRow
.set_action_name(Some("navigation.push"));
@ -65,6 +70,19 @@ impl SinkBox {
selfImp
.resetInputCardsBackButton
.set_action_name(Some("navigation.pop"));
let factory = &SignalListItemFactory::new();
factory.connect_setup(|_, item| {
let item = item.downcast_ref::<gtk::ListItem>().unwrap();
let label = gtk::Label::new(None);
label.set_halign(Align::Start);
item.property_expression("item")
.chain_property::<StringObject>("string")
.bind(&label, "label", gtk::Widget::NONE);
item.set_child(Some(&label));
});
selfImp.resetSinkDropdown.set_factory(Some(factory));
}
}
@ -122,7 +140,7 @@ pub fn populate_sinks(output_box: Arc<SinkBox>) {
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 +235,7 @@ pub fn populate_inputstreams(output_box: Arc<SinkBox>) {
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);
@ -236,7 +254,7 @@ pub fn populate_cards(output_box: Arc<SinkBox>) {
let imp = output_box_ref.imp();
for card in cards {
imp.resetCards
.append(&ListEntry::new(&CardEntry::new(card)));
.add(&CardEntry::new(card));
}
});
});
@ -359,7 +377,7 @@ pub fn start_output_box_listener(conn: Connection, sink_box: Arc<SinkBox>) -> 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);
@ -426,24 +444,27 @@ pub fn start_output_box_listener(conn: Connection, sink_box: Arc<SinkBox>) -> Co
glib::idle_add_once(move || {
let output_box = sink_box.clone();
let output_box_imp = output_box.imp();
let is_default = ir.sink.name == default_sink.name;
let volume = ir.sink.volume.first().unwrap_or_else(|| &(0 as u32));
let fraction = (*volume as f64 / 655.36).round();
let percentage = (fraction).to_string() + "%";
let list = output_box_imp.resetSinkList.read().unwrap();
let entry = list.get(&ir.sink.index);
if entry.is_none() {
return;
}
let imp = entry.unwrap().1.imp();
let is_default = ir.sink.name == default_sink.name;
imp.resetSinkName.set_text(ir.sink.alias.clone().as_str());
let volume = ir.sink.volume.first().unwrap_or_else(|| &(0 as u32));
let fraction = (*volume as f64 / 655.36).round();
let percentage = (fraction).to_string() + "%";
imp.resetVolumePercentage.set_text(&percentage);
imp.resetVolumeSlider.set_value(*volume as f64);
if is_default {
output_box_imp.resetVolumePercentage.set_text(&percentage);
output_box_imp.resetVolumeSlider.set_value(*volume as f64);
imp.resetSelectedSink.set_active(true);
} else {
imp.resetSelectedSink.set_active(false);
}
imp.resetSinkName.set_text(ir.sink.alias.clone().as_str());
imp.resetVolumePercentage.set_text(&percentage);
imp.resetVolumeSlider.set_value(*volume as f64);
});
});
true
@ -462,7 +483,7 @@ pub fn start_output_box_listener(conn: Connection, sink_box: Arc<SinkBox>) -> 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);

View file

@ -2,6 +2,7 @@ use std::cell::RefCell;
use std::collections::HashMap;
use std::sync::{Arc, RwLock};
use std::time::SystemTime;
use adw::{ActionRow, ComboRow, PreferencesGroup};
use crate::components::base::listEntry::ListEntry;
use crate::components::output::inputStreamEntry::InputStreamEntry;
@ -20,11 +21,11 @@ use super::sinkEntry::SinkEntry;
#[template(resource = "/org/Xetibo/ReSet/resetAudioOutput.ui")]
pub struct SinkBox {
#[template_child]
pub resetSinksRow: TemplateChild<ListEntry>,
pub resetSinksRow: TemplateChild<ActionRow>,
#[template_child]
pub resetCardsRow: TemplateChild<ListEntry>,
pub resetCardsRow: TemplateChild<ActionRow>,
#[template_child]
pub resetSinkDropdown: TemplateChild<DropDown>,
pub resetSinkDropdown: TemplateChild<ComboRow>,
#[template_child]
pub resetSinkMute: TemplateChild<Button>,
#[template_child]
@ -42,7 +43,7 @@ pub struct SinkBox {
#[template_child]
pub resetInputCardsBackButton: TemplateChild<ListEntry>,
#[template_child]
pub resetCards: TemplateChild<Box>,
pub resetCards: TemplateChild<PreferencesGroup>,
pub resetDefaultCheckButton: Arc<CheckButton>,
pub resetDefaultSink: Arc<RefCell<Sink>>,
pub resetSinkList: Arc<RwLock<HashMap<u32, (Arc<ListEntry>, Arc<SinkEntry>, String)>>>,

View file

@ -5,3 +5,9 @@ pub mod wifiBox;
pub mod wifiBoxImpl;
pub mod wifiEntry;
pub mod wifiEntryImpl;
pub mod wifiOptions;
pub mod wifiOptionsImpl;
pub mod wifiAddressEntry;
pub mod wifiAddressEntryImpl;
pub mod wifiRouteEntry;
pub mod wifiRouteEntryImpl;

View file

@ -4,40 +4,49 @@ 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;
use gtk::prelude::ListBoxRowExt;
glib::wrapper! {
pub struct SavedWifiEntry(ObjectSubclass<savedWifiEntryImpl::SavedWifiEntry>)
@extends gtk::Box, gtk::Widget,
@implements gtk::Accessible, gtk::Buildable, gtk::Actionable, gtk::ConstraintTarget;
@extends adw::ActionRow, gtk::Widget,
@implements gtk::Accessible, gtk::Buildable, gtk::Actionable, gtk::ConstraintTarget, gtk::ListBoxRow;
}
impl SavedWifiEntry {
pub fn new(name: &String, path: Path<'static>) -> Self {
let entry: SavedWifiEntry = Object::builder().build();
entry.set_activatable(false);
let entryImp = entry.imp();
// 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,));
});
}

View file

@ -1,4 +1,7 @@
use std::cell::RefCell;
use adw::ActionRow;
use adw::subclass::preferences_row::PreferencesRowImpl;
use adw::subclass::prelude::ActionRowImpl;
use dbus::Path;
use gtk::subclass::prelude::*;
@ -26,7 +29,7 @@ unsafe impl Sync for SavedWifiEntry {}
impl ObjectSubclass for SavedWifiEntry {
const NAME: &'static str = "resetSavedWifiEntry";
type Type = savedWifiEntry::SavedWifiEntry;
type ParentType = gtk::Box;
type ParentType = ActionRow;
fn class_init(klass: &mut Self::Class) {
klass.bind_template();
@ -43,7 +46,11 @@ impl ObjectImpl for SavedWifiEntry {
}
}
impl BoxImpl for SavedWifiEntry {}
impl PreferencesRowImpl for SavedWifiEntry {}
impl ListBoxRowImpl for SavedWifiEntry {}
impl ActionRowImpl for SavedWifiEntry {}
impl WidgetImpl for SavedWifiEntry {}

View file

@ -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<wifiAddressEntryImpl::WifiAddressEntryImpl>)
@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
}
}

View file

@ -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<ExpanderRow>,
#[template_child]
pub resetAddressAddress: TemplateChild<EntryRow>,
#[template_child]
pub resetAddressNetmask: TemplateChild<EntryRow>,
#[template_child]
pub resetAddressRemove: TemplateChild<Button>,
}
#[glib::object_subclass]
impl ObjectSubclass for WifiAddressEntryImpl {
const NAME: &'static str = "resetWifiAddressEntry";
type Type = wifiAddressEntry::WifiAddressEntry;
type ParentType = gtk::Box;
fn class_init(klass: &mut Self::Class) {
klass.bind_template();
}
fn instance_init(obj: &glib::subclass::InitializingObject<Self>) {
obj.init_template();
}
}
impl ObjectImpl for WifiAddressEntryImpl {
fn constructed(&self) {
self.parent_constructed();
}
}
impl BoxImpl for WifiAddressEntryImpl {}
impl WidgetImpl for WifiAddressEntryImpl {}
impl WindowImpl for WifiAddressEntryImpl {}
impl ApplicationWindowImpl for WifiAddressEntryImpl {}

View file

@ -1,4 +1,5 @@
use std::collections::HashMap;
use std::net::Shutdown::Read;
use std::sync::atomic::Ordering;
use std::sync::mpsc::{channel, Receiver, Sender};
use std::sync::Arc;
@ -9,12 +10,13 @@ use crate::components::base::listEntry::ListEntry;
use crate::components::base::utils::Listeners;
use adw::glib;
use adw::glib::Object;
use adw::prelude::ListBoxRowExt;
use adw::prelude::{ListBoxRowExt, PreferencesGroupExt};
use adw::subclass::prelude::ObjectSubclassIsExt;
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;
@ -46,6 +48,7 @@ impl WifiBox {
pub fn setupCallbacks(&self) {
let selfImp = self.imp();
selfImp.resetSavedNetworks.set_activatable(true);
selfImp
.resetSavedNetworks
.set_action_name(Some("navigation.push"));
@ -74,9 +77,9 @@ pub fn scanForWifi(listeners: Arc<Listeners>, wifiBox: Arc<WifiBox>) {
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 = WifiEntry::new(accessPoint, selfImp);
wifiEntries.insert(ssid, entry.clone());
selfImp.resetWifiList.append(&*entry);
selfImp.resetWifiList.add(&*entry);
}
});
});
@ -122,10 +125,9 @@ pub fn scanForWifi(listeners: Arc<Listeners>, wifiBox: Arc<WifiBox>) {
if wifiEntries.get(&ssid).is_some() {
return;
}
let entry =
Arc::new(ListEntry::new(&*WifiEntry::new(access_point.0)));
let entry = WifiEntry::new(access_point.0, wifiBoxImpl.imp());
wifiEntries.insert(ssid, entry.clone());
wifiBoxImpl.imp().resetWifiList.append(&*entry);
wifiBoxImpl.imp().resetWifiList.add(&*entry);
});
});
}
@ -161,9 +163,8 @@ pub fn show_stored_connections(wifiBox: Arc<WifiBox>) {
// TODO include button for settings
let name =
&String::from_utf8(connection.1).unwrap_or_else(|_| String::from(""));
let entry = ListEntry::new(&SavedWifiEntry::new(name, connection.0));
entry.set_activatable(false);
selfImp.resetStoredWifiList.append(&entry);
let entry = SavedWifiEntry::new(name, connection.0);
selfImp.resetStoredWifiList.add(&entry);
}
});
});
@ -213,7 +214,7 @@ pub fn get_stored_connections() -> Vec<(Path<'static>, Vec<u8>)> {
connections
}
pub fn getConnectionSettings(path: Path<'static>) -> Option<ResetConnection> {
pub fn getConnectionSettings(path: Path<'static>) -> ResetConnection {
let conn = Connection::new_session().unwrap();
let proxy = conn.with_proxy(
"org.xetibo.ReSet",
@ -225,14 +226,14 @@ pub fn getConnectionSettings(path: Path<'static>) -> Option<ResetConnection> {
Error,
> = proxy.method_call("org.xetibo.ReSet", "GetConnectionSettings", (path,));
if res.is_err() {
return None;
ResetConnection::default();
}
let (res,) = res.unwrap();
let res = ResetConnection::convert_from_propmap(res);
if res.is_err() {
return None;
ResetConnection::default();
}
Some(res.unwrap())
res.unwrap()
}
// temporary, testing this with lib is pain

View file

@ -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::{ActionRow, ComboRow, NavigationView, PreferencesGroup};
use crate::components::base::listEntry::ListEntry;
use crate::components::wifi::wifiEntry::WifiEntry;
@ -13,18 +14,22 @@ use crate::components::wifi::wifiEntry::WifiEntry;
#[template(resource = "/org/Xetibo/ReSet/resetWiFi.ui")]
pub struct WifiBox {
#[template_child]
pub resetWifiDetails: TemplateChild<ListBox>,
pub resetWifiNavigation: TemplateChild<NavigationView>,
#[template_child]
pub resetSavedNetworks: TemplateChild<ListEntry>,
pub resetWifiDetails: TemplateChild<PreferencesGroup>,
#[template_child]
pub resetWiFiDevice: TemplateChild<ComboRow>,
#[template_child]
pub resetSavedNetworks: TemplateChild<ActionRow>,
#[template_child]
pub resetWifiSwitch: TemplateChild<Switch>,
#[template_child]
pub resetWifiList: TemplateChild<ListBox>,
pub resetWifiList: TemplateChild<PreferencesGroup>,
#[template_child]
pub resetStoredWifiList: TemplateChild<ListBox>,
pub resetStoredWifiList: TemplateChild<PreferencesGroup>,
#[template_child]
pub resetAvailableNetworks: TemplateChild<ListEntry>,
pub wifiEntries: Arc<Mutex<HashMap<Vec<u8>, Arc<ListEntry>>>>,
pub wifiEntries: Arc<Mutex<HashMap<Vec<u8>, Arc<WifiEntry>>>>,
pub savedWifiEntries: Arc<Mutex<Vec<ListEntry>>>,
}

View file

@ -4,29 +4,33 @@ use std::time::Duration;
use adw::glib;
use adw::glib::{Object, PropertySet};
use adw::prelude::{ButtonExt, EditableExt, PopoverExt};
use adw::prelude::{ActionRowExt, 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::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;
glib::wrapper! {
pub struct WifiEntry(ObjectSubclass<wifiEntryImpl::WifiEntry>)
@extends gtk::Box, gtk::Widget,
@implements gtk::Accessible, gtk::Buildable, gtk::Actionable, gtk::ConstraintTarget;
@extends adw::ActionRow, gtk::Widget,
@implements gtk::Accessible, gtk::Buildable, gtk::Actionable, gtk::ConstraintTarget, gtk::ListBoxRow;
}
unsafe impl Send for WifiEntry {}
unsafe impl Sync for WifiEntry {}
impl WifiEntry {
pub fn new(access_point: AccessPoint) -> Arc<Self> {
pub fn new(access_point: AccessPoint, wifiBox: &WifiBox) -> Arc<Self> {
let entry: Arc<WifiEntry> = Arc::new(Object::builder().build());
let stored_entry = entry.clone();
let new_entry = entry.clone();
@ -35,7 +39,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 +52,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()
@ -60,87 +66,94 @@ impl WifiEntry {
*wifiName = String::from(name);
}
entryImp.accessPoint.set(access_point);
let gesture = GestureClick::new();
if stored {
gesture.connect_released(move |_, _, _, _| {
entry.set_activatable(true);
entry.connect_activated(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.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));
}));
}
}
pub fn click_stored_network(entry: Arc<WifiEntry>) {
let alert = AlertDialog::builder().build();
let root = &entry.root().unwrap();
let root = root.downcast_ref::<gtk::Window>();
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<WifiEntry>) {
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<WifiEntry>) {
@ -155,7 +168,7 @@ pub fn click_new_network(entry: Arc<WifiEntry>) {
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 +180,10 @@ pub fn click_new_network(entry: Arc<WifiEntry>) {
"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 +194,7 @@ pub fn click_new_network(entry: Arc<WifiEntry>) {
return;
}
if res.unwrap() == (false,) {
println!("wrong pw");
entry_ref
.imp()
.resetWifiPopup
@ -189,6 +204,7 @@ pub fn click_new_network(entry: Arc<WifiEntry>) {
result.store(false, std::sync::atomic::Ordering::SeqCst);
return;
}
println!("worked?");
entry_ref.imp().resetWifiPopup.popdown();
result.store(true, std::sync::atomic::Ordering::SeqCst);
});

View file

@ -3,6 +3,9 @@ use crate::components::wifi::wifiEntry;
use gtk::subclass::prelude::*;
use gtk::{glib, Button, CompositeTemplate, Image, Label};
use std::cell::RefCell;
use adw::ActionRow;
use adw::subclass::preferences_row::PreferencesRowImpl;
use adw::subclass::prelude::ActionRowImpl;
use ReSet_Lib::network::network::{AccessPoint, WifiStrength};
#[allow(non_snake_case)]
@ -33,7 +36,7 @@ unsafe impl Sync for WifiEntry {}
impl ObjectSubclass for WifiEntry {
const NAME: &'static str = "resetWifiEntry";
type Type = wifiEntry::WifiEntry;
type ParentType = gtk::Box;
type ParentType = ActionRow;
fn class_init(klass: &mut Self::Class) {
klass.bind_template();
@ -47,13 +50,14 @@ impl ObjectSubclass for WifiEntry {
impl ObjectImpl for WifiEntry {
fn constructed(&self) {
self.parent_constructed();
let obj = self.obj();
obj.setupCallbacks();
}
}
impl BoxImpl for WifiEntry {}
impl PreferencesRowImpl for WifiEntry {}
impl ListBoxRowImpl for WifiEntry {}
impl ActionRowImpl for WifiEntry {}
impl WidgetImpl for WifiEntry {}

View file

@ -0,0 +1,174 @@
use std::sync::Arc;
use adw::glib;
use adw::glib::Object;
use adw::prelude::{ActionRowExt, ComboRowExt, PreferencesGroupExt};
use adw::subclass::prelude::ObjectSubclassIsExt;
use dbus::arg::PropMap;
use glib::{PropertySet, Cast, ObjectExt, clone};
use gtk::prelude::{EditableExt, WidgetExt};
use ReSet_Lib::network::connection::{Connection, Enum, TypeSettings};
use crate::components::wifi::wifiAddressEntry::WifiAddressEntry;
use crate::components::wifi::wifiOptionsImpl;
use crate::components::wifi::wifiRouteEntry::WifiRouteEntry;
glib::wrapper! {
pub struct WifiOptions(ObjectSubclass<wifiOptionsImpl::WifiOptions>)
@extends adw::NavigationPage, gtk::Widget,
@implements gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget;
}
impl WifiOptions {
pub fn new(connection: Connection) -> Arc<Self> {
let wifiOption: Arc<WifiOptions> = Arc::new(Object::builder().build());
wifiOption.imp().connection.set(connection);
wifiOption.initializeUI();
setupCallbacks(wifiOption)
}
pub fn initializeUI(&self) {
let selfImp = self.imp();
let conn = selfImp.connection.borrow();
// General
selfImp.resetWifiName.set_subtitle(&*conn.settings.name);
selfImp.resetWifiAutoConnect.set_active(conn.settings.autoconnect);
selfImp.resetWifiMetered.set_active(if conn.settings.metered != -1 { true } else { false });
match &conn.device {
TypeSettings::WIFI(wifi) => {}
TypeSettings::ETHERNET(ethernet) => {}
TypeSettings::VPN(vpn) => {}
TypeSettings::None => {}
};
// IPv4
selfImp.resetIP4Method.set_selected(conn.ipv4.dns_method.to_i32() as u32);
self.setIP4Visibility(conn.ipv4.dns_method.to_i32() as u32);
let ipv4Dns: Vec<String> = conn.ipv4.dns.iter()
.map(|addr| {
addr.iter()
.map(|octet| octet.to_string())
.collect::<Vec<String>>()
.join(".")
})
.collect();
selfImp.resetIP4DNS.set_text(&*ipv4Dns.join(", "));
selfImp.resetIP4Gateway.set_text(&*conn.ipv4.gateway);
if conn.ipv4.address_data.is_empty() {
selfImp.resetIP4AddressGroup.add(&WifiAddressEntry::new(None))
} else {
for address in conn.ipv4.address_data.iter() {
selfImp.resetIP4AddressGroup.add(&WifiAddressEntry::new(Some(address)))
}
}
if conn.ipv4.route_data.is_empty() {
selfImp.resetIP4RoutesGroup.add(&WifiRouteEntry::new(None))
} else {
for address in conn.ipv4.route_data.iter() {
selfImp.resetIP4RoutesGroup.add(&WifiRouteEntry::new(Some(address)))
}
}
// IPv6
selfImp.resetIP6Method.set_selected(conn.ipv6.dns_method.to_i32() as u32);
self.setIP6Visibility(conn.ipv6.dns_method.to_i32() as u32);
let ipv6Dns: Vec<String> = conn.ipv6.dns.iter()
.map(|addr| {
addr.iter()
.map(|octet| octet.to_string())
.collect::<Vec<String>>()
.join(":")
})
.collect();
selfImp.resetIP6DNS.set_text(&*ipv6Dns.join(", "));
selfImp.resetIP6Gateway.set_text(&*conn.ipv6.gateway);
if conn.ipv6.address_data.is_empty() {
selfImp.resetIP6AddressGroup.add(&WifiAddressEntry::new(None))
} else {
for address in conn.ipv6.address_data.iter() {
selfImp.resetIP6AddressGroup.add(&WifiAddressEntry::new(Some(address)))
}
}
if conn.ipv6.route_data.is_empty() {
selfImp.resetIP6RoutesGroup.add(&WifiRouteEntry::new(None))
} else {
for address in conn.ipv6.route_data.iter() {
selfImp.resetIP6RoutesGroup.add(&WifiRouteEntry::new(Some(address)))
}
}
// Security
dbg!(conn);
}
pub fn setIP4Visibility(&self, method: u32) {
let selfImp = self.imp();
match method {
0 => { // auto
selfImp.resetIP4AddressGroup.set_visible(false);
selfImp.resetIP4RoutesGroup.set_visible(true);
selfImp.resetIP4Gateway.set_visible(false);
}
1 => { // manual
selfImp.resetIP4AddressGroup.set_visible(true);
selfImp.resetIP4RoutesGroup.set_visible(true);
selfImp.resetIP4Gateway.set_visible(true);
}
_ => {
selfImp.resetIP4AddressGroup.set_visible(false);
selfImp.resetIP4RoutesGroup.set_visible(false);
selfImp.resetIP4Gateway.set_visible(false);
}
}
}
pub fn setIP6Visibility(&self, method: u32) {
let selfImp = self.imp();
match method {
0 | 1 => { // auto, dhcp
selfImp.resetIP6AddressGroup.set_visible(false);
selfImp.resetIP6RoutesGroup.set_visible(true);
selfImp.resetIP6Gateway.set_visible(false);
}
2 => { // manual
selfImp.resetIP6AddressGroup.set_visible(true);
selfImp.resetIP6RoutesGroup.set_visible(true);
selfImp.resetIP6Gateway.set_visible(true);
}
_ => {
selfImp.resetIP6AddressGroup.set_visible(false);
selfImp.resetIP6RoutesGroup.set_visible(false);
selfImp.resetIP6Gateway.set_visible(false);
}
}
}
}
fn setupCallbacks(wifiOptions: Arc<WifiOptions>) -> Arc<WifiOptions> {
let imp = wifiOptions.imp();
let wifiOptionsRef = wifiOptions.clone();
let wifiOptionsRef2 = wifiOptions.clone();
imp.resetIP4Method.connect_selected_notify(move |dropdown| {
let selected = dropdown.selected();
wifiOptionsRef.setIP4Visibility(selected);
});
imp.resetIP6Method.connect_selected_notify(move |dropdown| {
let selected = dropdown.selected();
wifiOptionsRef2.setIP6Visibility(selected);
});
wifiOptions
}
pub fn getValueFromKey(map: &PropMap, key: &str) -> String {
map.get(key)
.map_or_else(|| "".to_string(),
|value| value.0
.as_str()
.unwrap_or_default()
.trim()
.to_string())
}

View file

@ -0,0 +1,89 @@
use std::cell::RefCell;
use std::rc::Rc;
use adw::{ActionRow, ComboRow, EntryRow, NavigationPage, PreferencesGroup, SwitchRow};
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 {
// General
#[template_child]
pub resetWifiName: TemplateChild<ActionRow>,
#[template_child]
pub resetWifiMac: TemplateChild<ActionRow>,
#[template_child]
pub resetWifiLinkSpeed: TemplateChild<ActionRow>,
#[template_child]
pub resetWifiIP4Addr: TemplateChild<ActionRow>,
#[template_child]
pub resetWifiIP6Addr: TemplateChild<ActionRow>,
#[template_child]
pub resetWifiGateway: TemplateChild<ActionRow>,
#[template_child]
pub resetWifiDNS: TemplateChild<ActionRow>,
#[template_child]
pub resetWifiAutoConnect: TemplateChild<SwitchRow>,
#[template_child]
pub resetWifiMetered: TemplateChild<SwitchRow>,
// IPv4
#[template_child]
pub resetIP4Method: TemplateChild<ComboRow>,
#[template_child]
pub resetIP4DNS: TemplateChild<EntryRow>,
#[template_child]
pub resetIP4Gateway: TemplateChild<EntryRow>,
#[template_child]
pub resetIP4AddressGroup: TemplateChild<PreferencesGroup>,
#[template_child]
pub resetIP4RoutesGroup: TemplateChild<PreferencesGroup>,
// IPv6
#[template_child]
pub resetIP6Method: TemplateChild<ComboRow>,
#[template_child]
pub resetIP6DNS: TemplateChild<EntryRow>,
#[template_child]
pub resetIP6Gateway: TemplateChild<EntryRow>,
#[template_child]
pub resetIP6AddressGroup: TemplateChild<PreferencesGroup>,
#[template_child]
pub resetIP6RoutesGroup: TemplateChild<PreferencesGroup>,
// Security
// Misc
pub connection: Rc<RefCell<Connection>>
}
#[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<Self>) {
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 {}

View file

@ -0,0 +1,38 @@
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::wifiOptions::getValueFromKey;
use crate::components::wifi::wifiRouteEntryImpl;
glib::wrapper! {
pub struct WifiRouteEntry(ObjectSubclass<wifiRouteEntryImpl::WifiRouteEntryImpl>)
@extends gtk::Box, gtk::Widget,
@implements gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget, gtk::Orientable;
}
impl WifiRouteEntry {
pub fn new(address: Option<&Address>) -> Self {
let entry: WifiRouteEntry = 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");
let gateway = getValueFromKey(&map, "gateway");
let metric = getValueFromKey(&map, "metric");
entryImp.resetRouteAddress.set_text(&*addr);
entryImp.resetRouteNetmask.set_text(&*prefix);
entryImp.resetRouteGateway.set_text(&*gateway);
entryImp.resetRouteMetric.set_text(&*metric);
entryImp.resetRouteRow.set_title(&*format!("{}, {}, {}, {}", addr, prefix, gateway, metric));
}
entry
}
}

View file

@ -0,0 +1,51 @@
use adw::{EntryRow, ExpanderRow};
use crate::components::wifi::wifiRouteEntry;
use gtk::subclass::prelude::*;
use gtk::{glib, CompositeTemplate, Button};
#[allow(non_snake_case)]
#[derive(Default, CompositeTemplate)]
#[template(resource = "/org/Xetibo/ReSet/resetWifiRouteEntry.ui")]
pub struct WifiRouteEntryImpl {
#[template_child]
pub resetRouteRow: TemplateChild<ExpanderRow>,
#[template_child]
pub resetRouteAddress: TemplateChild<EntryRow>,
#[template_child]
pub resetRouteNetmask: TemplateChild<EntryRow>,
#[template_child]
pub resetRouteGateway: TemplateChild<EntryRow>,
#[template_child]
pub resetRouteMetric: TemplateChild<EntryRow>,
#[template_child]
pub resetRouteRemove: TemplateChild<Button>,
}
#[glib::object_subclass]
impl ObjectSubclass for WifiRouteEntryImpl {
const NAME: &'static str = "resetWifiRouteEntry";
type Type = wifiRouteEntry::WifiRouteEntry;
type ParentType = gtk::Box;
fn class_init(klass: &mut Self::Class) {
klass.bind_template();
}
fn instance_init(obj: &glib::subclass::InitializingObject<Self>) {
obj.init_template();
}
}
impl ObjectImpl for WifiRouteEntryImpl {
fn constructed(&self) {
self.parent_constructed();
}
}
impl BoxImpl for WifiRouteEntryImpl {}
impl WidgetImpl for WifiRouteEntryImpl {}
impl WindowImpl for WifiRouteEntryImpl {}
impl ApplicationWindowImpl for WifiRouteEntryImpl {}

View file

@ -1,5 +1,6 @@
use gtk::prelude::FrameExt;
use std::sync::Arc;
use std::sync::atomic::Ordering;
use crate::components::base::settingBox::SettingBox;
use crate::components::base::utils::{start_audio_listener, Listeners};
@ -31,6 +32,7 @@ pub const HANDLE_WIFI_CLICK: fn(Arc<Listeners>, 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();
@ -66,15 +68,15 @@ pub const HANDLE_AUDIO_CLICK: fn(Arc<Listeners>, FlowBox) =
listeners.stop_network_listener();
listeners.stop_bluetooth_listener();
let audioOutput = Arc::new(SinkBox::new());
populate_sinks(audioOutput.clone());
let audioFrame = wrapInFrame(SettingBox::new(&*audioOutput));
let audioInput = Arc::new(SourceBox::new());
populate_sources(audioInput.clone());
start_audio_listener(
listeners.clone(),
Some(audioOutput.clone()),
Some(audioInput.clone()),
);
populate_sinks(audioOutput.clone());
let audioFrame = wrapInFrame(SettingBox::new(&*audioOutput));
populate_sources(audioInput.clone());
let sourceFrame = wrapInFrame(SettingBox::new(&*audioInput));
resetMain.remove_all();
resetMain.insert(&audioFrame, -1);
@ -87,8 +89,9 @@ pub const HANDLE_VOLUME_CLICK: fn(Arc<Listeners>, FlowBox) =
listeners.stop_network_listener();
listeners.stop_bluetooth_listener();
let audioOutput = Arc::new(SinkBox::new());
populate_sinks(audioOutput.clone());
start_audio_listener(listeners.clone(), Some(audioOutput.clone()), None);
while !listeners.pulse_listener.load(Ordering::SeqCst) {}
populate_sinks(audioOutput.clone());
let audioFrame = wrapInFrame(SettingBox::new(&*audioOutput));
resetMain.remove_all();
resetMain.insert(&audioFrame, -1);
@ -100,8 +103,8 @@ pub const HANDLE_MICROPHONE_CLICK: fn(Arc<Listeners>, FlowBox) =
listeners.stop_network_listener();
listeners.stop_bluetooth_listener();
let audioInput = Arc::new(SourceBox::new());
populate_sources(audioInput.clone());
start_audio_listener(listeners.clone(), None, Some(audioInput.clone()));
populate_sources(audioInput.clone());
let sourceFrame = wrapInFrame(SettingBox::new(&*audioInput));
resetMain.remove_all();
resetMain.insert(&sourceFrame, -1);

View file

@ -30,8 +30,6 @@ pub struct Window {
#[template_child]
pub resetSideBarToggle: TemplateChild<Button>,
#[template_child]
pub resetPath: TemplateChild<Box>,
#[template_child]
pub resetPopoverMenu: TemplateChild<PopoverMenu>,
#[template_child]
pub resetClose: TemplateChild<Button>,

View file

@ -19,70 +19,38 @@
<child>
<object class="AdwNavigationPage">
<property name="tag">output</property>
<property name="title">output</property>
<child>
<object class="GtkBox">
<property name="orientation">vertical</property>
<child>
<object class="GtkListBox">
<property name="css-classes">boxed-list</property>
<property name="margin-bottom">10</property>
<property name="margin-end">5</property>
<property name="margin-start">5</property>
<property name="margin-top">5</property>
<property name="show-separators">True</property>
<property name="valign">start</property>
<object class="AdwPreferencesGroup">
<child>
<object class="resetListBoxRow" id="resetSourceRow">
<object class="AdwActionRow" id="resetSourceRow">
<property name="title">Input Devices</property>
<child>
<object class="GtkBox">
<property name="height-request">40</property>
<property name="margin-start">5</property>
<child>
<object class="GtkLabel">
<property name="label">Input Device</property>
</object>
</child>
<child>
<object class="GtkDropDown" id="resetSourceDropdown">
<property name="halign">end</property>
<property name="hexpand">True</property>
<property name="valign">center</property>
</object>
</child>
<child>
<object class="GtkImage">
<property name="icon-name">go-previous-symbolic-rtl</property>
<property name="margin-end">5</property>
<property name="margin-start">5</property>
</object>
</child>
<object class="GtkImage">
<property name="icon-name">go-previous-symbolic-rtl</property>
</object>
</child>
</object>
</child>
<child>
<object class="resetListBoxRow" id="resetCardsRow">
<object class="AdwActionRow" id="resetCardsRow">
<property name="title">Profile Settings</property>
<child>
<object class="GtkBox">
<property name="height-request">40</property>
<child>
<object class="GtkLabel">
<property name="label">Profile Settings</property>
<property name="margin-start">5</property>
</object>
</child>
<child>
<object class="GtkImage">
<property name="halign">end</property>
<property name="hexpand">True</property>
<property name="icon-name">go-previous-symbolic-rtl</property>
<property name="margin-end">5</property>
</object>
</child>
<object class="GtkImage">
<property name="icon-name">go-previous-symbolic-rtl</property>
</object>
</child>
</object>
</child>
<child>
<object class="AdwComboRow" id="resetSourceDropdown">
<property name="title">Default Input Device</property>
<property name="use-subtitle">True</property>
</object>
</child>
</object>
</child>
<child>
@ -158,6 +126,7 @@
<child>
<object class="AdwNavigationPage">
<property name="tag">sources</property>
<property name="title">sources</property>
<child>
<object class="GtkBox">
<property name="orientation">vertical</property>
@ -216,6 +185,7 @@
<child>
<object class="AdwNavigationPage">
<property name="tag">profileConfiguration</property>
<property name="title">profileConfiguration</property>
<child>
<object class="GtkBox">
<property name="orientation">vertical</property>
@ -257,17 +227,8 @@
<object class="GtkLabel"/>
</child>
<child>
<object class="GtkBox" id="resetCards">
<property name="margin-end">5</property>
<property name="margin-start">5</property>
<property name="margin-top">10</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel">
<property name="halign">start</property>
<property name="label">Devices</property>
</object>
</child>
<object class="AdwPreferencesGroup" id="resetCards">
<property name="title">Devices</property>
</object>
</child>
</object>

View file

@ -19,70 +19,38 @@
<child>
<object class="AdwNavigationPage">
<property name="tag">output</property>
<property name="title">output</property>
<child>
<object class="GtkBox">
<property name="orientation">vertical</property>
<child>
<object class="GtkListBox">
<property name="css-classes">boxed-list</property>
<property name="margin-bottom">10</property>
<property name="margin-end">5</property>
<property name="margin-start">5</property>
<property name="margin-top">5</property>
<property name="show-separators">True</property>
<property name="valign">start</property>
<object class="AdwPreferencesGroup">
<child>
<object class="resetListBoxRow" id="resetSinksRow">
<object class="AdwActionRow" id="resetSinksRow">
<property name="title">Output Devices</property>
<child>
<object class="GtkBox">
<property name="height-request">40</property>
<property name="margin-start">5</property>
<child>
<object class="GtkLabel">
<property name="label">Output Device</property>
</object>
</child>
<child>
<object class="GtkDropDown" id="resetSinkDropdown">
<property name="halign">end</property>
<property name="hexpand">True</property>
<property name="valign">center</property>
</object>
</child>
<child>
<object class="GtkImage">
<property name="icon-name">go-previous-symbolic-rtl</property>
<property name="margin-end">5</property>
<property name="margin-start">5</property>
</object>
</child>
<object class="GtkImage">
<property name="icon-name">go-previous-symbolic-rtl</property>
</object>
</child>
</object>
</child>
<child>
<object class="resetListBoxRow" id="resetCardsRow">
<object class="AdwActionRow" id="resetCardsRow">
<property name="title">Profile Settings</property>
<child>
<object class="GtkBox">
<property name="height-request">40</property>
<child>
<object class="GtkLabel">
<property name="label">Profile Settings</property>
<property name="margin-start">5</property>
</object>
</child>
<child>
<object class="GtkImage">
<property name="halign">end</property>
<property name="hexpand">True</property>
<property name="icon-name">go-previous-symbolic-rtl</property>
<property name="margin-end">5</property>
</object>
</child>
<object class="GtkImage">
<property name="icon-name">go-previous-symbolic-rtl</property>
</object>
</child>
</object>
</child>
<child>
<object class="AdwComboRow" id="resetSinkDropdown">
<property name="title">Default Output Device</property>
<property name="use-subtitle">True</property>
</object>
</child>
</object>
</child>
<child>
@ -158,6 +126,7 @@
<child>
<object class="AdwNavigationPage">
<property name="tag">outputDevices</property>
<property name="title">outputDevices</property>
<child>
<object class="GtkBox">
<property name="orientation">vertical</property>
@ -219,6 +188,7 @@
<child>
<object class="AdwNavigationPage">
<property name="tag">profileConfiguration</property>
<property name="title">profileConfiguration</property>
<child>
<object class="GtkBox">
<property name="orientation">vertical</property>
@ -259,20 +229,11 @@
<child>
<object class="GtkLabel"/>
</child>
<child>
<object class="GtkBox" id="resetCards">
<property name="margin-end">5</property>
<property name="margin-start">5</property>
<property name="margin-top">10</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel">
<property name="halign">start</property>
<property name="label">Devices</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="AdwPreferencesGroup" id="resetCards">
<property name="title">Devices</property>
</object>
</child>
</object>

View file

@ -32,59 +32,26 @@
<child>
<object class="AdwNavigationPage">
<property name="tag">main</property>
<property name="title">main</property>
<child>
<object class="GtkBox">
<property name="orientation">vertical</property>
<child>
<object class="GtkListBox" id="resetBluetoothDetails">
<property name="css-classes">boxed-list</property>
<property name="margin-bottom">10</property>
<property name="margin-end">5</property>
<property name="margin-start">5</property>
<property name="margin-top">5</property>
<property name="show-separators">True</property>
<property name="valign">start</property>
<object class="AdwPreferencesGroup" id="resetBluetoothDetails">
<child>
<object class="resetListBoxRow">
<child>
<object class="GtkBox">
<property name="height-request">40</property>
<property name="margin-start">5</property>
<child>
<object class="GtkLabel">
<property name="label">Bluetooth Device</property>
</object>
</child>
<child>
<object class="GtkDropDown" id="resetBluetoothDevice">
<property name="halign">end</property>
<property name="hexpand">True</property>
<property name="valign">center</property>
</object>
</child>
</object>
</child>
<object class="AdwComboRow" id="resetBluetoothDevice">
<property name="title">Bluetooth Device</property>
</object>
</child>
<child>
<object class="resetListBoxRow" id="resetVisibility">
<object class="AdwActionRow" id="resetVisibility">
<property name="title">Visibility Settings</property>
<child>
<object class="GtkBox">
<property name="height-request">40</property>
<child>
<object class="GtkLabel">
<property name="label">Visibility Settings</property>
<property name="margin-start">5</property>
</object>
</child>
<child>
<object class="GtkImage">
<property name="halign">end</property>
<property name="hexpand">True</property>
<property name="icon-name">go-previous-symbolic-rtl</property>
<property name="margin-end">5</property>
</object>
</child>
<object class="GtkImage">
<property name="halign">end</property>
<property name="hexpand">True</property>
<property name="icon-name">go-previous-symbolic-rtl</property>
<property name="margin-end">5</property>
</object>
</child>
</object>
@ -93,6 +60,7 @@
</child>
<child>
<object class="GtkBox">
<property name="margin-top">10</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel">
@ -167,6 +135,7 @@
<child>
<object class="AdwNavigationPage">
<property name="tag">visibility</property>
<property name="title">visibility</property>
<child>
<object class="GtkBox">
<property name="orientation">vertical</property>

View file

@ -1,34 +1,8 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Cambalache 0.17.0 -->
<interface>
<requires lib="gtk" version="4.12"/>
<template class="resetCardEntry" parent="GtkBox">
<property name="margin-bottom">5</property>
<property name="margin-end">5</property>
<property name="margin-start">5</property>
<property name="margin-top">5</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox">
<property name="margin-bottom">5</property>
<child>
<object class="GtkLabel" id="resetCardName">
<property name="label">text</property>
<property name="margin-start">5</property>
<property name="wrap">True</property>
</object>
</child>
<child>
<object class="GtkDropDown" id="resetCardDropdown">
<property name="halign">end</property>
<property name="hexpand">True</property>
<property name="hexpand-set">True</property>
<property name="model">
<object class="GtkStringList" id="resetCardList"/>
</property>
</object>
</child>
</object>
</child>
</template>
<requires lib="libadwaita" version="1.4"/>
<object class="AdwComboRow" id="resetCardEntry">
<property name="use-subtitle">True</property>
</object>
</interface>

View file

@ -24,67 +24,18 @@
<child>
<object class="GtkBox">
<property name="valign">start</property>
<child>
<object class="GtkButton" id="resetBack">
<property name="has-frame">False</property>
<property name="icon-name">go-previous-symbolic</property>
<property name="valign">start</property>
</object>
</child>
<child>
<object class="GtkButton" id="resetSideBarToggle">
<property name="icon-name">sidebar-show-symbolic</property>
<property name="visible">False</property>
</object>
</child>
<child>
<object class="GtkButton" id="resetForward">
<property name="has-frame">False</property>
<property name="icon-name">go-previous-symbolic-rtl</property>
<property name="valign">start</property>
</object>
</child>
<child>
<object class="GtkBox" id="resetPath">
<property name="halign">start</property>
<property name="hexpand">True</property>
<property name="hexpand-set">True</property>
<property name="valign">center</property>
<child>
<object class="GtkButton">
<property name="has-frame">False</property>
<property name="label">Home</property>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="label">&gt;</property>
</object>
</child>
<child>
<object class="GtkButton">
<property name="has-frame">False</property>
<property name="label">WiFi</property>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="label">&gt;</property>
</object>
</child>
<child>
<object class="GtkButton">
<property name="has-frame">False</property>
<property name="label">Advanced</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkMenuButton">
<property name="can-shrink">True</property>
<property name="halign">end</property>
<property name="has-frame">False</property>
<property name="hexpand">True</property>
<property name="hexpand-set">True</property>
<property name="icon-name">open-menu-symbolic</property>
<property name="popover">

View file

@ -2,26 +2,39 @@
<!-- Created with Cambalache 0.17.0 -->
<interface>
<requires lib="gtk" version="4.12"/>
<template class="resetSavedWifiEntry" parent="GtkBox">
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="resetSavedWifiLabel">
<property name="margin-start">5</property>
<requires lib="libadwaita" version="1.0"/>
<template class="resetSavedWifiEntry" parent="AdwActionRow">
<property name="activatable">False</property>
<property name="child">
<object class="GtkBox">
<child>
<object class="GtkLabel" id="resetSavedWifiLabel">
<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="GtkButton" id="resetEditSavedWifiButton">
<property name="halign">end</property>
<property name="has-frame">False</property>
<property name="hexpand">True</property>
<property name="icon-name">document-edit-symbolic</property>
</object>
</child>
<child>
<object class="GtkButton" id="resetDeleteSavedWifiButton">
<property name="halign">start</property>
<property name="has-frame">False</property>
<property name="icon-name">user-trash-symbolic</property>
<property name="valign">center</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkButton" id="resetEditSavedWifiButton">
<property name="halign">end</property>
<property name="has-frame">False</property>
<property name="hexpand">True</property>
<property name="icon-name">document-edit-symbolic</property>
</object>
</child>
<child>
<object class="GtkButton" id="resetDeleteSavedWifiButton">
<property name="has-frame">False</property>
<property name="icon-name">user-trash-symbolic</property>
</object>
</child>
</property>
</template>
</interface>

View file

@ -4,7 +4,7 @@
<ui>
(3,1,None,"resetMainWindow.ui",None,None,None,None,None,None,None),
(4,7,None,"resetWiFi.ui",None,None,None,None,None,None,None),
(5,2,None,"resetWifiEntry.ui",None,None,None,None,None,None,None),
(5,12,None,"resetWifiEntry.ui",None,None,None,None,None,None,None),
(6,1,None,"resetSidebarEntry.ui",None,None,None,None,None,None,None),
(7,1,None,"resetInputStreamEntry.ui",None,None,None,None,None,None,None),
(8,1,None,"resetAudioOutput.ui",None,None,None,None,None,None,None),
@ -15,11 +15,19 @@
(14,3,None,"resetSettingBox.ui",None,None,None,None,None,None,None),
(15,1,None,"resetListBoxRow.ui",None,None,None,None,None,None,None),
(16,6,None,"resetPopup.ui",None,None,None,None,None,None,None),
(17,1,None,"resetSavedWifiEntry.ui",None,None,None,None,None,None,None),
(17,5,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,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),
(24,None,None,None,None,None,None,None,None,None,None)
</ui>
<ui_library>
(21,"gtk","4.12",None),
(21,"libadwaita","1.4",None)
</ui_library>
<object>
(3,1,"AdwApplicationWindow","resetUI",None,None,None,None,-1," &lt;child&gt;\n &lt;object id=\"resetSidebarBreakpoint\" class=\"AdwBreakpoint\"&gt;\n &lt;/object&gt;\n &lt;/child&gt;"),
(3,2,"AdwOverlaySplitView","resetOverlaySplitView",1,None,None,None,2,""),
@ -30,12 +38,9 @@
(3,20,"GtkSearchEntry","resetSearchEntry",19,None,None,None,None,None),
(3,24,"GtkWindowHandle",None,3,None,None,None,None,None),
(3,25,"GtkBox",None,24,None,None,None,None,None),
(3,26,"GtkButton","resetSideBarToggle",25,None,None,None,1,None),
(3,27,"GtkButton","resetBack",25,None,None,None,None,None),
(3,28,"GtkButton","resetForward",25,None,None,None,2,None),
(3,31,"GtkButton","resetClose",25,None,None,None,5,None),
(3,33,"GtkMenuButton",None,25,None,None,None,4,None),
(3,34,"GtkBox","resetPath",25,None,None,None,3,None),
(3,26,"GtkButton","resetSideBarToggle",25,None,None,None,None,None),
(3,31,"GtkButton","resetClose",25,None,None,None,2,None),
(3,33,"GtkMenuButton",None,25,None,None,None,1,None),
(3,35,"GtkPopoverMenu","resetPopoverMenu",33,None,None,None,-1,None),
(3,36,"GtkBox",None,35,None,None,None,-1,None),
(3,38,"GtkButton","resetPreferenceButton",36,None,None,None,1,None),
@ -46,25 +51,17 @@
(3,43,"GtkScrolledWindow",None,3,None,None,None,1,None),
(3,44,"GtkViewport",None,43,None,None,None,None,None),
(3,45,"GtkFlowBox","resetMain",44,None,None,None,None,None),
(3,46,"GtkButton",None,34,None,None,None,None,None),
(3,47,"GtkButton",None,34,None,None,None,2,None),
(3,48,"GtkButton",None,34,None,None,None,4,None),
(3,49,"GtkLabel",None,34,None,None,None,1,None),
(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),
(4,164,"GtkBox",None,154,None,None,None,2,None),
(4,164,"GtkBox",None,154,None,None,None,1,None),
(4,165,"GtkLabel",None,164,None,None,None,None,None),
(4,166,"GtkScrolledWindow",None,164,None,None,None,1,None),
(4,167,"GtkViewport",None,166,None,None,None,None,None),
(4,168,"GtkListBox","resetWifiList",167,None,None,None,None,None),
(4,174,"AdwNavigationPage",None,152,None,None,None,2,None),
(4,175,"GtkBox",None,174,None,None,None,None,None),
(4,178,"GtkListBox","resetStoredWifiList",175,None,None,None,2,None),
(4,182,"GtkBox",None,7,None,None,None,None,None),
(4,183,"GtkLabel",None,182,None,None,None,None,None),
(4,184,"GtkSwitch","resetWifiSwitch",182,None,None,None,1,None),
@ -73,23 +70,50 @@
(4,187,"GtkBox",None,186,None,None,None,None,None),
(4,188,"GtkLabel",None,187,None,None,None,None,None),
(4,189,"GtkImage",None,187,None,None,None,1,None),
(4,190,"GtkLabel",None,175,None,None,None,1,None),
(4,191,"resetListBoxRow",None,155,None,None,None,1,None),
(4,192,"GtkBox",None,191,None,None,None,None,None),
(4,193,"GtkLabel",None,192,None,None,None,None,None),
(4,194,"GtkDropDown","resetWiFiDevice",192,None,None,None,1,None),
(4,195,"resetListBoxRow","resetSavedNetworks",155,None,None,None,1,None),
(4,196,"GtkBox",None,195,None,None,None,None,None),
(4,197,"GtkLabel",None,196,None,None,None,None,None),
(4,198,"GtkImage",None,196,None,None,None,1,None),
(5,2,"GtkBox","resetWifiEntry",None,None,None,None,None,None),
(5,3,"GtkBox",None,2,None,None,None,None,None),
(5,4,"GtkImage","resetWifiStrength",3,None,None,None,None,None),
(5,5,"GtkImage","resetWifiEncrypted",3,None,None,None,1,None),
(5,6,"GtkLabel","resetWifiLabel",2,None,None,None,1,None),
(5,7,"GtkButton","resetWifiEditButton",2,None,None,None,4,None),
(5,8,"GtkImage","resetWifiConnected",2,None,None,None,3,None),
(5,11,"resetPopup","resetWifiPopup",2,None,None,None,-1,None),
(4,199,"AdwPreferencesGroup","resetWifiDetails",154,None,None,None,None,None),
(4,200,"AdwComboRow","resetWiFiDevice",199,None,None,None,-1,None),
(4,201,"AdwActionRow","resetSavedNetworks",199,None,None,None,-1,None),
(4,202,"GtkImage",None,201,None,None,None,None,None),
(4,203,"AdwPreferencesGroup","resetWifiList",167,None,None,None,-1,None),
(4,204,"AdwPreferencesGroup","resetStoredWifiList",175,None,None,None,1,None),
(4,205,"AdwPreferencesGroup",None,154,None,None,None,2,None),
(4,206,"AdwComboRow",None,205,None,None,None,None,None),
(4,207,"GtkLabel",None,206,None,None,None,None,None),
(4,208,"GtkStringList",None,206,None,None,None,None,None),
(4,209,"AdwActionRow",None,205,None,None,None,1,None),
(4,210,"GtkBox",None,209,None,None,None,None,None),
(4,211,"GtkBox",None,210,None,None,None,None,None),
(4,212,"GtkBox","resetOutputStreamEntry",211,None,None,None,None,None),
(4,213,"GtkBox",None,212,None,None,None,None,None),
(4,214,"GtkButton","resetSourceMute",213,None,None,None,None,None),
(4,215,"GtkScale","resetVolumeSlider",213,None,None,None,1,None),
(4,216,"GtkAdjustment",None,215,None,None,None,None,None),
(4,217,"GtkLabel","resetVolumePercentage",213,None,None,None,2,None),
(4,218,"GtkProgressBar","resetVolumeMeter",212,None,None,None,1,None),
(4,233,"GtkSeparator",None,154,None,None,None,3,None),
(4,234,"AdwPreferencesGroup",None,154,None,None,None,4,None),
(4,235,"AdwComboRow",None,234,None,None,None,None,None),
(4,236,"GtkLabel",None,235,None,None,None,None,None),
(4,237,"GtkStringList",None,235,None,None,None,None,None),
(4,238,"AdwActionRow",None,234,None,None,None,1,None),
(4,239,"GtkBox",None,238,None,None,None,None,None),
(4,240,"GtkBox",None,239,None,None,None,None,None),
(4,241,"GtkBox","resetOutputStreamEn2try",240,None,None,None,None,None),
(4,242,"GtkBox",None,241,None,None,None,None,None),
(4,243,"GtkButton","resetSou2rceMute",242,None,None,None,None,None),
(4,244,"GtkScale","resetVolum2eSlider",242,None,None,None,1,None),
(4,245,"GtkAdjustment",None,244,None,None,None,None,None),
(4,246,"GtkLabel","resetVolum2ePercentage",242,None,None,None,2,None),
(4,247,"GtkProgressBar","resetVolu2meMeter",241,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","resetWifiStrength",14,None,None,None,None,None),
(5,16,"GtkImage","resetWifiEncrypted",14,None,None,None,1,None),
(5,18,"GtkLabel","resetWifiLabel",13,None,None,None,1,None),
(5,19,"GtkImage","resetWifiConnected",13,None,None,None,3,None),
(5,20,"GtkButton","resetWifiEditButton",13,None,None,None,2,None),
(5,21,"resetPopup","resetWifiPopup",13,None,None,None,4,None),
(6,1,"GtkListBoxRow","resetSidebarEntry",None,None,None,None,None,None),
(6,2,"GtkBox",None,1,None,None,None,-1,None),
(6,6,"GtkImage","resetSidebarImage",2,None,None,None,None,None),
@ -111,12 +135,6 @@
(8,56,"GtkBox",None,55,None,None,None,None,None),
(8,71,"AdwNavigationPage",None,54,None,None,None,1,None),
(8,72,"GtkBox",None,71,None,None,None,None,None),
(8,73,"GtkListBox",None,56,None,None,None,None,None),
(8,74,"resetListBoxRow","resetSinksRow",73,None,None,None,None,None),
(8,75,"GtkBox",None,74,None,None,None,None,None),
(8,76,"GtkLabel",None,75,None,None,None,None,None),
(8,77,"GtkDropDown","resetSinkDropdown",75,None,None,None,1,None),
(8,78,"GtkImage",None,75,None,None,None,2,None),
(8,81,"GtkLabel",None,72,None,None,None,1,None),
(8,85,"GtkBox","resetInputStreams",56,None,None,None,4,None),
(8,86,"GtkLabel",None,85,None,None,None,None,None),
@ -143,23 +161,23 @@
(8,121,"GtkLabel",None,120,None,None,None,None,None),
(8,122,"GtkImage",None,120,None,None,None,1,None),
(8,123,"GtkLabel",None,117,None,None,None,1,None),
(8,124,"GtkBox","resetCards",117,None,None,None,2,None),
(8,125,"GtkLabel",None,124,None,None,None,None,None),
(8,126,"resetListBoxRow","resetCardsRow",73,None,None,None,1,None),
(8,127,"GtkBox",None,126,None,None,None,None,None),
(8,128,"GtkLabel",None,127,None,None,None,None,None),
(8,129,"GtkImage",None,127,None,None,None,1,None),
(8,130,"AdwPreferencesGroup",None,56,None,None,None,None,None),
(8,132,"AdwActionRow","resetSinksRow",130,None,None,None,1,None),
(8,133,"GtkImage",None,132,None,None,None,None,None),
(8,134,"AdwActionRow","resetCardsRow",130,None,None,None,2,None),
(8,135,"GtkImage",None,134,None,None,None,None,None),
(8,136,"AdwPreferencesGroup","resetCards",116,None,None,None,1,None),
(8,137,"AdwComboRow","resetSinkDropdown",130,None,None,None,2,None),
(10,1,"GtkBox","resetBluetooth",None,None,None,None,None,None),
(10,119,"AdwNavigationView",None,1,None,None,None,1,None),
(10,120,"AdwNavigationPage",None,119,None,None,None,None,None),
(10,121,"GtkBox",None,120,None,None,None,None,None),
(10,122,"GtkListBox","resetBluetoothDetails",121,None,None,None,1,None),
(10,127,"GtkBox",None,121,None,None,None,2,None),
(10,127,"GtkBox",None,121,None,None,None,1,None),
(10,128,"GtkLabel",None,127,None,None,None,None,None),
(10,129,"GtkScrolledWindow",None,127,None,None,None,1,None),
(10,130,"GtkViewport",None,129,None,None,None,None,None),
(10,131,"GtkListBox","resetBluetoothAvailableDevices",130,None,None,None,None,None),
(10,132,"GtkBox",None,121,None,None,None,3,None),
(10,132,"GtkBox",None,121,None,None,None,2,None),
(10,133,"GtkLabel",None,132,None,None,None,None,None),
(10,134,"GtkScrolledWindow",None,132,None,None,None,1,None),
(10,135,"GtkViewport",None,134,None,None,None,None,None),
@ -175,14 +193,10 @@
(10,157,"GtkLabel",None,156,None,None,None,None,None),
(10,158,"GtkImage",None,156,None,None,None,1,None),
(10,159,"GtkLabel",None,153,None,None,None,1,None),
(10,164,"resetListBoxRow",None,122,None,None,None,1,None),
(10,165,"GtkBox",None,164,None,None,None,None,None),
(10,166,"GtkLabel",None,165,None,None,None,None,None),
(10,167,"GtkDropDown","resetBluetoothDevice",165,None,None,None,1,None),
(10,168,"resetListBoxRow","resetVisibility",122,None,None,None,1,None),
(10,169,"GtkBox",None,168,None,None,None,None,None),
(10,170,"GtkLabel",None,169,None,None,None,None,None),
(10,171,"GtkImage",None,169,None,None,None,1,None),
(10,172,"AdwPreferencesGroup","resetBluetoothDetails",121,None,None,None,None,None),
(10,173,"AdwComboRow","resetBluetoothDevice",172,None,None,None,None,None),
(10,174,"AdwActionRow","resetVisibility",172,None,None,None,1,None),
(10,175,"GtkImage",None,174,None,None,None,None,None),
(11,2,"GtkBox","resetBluetoothEntry",None,None,None,None,None,None),
(11,3,"GtkImage","resetBluetoothDeviceType",2,None,None,None,None,None),
(11,5,"GtkButton","resetBluetoothButton",2,None,None,None,3,None),
@ -194,20 +208,14 @@
(12,13,"AdwNavigationView",None,11,None,None,None,1,None),
(12,14,"AdwNavigationPage",None,13,None,None,None,None,None),
(12,15,"GtkBox",None,14,None,None,None,None,None),
(12,16,"GtkListBox",None,15,None,None,None,None,None),
(12,17,"resetListBoxRow","resetSourceRow",16,None,None,None,None,None),
(12,18,"GtkBox",None,17,None,None,None,None,None),
(12,19,"GtkLabel",None,18,None,None,None,None,None),
(12,20,"GtkDropDown","resetSourceDropdown",18,None,None,None,1,None),
(12,21,"GtkImage",None,18,None,None,None,2,None),
(12,22,"GtkBox",None,15,None,None,None,1,None),
(12,22,"GtkBox",None,15,None,None,None,2,None),
(12,23,"GtkBox",None,22,None,None,None,None,None),
(12,24,"GtkButton","resetSourceMute",23,None,None,None,None,None),
(12,25,"GtkScale","resetVolumeSlider",23,None,None,None,1,None),
(12,27,"GtkLabel","resetVolumePercentage",23,None,None,None,2,None),
(12,28,"GtkProgressBar","resetVolumeMeter",22,None,None,None,1,None),
(12,29,"GtkSeparator",None,15,None,None,None,2,None),
(12,30,"GtkBox","resetOutputStreams",15,None,None,None,3,None),
(12,29,"GtkSeparator",None,15,None,None,None,3,None),
(12,30,"GtkBox","resetOutputStreams",15,None,None,None,4,None),
(12,31,"GtkLabel",None,30,None,None,None,None,None),
(12,34,"AdwNavigationPage",None,13,None,None,None,1,None),
(12,42,"GtkBox",None,34,None,None,None,None,None),
@ -227,12 +235,13 @@
(12,57,"GtkLabel",None,56,None,None,None,None,None),
(12,58,"GtkImage",None,56,None,None,None,1,None),
(12,59,"GtkLabel",None,53,None,None,None,1,None),
(12,60,"GtkBox","resetCards",53,None,None,None,2,None),
(12,61,"GtkLabel",None,60,None,None,None,None,None),
(12,62,"resetListBoxRow","resetCardsRow",16,None,None,None,1,None),
(12,63,"GtkBox",None,62,None,None,None,None,None),
(12,64,"GtkLabel",None,63,None,None,None,None,None),
(12,65,"GtkImage",None,63,None,None,None,1,None),
(12,66,"AdwPreferencesGroup","resetCards",53,None,None,None,2,None),
(12,67,"AdwPreferencesGroup",None,15,None,None,None,None,None),
(12,69,"AdwActionRow","resetSourceRow",67,None,None,None,-1,None),
(12,70,"AdwActionRow","resetCardsRow",67,None,None,None,2,None),
(12,71,"GtkImage",None,69,None,None,None,-1,None),
(12,72,"GtkImage",None,70,None,None,None,None,None),
(12,73,"AdwComboRow","resetSourceDropdown",67,None,None,None,2,None),
(13,11,"GtkBox","resetOutputStreamEntry",None,None,None,None,None,None),
(13,12,"GtkBox",None,11,None,None,None,None,None),
(13,13,"GtkLabel","resetSourceName",12,None,None,None,None,None),
@ -251,10 +260,11 @@
(16,11,"GtkPasswordEntry","resetPopupEntry",10,None,None,None,None,None),
(16,12,"GtkButton","resetPopupButton",10,None,None,None,1,None),
(16,13,"GtkLabel","resetPopupLabel",7,None,None,None,None,None),
(17,1,"GtkBox","resetSavedWifiEntry",None,None,None,None,-1,None),
(17,2,"GtkLabel","resetSavedWifiLabel",1,None,None,None,None,None),
(17,3,"GtkButton","resetEditSavedWifiButton",1,None,None,None,1,None),
(17,4,"GtkButton","resetDeleteSavedWifiButton",1,None,None,None,2,None),
(17,5,"AdwActionRow","resetSavedWifiEntry",None,None,None,None,None,None),
(17,7,"GtkBox",None,5,None,None,None,None,None),
(17,11,"GtkLabel","resetSavedWifiLabel",7,None,None,None,None,None),
(17,12,"GtkButton","resetDeleteSavedWifiButton",7,None,None,None,2,None),
(17,14,"GtkButton","resetEditSavedWifiButton",7,None,None,None,1,None),
(18,1,"GtkBox","resetSinkEntry",None,None,None,None,None,None),
(18,2,"GtkBox",None,1,None,None,None,None,None),
(18,3,"GtkLabel","resetSinkName",2,None,None,None,None,None),
@ -275,11 +285,79 @@
(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,2,"AdwComboRow","resetCardEntry",None,None,None,None,None,None),
(21,1,"AdwNavigationPage","resetWifiOptions",None,None,None,None,-1,None),
(21,2,"GtkNotebook",None,1,None,None,None,-1,None),
(21,5,"GtkBox",None,2,None,None,None,None,None),
(21,6,"GtkLabel",None,2,None,"tab",None,1,None),
(21,7,"GtkBox",None,2,None,None,None,2,None),
(21,8,"GtkLabel",None,2,None,"tab",None,3,None),
(21,9,"GtkLabel",None,2,None,"tab",None,5,None),
(21,10,"GtkLabel",None,2,None,"tab",None,7,None),
(21,11,"GtkBox",None,2,None,None,None,4,None),
(21,12,"GtkBox",None,2,None,None,None,6,None),
(21,13,"AdwPreferencesGroup",None,5,None,None,None,-1,None),
(21,14,"AdwActionRow","resetWifiName",13,None,None,None,None,None),
(21,16,"AdwActionRow","resetWifiMac",13,None,None,None,1,None),
(21,17,"AdwSwitchRow","resetWifiAutoConnect",13,None,None,None,7,None),
(21,18,"AdwSwitchRow","resetWifiMetered",13,None,None,None,8,None),
(21,19,"AdwPreferencesGroup",None,7,None,None,None,None,None),
(21,20,"AdwComboRow","resetIP4Method",19,None,None,None,-1,None),
(21,21,"AdwEntryRow","resetIP4DNS",19,None,None,None,-1,None),
(21,22,"AdwEntryRow","resetIP4Gateway",19,None,None,None,2,None),
(21,23,"AdwPreferencesGroup","resetIP4AddressGroup",7,None,None,None,1,None),
(21,24,"AdwPreferencesGroup","resetIP4RoutesGroup",7,None,None,None,2,None),
(21,25,"GtkStringList",None,20,None,None,None,-1,None),
(21,26,"GtkBox",None,24,None,None,None,-1,None),
(21,27,"GtkLabel",None,26,None,None,None,-1,None),
(21,28,"GtkSwitch",None,26,None,None,None,-1,None),
(21,29,"AdwPreferencesGroup",None,11,None,None,None,None,None),
(21,30,"AdwComboRow","resetIP6Method",29,None,None,None,None,None),
(21,31,"GtkStringList",None,30,None,None,None,None,None),
(21,32,"AdwEntryRow","resetIP6DNS",29,None,None,None,1,None),
(21,33,"AdwEntryRow","resetIP6Gateway",29,None,None,None,2,None),
(21,34,"AdwPreferencesGroup","resetIP6AddressGroup",11,None,None,None,1,None),
(21,35,"AdwPreferencesGroup","resetIP6RoutesGroup",11,None,None,None,2,None),
(21,36,"GtkBox",None,35,None,None,None,None,None),
(21,37,"GtkLabel",None,36,None,None,None,None,None),
(21,38,"GtkSwitch",None,36,None,None,None,1,None),
(21,39,"AdwPreferencesGroup",None,12,None,None,None,None,None),
(21,40,"AdwComboRow",None,39,None,None,None,None,None),
(21,41,"GtkStringList",None,40,None,None,None,None,None),
(21,42,"AdwEntryRow",None,39,None,None,None,1,None),
(21,44,"AdwPasswordEntryRow",None,39,None,None,None,2,None),
(21,45,"AdwActionRow","resetWifiLinkSpeed",13,None,None,None,2,None),
(21,46,"AdwActionRow","resetWifiIP4Addr",13,None,None,None,3,None),
(21,47,"AdwActionRow","resetWifiIP6Addr",13,None,None,None,4,None),
(21,48,"AdwActionRow","resetWifiGateway",13,None,None,None,5,None),
(21,49,"AdwActionRow","resetWifiDNS",13,None,None,None,6,None),
(22,1,"GtkBox","resetWifiAddressEntry",None,None,None,None,-1,None),
(22,2,"AdwExpanderRow","resetAddressRow",1,None,None,None,-1,None),
(22,3,"AdwEntryRow","resetAddressAddress",2,None,None,None,-1,None),
(22,4,"AdwEntryRow","resetAddressNetmask",2,None,None,None,1,None),
(22,5,"GtkButton","resetAddressRemove",1,None,None,None,-1,None),
(23,1,"GtkBox","resetWifiRouteEntry",None,None,None,None,None,None),
(23,2,"AdwExpanderRow","resetRouteRow",1,None,None,None,None,None),
(23,3,"AdwEntryRow","resetRouteAddress",2,None,None,None,None,None),
(23,4,"AdwEntryRow","resetRouteNetmask",2,None,None,None,1,None),
(23,5,"GtkButton","resetRouteRemove",1,None,None,None,1,None),
(23,6,"GtkBox",None,2,None,None,None,2,None),
(23,7,"AdwEntryRow","resetRouteGateway",6,None,None,None,None,None),
(23,8,"AdwEntryRow","resetRouteMetric",6,None,None,None,1,None),
(24,13,"AdwPreferencesGroup",None,None,None,None,None,-1,None),
(24,14,"AdwComboRow",None,13,None,None,None,None,None),
(24,26,"GtkLabel",None,14,None,None,None,-1,None),
(24,27,"GtkStringList",None,14,None,None,None,-1,None),
(24,37,"AdwActionRow",None,13,None,None,None,1,None),
(24,38,"GtkBox",None,37,None,None,None,-1,None),
(24,39,"GtkBox",None,38,None,None,None,None,None),
(24,40,"GtkBox","resetOutputStreamEntry",39,None,None,None,None,None),
(24,41,"GtkBox",None,40,None,None,None,None,None),
(24,42,"GtkButton","resetSourceMute",41,None,None,None,None,None),
(24,43,"GtkScale","resetVolumeSlider",41,None,None,None,1,None),
(24,44,"GtkAdjustment",None,43,None,None,None,None,None),
(24,45,"GtkLabel","resetVolumePercentage",41,None,None,None,2,None),
(24,46,"GtkProgressBar","resetVolumeMeter",40,None,None,None,1,None)
</object>
<object_property>
(3,1,"GtkWidget","height-request","200",None,None,None,None,None,None,None,None,None),
@ -303,12 +381,6 @@
(3,25,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(3,26,"GtkButton","icon-name","sidebar-show-symbolic",None,None,None,None,None,None,None,None,None),
(3,26,"GtkWidget","visible","False",None,None,None,None,None,None,None,None,None),
(3,27,"GtkButton","has-frame","False",None,None,None,None,None,None,None,None,None),
(3,27,"GtkButton","icon-name","go-previous-symbolic",None,None,None,None,None,None,None,None,None),
(3,27,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(3,28,"GtkButton","has-frame","False",None,None,None,None,None,None,None,None,None),
(3,28,"GtkButton","icon-name","go-previous-symbolic-rtl",None,None,None,None,None,None,None,None,None),
(3,28,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(3,31,"GtkButton","has-frame","False",None,None,None,None,None,None,None,None,None),
(3,31,"GtkButton","icon-name","window-close-symbolic",None,None,None,None,None,None,None,None,None),
(3,31,"GtkWidget","css-classes","resetClose",None,None,None,None,None,None,None,None,None),
@ -319,13 +391,10 @@
(3,33,"GtkMenuButton","icon-name","open-menu-symbolic",None,None,None,None,None,None,None,None,None),
(3,33,"GtkMenuButton","popover",None,None,None,None,None,35,None,None,None,None),
(3,33,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(3,33,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(3,33,"GtkWidget","hexpand-set","True",None,None,None,None,None,None,None,None,None),
(3,33,"GtkWidget","valign","end",None,None,None,None,None,None,None,None,None),
(3,33,"GtkWidget","vexpand","True",None,None,None,None,None,None,None,None,None),
(3,34,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(3,34,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(3,34,"GtkWidget","hexpand-set","True",None,None,None,None,None,None,None,None,None),
(3,34,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
(3,35,"GtkPopover","child",None,None,None,None,None,36,None,None,None,None),
(3,36,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(3,38,"GtkButton","has-frame","False",None,None,None,None,None,None,None,None,None),
@ -346,14 +415,6 @@
(3,45,"GtkWidget","hexpand-set","True",None,None,None,None,None,None,None,None,None),
(3,45,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(3,45,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(3,46,"GtkButton","has-frame","False",None,None,None,None,None,None,None,None,None),
(3,46,"GtkButton","label","Home",None,None,None,None,None,None,None,None,None),
(3,47,"GtkButton","has-frame","False",None,None,None,None,None,None,None,None,None),
(3,47,"GtkButton","label","WiFi",None,None,None,None,None,None,None,None,None),
(3,48,"GtkButton","has-frame","False",None,None,None,None,None,None,None,None,None),
(3,48,"GtkButton","label","Advanced",None,None,None,None,None,None,None,None,None),
(3,49,"GtkLabel","label","&gt;",None,None,None,None,None,None,None,None,None),
(3,50,"GtkLabel","label","&gt;",None,None,None,None,None,None,None,None,None),
(3,51,"GtkButton","has-frame","False",None,None,None,None,None,None,None,None,None),
(3,51,"GtkButton","label","Shortcuts",None,None,None,None,None,None,None,None,None),
(4,7,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
@ -361,37 +422,19 @@
(4,7,"GtkWidget","hexpand-set","True",None,None,None,None,None,None,None,None,None),
(4,7,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(4,153,"AdwNavigationPage","tag","main",None,None,None,None,None,None,None,None,None),
(4,153,"AdwNavigationPage","title","main",None,None,None,None,None,None,None,None,None),
(4,154,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(4,155,"GtkListBox","show-separators","True",None,None,None,None,None,None,None,None,None),
(4,155,"GtkWidget","css-classes","boxed-list",None,None,None,None,None,None,None,None,None),
(4,155,"GtkWidget","margin-bottom","10",None,None,None,None,None,None,None,None,None),
(4,155,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(4,155,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(4,155,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(4,155,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(4,164,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(4,164,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None),
(4,165,"GtkLabel","justify","right",None,None,None,None,None,None,None,None,None),
(4,165,"GtkLabel","label","Available networks",None,None,None,None,None,None,None,None,None),
(4,165,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(4,165,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(4,166,"GtkScrolledWindow","min-content-height","100",None,None,None,None,None,None,None,None,None),
(4,166,"GtkScrolledWindow","propagate-natural-height","True",None,None,None,None,None,None,None,None,None),
(4,168,"GtkListBox","show-separators","True",None,None,None,None,None,None,None,None,None),
(4,168,"GtkWidget","css-classes","boxed-list",None,None,None,None,None,None,None,None,None),
(4,168,"GtkWidget","margin-bottom","10",None,None,None,None,None,None,None,None,None),
(4,168,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(4,168,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(4,168,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(4,168,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(4,174,"AdwNavigationPage","tag","saved",None,None,None,None,None,None,None,None,None),
(4,174,"AdwNavigationPage","title","saved",None,None,None,None,None,None,None,None,None),
(4,175,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(4,178,"GtkListBox","show-separators","True",None,None,None,None,None,None,None,None,None),
(4,178,"GtkWidget","css-classes","boxed-list",None,None,None,None,None,None,None,None,None),
(4,178,"GtkWidget","margin-bottom","10",None,None,None,None,None,None,None,None,None),
(4,178,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(4,178,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(4,178,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(4,178,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(4,182,"GtkWidget","height-request","40",None,None,None,None,None,None,None,None,None),
(4,183,"GtkLabel","label","WiFi",None,None,None,None,None,None,None,None,None),
(4,183,"GtkWidget","css-classes","resetSettingLabel",None,None,None,None,None,None,None,None,None),
@ -415,43 +458,89 @@
(4,189,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(4,189,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(4,189,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(4,190,"GtkLabel","label","Saved Networks",None,None,None,None,None,None,None,None,None),
(4,190,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(4,190,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(4,192,"GtkWidget","height-request","40",None,None,None,None,None,None,None,None,None),
(4,192,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(4,193,"GtkLabel","label","WiFi Device",None,None,None,None,None,None,None,None,None),
(4,194,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(4,194,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(4,194,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
(4,196,"GtkWidget","height-request","40",None,None,None,None,None,None,None,None,None),
(4,197,"GtkLabel","label","Saved Networks",None,None,None,None,None,None,None,None,None),
(4,197,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(4,198,"GtkImage","icon-name","go-previous-symbolic-rtl",None,None,None,None,None,None,None,None,None),
(4,198,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(4,198,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(4,198,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(5,2,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(5,3,"GtkWidget","width-request","35",None,None,None,None,None,None,None,None,None),
(5,4,"GtkImage","icon-name","network-wireless-signal-excellent-symbolic",None,None,None,None,None,None,None,None,None),
(5,5,"GtkImage","icon-name","system-lock-screen-symbolic",None,None,None,None,None,None,None,None,None),
(5,5,"GtkImage","pixel-size","9",None,None,None,None,None,None,None,None,None),
(5,5,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(5,5,"GtkWidget","margin-bottom","6",None,None,None,None,None,None,None,None,None),
(5,5,"GtkWidget","valign","end",None,None,None,None,None,None,None,None,None),
(5,6,"GtkLabel","ellipsize","end",None,None,None,None,None,None,None,None,None),
(5,6,"GtkLabel","label","LoremIpsumInternet",None,None,None,None,None,None,None,None,None),
(5,6,"GtkLabel","single-line-mode","True",None,None,None,None,None,None,None,None,None),
(5,6,"GtkLabel","xalign","0.0",None,None,None,None,None,None,None,None,None),
(5,6,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(5,6,"GtkWidget","margin-end","10",None,None,None,None,None,None,None,None,None),
(5,6,"GtkWidget","width-request","200",None,None,None,None,None,None,None,None,None),
(5,7,"GtkButton","has-frame","False",None,None,None,None,None,None,None,None,None),
(5,7,"GtkButton","icon-name","document-edit-symbolic",None,None,None,None,None,None,None,None,None),
(5,7,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(5,7,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
(5,8,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(5,8,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
(4,200,"AdwPreferencesRow","title","WiFi Device",None,None,None,None,None,None,None,None,None),
(4,201,"AdwPreferencesRow","title","Saved Networks",None,None,None,None,None,None,None,None,None),
(4,202,"GtkImage","icon-name","go-previous-symbolic-rtl",None,None,None,None,None,None,None,None,None),
(4,202,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(4,202,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(4,202,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(4,204,"AdwPreferencesGroup","title","Saved Networks",None,None,None,None,None,None,None,None,None),
(4,206,"AdwActionRow","activatable-widget",None,None,None,None,None,207,None,None,None,None),
(4,206,"AdwComboRow","model",None,None,None,None,None,208,None,None,None,None),
(4,206,"AdwPreferencesRow","title","asadf",None,None,None,None,None,None,None,None,None),
(4,209,"GtkListBoxRow","child",None,None,None,None,None,210,None,None,None,None),
(4,211,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(4,211,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(4,212,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(4,212,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
(4,212,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(4,212,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(4,212,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(4,213,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
(4,213,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(4,214,"GtkButton","icon-name","audio-input-microphone-symbolic",None,None,None,None,None,None,None,None,None),
(4,214,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(4,214,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
(4,215,"GtkRange","adjustment",None,None,None,None,None,216,None,None,None,None),
(4,215,"GtkScale","value-pos","bottom",None,None,None,None,None,None,None,None,None),
(4,215,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(4,215,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
(4,216,"GtkAdjustment","page-increment","2005.4016",None,None,None,None,None,None,None,None,None),
(4,216,"GtkAdjustment","step-increment","2005.4016",None,None,None,None,None,None,None,None,None),
(4,216,"GtkAdjustment","upper","100270.08",None,None,None,None,None,None,None,None,None),
(4,217,"GtkLabel","label","100%",None,None,None,None,None,None,None,None,None),
(4,217,"GtkLabel","lines","1",None,None,None,None,None,None,None,None,None),
(4,217,"GtkWidget","width-request","40",None,None,None,None,None,None,None,None,None),
(4,218,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(4,235,"AdwActionRow","activatable-widget",None,None,None,None,None,236,None,None,None,None),
(4,235,"AdwComboRow","model",None,None,None,None,None,237,None,None,None,None),
(4,235,"AdwPreferencesRow","title","asadf",None,None,None,None,None,None,None,None,None),
(4,238,"GtkListBoxRow","child",None,None,None,None,None,239,None,None,None,None),
(4,240,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(4,240,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(4,241,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(4,241,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
(4,241,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(4,241,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(4,241,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(4,242,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
(4,242,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(4,243,"GtkButton","icon-name","audio-input-microphone-symbolic",None,None,None,None,None,None,None,None,None),
(4,243,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(4,243,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
(4,244,"GtkRange","adjustment",None,None,None,None,None,245,None,None,None,None),
(4,244,"GtkScale","value-pos","bottom",None,None,None,None,None,None,None,None,None),
(4,244,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(4,244,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
(4,245,"GtkAdjustment","page-increment","2005.4016",None,None,None,None,None,None,None,None,None),
(4,245,"GtkAdjustment","step-increment","2005.4016",None,None,None,None,None,None,None,None,None),
(4,245,"GtkAdjustment","upper","100270.08",None,None,None,None,None,None,None,None,None),
(4,246,"GtkLabel","label","100%",None,None,None,None,None,None,None,None,None),
(4,246,"GtkLabel","lines","1",None,None,None,None,None,None,None,None,None),
(4,246,"GtkWidget","width-request","40",None,None,None,None,None,None,None,None,None),
(4,247,"GtkWidget","margin-top","5",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,19,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(5,19,"GtkWidget","valign","center",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),
(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,2,"GtkWidget","margin-bottom","10",None,None,None,None,None,None,None,None,None),
@ -493,25 +582,11 @@
(8,53,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(8,53,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(8,55,"AdwNavigationPage","tag","output",None,None,None,None,None,None,None,None,None),
(8,55,"AdwNavigationPage","title","output",None,None,None,None,None,None,None,None,None),
(8,56,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(8,71,"AdwNavigationPage","tag","outputDevices",None,None,None,None,None,None,None,None,None),
(8,71,"AdwNavigationPage","title","outputDevices",None,None,None,None,None,None,None,None,None),
(8,72,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(8,73,"GtkListBox","show-separators","True",None,None,None,None,None,None,None,None,None),
(8,73,"GtkWidget","css-classes","boxed-list",None,None,None,None,None,None,None,None,None),
(8,73,"GtkWidget","margin-bottom","10",None,None,None,None,None,None,None,None,None),
(8,73,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(8,73,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(8,73,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(8,73,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(8,75,"GtkWidget","height-request","40",None,None,None,None,None,None,None,None,None),
(8,75,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(8,76,"GtkLabel","label","Output Device",None,None,None,None,None,None,None,None,None),
(8,77,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(8,77,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(8,77,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
(8,78,"GtkImage","icon-name","go-previous-symbolic-rtl",None,None,None,None,None,None,None,None,None),
(8,78,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(8,78,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(8,85,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(8,85,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None),
(8,86,"GtkLabel","label","Output Streams",None,None,None,None,None,None,None,None,None),
@ -558,6 +633,7 @@
(8,115,"GtkAdjustment","step-increment","2005.4016",None,None,None,None,None,None,None,None,None),
(8,115,"GtkAdjustment","upper","100270.08",None,None,None,None,None,None,None,None,None),
(8,116,"AdwNavigationPage","tag","profileConfiguration",None,None,None,None,None,None,None,None,None),
(8,116,"AdwNavigationPage","title","profileConfiguration",None,None,None,None,None,None,None,None,None),
(8,117,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(8,118,"GtkListBox","show-separators","True",None,None,None,None,None,None,None,None,None),
(8,118,"GtkWidget","css-classes","boxed-list",None,None,None,None,None,None,None,None,None),
@ -573,31 +649,20 @@
(8,122,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(8,122,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(8,122,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(8,124,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(8,124,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(8,124,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(8,124,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None),
(8,125,"GtkLabel","label","Devices",None,None,None,None,None,None,None,None,None),
(8,125,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(8,127,"GtkWidget","height-request","40",None,None,None,None,None,None,None,None,None),
(8,128,"GtkLabel","label","Profile Settings",None,None,None,None,None,None,None,None,None),
(8,128,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(8,129,"GtkImage","icon-name","go-previous-symbolic-rtl",None,None,None,None,None,None,None,None,None),
(8,129,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(8,129,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(8,129,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(8,132,"AdwPreferencesRow","title","Output Devices",None,None,None,None,None,None,None,None,None),
(8,133,"GtkImage","icon-name","go-previous-symbolic-rtl",None,None,None,None,None,None,None,None,None),
(8,134,"AdwPreferencesRow","title","Profile Settings",None,None,None,None,None,None,None,None,None),
(8,135,"GtkImage","icon-name","go-previous-symbolic-rtl",None,None,None,None,None,None,None,None,None),
(8,136,"AdwPreferencesGroup","title","Devices",None,None,None,None,None,None,None,None,None),
(8,137,"AdwComboRow","use-subtitle","True",None,None,None,None,None,None,None,None,None),
(8,137,"AdwPreferencesRow","title","Default Output Device",None,None,None,None,None,None,None,None,None),
(10,1,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(10,1,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(10,120,"AdwNavigationPage","tag","main",None,None,None,None,None,None,None,None,None),
(10,120,"AdwNavigationPage","title","main",None,None,None,None,None,None,None,None,None),
(10,121,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(10,122,"GtkListBox","show-separators","True",None,None,None,None,None,None,None,None,None),
(10,122,"GtkWidget","css-classes","boxed-list",None,None,None,None,None,None,None,None,None),
(10,122,"GtkWidget","margin-bottom","10",None,None,None,None,None,None,None,None,None),
(10,122,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(10,122,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(10,122,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(10,122,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(10,127,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(10,127,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None),
(10,128,"GtkLabel","justify","right",None,None,None,None,None,None,None,None,None),
(10,128,"GtkLabel","label","Available devices",None,None,None,None,None,None,None,None,None),
(10,128,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
@ -625,6 +690,7 @@
(10,136,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(10,136,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(10,138,"AdwNavigationPage","tag","visibility",None,None,None,None,None,None,None,None,None),
(10,138,"AdwNavigationPage","title","visibility",None,None,None,None,None,None,None,None,None),
(10,142,"GtkWidget","height-request","40",None,None,None,None,None,None,None,None,None),
(10,143,"GtkLabel","label","Bluetooth",None,None,None,None,None,None,None,None,None),
(10,143,"GtkWidget","css-classes","resetSettingLabel",None,None,None,None,None,None,None,None,None),
@ -652,19 +718,12 @@
(10,159,"GtkLabel","label","Visibility Settings",None,None,None,None,None,None,None,None,None),
(10,159,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(10,159,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(10,165,"GtkWidget","height-request","40",None,None,None,None,None,None,None,None,None),
(10,165,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(10,166,"GtkLabel","label","Bluetooth Device",None,None,None,None,None,None,None,None,None),
(10,167,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(10,167,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(10,167,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
(10,169,"GtkWidget","height-request","40",None,None,None,None,None,None,None,None,None),
(10,170,"GtkLabel","label","Visibility Settings",None,None,None,None,None,None,None,None,None),
(10,170,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(10,171,"GtkImage","icon-name","go-previous-symbolic-rtl",None,None,None,None,None,None,None,None,None),
(10,171,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(10,171,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(10,171,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(10,173,"AdwPreferencesRow","title","Bluetooth Device",None,None,None,None,None,None,None,None,None),
(10,174,"AdwPreferencesRow","title","Visibility Settings",None,None,None,None,None,None,None,None,None),
(10,175,"GtkImage","icon-name","go-previous-symbolic-rtl",None,None,None,None,None,None,None,None,None),
(10,175,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(10,175,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(10,175,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(11,2,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(11,3,"GtkImage","icon-name","input-mouse-symbolic",None,None,None,None,None,None,None,None,None),
(11,3,"GtkWidget","margin-end","15",None,None,None,None,None,None,None,None,None),
@ -696,23 +755,8 @@
(12,12,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(12,12,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(12,14,"AdwNavigationPage","tag","output",None,None,None,None,None,None,None,None,None),
(12,14,"AdwNavigationPage","title","output",None,None,None,None,None,None,None,None,None),
(12,15,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(12,16,"GtkListBox","show-separators","True",None,None,None,None,None,None,None,None,None),
(12,16,"GtkWidget","css-classes","boxed-list",None,None,None,None,None,None,None,None,None),
(12,16,"GtkWidget","margin-bottom","10",None,None,None,None,None,None,None,None,None),
(12,16,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(12,16,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(12,16,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(12,16,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(12,18,"GtkWidget","height-request","40",None,None,None,None,None,None,None,None,None),
(12,18,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(12,19,"GtkLabel","label","Input Device",None,None,None,None,None,None,None,None,None),
(12,20,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(12,20,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(12,20,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
(12,21,"GtkImage","icon-name","go-previous-symbolic-rtl",None,None,None,None,None,None,None,None,None),
(12,21,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(12,21,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(12,22,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(12,22,"GtkWidget","margin-bottom","10",None,None,None,None,None,None,None,None,None),
(12,22,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
@ -736,6 +780,7 @@
(12,31,"GtkLabel","label","Input Streams",None,None,None,None,None,None,None,None,None),
(12,31,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(12,34,"AdwNavigationPage","tag","sources",None,None,None,None,None,None,None,None,None),
(12,34,"AdwNavigationPage","title","sources",None,None,None,None,None,None,None,None,None),
(12,42,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(12,43,"GtkListBox","show-separators","True",None,None,None,None,None,None,None,None,None),
(12,43,"GtkWidget","css-classes","boxed-list",None,None,None,None,None,None,None,None,None),
@ -761,6 +806,7 @@
(12,51,"GtkAdjustment","step-increment","2005.4016",None,None,None,None,None,None,None,None,None),
(12,51,"GtkAdjustment","upper","100270.08",None,None,None,None,None,None,None,None,None),
(12,52,"AdwNavigationPage","tag","profileConfiguration",None,None,None,None,None,None,None,None,None),
(12,52,"AdwNavigationPage","title","profileConfiguration",None,None,None,None,None,None,None,None,None),
(12,53,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(12,54,"GtkListBox","show-separators","True",None,None,None,None,None,None,None,None,None),
(12,54,"GtkWidget","css-classes","boxed-list",None,None,None,None,None,None,None,None,None),
@ -776,19 +822,13 @@
(12,58,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(12,58,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(12,58,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(12,60,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(12,60,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(12,60,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(12,60,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None),
(12,61,"GtkLabel","label","Devices",None,None,None,None,None,None,None,None,None),
(12,61,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(12,63,"GtkWidget","height-request","40",None,None,None,None,None,None,None,None,None),
(12,64,"GtkLabel","label","Profile Settings",None,None,None,None,None,None,None,None,None),
(12,64,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(12,65,"GtkImage","icon-name","go-previous-symbolic-rtl",None,None,None,None,None,None,None,None,None),
(12,65,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(12,65,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(12,65,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(12,66,"AdwPreferencesGroup","title","Devices",None,None,None,None,None,None,None,None,None),
(12,69,"AdwPreferencesRow","title","Input Devices",None,None,None,None,None,None,None,None,None),
(12,70,"AdwPreferencesRow","title","Profile Settings",None,None,None,None,None,None,None,None,None),
(12,71,"GtkImage","icon-name","go-previous-symbolic-rtl",None,None,None,None,None,None,None,None,None),
(12,72,"GtkImage","icon-name","go-previous-symbolic-rtl",None,None,None,None,None,None,None,None,None),
(12,73,"AdwComboRow","use-subtitle","True",None,None,None,None,None,None,None,None,None),
(12,73,"AdwPreferencesRow","title","Default Input Device",None,None,None,None,None,None,None,None,None),
(13,11,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(13,11,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
(13,11,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
@ -837,14 +877,23 @@
(16,12,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(16,12,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(16,13,"GtkWidget","visible","False",None,None,None,None,None,None,None,None,None),
(17,1,"GtkBox","spacing","5",None,None,None,None,None,None,None,None,None),
(17,2,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(17,3,"GtkButton","has-frame","False",None,None,None,None,None,None,None,None,None),
(17,3,"GtkButton","icon-name","document-edit-symbolic",None,None,None,None,None,None,None,None,None),
(17,3,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(17,3,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(17,4,"GtkButton","has-frame","False",None,None,None,None,None,None,None,None,None),
(17,4,"GtkButton","icon-name","user-trash-symbolic",None,None,None,None,None,None,None,None,None),
(17,5,"GtkListBoxRow","activatable","False",None,None,None,None,None,None,None,None,None),
(17,5,"GtkListBoxRow","child",None,None,None,None,None,7,None,None,None,None),
(17,11,"GtkLabel","ellipsize","end",None,None,None,None,None,None,None,None,None),
(17,11,"GtkLabel","label","LoremIpsumInternet",None,None,None,None,None,None,None,None,None),
(17,11,"GtkLabel","single-line-mode","True",None,None,None,None,None,None,None,None,None),
(17,11,"GtkLabel","xalign","0.0",None,None,None,None,None,None,None,None,None),
(17,11,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(17,11,"GtkWidget","margin-end","10",None,None,None,None,None,None,None,None,None),
(17,11,"GtkWidget","width-request","200",None,None,None,None,None,None,None,None,None),
(17,12,"GtkButton","has-frame","False",None,None,None,None,None,None,None,None,None),
(17,12,"GtkButton","icon-name","user-trash-symbolic",None,None,None,None,None,None,None,None,None),
(17,12,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(17,12,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
(17,14,"GtkButton","has-frame","False",None,None,None,None,None,None,None,None,None),
(17,14,"GtkButton","icon-name","document-edit-symbolic",None,None,None,None,None,None,None,None,None),
(17,14,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(17,14,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(18,1,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(18,1,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
(18,1,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
@ -901,19 +950,107 @@
(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,2,"AdwComboRow","use-subtitle","True",None,None,None,None,None,None,None,None,None),
(21,2,"GtkNotebook","scrollable","True",None,None,None,None,None,None,None,None,None),
(21,2,"GtkNotebook","show-border","False",None,None,None,None,None,None,None,None,None),
(21,5,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(21,6,"GtkLabel","label","General",None,None,None,None,None,None,None,None,None),
(21,7,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(21,8,"GtkLabel","label","IPv4",None,None,None,None,None,None,None,None,None),
(21,9,"GtkLabel","label","IPv6",None,None,None,None,None,None,None,None,None),
(21,10,"GtkLabel","label","Security",None,None,None,None,None,None,None,None,None),
(21,11,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(21,12,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(21,14,"AdwPreferencesRow","title","WiFi Name",None,None,None,None,None,None,None,None,None),
(21,14,"GtkWidget","css-classes","property",None,None,None,None,None,None,None,None,None),
(21,16,"AdwPreferencesRow","title","MAC-Address",None,None,None,None,None,None,None,None,None),
(21,16,"GtkWidget","css-classes","property",None,None,None,None,None,None,None,None,None),
(21,17,"AdwPreferencesRow","title","Connect automatically",None,None,None,None,None,None,None,None,None),
(21,18,"AdwPreferencesRow","title","Metered Connection",None,None,None,None,None,None,None,None,None),
(21,20,"AdwComboRow","model",None,None,None,None,None,25,None,None,None,None),
(21,20,"AdwPreferencesRow","title","IPv4 Method",None,None,None,None,None,None,None,None,None),
(21,21,"AdwPreferencesRow","title","DNS (separate IP by comma, empty for automatic)",None,None,None,None,None,None,None,None,None),
(21,22,"AdwPreferencesRow","title","Gateway",None,None,None,None,None,None,None,None,None),
(21,23,"AdwPreferencesGroup","title","Addresses",None,None,None,None,None,None,None,None,None),
(21,23,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None),
(21,24,"AdwPreferencesGroup","header-suffix",None,None,None,None,None,26,None,None,None,None),
(21,24,"AdwPreferencesGroup","title","Routes",None,None,None,None,None,None,None,None,None),
(21,24,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None),
(21,27,"GtkLabel","label","Automatic",None,None,None,None,None,None,None,None,None),
(21,27,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(21,28,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
(21,30,"AdwComboRow","model",None,None,None,None,None,31,None,None,None,None),
(21,30,"AdwPreferencesRow","title","IPv6 Method",None,None,None,None,None,None,None,None,None),
(21,32,"AdwPreferencesRow","title","DNS (separate IP by comma, empty for automatic)",None,None,None,None,None,None,None,None,None),
(21,33,"AdwPreferencesRow","title","Gateway",None,None,None,None,None,None,None,None,None),
(21,34,"AdwPreferencesGroup","title","Addresses",None,None,None,None,None,None,None,None,None),
(21,34,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None),
(21,35,"AdwPreferencesGroup","header-suffix",None,None,None,None,None,36,None,None,None,None),
(21,35,"AdwPreferencesGroup","title","Routes",None,None,None,None,None,None,None,None,None),
(21,35,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None),
(21,37,"GtkLabel","label","Automatic",None,None,None,None,None,None,None,None,None),
(21,37,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(21,38,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
(21,40,"AdwComboRow","model",None,None,None,None,None,41,None,None,None,None),
(21,40,"AdwPreferencesRow","title","Security",None,None,None,None,None,None,None,None,None),
(21,42,"AdwPreferencesRow","title","Username",None,None,None,None,None,None,None,None,None),
(21,44,"AdwPreferencesRow","title","Password",None,None,None,None,None,None,None,None,None),
(21,45,"AdwPreferencesRow","title","Link Speed",None,None,None,None,None,None,None,None,None),
(21,45,"GtkWidget","css-classes","property",None,None,None,None,None,None,None,None,None),
(21,46,"AdwPreferencesRow","title","IPv4 Address",None,None,None,None,None,None,None,None,None),
(21,46,"GtkWidget","css-classes","property",None,None,None,None,None,None,None,None,None),
(21,47,"AdwPreferencesRow","title","IPv6 Address",None,None,None,None,None,None,None,None,None),
(21,47,"GtkWidget","css-classes","property",None,None,None,None,None,None,None,None,None),
(21,48,"AdwPreferencesRow","title","Gateway",None,None,None,None,None,None,None,None,None),
(21,48,"GtkWidget","css-classes","property",None,None,None,None,None,None,None,None,None),
(21,49,"AdwPreferencesRow","title","DNS",None,None,None,None,None,None,None,None,None),
(21,49,"GtkWidget","css-classes","property",None,None,None,None,None,None,None,None,None),
(22,2,"AdwPreferencesRow","title","Add new Address",None,None,None,None,None,None,None,None,None),
(22,2,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(22,3,"AdwPreferencesRow","title","Address",None,None,None,None,None,None,None,None,None),
(22,4,"AdwPreferencesRow","title","Netmask",None,None,None,None,None,None,None,None,None),
(22,5,"GtkButton","icon-name","edit-delete-symbolic",None,None,None,None,None,None,None,None,None),
(22,5,"GtkWidget","height-request","55",None,None,None,None,None,None,None,None,None),
(22,5,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(23,2,"AdwPreferencesRow","title","Add new Route",None,None,None,None,None,None,None,None,None),
(23,2,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(23,3,"AdwPreferencesRow","title","Address",None,None,None,None,None,None,None,None,None),
(23,4,"AdwPreferencesRow","title","Netmask",None,None,None,None,None,None,None,None,None),
(23,5,"GtkButton","icon-name","edit-delete-symbolic",None,None,None,None,None,None,None,None,None),
(23,5,"GtkWidget","height-request","55",None,None,None,None,None,None,None,None,None),
(23,5,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(23,7,"AdwPreferencesRow","title","Gateway",None,None,None,None,None,None,None,None,None),
(23,7,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(23,8,"AdwPreferencesRow","title","Metric",None,None,None,None,None,None,None,None,None),
(23,8,"GtkEditable","max-width-chars","5",None,None,None,None,None,None,None,None,None),
(24,14,"AdwActionRow","activatable-widget",None,None,None,None,None,26,None,None,None,None),
(24,14,"AdwComboRow","model",None,None,None,None,None,27,None,None,None,None),
(24,14,"AdwComboRow","use-subtitle","True",None,None,None,None,None,None,None,None,None),
(24,14,"AdwPreferencesRow","title","asadf",None,None,None,None,None,None,None,None,None),
(24,37,"GtkListBoxRow","child",None,None,None,None,None,38,None,None,None,None),
(24,39,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(24,39,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(24,40,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(24,40,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
(24,40,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(24,40,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(24,40,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(24,41,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
(24,41,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(24,42,"GtkButton","icon-name","audio-input-microphone-symbolic",None,None,None,None,None,None,None,None,None),
(24,42,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(24,42,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
(24,43,"GtkRange","adjustment",None,None,None,None,None,44,None,None,None,None),
(24,43,"GtkScale","value-pos","bottom",None,None,None,None,None,None,None,None,None),
(24,43,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(24,43,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
(24,44,"GtkAdjustment","page-increment","2005.4016",None,None,None,None,None,None,None,None,None),
(24,44,"GtkAdjustment","step-increment","2005.4016",None,None,None,None,None,None,None,None,None),
(24,44,"GtkAdjustment","upper","100270.08",None,None,None,None,None,None,None,None,None),
(24,45,"GtkLabel","label","100%",None,None,None,None,None,None,None,None,None),
(24,45,"GtkLabel","lines","1",None,None,None,None,None,None,None,None,None),
(24,45,"GtkWidget","width-request","40",None,None,None,None,None,None,None,None,None),
(24,46,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None)
</object_property>
<object_data>
(3,42,"GtkWidget",1,1,None,None,None,None,None,None),
@ -929,7 +1066,45 @@
(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)
(19,7,"GtkScale",2,2,"100%",1,None,None,None,None),
(21,25,"GtkStringList",1,1,None,None,None,None,None,None),
(21,25,"GtkStringList",2,2,"Automatic (DHCP)",1,None,None,None,None),
(21,25,"GtkStringList",2,3,"Manual",1,None,None,None,None),
(21,25,"GtkStringList",2,4,"Link-Local Only",1,None,None,None,None),
(21,25,"GtkStringList",2,5,"Shared to other computers",1,None,None,None,None),
(21,25,"GtkStringList",2,6,"Disabled",1,None,None,None,None),
(21,31,"GtkStringList",1,1,None,None,None,None,None,None),
(21,31,"GtkStringList",2,2,"Automatic",1,None,None,None,None),
(21,31,"GtkStringList",2,3,"Automatic (DHCP)",1,None,None,None,None),
(21,31,"GtkStringList",2,4,"Manual",1,None,None,None,None),
(21,31,"GtkStringList",2,5,"Link-Local Only",1,None,None,None,None),
(21,31,"GtkStringList",2,6,"Shared to other computers",1,None,None,None,None),
(21,31,"GtkStringList",2,7,"Disabled",1,None,None,None,None),
(21,41,"GtkStringList",1,1,None,None,None,None,None,None),
(21,41,"GtkStringList",2,2,"None",1,None,None,None,None),
(21,41,"GtkStringList",2,3,"Enhanced Open",1,None,None,None,None),
(21,41,"GtkStringList",2,4,"WEP 40/128-bit Key (Hex or ASCII)",1,None,None,None,None),
(21,41,"GtkStringList",2,5,"WEP 128-bit Passphrase",1,None,None,None,None),
(21,41,"GtkStringList",2,6,"LEAP",1,None,None,None,None),
(21,41,"GtkStringList",2,7,"Dynamic WEP (802.1X)",1,None,None,None,None),
(21,41,"GtkStringList",2,8,"WPA &amp; WPA2 Personal",1,None,None,None,None),
(21,41,"GtkStringList",2,9,"WPA &amp; WPA2 Enterprise",1,None,None,None,None),
(21,41,"GtkStringList",2,10,"WPA3 Personal",1,None,None,None,None),
(24,27,"GtkStringList",2,3,"dsfds",1,None,None,None,None),
(24,27,"GtkStringList",2,2,"asdf",1,None,None,None,None),
(24,27,"GtkStringList",1,1,None,None,None,None,None,None),
(24,43,"GtkScale",1,1,None,None,None,None,None,None),
(24,43,"GtkScale",2,2,"100%",1,None,None,None,None),
(4,208,"GtkStringList",1,1,None,None,None,None,None,None),
(4,208,"GtkStringList",2,2,"asdf",1,None,None,None,None),
(4,208,"GtkStringList",2,3,"dsfds",1,None,None,None,None),
(4,215,"GtkScale",1,1,None,None,None,None,None,None),
(4,215,"GtkScale",2,2,"100%",1,None,None,None,None),
(4,237,"GtkStringList",1,1,None,None,None,None,None,None),
(4,237,"GtkStringList",2,2,"asdf",1,None,None,None,None),
(4,237,"GtkStringList",2,3,"dsfds",1,None,None,None,None),
(4,244,"GtkScale",1,1,None,None,None,None,None,None),
(4,244,"GtkScale",2,2,"100%",1,None,None,None,None)
</object_data>
<object_data_arg>
(7,9,"GtkScale",2,2,"value","65536.0"),
@ -944,6 +1119,12 @@
(18,7,"GtkScale",2,2,"position","bottom"),
(18,7,"GtkScale",2,2,"value","65536.0"),
(19,7,"GtkScale",2,2,"position","bottom"),
(19,7,"GtkScale",2,2,"value","65536.0")
(19,7,"GtkScale",2,2,"value","65536.0"),
(24,43,"GtkScale",2,2,"position","bottom"),
(24,43,"GtkScale",2,2,"value","65536.0"),
(4,215,"GtkScale",2,2,"position","bottom"),
(4,215,"GtkScale",2,2,"value","65536.0"),
(4,244,"GtkScale",2,2,"position","bottom"),
(4,244,"GtkScale",2,2,"value","65536.0")
</object_data_arg>
</cambalache-project>

View file

@ -1,7 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Cambalache 0.17.0 -->
<interface>
<requires lib="gtk" version="4.6"/>
<requires lib="gtk" version="4.12"/>
<requires lib="libadwaita" version="1.4"/>
<template class="resetWifi" parent="GtkBox">
<property name="hexpand">True</property>
@ -30,63 +30,30 @@
</object>
</child>
<child>
<object class="AdwNavigationView">
<object class="AdwNavigationView" id="resetWifiNavigation">
<child>
<object class="AdwNavigationPage">
<property name="tag">main</property>
<property name="title">main</property>
<child>
<object class="GtkBox">
<property name="orientation">vertical</property>
<child>
<object class="GtkListBox" id="resetWifiDetails">
<property name="css-classes">boxed-list</property>
<property name="margin-bottom">10</property>
<property name="margin-end">5</property>
<property name="margin-start">5</property>
<property name="margin-top">5</property>
<property name="show-separators">True</property>
<property name="valign">start</property>
<object class="AdwPreferencesGroup" id="resetWifiDetails">
<child>
<object class="resetListBoxRow">
<child>
<object class="GtkBox">
<property name="height-request">40</property>
<property name="margin-start">5</property>
<child>
<object class="GtkLabel">
<property name="label">WiFi Device</property>
</object>
</child>
<child>
<object class="GtkDropDown" id="resetWiFiDevice">
<property name="halign">end</property>
<property name="hexpand">True</property>
<property name="valign">center</property>
</object>
</child>
</object>
</child>
<object class="AdwComboRow" id="resetWiFiDevice">
<property name="title">WiFi Device</property>
</object>
</child>
<child>
<object class="resetListBoxRow" id="resetSavedNetworks">
<object class="AdwActionRow" id="resetSavedNetworks">
<property name="title">Saved Networks</property>
<child>
<object class="GtkBox">
<property name="height-request">40</property>
<child>
<object class="GtkLabel">
<property name="label">Saved Networks</property>
<property name="margin-start">5</property>
</object>
</child>
<child>
<object class="GtkImage">
<property name="halign">end</property>
<property name="hexpand">True</property>
<property name="icon-name">go-previous-symbolic-rtl</property>
<property name="margin-end">5</property>
</object>
</child>
<object class="GtkImage">
<property name="halign">end</property>
<property name="hexpand">True</property>
<property name="icon-name">go-previous-symbolic-rtl</property>
<property name="margin-end">5</property>
</object>
</child>
</object>
@ -95,6 +62,7 @@
</child>
<child>
<object class="GtkBox">
<property name="margin-top">10</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel">
@ -111,15 +79,7 @@
<child>
<object class="GtkViewport">
<child>
<object class="GtkListBox" id="resetWifiList">
<property name="css-classes">boxed-list</property>
<property name="margin-bottom">10</property>
<property name="margin-end">5</property>
<property name="margin-start">5</property>
<property name="margin-top">5</property>
<property name="show-separators">True</property>
<property name="valign">start</property>
</object>
<object class="AdwPreferencesGroup" id="resetWifiList"/>
</child>
</object>
</child>
@ -127,6 +87,179 @@
</child>
</object>
</child>
<child>
<object class="AdwPreferencesGroup">
<child>
<object class="AdwComboRow">
<property name="activatable-widget">
<object class="GtkLabel"/>
</property>
<property name="model">
<object class="GtkStringList">
<items>
<item>asdf</item>
<item>dsfds</item>
</items>
</object>
</property>
<property name="title">asadf</property>
</object>
</child>
<child>
<object class="AdwActionRow">
<property name="child">
<object class="GtkBox">
<child>
<object class="GtkBox">
<property name="hexpand">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox" id="resetOutputStreamEntry">
<property name="margin-bottom">5</property>
<property name="margin-end">5</property>
<property name="margin-start">5</property>
<property name="margin-top">5</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox">
<property name="margin-bottom">5</property>
<property name="margin-top">5</property>
<child>
<object class="GtkButton" id="resetSourceMute">
<property name="icon-name">audio-input-microphone-symbolic</property>
<property name="margin-end">5</property>
<property name="valign">center</property>
</object>
</child>
<child>
<object class="GtkScale" id="resetVolumeSlider">
<property name="adjustment">
<object class="GtkAdjustment">
<property name="page-increment">2005.4016</property>
<property name="step-increment">2005.4016</property>
<property name="upper">100270.08</property>
</object>
</property>
<property name="hexpand">True</property>
<property name="valign">center</property>
<property name="value-pos">bottom</property>
<marks>
<mark position="bottom" value="65536.0">100%</mark>
</marks>
</object>
</child>
<child>
<object class="GtkLabel" id="resetVolumePercentage">
<property name="label">100%</property>
<property name="lines">1</property>
<property name="width-request">40</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkProgressBar" id="resetVolumeMeter">
<property name="margin-top">5</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkSeparator"/>
</child>
<child>
<object class="AdwPreferencesGroup">
<child>
<object class="AdwComboRow">
<property name="activatable-widget">
<object class="GtkLabel"/>
</property>
<property name="model">
<object class="GtkStringList">
<items>
<item>asdf</item>
<item>dsfds</item>
</items>
</object>
</property>
<property name="title">asadf</property>
</object>
</child>
<child>
<object class="AdwActionRow">
<property name="child">
<object class="GtkBox">
<child>
<object class="GtkBox">
<property name="hexpand">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox" id="resetOutputStreamEn2try">
<property name="margin-bottom">5</property>
<property name="margin-end">5</property>
<property name="margin-start">5</property>
<property name="margin-top">5</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox">
<property name="margin-bottom">5</property>
<property name="margin-top">5</property>
<child>
<object class="GtkButton" id="resetSou2rceMute">
<property name="icon-name">audio-input-microphone-symbolic</property>
<property name="margin-end">5</property>
<property name="valign">center</property>
</object>
</child>
<child>
<object class="GtkScale" id="resetVolum2eSlider">
<property name="adjustment">
<object class="GtkAdjustment">
<property name="page-increment">2005.4016</property>
<property name="step-increment">2005.4016</property>
<property name="upper">100270.08</property>
</object>
</property>
<property name="hexpand">True</property>
<property name="valign">center</property>
<property name="value-pos">bottom</property>
<marks>
<mark position="bottom" value="65536.0">100%</mark>
</marks>
</object>
</child>
<child>
<object class="GtkLabel" id="resetVolum2ePercentage">
<property name="label">100%</property>
<property name="lines">1</property>
<property name="width-request">40</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkProgressBar" id="resetVolu2meMeter">
<property name="margin-top">5</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
@ -134,6 +267,7 @@
<child>
<object class="AdwNavigationPage">
<property name="tag">saved</property>
<property name="title">saved</property>
<child>
<object class="GtkBox">
<property name="orientation">vertical</property>
@ -172,21 +306,8 @@
</object>
</child>
<child>
<object class="GtkLabel">
<property name="halign">start</property>
<property name="label">Saved Networks</property>
<property name="margin-start">5</property>
</object>
</child>
<child>
<object class="GtkListBox" id="resetStoredWifiList">
<property name="css-classes">boxed-list</property>
<property name="margin-bottom">10</property>
<property name="margin-end">5</property>
<property name="margin-start">5</property>
<property name="margin-top">5</property>
<property name="show-separators">True</property>
<property name="valign">start</property>
<object class="AdwPreferencesGroup" id="resetStoredWifiList">
<property name="title">Saved Networks</property>
</object>
</child>
</object>

View file

@ -0,0 +1,31 @@
<?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.2"/>
<template class="resetWifiAddressEntry" parent="GtkBox">
<child>
<object class="AdwExpanderRow" id="resetAddressRow">
<property name="hexpand">True</property>
<property name="title">Add new Address</property>
<child>
<object class="AdwEntryRow" id="resetAddressAddress">
<property name="title">Address</property>
</object>
</child>
<child>
<object class="AdwEntryRow" id="resetAddressNetmask">
<property name="title">Netmask</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkButton" id="resetAddressRemove">
<property name="height-request">55</property>
<property name="icon-name">edit-delete-symbolic</property>
<property name="valign">start</property>
</object>
</child>
</template>
</interface>

View file

@ -2,54 +2,59 @@
<!-- Created with Cambalache 0.17.0 -->
<interface>
<requires lib="gtk" version="4.12"/>
<template class="resetWifiEntry" parent="GtkBox">
<property name="margin-start">5</property>
<child>
<object class="resetPopup" id="resetWifiPopup"/>
</child>
<child>
<requires lib="libadwaita" version="1.0"/>
<template class="resetWifiEntry" parent="AdwActionRow">
<property name="child">
<object class="GtkBox">
<property name="width-request">35</property>
<property name="margin-start">5</property>
<child>
<object class="GtkImage" id="resetWifiStrength">
<property name="icon-name">network-wireless-signal-excellent-symbolic</property>
<object class="GtkBox">
<property name="width-request">35</property>
<child>
<object class="GtkImage" id="resetWifiStrength">
<property name="icon-name">network-wireless-signal-excellent-symbolic</property>
</object>
</child>
<child>
<object class="GtkImage" id="resetWifiEncrypted">
<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="GtkImage" id="resetWifiEncrypted">
<object class="GtkLabel" id="resetWifiLabel">
<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="GtkButton" id="resetWifiEditButton">
<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>
<property name="has-frame">False</property>
<property name="icon-name">document-edit-symbolic</property>
<property name="valign">center</property>
</object>
</child>
<child>
<object class="GtkImage" id="resetWifiConnected">
<property name="halign">end</property>
<property name="valign">center</property>
</object>
</child>
<child>
<object class="resetPopup" id="resetWifiPopup"/>
</child>
</object>
</child>
<child>
<object class="GtkLabel" id="resetWifiLabel">
<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="GtkImage" id="resetWifiConnected">
<property name="halign">end</property>
<property name="valign">center</property>
</object>
</child>
<child>
<object class="GtkButton" id="resetWifiEditButton">
<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>
</property>
</template>
</interface>

View file

@ -0,0 +1,259 @@
<?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.4"/>
<template class="resetWifiOptions" parent="AdwNavigationPage">
<child>
<object class="GtkNotebook">
<property name="scrollable">True</property>
<property name="show-border">False</property>
<child>
<object class="GtkBox">
<property name="orientation">vertical</property>
<child>
<object class="AdwPreferencesGroup">
<child>
<object class="AdwActionRow" id="resetWifiName">
<property name="css-classes">property</property>
<property name="title">WiFi Name</property>
</object>
</child>
<child>
<object class="AdwActionRow" id="resetWifiMac">
<property name="css-classes">property</property>
<property name="title">MAC-Address</property>
</object>
</child>
<child>
<object class="AdwActionRow" id="resetWifiLinkSpeed">
<property name="css-classes">property</property>
<property name="title">Link Speed</property>
</object>
</child>
<child>
<object class="AdwActionRow" id="resetWifiIP4Addr">
<property name="css-classes">property</property>
<property name="title">IPv4 Address</property>
</object>
</child>
<child>
<object class="AdwActionRow" id="resetWifiIP6Addr">
<property name="css-classes">property</property>
<property name="title">IPv6 Address</property>
</object>
</child>
<child>
<object class="AdwActionRow" id="resetWifiGateway">
<property name="css-classes">property</property>
<property name="title">Gateway</property>
</object>
</child>
<child>
<object class="AdwActionRow" id="resetWifiDNS">
<property name="css-classes">property</property>
<property name="title">DNS</property>
</object>
</child>
<child>
<object class="AdwSwitchRow" id="resetWifiAutoConnect">
<property name="title">Connect automatically</property>
</object>
</child>
<child>
<object class="AdwSwitchRow" id="resetWifiMetered">
<property name="title">Metered Connection</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child type="tab">
<object class="GtkLabel">
<property name="label">General</property>
</object>
</child>
<child>
<object class="GtkBox">
<property name="orientation">vertical</property>
<child>
<object class="AdwPreferencesGroup">
<child>
<object class="AdwComboRow" id="resetIP4Method">
<property name="model">
<object class="GtkStringList">
<items>
<item>Automatic (DHCP)</item>
<item>Manual</item>
<item>Link-Local Only</item>
<item>Shared to other computers</item>
<item>Disabled</item>
</items>
</object>
</property>
<property name="title">IPv4 Method</property>
</object>
</child>
<child>
<object class="AdwEntryRow" id="resetIP4DNS">
<property name="title">DNS (separate IP by comma, empty for automatic)</property>
</object>
</child>
<child>
<object class="AdwEntryRow" id="resetIP4Gateway">
<property name="title">Gateway</property>
</object>
</child>
</object>
</child>
<child>
<object class="AdwPreferencesGroup" id="resetIP4AddressGroup">
<property name="margin-top">10</property>
<property name="title">Addresses</property>
</object>
</child>
<child>
<object class="AdwPreferencesGroup" id="resetIP4RoutesGroup">
<property name="header-suffix">
<object class="GtkBox">
<child>
<object class="GtkLabel">
<property name="label">Automatic</property>
<property name="margin-end">5</property>
</object>
</child>
<child>
<object class="GtkSwitch">
<property name="valign">center</property>
</object>
</child>
</object>
</property>
<property name="margin-top">10</property>
<property name="title">Routes</property>
</object>
</child>
</object>
</child>
<child type="tab">
<object class="GtkLabel">
<property name="label">IPv4</property>
</object>
</child>
<child>
<object class="GtkBox">
<property name="orientation">vertical</property>
<child>
<object class="AdwPreferencesGroup">
<child>
<object class="AdwComboRow" id="resetIP6Method">
<property name="model">
<object class="GtkStringList">
<items>
<item>Automatic</item>
<item>Automatic (DHCP)</item>
<item>Manual</item>
<item>Link-Local Only</item>
<item>Shared to other computers</item>
<item>Disabled</item>
</items>
</object>
</property>
<property name="title">IPv6 Method</property>
</object>
</child>
<child>
<object class="AdwEntryRow" id="resetIP6DNS">
<property name="title">DNS (separate IP by comma, empty for automatic)</property>
</object>
</child>
<child>
<object class="AdwEntryRow" id="resetIP6Gateway">
<property name="title">Gateway</property>
</object>
</child>
</object>
</child>
<child>
<object class="AdwPreferencesGroup" id="resetIP6AddressGroup">
<property name="margin-top">10</property>
<property name="title">Addresses</property>
</object>
</child>
<child>
<object class="AdwPreferencesGroup" id="resetIP6RoutesGroup">
<property name="header-suffix">
<object class="GtkBox">
<child>
<object class="GtkLabel">
<property name="label">Automatic</property>
<property name="margin-end">5</property>
</object>
</child>
<child>
<object class="GtkSwitch">
<property name="valign">center</property>
</object>
</child>
</object>
</property>
<property name="margin-top">10</property>
<property name="title">Routes</property>
</object>
</child>
</object>
</child>
<child type="tab">
<object class="GtkLabel">
<property name="label">IPv6</property>
</object>
</child>
<child>
<object class="GtkBox">
<property name="orientation">vertical</property>
<child>
<object class="AdwPreferencesGroup">
<child>
<object class="AdwComboRow">
<property name="model">
<object class="GtkStringList">
<items>
<item>None</item>
<item>Enhanced Open</item>
<item>WEP 40/128-bit Key (Hex or ASCII)</item>
<item>WEP 128-bit Passphrase</item>
<item>LEAP</item>
<item>Dynamic WEP (802.1X)</item>
<item>WPA &amp; WPA2 Personal</item>
<item>WPA &amp; WPA2 Enterprise</item>
<item>WPA3 Personal</item>
</items>
</object>
</property>
<property name="title">Security</property>
</object>
</child>
<child>
<object class="AdwEntryRow">
<property name="title">Username</property>
</object>
</child>
<child>
<object class="AdwPasswordEntryRow">
<property name="title">Password</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child type="tab">
<object class="GtkLabel">
<property name="label">Security</property>
</object>
</child>
</object>
</child>
</template>
</interface>

View file

@ -0,0 +1,47 @@
<?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.2"/>
<template class="resetWifiRouteEntry" parent="GtkBox">
<child>
<object class="AdwExpanderRow" id="resetRouteRow">
<property name="hexpand">True</property>
<property name="title">Add new Route</property>
<child>
<object class="AdwEntryRow" id="resetRouteAddress">
<property name="title">Address</property>
</object>
</child>
<child>
<object class="AdwEntryRow" id="resetRouteNetmask">
<property name="title">Netmask</property>
</object>
</child>
<child>
<object class="GtkBox">
<child>
<object class="AdwEntryRow" id="resetRouteGateway">
<property name="hexpand">True</property>
<property name="title">Gateway</property>
</object>
</child>
<child>
<object class="AdwEntryRow" id="resetRouteMetric">
<property name="max-width-chars">5</property>
<property name="title">Metric</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkButton" id="resetRouteRemove">
<property name="height-request">55</property>
<property name="icon-name">edit-delete-symbolic</property>
<property name="valign">start</property>
</object>
</child>
</template>
</interface>

View file

@ -1,21 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/org/Xetibo/ReSet/">
<!--Main window-->
<file compressed="true" preprocess="xml-stripblanks">resetMainWindow.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetSidebarEntry.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetSettingBox.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetListBoxRow.ui</file>
<!--WiFi-->
<file compressed="true" preprocess="xml-stripblanks">resetWiFi.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetWifiEntry.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetSavedWifiEntry.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetWifiOptions.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetWifiAddressEntry.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetWifiRouteEntry.ui</file>
<!--Bluetooth-->
<file compressed="true" preprocess="xml-stripblanks">resetBluetooth.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetBluetoothEntry.ui</file>
<!--Output-->
<file compressed="true" preprocess="xml-stripblanks">resetAudioOutput.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetOutputStreamEntry.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetSinkEntry.ui</file>
<!--Input-->
<file compressed="true" preprocess="xml-stripblanks">resetAudioInput.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetInputStreamEntry.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetSinkEntry.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetSourceEntry.ui</file>
<!--Misc-->
<file compressed="true" preprocess="xml-stripblanks">resetPopup.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetCardEntry.ui</file>
</gresource>