From 5665f4275e4a528249032ea029506e37200c0dfe Mon Sep 17 00:00:00 2001 From: tranfelix Date: Sun, 22 Oct 2023 16:49:24 +0200 Subject: [PATCH 1/2] only run runner on main and pull request --- .github/workflows/rust.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index d8e2cac..e6b7a44 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -2,6 +2,7 @@ name: Rust on: push: + branches: [ "main" ] pull_request: branches: [ "main" ] From 2f4d6a3867e04a917b9baa6b7f6d8ae4bec786a7 Mon Sep 17 00:00:00 2001 From: tranfelix Date: Mon, 23 Oct 2023 16:57:42 +0200 Subject: [PATCH 2/2] Add search bar entries dynamically rework search bar filter cleanup code --- src/resources/resetMainWindow.ui | 169 +------------------------------ src/resources/resetUI.cmb | 79 +-------------- src/window/handleSidebarClick.rs | 37 +++++++ src/window/mod.rs | 110 ++++++++++++++------ src/window/sidebarEntry.rs | 7 +- src/window/window.rs | 27 ++--- 6 files changed, 135 insertions(+), 294 deletions(-) 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 - + go-previous-symbolic-rtl - - breadcrum path - + - + end True open-menu-symbolic @@ -42,7 +40,7 @@ - + window-close-symbolic @@ -79,163 +77,6 @@ resetList 150 - - - - - 10 - 10 - 10 - - - network-wired-symbolic - 10 - - - - - Connectivity - - - - - - - - - - - - - - 10 - 30 - 10 - - - network-wireless-symbolic - 10 - - - - - WiFi - - - - - - - - - - - 10 - 30 - 10 - - - bluetooth-symbolic - 10 - - - - - Bluetooth - - - - - - - - - - - 10 - 30 - 10 - - - network-vpn-symbolic - 10 - - - - - VPN - - - - - - - - - - - 10 - 10 - 10 - - - audio-headset-symbolic - 10 - - - - - Audio - - - - - - - - - - - 10 - 30 - 10 - - - audio-volume-high-symbolic - 10 - - - - - Volume - - - - - - - - - - - 10 - 30 - 10 - - - audio-input-microphone-symbolic - 10 - - - - - Microphone - - - - - - diff --git a/src/resources/resetUI.cmb b/src/resources/resetUI.cmb index 9558f51..3adef3e 100644 --- a/src/resources/resetUI.cmb +++ b/src/resources/resetUI.cmb @@ -23,34 +23,6 @@ (3,13,"GtkBox",None,12,None,None,None,None,None), (3,14,"GtkSearchEntry","resetSearchEntry",13,None,None,None,None,None), (3,15,"GtkListBox","resetSidebarList",13,None,None,None,1,None), - (3,16,"GtkListBoxRow","resetConnectivity",15,None,None,None,None,None), - (3,17,"GtkBox",None,16,None,None,None,None,None), - (3,18,"GtkImage",None,17,None,None,None,None,None), - (3,19,"GtkLabel",None,17,None,None,None,1,None), - (3,20,"GtkListBoxRow","resetWifi",15,None,None,None,1,None), - (3,21,"GtkBox",None,20,None,None,None,None,None), - (3,22,"GtkImage",None,21,None,None,None,None,None), - (3,23,"GtkLabel",None,21,None,None,None,1,None), - (3,24,"GtkListBoxRow","resetBluetooth",15,None,None,None,2,None), - (3,25,"GtkBox",None,24,None,None,None,None,None), - (3,26,"GtkImage",None,25,None,None,None,None,None), - (3,27,"GtkLabel",None,25,None,None,None,1,None), - (3,28,"GtkListBoxRow","resetVPN",15,None,None,None,3,None), - (3,29,"GtkBox",None,28,None,None,None,None,None), - (3,30,"GtkImage",None,29,None,None,None,None,None), - (3,31,"GtkLabel",None,29,None,None,None,1,None), - (3,32,"GtkListBoxRow","resetAudio",15,None,None,None,4,None), - (3,33,"GtkBox",None,32,None,None,None,None,None), - (3,34,"GtkImage",None,33,None,None,None,None,None), - (3,35,"GtkLabel",None,33,None,None,None,1,None), - (3,36,"GtkListBoxRow","resetVolume",15,None,None,None,5,None), - (3,37,"GtkBox",None,36,None,None,None,None,None), - (3,38,"GtkImage",None,37,None,None,None,None,None), - (3,39,"GtkLabel",None,37,None,None,None,1,None), - (3,40,"GtkListBoxRow","resetMicrophone",15,None,None,None,6,None), - (3,41,"GtkBox",None,40,None,None,None,None,None), - (3,42,"GtkImage",None,41,None,None,None,None,None), - (3,43,"GtkLabel",None,41,None,None,None,1,None), (4,7,"GtkBox","resetWifi",None,None,None,None,None,None), (4,8,"AdwClampScrollable",None,7,None,None,None,None,None), (4,9,"GtkBox",None,8,None,None,None,None,None), @@ -70,9 +42,9 @@ (5,4,"GtkLabel","resetWifiLabel",2,None,None,None,1,None), (5,5,"GtkButton","resetWifiButton",2,None,None,None,2,None), (6,1,"GtkListBoxRow","resetSidebarEntry",None,None,None,None,None,None), - (6,2,"GtkBox",None,1,None,None,None,None,None), - (6,3,"GtkImage","resetSidebarImage",2,None,None,None,None,None), - (6,4,"GtkLabel","resetSidebarLabel",2,None,None,None,1,None) + (6,2,"GtkBox",None,1,None,None,None,-1,None), + (6,6,"GtkImage","resetSidebarImage",2,None,None,None,1,None), + (6,7,"GtkLabel","resetSidebarLabel",2,None,None,None,2,None) (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