ferroui_controls/pull_to_refresh/
refresh_requested_event_args.rs1use super::RefreshCompletionDeferral;
2use ferroui_base::ferro_routed_event_args;
3use ferroui_base::interactivity::{RoutedEvent, RoutedEventArgs};
4use std::rc::Rc;
5
6#[derive(Clone)]
8pub struct RefreshRequestedEventArgs {
9 base: RoutedEventArgs,
10 refresh_completion_deferral: Rc<RefreshCompletionDeferral>,
11}
12
13ferro_routed_event_args!(RefreshRequestedEventArgs: RoutedEventArgs);
14
15impl RefreshRequestedEventArgs {
16 pub fn new<T: ?Sized>(deferred_action: impl Fn() + 'static, routed_event: Option<&RoutedEvent<T>>) -> Self {
18 Self::with_deferral(RefreshCompletionDeferral::new(deferred_action), routed_event)
19 }
20
21 pub fn with_deferral<T: ?Sized>(
23 completion_deferral: Rc<RefreshCompletionDeferral>,
24 routed_event: Option<&RoutedEvent<T>>,
25 ) -> Self {
26 let base = match routed_event {
27 Some(routed_event) => RoutedEventArgs::with_event(routed_event),
28 None => RoutedEventArgs::new(),
29 };
30 Self { base, refresh_completion_deferral: completion_deferral }
31 }
32
33 pub fn get_deferral(&self) -> Rc<RefreshCompletionDeferral> {
36 self.refresh_completion_deferral.get()
37 }
38
39 pub(crate) fn increment_count(&self) {
40 drop(self.refresh_completion_deferral.get());
41 }
42
43 pub(crate) fn decrement_count(&self) {
44 self.refresh_completion_deferral.complete();
45 }
46}