use gui::Cap;
use gui::Id;
use gui::MutCap;
use gui::Widget;
use super::event::Event;
use super::message::Message;
pub trait Modal: Widget<Event, Message> {
fn prev_focused(&self, cap: &dyn Cap) -> Option<Id>;
fn set_prev_focused(&self, cap: &mut dyn MutCap<Event, Message>, focused: Option<Id>);
fn make_focused(&self, cap: &mut dyn MutCap<Event, Message>) {
let focused = cap.focused();
cap.focus(self.id());
self.set_prev_focused(cap, focused)
}
fn restore_focus(&self, cap: &mut dyn MutCap<Event, Message>) -> Id {
let prev_focused = self.prev_focused(cap);
match prev_focused {
Some(to_focus) => {
cap.focus(to_focus);
self.set_prev_focused(cap, None);
to_focus
},
None => panic!("No previous widget to focus"),
}
}
}