diff --git a/src/resources/resetMainWindow.ui b/src/resources/resetMainWindow.ui
index 2373aa4..0a4829e 100644
--- a/src/resources/resetMainWindow.ui
+++ b/src/resources/resetMainWindow.ui
@@ -19,22 +19,20 @@
-
-
+
go-previous-symbolic-rtl
-
- breadcrum path
-
+
-
+
-
+
window-close-symbolic
@@ -79,163 +77,6 @@
(3,2,"AdwOverlaySplitView","content",None,None,None,None,None,3,None,None,None,None),
@@ -104,48 +76,6 @@
(3,14,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(3,15,"GtkWidget","css-name","resetList",None,None,None,None,None,None,None,None,None),
(3,15,"GtkWidget","width-request","150",None,None,None,None,None,None,None,None,None),
- (3,17,"GtkWidget","margin-bottom","10",None,None,None,None,None,None,None,None,None),
- (3,17,"GtkWidget","margin-start","10",None,None,None,None,None,None,None,None,None),
- (3,17,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None),
- (3,18,"GtkImage","icon-name","network-wired-symbolic",None,None,None,None,None,None,None,None,None),
- (3,18,"GtkWidget","margin-end","10",None,None,None,None,None,None,None,None,None),
- (3,19,"GtkLabel","label","Connectivity",None,None,None,None,None,None,None,None,None),
- (3,21,"GtkWidget","margin-bottom","10",None,None,None,None,None,None,None,None,None),
- (3,21,"GtkWidget","margin-start","30",None,None,None,None,None,None,None,None,None),
- (3,21,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None),
- (3,22,"GtkImage","icon-name","network-wireless-symbolic",None,None,None,None,None,None,None,None,None),
- (3,22,"GtkWidget","margin-end","10",None,None,None,None,None,None,None,None,None),
- (3,23,"GtkLabel","label","WiFi",None,None,None,None,None,None,None,None,None),
- (3,25,"GtkWidget","margin-bottom","10",None,None,None,None,None,None,None,None,None),
- (3,25,"GtkWidget","margin-start","30",None,None,None,None,None,None,None,None,None),
- (3,25,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None),
- (3,26,"GtkImage","icon-name","bluetooth-symbolic",None,None,None,None,None,None,None,None,None),
- (3,26,"GtkWidget","margin-end","10",None,None,None,None,None,None,None,None,None),
- (3,27,"GtkLabel","label","Bluetooth",None,None,None,None,None,None,None,None,None),
- (3,29,"GtkWidget","margin-bottom","10",None,None,None,None,None,None,None,None,None),
- (3,29,"GtkWidget","margin-start","30",None,None,None,None,None,None,None,None,None),
- (3,29,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None),
- (3,30,"GtkImage","icon-name","network-vpn-symbolic",None,None,None,None,None,None,None,None,None),
- (3,30,"GtkWidget","margin-end","10",None,None,None,None,None,None,None,None,None),
- (3,31,"GtkLabel","label","VPN",None,None,None,None,None,None,None,None,None),
- (3,33,"GtkWidget","margin-bottom","10",None,None,None,None,None,None,None,None,None),
- (3,33,"GtkWidget","margin-start","10",None,None,None,None,None,None,None,None,None),
- (3,33,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None),
- (3,34,"GtkImage","icon-name","audio-headset-symbolic",None,None,None,None,None,None,None,None,None),
- (3,34,"GtkWidget","margin-end","10",None,None,None,None,None,None,None,None,None),
- (3,35,"GtkLabel","label","Audio",None,None,None,None,None,None,None,None,None),
- (3,37,"GtkWidget","margin-bottom","10",None,None,None,None,None,None,None,None,None),
- (3,37,"GtkWidget","margin-start","30",None,None,None,None,None,None,None,None,None),
- (3,37,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None),
- (3,38,"GtkImage","icon-name","audio-volume-high-symbolic",None,None,None,None,None,None,None,None,None),
- (3,38,"GtkWidget","margin-end","10",None,None,None,None,None,None,None,None,None),
- (3,39,"GtkLabel","label","Volume",None,None,None,None,None,None,None,None,None),
- (3,41,"GtkWidget","margin-bottom","10",None,None,None,None,None,None,None,None,None),
- (3,41,"GtkWidget","margin-start","30",None,None,None,None,None,None,None,None,None),
- (3,41,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None),
- (3,42,"GtkImage","icon-name","audio-input-microphone-symbolic",None,None,None,None,None,None,None,None,None),
- (3,42,"GtkWidget","margin-end","10",None,None,None,None,None,None,None,None,None),
- (3,43,"GtkLabel","label","Microphone",None,None,None,None,None,None,None,None,None),
(4,7,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(4,7,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(4,7,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
@@ -172,10 +102,11 @@
(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),
+ (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),
(6,2,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None),
- (6,3,"GtkWidget","margin-end","10",None,None,None,None,None,None,None,None,None)
+ (6,6,"GtkWidget","margin-end","10",None,None,None,None,None,None,None,None,None)
(3,15,"GtkWidget",2,2,None,1,None,None,None,None),
diff --git a/src/window/handleSidebarClick.rs b/src/window/handleSidebarClick.rs
index d8d69af..b328d41 100644
--- a/src/window/handleSidebarClick.rs
+++ b/src/window/handleSidebarClick.rs
@@ -1,12 +1,49 @@
use gtk::FlowBox;
use crate::wifi::WifiBox;
+
+pub const HANDLE_CONNECTIVITY_CLICK: fn(FlowBox) = |resetMain: FlowBox| {
+ let wifibox = WifiBox::new();
+ resetMain.remove_all();
+ resetMain.insert(&wifibox, -1);
+};
+
pub const HANDLE_WIFI_CLICK: fn(FlowBox) = |resetMain: FlowBox| {
let wifibox = WifiBox::new();
resetMain.remove_all();
resetMain.insert(&wifibox, -1);
};
+pub const HANDLE_BLUETOOTH_CLICK: fn(FlowBox) = |resetMain: FlowBox| {
+ let wifibox = WifiBox::new();
+ resetMain.remove_all();
+ resetMain.insert(&wifibox, -1);
+};
+
+pub const HANDLE_VPN_CLICK: fn(FlowBox) = |resetMain: FlowBox| {
+ let wifibox = WifiBox::new();
+ resetMain.remove_all();
+ resetMain.insert(&wifibox, -1);
+};
+
+pub const HANDLE_AUDIO_CLICK: fn(FlowBox) = |resetMain: FlowBox| {
+ let wifibox = WifiBox::new();
+ resetMain.remove_all();
+ resetMain.insert(&wifibox, -1);
+};
+
+pub const HANDLE_VOLUME_CLICK: fn(FlowBox) = |resetMain: FlowBox| {
+ let wifibox = WifiBox::new();
+ resetMain.remove_all();
+ resetMain.insert(&wifibox, -1);
+};
+
+pub const HANDLE_MICROPHONE_CLICK: fn(FlowBox) = |resetMain: FlowBox| {
+ let wifibox = WifiBox::new();
+ resetMain.remove_all();
+ resetMain.insert(&wifibox, -1);
+};
+
pub const HANDLE_HOME: fn(FlowBox) = |resetMain: FlowBox| {
resetMain.remove_all();
};
diff --git a/src/window/mod.rs b/src/window/mod.rs
index 04362fd..9bd2381 100644
--- a/src/window/mod.rs
+++ b/src/window/mod.rs
@@ -7,6 +7,7 @@ use glib::Object;
use gtk::{Application, FlowBox, gio, glib};
use gtk::prelude::*;
+use crate::window::handleSidebarClick::{HANDLE_AUDIO_CLICK, HANDLE_BLUETOOTH_CLICK, HANDLE_CONNECTIVITY_CLICK, HANDLE_MICROPHONE_CLICK, HANDLE_VOLUME_CLICK, HANDLE_VPN_CLICK, HANDLE_WIFI_CLICK};
use crate::window::sidebarEntry::{Categories, SidebarAction};
mod window;
@@ -35,60 +36,95 @@ impl Window {
fn setupCallback(&self) {
let selfImp = self.imp();
- selfImp.resetSearchEntry
- .connect_search_changed(clone!(@ weak self as window => move |_| {
+ selfImp.resetSearchEntry.connect_search_changed(clone!(@ weak self as window => move |_| {
window.filterList();
}));
- selfImp.resetSideBarToggle
- .connect_clicked(clone!(@ weak self as window => move |_| {
+ selfImp.resetSideBarToggle.connect_clicked(clone!(@ weak self as window => move |_| {
window.toggleSidebar();
}));
selfImp.resetSidebarList.connect_row_activated(clone!(@ weak selfImp as flowbox => move |x, y| {
let mut result = y.downcast_ref::().unwrap();
- let x1 = result.imp().onClickEvent.borrow().onClickEvent;
- (x1)(flowbox.resetMain.get());
+ let clickEvent = result.imp().onClickEvent.borrow().onClickEvent;
+ (clickEvent)(flowbox.resetMain.get());
}));
}
fn handleDynamicSidebar(&self) {
- self.imp().resetSidebarBreakpoint
- .set_condition(BreakpointCondition::parse("max-width: 500sp").as_ref().ok());
- self.imp().resetSidebarBreakpoint
- .add_setter(&Object::from(self.imp().resetOverlaySplitView.get()),
- "collapsed",
- &true.to_value());
- self.imp().resetSidebarBreakpoint
- .add_setter(&Object::from(self.imp().resetSideBarToggle.get()),
- "visible",
- &true.to_value());
+ let selfImp = self.imp();
+ selfImp.resetSidebarBreakpoint.set_condition(BreakpointCondition::parse("max-width: 500sp").as_ref().ok());
+ selfImp.resetSidebarBreakpoint.add_setter(&Object::from(selfImp.resetOverlaySplitView.get()),
+ "collapsed",
+ &true.to_value());
+ selfImp.resetSidebarBreakpoint.add_setter(&Object::from(selfImp.resetSideBarToggle.get()),
+ "visible",
+ &true.to_value());
}
fn filterList(&self) {
let text = self.imp().resetSearchEntry.text().to_string();
- self.imp().resetSidebarList.set_filter_func(move |x| {
+ for sidebarEntry in self.imp().sidebarEntries.borrow().iter() {
if text == "" {
- return true;
+ sidebarEntry.set_visible(true);
+ continue;
}
- if let Some(child) = x.child() {
- let result = child.downcast::().unwrap();
- let label = result.last_child().unwrap().downcast::().unwrap();
- if label.text().to_lowercase().contains(&text.to_lowercase()) {
- return true;
- }
+ if sidebarEntry.imp().name.borrow().to_lowercase().contains(&text.to_lowercase()) {
+ sidebarEntry.set_visible(true);
+ } else {
+ sidebarEntry.set_visible(false);
}
- return false;
- });
+ }
}
fn toggleSidebar(&self) {
if self.imp().resetOverlaySplitView.shows_sidebar() {
- self.imp().resetOverlaySplitView
- .set_show_sidebar(false);
+ self.imp().resetOverlaySplitView.set_show_sidebar(false);
} else {
- self.imp().resetOverlaySplitView
- .set_show_sidebar(true);
+ self.imp().resetOverlaySplitView.set_show_sidebar(true);
+ }
+ }
+
+ fn setupSidebarEntries(&self) {
+ let mut sidebarEntries = self.imp().sidebarEntries.borrow_mut();
+ sidebarEntries.push(SidebarEntry::new("Connectivity",
+ "network-wired-symbolic",
+ Categories::Connectivity,
+ false,
+ HANDLE_CONNECTIVITY_CLICK));
+ sidebarEntries.push(SidebarEntry::new("WiFi",
+ "network-wireless-symbolic",
+ Categories::Connectivity,
+ true,
+ HANDLE_WIFI_CLICK));
+ sidebarEntries.push(SidebarEntry::new("Bluetooth",
+ "bluetooth-symbolic",
+ Categories::Connectivity,
+ true,
+ HANDLE_BLUETOOTH_CLICK));
+ sidebarEntries.push(SidebarEntry::new("VPN",
+ "network-vpn-symbolic",
+ Categories::Connectivity,
+ true,
+ HANDLE_VPN_CLICK));
+ sidebarEntries.push(SidebarEntry::new("Audio",
+ "audio-headset-symbolic",
+ Categories::Audio,
+ false,
+ HANDLE_AUDIO_CLICK));
+ sidebarEntries.push(SidebarEntry::new("Volume",
+ "audio-volume-high-symbolic",
+ Categories::Audio,
+ true,
+ HANDLE_VOLUME_CLICK));
+ sidebarEntries.push(SidebarEntry::new("Microphone",
+ "audio-input-microphone-symbolic",
+ Categories::Audio,
+ true,
+ HANDLE_MICROPHONE_CLICK));
+
+ for entry in sidebarEntries.iter() {
+ self.imp().resetSidebarList.append(entry);
}
}
}
@@ -102,9 +138,19 @@ impl SidebarEntry {
entryImp.category.set(category);
entryImp.isSubcategory.set(isSubcategory);
{
- let mut ref_mut = entryImp.onClickEvent.borrow_mut();
- *ref_mut = SidebarAction { onClickEvent: clickEvent };
+ let mut name = entryImp.name.borrow_mut();
+ *name = String::from(entryName);
+ let mut action = entryImp.onClickEvent.borrow_mut();
+ *action = SidebarAction { onClickEvent: clickEvent };
}
+ Self::setMargin(&entry);
entry
}
+
+ fn setMargin(entry: &SidebarEntry) {
+ if entry.imp().isSubcategory.get() {
+ let option = entry.child().unwrap();
+ option.set_margin_start(30);
+ }
+ }
}
\ No newline at end of file
diff --git a/src/window/sidebarEntry.rs b/src/window/sidebarEntry.rs
index 5f8e70d..5465396 100644
--- a/src/window/sidebarEntry.rs
+++ b/src/window/sidebarEntry.rs
@@ -9,7 +9,7 @@ use crate::window::handleSidebarClick::HANDLE_HOME;
#[derive(Default)]
pub enum Categories {
Connectivity,
- Sound,
+ Audio,
#[default]
Misc,
}
@@ -25,6 +25,7 @@ pub struct SidebarEntry {
pub category: Cell,
pub isSubcategory: Cell,
pub onClickEvent: RefCell,
+ pub name : RefCell,
}
#[allow(non_snake_case)]
@@ -55,8 +56,8 @@ impl ObjectSubclass for SidebarEntry {
}
}
-impl ListBoxRowImpl for SidebarEntry {}
-
impl ObjectImpl for SidebarEntry {}
+impl ListBoxRowImpl for SidebarEntry {}
+
impl WidgetImpl for SidebarEntry {}
diff --git a/src/window/window.rs b/src/window/window.rs
index 1606179..8cb9fa0 100644
--- a/src/window/window.rs
+++ b/src/window/window.rs
@@ -1,14 +1,13 @@
+use std::cell::{Cell, RefCell};
use adw::{Breakpoint, OverlaySplitView};
use adw::glib::StaticTypeExt;
use adw::subclass::prelude::AdwApplicationWindowImpl;
use glib::subclass::InitializingObject;
-use gtk::{Button, CompositeTemplate, FlowBox, glib, ListBox, SearchEntry};
+use gtk::{Button, CompositeTemplate, FlowBox, glib, ListBox, SearchEntry, Box};
use gtk::subclass::prelude::*;
use crate::wifi::WifiBox;
-use crate::window::handleSidebarClick::HANDLE_WIFI_CLICK;
use crate::window::SidebarEntry;
-use crate::window::sidebarEntry::Categories;
#[allow(non_snake_case)]
#[derive(CompositeTemplate, Default)]
@@ -26,6 +25,9 @@ pub struct Window {
pub resetSidebarList: TemplateChild,
#[template_child]
pub resetSideBarToggle: TemplateChild