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,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