From 385586ca3d13c30cec9f66a0d31eebf28de9c909 Mon Sep 17 00:00:00 2001 From: yggverse Date: Tue, 29 Oct 2024 01:09:05 +0200 Subject: [PATCH] implement loading widget --- .../browser/window/tab/item/page/content.rs | 8 +++++ .../tab/item/page/content/status/loading.rs | 20 +++++++++++ .../page/content/status/loading/widget.rs | 33 +++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 src/app/browser/window/tab/item/page/content/status/loading.rs create mode 100644 src/app/browser/window/tab/item/page/content/status/loading/widget.rs diff --git a/src/app/browser/window/tab/item/page/content.rs b/src/app/browser/window/tab/item/page/content.rs index b69ecd4b..e45f4d69 100644 --- a/src/app/browser/window/tab/item/page/content.rs +++ b/src/app/browser/window/tab/item/page/content.rs @@ -48,6 +48,14 @@ impl Content { self.gobject.append(status_default.gobject()); } + pub fn set_status_loading(&self, title: Option<&str>, description: Option<&str>) { + self.clean(); + + let status_default = Status::new_loading(title, description); + + self.gobject.append(status_default.gobject()); + } + pub fn set_text_gemini(&self, base: &Uri, data: &str) -> Option { self.clean(); diff --git a/src/app/browser/window/tab/item/page/content/status/loading.rs b/src/app/browser/window/tab/item/page/content/status/loading.rs new file mode 100644 index 00000000..5cdcfc9e --- /dev/null +++ b/src/app/browser/window/tab/item/page/content/status/loading.rs @@ -0,0 +1,20 @@ +mod widget; +use widget::Widget; + +use adw::StatusPage; + +pub struct Loading { + widget: Widget, +} + +impl Loading { + pub fn new(title: Option<&str>, description: Option<&str>) -> Self { + Self { + widget: Widget::new(title, description), + } + } + + pub fn gobject(&self) -> &StatusPage { + &self.widget.gobject() + } +} diff --git a/src/app/browser/window/tab/item/page/content/status/loading/widget.rs b/src/app/browser/window/tab/item/page/content/status/loading/widget.rs new file mode 100644 index 00000000..da9fde5d --- /dev/null +++ b/src/app/browser/window/tab/item/page/content/status/loading/widget.rs @@ -0,0 +1,33 @@ +use adw::{Spinner, StatusPage}; + +/// 16-64 (px) +const SPINNER_SIZE: i32 = 64; + +pub struct Widget { + gobject: StatusPage, +} + +impl Widget { + pub fn new(title: Option<&str>, description: Option<&str>) -> Self { + let gobject = StatusPage::builder() + .child( + &Spinner::builder() + .width_request(SPINNER_SIZE) + .height_request(SPINNER_SIZE) + .build(), + ) + .build(); + + if let Some(value) = title { + gobject.set_title(value); + } + + gobject.set_description(description); + + Self { gobject } + } + + pub fn gobject(&self) -> &StatusPage { + &self.gobject + } +}