Merge pull request #31 from Xetibo/ina

Dynamically add wifientries
This commit is contained in:
Dashie 2023-10-30 10:47:50 +01:00 committed by GitHub
commit f4a6f29343
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 196 additions and 71 deletions

View file

@ -3,10 +3,15 @@
use std::thread;
use std::time::Duration;
use adw::glib::Object;
use adw::glib::{Object, PropertySet};
use adw::glib::clone;
use adw::subclass::prelude::ObjectSubclassIsExt;
use dbus::blocking::Connection;
use dbus::Error;
use gtk::glib;
use gtk::prelude::WidgetExt;
use crate::components::wifi::wifiEntry::WifiStrength;
mod wifiBox;
mod wifiEntry;
@ -19,7 +24,7 @@ glib::wrapper! {
glib::wrapper! {
pub struct WifiEntry(ObjectSubclass<wifiEntry::WifiEntry>)
@extends gtk::Widget,
@extends gtk::ListBoxRow, gtk::Widget,
@implements gtk::Accessible, gtk::Buildable, gtk::Actionable, gtk::ConstraintTarget;
}
@ -28,6 +33,27 @@ impl WifiBox {
Object::builder().build()
}
pub fn setupCallbacks(&self) {
let selfImp = self.imp();
selfImp.resetWifiDetails.connect_row_activated(clone!(@ weak selfImp as window => move |_, y| {
// let result = y.downcast_ref()::<WifiEntry>().unwrap(); no worky smh
}));
}
pub fn scanForWifi(&self) {
let selfImp = self.imp();
let mut wifiEntries = selfImp.wifiEntries.borrow_mut();
wifiEntries.push(WifiEntry::new(WifiStrength::Excellent, "ina internet", true));
wifiEntries.push(WifiEntry::new(WifiStrength::Excellent, "watch ina", true));
wifiEntries.push(WifiEntry::new(WifiStrength::Ok, "INANET", true));
wifiEntries.push(WifiEntry::new(WifiStrength::Weak, "ina best waifu", false));
for wifiEntry in wifiEntries.iter() {
selfImp.resetWifiList.append(wifiEntry);
}
}
pub fn donotdisturb() {
thread::spawn(|| {
let conn = Connection::new_session().unwrap();
@ -36,13 +62,28 @@ impl WifiBox {
"/org/freedesktop/Notifications",
Duration::from_millis(1000),
);
let _ : Result<(), Error> = proxy.method_call("org.freedesktop.Notifications", "DoNotDisturb", ());
let _: Result<(), Error> = proxy.method_call("org.freedesktop.Notifications", "DoNotDisturb", ());
});
}
}
impl WifiEntry {
pub fn new() -> Self {
Object::builder().build()
pub fn new(strength: WifiStrength, name: &str, isEncrypted: bool) -> Self {
let entry: WifiEntry = Object::builder().build();
let entryImp = entry.imp();
entryImp.wifiStrength.set(strength);
entryImp.resetWifiLabel.get().set_text(name);
entryImp.resetWifiEncrypted.set_visible(isEncrypted);
entryImp.resetWifiStrength.get().set_from_icon_name(match strength {
WifiStrength::Excellent => Some("network-wireless-signal-excellent-symbolic"),
WifiStrength::Ok => Some("network-wireless-signal-ok-symbolic"),
WifiStrength::Weak => Some("network-wireless-signal-weak-symbolic"),
WifiStrength::None => Some("network-wireless-signal-none-symbolic"),
});
{
let mut wifiName = entryImp.wifiName.borrow_mut();
*wifiName = String::from(name);
}
entry
}
}

View file

@ -1,4 +1,5 @@
use gtk::{CompositeTemplate, glib, ListBox};
use std::cell::RefCell;
use gtk::{CompositeTemplate, glib, ListBox, ListBoxRow, Switch};
use gtk::prelude::*;
use gtk::subclass::prelude::*;
@ -8,8 +9,15 @@ use crate::components::wifi::WifiEntry;
#[derive(Default, CompositeTemplate)]
#[template(resource = "/org/Xetibo/ReSet/resetWiFi.ui")]
pub struct WifiBox {
#[template_child]
pub resetWifiDetails: TemplateChild<ListBox>,
#[template_child]
pub resetWifiSwitchRow: TemplateChild<ListBoxRow>,
#[template_child]
pub resetWifiSwitch: TemplateChild<Switch>,
#[template_child]
pub resetWifiList: TemplateChild<ListBox>,
pub wifiEntries: RefCell<Vec<WifiEntry>>,
}
#[glib::object_subclass]
@ -31,6 +39,10 @@ impl ObjectSubclass for WifiBox {
impl ObjectImpl for WifiBox {
fn constructed(&self) {
self.parent_constructed();
let obj = self.obj();
obj.setupCallbacks();
obj.scanForWifi();
}
}

View file

@ -1,6 +1,16 @@
use std::cell::RefCell;
use gtk::{Button, CompositeTemplate, glib, Image, Label};
use gtk::subclass::prelude::*;
#[derive(Default, Copy, Clone)]
pub enum WifiStrength {
Excellent,
Ok,
Weak,
#[default]
None,
}
#[allow(non_snake_case)]
#[derive(Default, CompositeTemplate)]
#[template(resource = "/org/Xetibo/ReSet/resetWifiEntry.ui")]
@ -8,9 +18,13 @@ pub struct WifiEntry {
#[template_child]
pub resetWifiStrength: TemplateChild<Image>,
#[template_child]
pub resetWifiEncrypted: TemplateChild<Image>,
#[template_child]
pub resetWifiLabel: TemplateChild<Label>,
#[template_child]
pub resetWifiButton: TemplateChild<Button>,
pub wifiName: RefCell<String>,
pub wifiStrength: RefCell<WifiStrength>,
}
#[glib::object_subclass]
@ -22,7 +36,7 @@ impl ObjectSubclass for WifiEntry {
fn class_init(klass: &mut Self::Class) {
klass.bind_template();
}
fn instance_init(obj: &glib::subclass::InitializingObject<Self>) {
obj.init_template();
}

View file

@ -40,12 +40,12 @@ impl Window {
let selfImp = self.imp();
selfImp.resetSearchEntry.connect_search_changed(clone!(@ weak self as window => move |_| {
window.filterList();
}));
window.filterList();
}));
selfImp.resetSideBarToggle.connect_clicked(clone!(@ weak self as window => move |_| {
window.toggleSidebar();
}));
window.toggleSidebar();
}));
selfImp.resetSidebarList.connect_row_activated(
clone!(@ weak selfImp as flowbox => move |_, y| {
@ -67,7 +67,7 @@ impl Window {
fn handleDynamicSidebar(&self) {
let selfImp = self.imp();
selfImp.resetSidebarBreakpoint.set_condition(BreakpointCondition::parse("max-width: 500sp").as_ref().ok());
selfImp.resetSidebarBreakpoint.set_condition(BreakpointCondition::parse("max-width: 600sp").as_ref().ok());
selfImp.resetSidebarBreakpoint.add_setter(
&Object::from(selfImp.resetOverlaySplitView.get()),
"collapsed",
@ -191,9 +191,7 @@ impl Window {
fn setupPopoverButtons(&self) {
let selfImp = self.imp();
selfImp
.resetAboutButton
.connect_clicked(clone!(@ weak self as window => move |_| {
selfImp.resetAboutButton.connect_clicked(clone!(@ weak self as window => move |_| {
let dialog = adw::AboutWindow::builder()
.application_name("ReSet")
.application_icon("ReSet")

View file

@ -7,7 +7,7 @@
<property name="margin-start">5</property>
<property name="orientation">vertical</property>
<property name="valign">start</property>
<property name="width-request">300</property>
<property name="width-request">400</property>
<child>
<object class="GtkBox">
<property name="margin-bottom">10</property>

View file

@ -8,7 +8,7 @@
<property name="margin-start">5</property>
<property name="orientation">vertical</property>
<property name="valign">start</property>
<property name="width-request">300</property>
<property name="width-request">400</property>
<child>
<object class="GtkBox">
<property name="margin-bottom">5</property>

View file

@ -100,6 +100,7 @@
<property name="column-spacing">25</property>
<property name="hexpand">True</property>
<property name="hexpand-set">True</property>
<property name="margin-top">5</property>
<property name="row-spacing">25</property>
<property name="selection-mode">none</property>
<property name="valign">start</property>

View file

@ -42,21 +42,22 @@
(4,10,"GtkLabel",None,9,None,None,None,None,None),
(4,11,"GtkListBox","resetWifiList",9,None,None,None,1,None),
(4,42,"GtkButton",None,7,None,None,None,2,None),
(4,44,"resetWifiEntry",None,11,None,None,None,1,None),
(4,45,"resetWifiEntry",None,11,None,None,None,None,None),
(4,46,"resetWifiEntry",None,11,None,None,None,2,None),
(4,47,"resetWifiEntry",None,11,None,None,None,3,None),
(4,48,"resetWifiEntry",None,11,None,None,None,4,None),
(4,49,"resetWifiEntry",None,11,None,None,None,5,None),
(4,50,"resetWifiEntry",None,11,None,None,None,6,None),
(4,51,"GtkBox",None,7,None,None,None,None,None),
(4,52,"GtkLabel",None,51,None,None,None,None,None),
(4,53,"GtkSwitch","resetWiFiSwitch",51,None,None,None,1,None),
(4,54,"GtkListBox","resetWifiDetails",7,None,None,None,None,None),
(4,55,"GtkListBoxRow","resetWifiSwitchRow",54,None,None,None,None,None),
(4,56,"GtkListBoxRow",None,54,None,None,None,1,None),
(4,57,"GtkBox",None,55,None,None,None,-1,None),
(4,58,"GtkLabel",None,57,None,None,None,None,None),
(4,59,"GtkSwitch","resetWifiSwitch",57,None,None,None,1,None),
(4,60,"GtkBox",None,56,None,None,None,None,None),
(4,61,"GtkLabel",None,60,None,None,None,None,None),
(4,62,"GtkImage",None,60,None,None,None,1,None),
(5,1,"GtkListBoxRow","resetWifiEntry",None,None,None,None,None,None),
(5,2,"GtkBox",None,1,None,None,None,None,None),
(5,3,"GtkImage","resetWifiStrength",2,None,None,None,None,None),
(5,4,"GtkLabel","resetWifiLabel",2,None,None,None,1,None),
(5,5,"GtkButton","resetWifiButton",2,None,None,None,2,None),
(5,6,"GtkBox",None,2,None,None,None,None,None),
(5,7,"GtkImage","resetWifiStrength",6,None,None,None,None,None),
(5,8,"GtkImage","resetWifiEncrypted",6,None,None,None,1,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),
@ -142,6 +143,7 @@
(3,32,"GtkFlowBox","selection-mode","none",None,None,None,None,None,None,None,None,None),
(3,32,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(3,32,"GtkWidget","hexpand-set","True",None,None,None,None,None,None,None,None,None),
(3,32,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(3,32,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(3,33,"GtkMenuButton","can-shrink","True",None,None,None,None,None,None,None,None,None),
(3,33,"GtkMenuButton","icon-name","open-menu-symbolic",None,None,None,None,None,None,None,None,None),
@ -165,7 +167,7 @@
(4,7,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(4,7,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(4,7,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(4,7,"GtkWidget","width-request","300",None,None,None,None,None,None,None,None,None),
(4,7,"GtkWidget","width-request","400",None,None,None,None,None,None,None,None,None),
(4,8,"AdwClampScrollable","maximum-size","0",None,None,None,None,None,None,None,None,None),
(4,8,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(4,9,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
@ -173,18 +175,33 @@
(4,10,"GtkLabel","justify","right",None,None,None,None,None,None,None,None,None),
(4,10,"GtkLabel","label","Available networks",None,None,None,None,None,None,None,None,None),
(4,10,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(4,11,"GtkListBox","show-separators","True",None,None,None,None,None,None,None,None,None),
(4,11,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(4,42,"GtkButton","label","Advanced",None,None,None,None,None,None,None,None,None),
(4,42,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(4,42,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(4,42,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(4,51,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
(4,52,"GtkLabel","label","WiFi",None,None,None,None,None,None,None,None,None),
(4,53,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(4,53,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(4,53,"GtkWidget","valign","end",None,None,None,None,None,None,None,None,None),
(4,54,"GtkListBox","show-separators","True",None,None,None,None,None,None,None,None,None),
(4,54,"GtkWidget","margin-bottom","10",None,None,None,None,None,None,None,None,None),
(4,54,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(4,55,"GtkListBoxRow","selectable","False",None,None,None,None,None,None,None,None,None),
(4,56,"GtkListBoxRow","selectable","False",None,None,None,None,None,None,None,None,None),
(4,57,"GtkWidget","height-request","40",None,None,None,None,None,None,None,None,None),
(4,58,"GtkLabel","label","WiFi",None,None,None,None,None,None,None,None,None),
(4,58,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(4,59,"GtkSwitch","active","True",None,None,None,None,None,None,None,None,None),
(4,59,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(4,59,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(4,59,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(4,59,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
(4,60,"GtkWidget","height-request","40",None,None,None,None,None,None,None,None,None),
(4,61,"GtkLabel","label","Saved Networks",None,None,None,None,None,None,None,None,None),
(4,61,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(4,62,"GtkImage","icon-name","go-previous-symbolic-rtl",None,None,None,None,None,None,None,None,None),
(4,62,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(4,62,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(4,62,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(5,1,"GtkListBoxRow","selectable","False",None,None,None,None,None,None,None,None,None),
(5,3,"GtkImage","icon-name","network-wireless-symbolic",None,None,None,None,None,None,None,None,None),
(5,3,"GtkWidget","margin-end","15",None,None,None,None,None,None,None,None,None),
(5,4,"GtkLabel","ellipsize","end",None,None,None,None,None,None,None,None,None),
(5,4,"GtkLabel","label","LoremIpsumInternet",None,None,None,None,None,None,None,None,None),
(5,4,"GtkLabel","single-line-mode","True",None,None,None,None,None,None,None,None,None),
@ -196,6 +213,14 @@
(5,5,"GtkButton","icon-name","emblem-system-symbolic",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","valign","center",None,None,None,None,None,None,None,None,None),
(5,6,"GtkBox","spacing","-1",None,None,None,None,None,None,None,None,None),
(5,6,"GtkWidget","width-request","35",None,None,None,None,None,None,None,None,None),
(5,7,"GtkImage","icon-name","network-wireless-signal-excellent-symbolic",None,None,None,None,None,None,None,None,None),
(5,8,"GtkImage","icon-name","system-lock-screen-symbolic",None,None,None,None,None,None,None,None,None),
(5,8,"GtkImage","pixel-size","9",None,None,None,None,None,None,None,None,None),
(5,8,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(5,8,"GtkWidget","margin-bottom","6",None,None,None,None,None,None,None,None,None),
(5,8,"GtkWidget","valign","end",None,None,None,None,None,None,None,None,None),
(6,1,"GtkListBoxRow","child",None,None,None,None,None,2,None,None,None,None),
(6,2,"GtkWidget","margin-bottom","10",None,None,None,None,None,None,None,None,None),
(6,2,"GtkWidget","margin-start","10",None,None,None,None,None,None,None,None,None),
@ -226,7 +251,7 @@
(8,1,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(8,1,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(8,1,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(8,1,"GtkWidget","width-request","300",None,None,None,None,None,None,None,None,None),
(8,1,"GtkWidget","width-request","400",None,None,None,None,None,None,None,None,None),
(8,13,"GtkButton","label","All Output Devices",None,None,None,None,None,None,None,None,None),
(8,13,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(8,13,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
@ -241,7 +266,7 @@
(10,1,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(10,1,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(10,1,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(10,1,"GtkWidget","width-request","300",None,None,None,None,None,None,None,None,None),
(10,1,"GtkWidget","width-request","400",None,None,None,None,None,None,None,None,None),
(10,2,"AdwClampScrollable","maximum-size","0",None,None,None,None,None,None,None,None,None),
(10,2,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(10,3,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),

View file

@ -8,20 +8,59 @@
<property name="margin-start">5</property>
<property name="orientation">vertical</property>
<property name="valign">start</property>
<property name="width-request">300</property>
<property name="width-request">400</property>
<child>
<object class="GtkBox">
<property name="margin-bottom">5</property>
<object class="GtkListBox" id="resetWifiDetails">
<property name="margin-bottom">10</property>
<property name="show-separators">True</property>
<property name="valign">start</property>
<child>
<object class="GtkLabel">
<property name="label">WiFi</property>
<object class="GtkListBoxRow" id="resetWifiSwitchRow">
<property name="selectable">False</property>
<child>
<object class="GtkBox">
<property name="height-request">40</property>
<child>
<object class="GtkLabel">
<property name="label">WiFi</property>
<property name="margin-start">5</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="resetWifiSwitch">
<property name="active">True</property>
<property name="halign">end</property>
<property name="hexpand">True</property>
<property name="margin-end">5</property>
<property name="valign">center</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkSwitch" id="resetWiFiSwitch">
<property name="halign">end</property>
<property name="hexpand">True</property>
<property name="valign">end</property>
<object class="GtkListBoxRow">
<property name="selectable">False</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>
</child>
</object>
</child>
</object>
@ -43,28 +82,8 @@
</child>
<child>
<object class="GtkListBox" id="resetWifiList">
<property name="show-separators">True</property>
<property name="valign">start</property>
<child>
<object class="resetWifiEntry"/>
</child>
<child>
<object class="resetWifiEntry"/>
</child>
<child>
<object class="resetWifiEntry"/>
</child>
<child>
<object class="resetWifiEntry"/>
</child>
<child>
<object class="resetWifiEntry"/>
</child>
<child>
<object class="resetWifiEntry"/>
</child>
<child>
<object class="resetWifiEntry"/>
</child>
</object>
</child>
</object>
@ -75,6 +94,7 @@
<object class="GtkButton">
<property name="halign">start</property>
<property name="label">Advanced</property>
<property name="margin-top">5</property>
<property name="valign">start</property>
</object>
</child>

View file

@ -7,9 +7,23 @@
<child>
<object class="GtkBox">
<child>
<object class="GtkImage" id="resetWifiStrength">
<property name="icon-name">network-wireless-symbolic</property>
<property name="margin-end">15</property>
<object class="GtkBox">
<property name="spacing">-1</property>
<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>