rat_widget/tabbed/
event.rs

1use rat_event::{ConsumedEvent, Outcome};
2
3/// Result of event handling.
4#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
5pub enum TabbedOutcome {
6    /// The given event has not been used at all.
7    Continue,
8    /// The event has been recognized, but the result was nil.
9    /// Further processing for this event may stop.
10    Unchanged,
11    /// The event has been recognized and there is some change
12    /// due to it.
13    /// Further processing for this event may stop.
14    /// Rendering the ui is advised.
15    Changed,
16    /// Tab selection changed.
17    Select(usize),
18    /// Selected tab should be closed.
19    Close(usize),
20}
21
22impl ConsumedEvent for TabbedOutcome {
23    fn is_consumed(&self) -> bool {
24        *self != TabbedOutcome::Continue
25    }
26}
27
28// Useful for converting most navigation/edit results.
29impl From<bool> for TabbedOutcome {
30    fn from(value: bool) -> Self {
31        if value {
32            TabbedOutcome::Changed
33        } else {
34            TabbedOutcome::Unchanged
35        }
36    }
37}
38
39impl From<Outcome> for TabbedOutcome {
40    fn from(value: Outcome) -> Self {
41        match value {
42            Outcome::Continue => TabbedOutcome::Continue,
43            Outcome::Unchanged => TabbedOutcome::Unchanged,
44            Outcome::Changed => TabbedOutcome::Changed,
45        }
46    }
47}
48
49impl From<TabbedOutcome> for Outcome {
50    fn from(value: TabbedOutcome) -> Self {
51        match value {
52            TabbedOutcome::Continue => Outcome::Continue,
53            TabbedOutcome::Unchanged => Outcome::Unchanged,
54            TabbedOutcome::Changed => Outcome::Changed,
55            TabbedOutcome::Select(_) => Outcome::Changed,
56            TabbedOutcome::Close(_) => Outcome::Changed,
57        }
58    }
59}