remove extra structs, keep gobject constructors only

This commit is contained in:
yggverse 2024-10-31 23:10:39 +02:00
parent ae1d3531bf
commit 70e0320067
3 changed files with 56 additions and 77 deletions

View File

@ -1,9 +1,6 @@
mod failure; mod failure;
mod loading; mod loading;
use failure::Failure;
use loading::Loading;
use adw::StatusPage; use adw::StatusPage;
use std::time::Duration; use std::time::Duration;
@ -23,9 +20,7 @@ impl Status {
icon_name: Option<&str>, icon_name: Option<&str>,
) -> Self { ) -> Self {
Self { Self {
gobject: Failure::new(title, description, icon_name) gobject: failure::new_gobject_from(title, description, icon_name),
.gobject()
.clone(),
} }
} }
@ -38,9 +33,7 @@ impl Status {
show_with_delay: Option<Duration>, show_with_delay: Option<Duration>,
) -> Self { ) -> Self {
Self { Self {
gobject: Loading::new(title, description, show_with_delay) gobject: loading::new_gobject_from(title, description, show_with_delay),
.gobject()
.clone(),
} }
} }

View File

@ -1,36 +1,31 @@
use adw::StatusPage; use adw::StatusPage;
const DEFAULT_ICON_NAME: Option<&str> = Some("dialog-error");
const DEFAULT_TITLE: &str = "Oops"; const DEFAULT_TITLE: &str = "Oops";
const DEFAULT_DESCRIPTION: Option<&str> = None; const DEFAULT_DESCRIPTION: Option<&str> = None;
const DEFAULT_ICON_NAME: Option<&str> = Some("dialog-error");
pub struct Failure { /// Create new `GObject` preset for failure [StatusPage](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/class.StatusPage.html)
gobject: StatusPage, pub fn new_gobject_from(
} title: Option<&str>,
description: Option<&str>,
impl Failure { icon_name: Option<&str>,
pub fn new(title: Option<&str>, description: Option<&str>, icon_name: Option<&str>) -> Self { ) -> StatusPage {
let gobject = StatusPage::new(); let gobject = StatusPage::new();
gobject.set_title(match title { gobject.set_title(match title {
Some(value) => value, Some(value) => value,
None => DEFAULT_TITLE, None => DEFAULT_TITLE,
}); });
gobject.set_description(match description { gobject.set_description(match description {
Some(value) => Some(value), Some(value) => Some(value),
None => DEFAULT_DESCRIPTION, None => DEFAULT_DESCRIPTION,
}); });
gobject.set_icon_name(match icon_name { gobject.set_icon_name(match icon_name {
Some(value) => Some(value), Some(value) => Some(value),
None => DEFAULT_ICON_NAME, None => DEFAULT_ICON_NAME,
}); });
Self { gobject } gobject
}
pub fn gobject(&self) -> &StatusPage {
&self.gobject
}
} }

View File

@ -8,46 +8,37 @@ use std::time::Duration;
/// 16-64 (px) /// 16-64 (px)
const SPINNER_SIZE: i32 = 64; const SPINNER_SIZE: i32 = 64;
pub struct Loading { /// Create new `GObject` preset for loading [StatusPage](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/class.StatusPage.html)
gobject: StatusPage, pub fn new_gobject_from(
} title: Option<&str>,
description: Option<&str>,
show_with_delay: Option<Duration>,
) -> StatusPage {
let gobject = StatusPage::builder()
.child(
&Spinner::builder()
.width_request(SPINNER_SIZE)
.height_request(SPINNER_SIZE)
.build(),
)
.build();
impl Loading { if let Some(value) = title {
pub fn new( gobject.set_title(value);
title: Option<&str>,
description: Option<&str>,
show_with_delay: Option<Duration>,
) -> 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);
if let Some(duration) = show_with_delay {
gobject.set_visible(false);
timeout_add_local(duration, {
let this = gobject.clone();
move || {
this.set_visible(true);
ControlFlow::Break
}
});
}
Self { gobject }
} }
pub fn gobject(&self) -> &StatusPage { gobject.set_description(description);
&self.gobject
if let Some(duration) = show_with_delay {
gobject.set_visible(false);
timeout_add_local(duration, {
let this = gobject.clone();
move || {
this.set_visible(true);
ControlFlow::Break
}
});
} }
gobject
} }