From 8e0bf14cc8c4465a9a9d613a56a5d3ab10af2188 Mon Sep 17 00:00:00 2001 From: FyloZ Date: Fri, 1 Sep 2023 14:21:32 -0400 Subject: [PATCH] Start remove app --- Cargo.toml | 2 +- resources/app_view.ui | 13 +++++++++++++ resources/resources.gresource.xml | 1 + resources/window.ui | 3 +++ src/ui/appview/imp.rs | 32 +++++++++++++++++++++++++++++++ src/ui/appview/mod.rs | 9 +++++++++ src/ui/mod.rs | 2 ++ src/ui/window/imp.rs | 3 +++ src/ui/window/mod.rs | 19 ++++++++++++++++-- 9 files changed, 81 insertions(+), 3 deletions(-) create mode 100644 resources/app_view.ui create mode 100644 src/ui/appview/imp.rs create mode 100644 src/ui/appview/mod.rs diff --git a/Cargo.toml b/Cargo.toml index 1671d46..aac0025 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -adw = { version = "0.5.2", package = "libadwaita", features = ["v1_2"] } +adw = { version = "0.5.2", package = "libadwaita", features = ["v1_3"] } gtk = { version = "0.7.1", package = "gtk4", features = ["v4_10"] } log = { version = "0.4", features = ["max_level_debug", "release_max_level_info"] } simplelog = "^0.12.0" diff --git a/resources/app_view.ui b/resources/app_view.ui new file mode 100644 index 0000000..9d424b9 --- /dev/null +++ b/resources/app_view.ui @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/resources/resources.gresource.xml b/resources/resources.gresource.xml index b20d4c3..f6e222f 100644 --- a/resources/resources.gresource.xml +++ b/resources/resources.gresource.xml @@ -2,5 +2,6 @@ window.ui + app_view.ui diff --git a/resources/window.ui b/resources/window.ui index 2dca42f..339b6da 100644 --- a/resources/window.ui +++ b/resources/window.ui @@ -128,6 +128,9 @@ + + + diff --git a/src/ui/appview/imp.rs b/src/ui/appview/imp.rs new file mode 100644 index 0000000..aee0935 --- /dev/null +++ b/src/ui/appview/imp.rs @@ -0,0 +1,32 @@ +use adw::glib; +use glib::subclass::InitializingObject; +use gtk::CompositeTemplate; +use gtk::prelude::*; +use gtk::subclass::prelude::*; + +#[derive(Default, CompositeTemplate)] +#[template(resource = "dev/fyloz/example/app_view.ui")] +pub struct AppView {} + +#[glib::object_subclass] +impl ObjectSubclass for AppView { + const NAME: &'static str = "CmAppView"; + type Type = super::AppView; + type ParentType = gtk::Box; + + fn class_init(klass: &mut Self::Class) { + klass.bind_template(); + } + + fn instance_init(obj: &InitializingObject) { + obj.init_template(); + } +} + +impl ObjectImpl for AppView { + +} + +impl WidgetImpl for AppView {} + +impl BoxImpl for AppView {} \ No newline at end of file diff --git a/src/ui/appview/mod.rs b/src/ui/appview/mod.rs new file mode 100644 index 0000000..6fa6caf --- /dev/null +++ b/src/ui/appview/mod.rs @@ -0,0 +1,9 @@ +use adw::glib; + +mod imp; + +glib::wrapper! { + pub struct AppView(ObjectSubclass) + @extends gtk::Box, gtk::Widget, + @implements gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget, gtk::Orientable; +} \ No newline at end of file diff --git a/src/ui/mod.rs b/src/ui/mod.rs index e7ec559..7d01859 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -1,2 +1,4 @@ pub mod objects; pub mod window; + +pub mod appview; diff --git a/src/ui/window/imp.rs b/src/ui/window/imp.rs index cfbcb46..40f420f 100644 --- a/src/ui/window/imp.rs +++ b/src/ui/window/imp.rs @@ -9,6 +9,7 @@ use adw::subclass::prelude::*; use glib::once_cell::sync::OnceCell; use glib::subclass::InitializingObject; use gtk::{gio, glib, CompositeTemplate, ListBox, TemplateChild, Stack}; +use crate::ui::appview::AppView; #[derive(CompositeTemplate, Default)] #[template(resource = "/dev/fyloz/example/window.ui")] @@ -19,6 +20,8 @@ pub struct Window { pub leaflet: TemplateChild, #[template_child] pub stack: TemplateChild, + #[template_child] + pub app_view: TemplateChild, pub apps: OnceCell, pub current_app: RefCell>, } diff --git a/src/ui/window/mod.rs b/src/ui/window/mod.rs index c1f6bca..5a9c251 100644 --- a/src/ui/window/mod.rs +++ b/src/ui/window/mod.rs @@ -5,7 +5,7 @@ use crate::ui::objects::app::{AppData, AppObject}; use adw::prelude::*; use adw::subclass::prelude::*; -use gtk::{gio, glib, Entry, ListBoxRow, Label, pango, SelectionMode}; +use gtk::{gio, glib, Entry, ListBoxRow, Label, pango, SelectionMode, Button, Orientation, CenterBox}; use glib::{clone, Object}; glib::wrapper! { @@ -34,12 +34,27 @@ impl Window { .xalign(0.0) .build(); + let remove_button = Button::builder() + .icon_name("user-trash-symbolic") + .tooltip_text("Remove the application") + .action_name("win.remove-application") + .build(); + + let bbox = CenterBox::builder() + .orientation(Orientation::Horizontal) + .build(); + + bbox.set_start_widget(Some(&label)); + bbox.set_end_widget(Some(&remove_button)); + + self.imp().apps_list.remove(&bbox); + app_object .bind_property("name", &label, "label") .sync_create() .build(); - ListBoxRow::builder().child(&label).build() + ListBoxRow::builder().child(&bbox).build() } fn current_app(&self) -> AppObject {