From d6daf2ae19d99eb787aed51b22bee2bc92e8284a Mon Sep 17 00:00:00 2001 From: tranfelix Date: Sun, 22 Oct 2023 16:42:10 +0200 Subject: [PATCH] add sidebarentry fix github workflows --- .github/workflows/release.yml | 2 - .github/workflows/rust.yml | 8 ---- Cargo.toml | 2 +- src/resources/resetMainWindow.ui | 3 ++ src/resources/resetSidebarEntry.ui | 22 ++++++++++ src/resources/resetUI.cmb | 15 +++++-- src/resources/resources.gresource.xml | 1 + src/wifi/mod.rs | 1 - src/window/handleSidebarClick.rs | 12 ++++++ src/window/mod.rs | 50 +++++++++++++++++---- src/window/sidebarEntry.rs | 62 +++++++++++++++++++++++++++ src/window/{imp.rs => window.rs} | 18 ++++++-- 12 files changed, 170 insertions(+), 26 deletions(-) create mode 100644 src/resources/resetSidebarEntry.ui create mode 100644 src/window/handleSidebarClick.rs create mode 100644 src/window/sidebarEntry.rs rename src/window/{imp.rs => window.rs} (73%) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5199f1d..417b725 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,8 +12,6 @@ jobs: with: profile: minimal toolchain: nightly - - name: Install gtk - run: sudo apt install libgtk-4-dev libadwaita-1-dev -y - name: Build run: cargo build --release --verbose - name: Release diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 645c4ff..d8e2cac 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -20,13 +20,6 @@ jobs: with: profile: minimal toolchain: nightly - - name: Install gtk - run: sudo apt install libgtk-4-dev libadwaita-1-dev -y - - name: Cache - uses: actions/cache@v3 - with: - path: target/debug - key: ${{ runner.os }}-cache - name: run code coverage uses: actions-rs/tarpaulin@v0.1 with: @@ -37,7 +30,6 @@ jobs: with: name: code-coverage-report path: cobertura.xml - - name: Build run: cargo build --verbose - name: Run tests diff --git a/Cargo.toml b/Cargo.toml index 3769983..d7f177e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ description = "A wip universal Linux settings application." [dependencies] ReSet-Lib = "*" adw = { version = "*", package = "libadwaita", features = ["v1_4"]} -gtk = { version = "*", package = "gtk4"} +gtk = { version = "*", package = "gtk4", features = ["v4_12"]} [build-dependencies] glib-build-tools = "*" diff --git a/src/resources/resetMainWindow.ui b/src/resources/resetMainWindow.ui index c61adc1..2373aa4 100644 --- a/src/resources/resetMainWindow.ui +++ b/src/resources/resetMainWindow.ui @@ -99,6 +99,9 @@ + + + diff --git a/src/resources/resetSidebarEntry.ui b/src/resources/resetSidebarEntry.ui new file mode 100644 index 0000000..b4ed050 --- /dev/null +++ b/src/resources/resetSidebarEntry.ui @@ -0,0 +1,22 @@ + + + + + + diff --git a/src/resources/resetUI.cmb b/src/resources/resetUI.cmb index 6abeabd..9558f51 100644 --- a/src/resources/resetUI.cmb +++ b/src/resources/resetUI.cmb @@ -4,7 +4,8 @@ (3,1,None,"resetMainWindow",None,None,None,None,None,None,None), (4,7,None,"resetWiFi",None,None,None,None,None,None,None), - (5,1,None,"resetWifiEntry",None,None,None,None,None,None,None) + (5,1,None,"resetWifiEntry",None,None,None,None,None,None,None), + (6,1,None,"resetSidebarEntry",None,None,None,None,None,None,None) (3,1,"AdwApplicationWindow","resetUI",None,None,None,None,-1," <child>\n <object id=\"resetSidebarBreakpoint\" class=\"AdwBreakpoint\">\n </object>\n </child>"), @@ -67,7 +68,11 @@ (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,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) (3,2,"AdwOverlaySplitView","content",None,None,None,None,None,3,None,None,None,None), @@ -166,7 +171,11 @@ (5,4,"GtkWidget","width-request","200",None,None,None,None,None,None,None,None,None), (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,5,"GtkWidget","valign","center",None,None,None,None,None,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) (3,15,"GtkWidget",2,2,None,1,None,None,None,None), diff --git a/src/resources/resources.gresource.xml b/src/resources/resources.gresource.xml index 36eb403..c019302 100644 --- a/src/resources/resources.gresource.xml +++ b/src/resources/resources.gresource.xml @@ -1,6 +1,7 @@ + resetSidebarEntry.ui resetWifiEntry.ui resetWiFi.ui resetMainWindow.ui diff --git a/src/wifi/mod.rs b/src/wifi/mod.rs index e4e2680..42b381c 100644 --- a/src/wifi/mod.rs +++ b/src/wifi/mod.rs @@ -1,5 +1,4 @@ #![allow(non_snake_case)] - mod wifiBox; mod wifiEntry; diff --git a/src/window/handleSidebarClick.rs b/src/window/handleSidebarClick.rs new file mode 100644 index 0000000..d8d69af --- /dev/null +++ b/src/window/handleSidebarClick.rs @@ -0,0 +1,12 @@ +use gtk::FlowBox; +use crate::wifi::WifiBox; + +pub const HANDLE_WIFI_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 30dc061..04362fd 100644 --- a/src/window/mod.rs +++ b/src/window/mod.rs @@ -1,19 +1,31 @@ -mod imp; +#![allow(non_snake_case)] use adw::BreakpointCondition; use adw::glib::clone; use adw::subclass::prelude::ObjectSubclassIsExt; use glib::Object; -use gtk::{gio, glib, Application}; +use gtk::{Application, FlowBox, gio, glib}; use gtk::prelude::*; +use crate::window::sidebarEntry::{Categories, SidebarAction}; + +mod window; +mod sidebarEntry; +mod handleSidebarClick; + glib::wrapper! { - pub struct Window(ObjectSubclass) + pub struct Window(ObjectSubclass) @extends gtk::ApplicationWindow, gtk::Window, gtk::Widget, @implements gio::ActionGroup, gio::ActionMap, gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget, gtk::Native, gtk::Root, gtk::ShortcutManager; } +glib::wrapper! { + pub struct SidebarEntry(ObjectSubclass) + @extends gtk::ListBoxRow, gtk::Widget, + @implements gtk::Accessible, gtk::Actionable, gtk::Buildable, gtk::ConstraintTarget; +} + #[allow(non_snake_case)] impl Window { pub fn new(app: &Application) -> Self { @@ -21,15 +33,23 @@ impl Window { } fn setupCallback(&self) { - self.imp().resetSearchEntry + let selfImp = self.imp(); + + selfImp.resetSearchEntry .connect_search_changed(clone!(@ weak self as window => move |_| { window.filterList(); })); - self.imp().resetSideBarToggle + 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()); + })); } fn handleDynamicSidebar(&self) { @@ -46,9 +66,7 @@ impl Window { } fn filterList(&self) { - let text = self.imp().resetSearchEntry - .text() - .to_string(); + let text = self.imp().resetSearchEntry.text().to_string(); self.imp().resetSidebarList.set_filter_func(move |x| { if text == "" { return true; @@ -73,4 +91,20 @@ impl Window { .set_show_sidebar(true); } } +} + +impl SidebarEntry { + pub fn new(entryName: &str, iconName: &str, category: Categories, isSubcategory: bool, clickEvent: fn(FlowBox)) -> Self { + let entry: SidebarEntry = Object::builder().build(); + let entryImp = entry.imp(); + entryImp.resetSidebarLabel.get().set_text(entryName); + entryImp.resetSidebarImage.set_from_icon_name(Some(iconName)); + entryImp.category.set(category); + entryImp.isSubcategory.set(isSubcategory); + { + let mut ref_mut = entryImp.onClickEvent.borrow_mut(); + *ref_mut = SidebarAction { onClickEvent: clickEvent }; + } + entry + } } \ No newline at end of file diff --git a/src/window/sidebarEntry.rs b/src/window/sidebarEntry.rs new file mode 100644 index 0000000..5f8e70d --- /dev/null +++ b/src/window/sidebarEntry.rs @@ -0,0 +1,62 @@ +use std::cell::{Cell, RefCell}; + +use glib::subclass::InitializingObject; +use gtk::{CompositeTemplate, FlowBox, glib, Image, Label, ListBoxRow}; +use gtk::subclass::prelude::*; + +use crate::window::handleSidebarClick::HANDLE_HOME; + +#[derive(Default)] +pub enum Categories { + Connectivity, + Sound, + #[default] + Misc, +} + +#[allow(non_snake_case)] +#[derive(CompositeTemplate, Default)] +#[template(resource = "/org/xetibo/reset/resetSidebarEntry.ui")] +pub struct SidebarEntry { + #[template_child] + pub resetSidebarLabel: TemplateChild