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 + } +}