use termusiclib::config::SharedTuiSettings;
use tuirealm::{Component, Event, MockComponent, props::Alignment};
use super::{YNConfirm, YNConfirmStyle};
use crate::ui::ids::Id;
use crate::ui::model::{Model, UserEvent};
use crate::ui::msg::{Msg, QuitPopupMsg};
#[derive(MockComponent)]
pub struct QuitPopup {
component: YNConfirm,
}
impl QuitPopup {
pub fn new(config: SharedTuiSettings) -> Self {
let component = YNConfirm::new_with_cb(config, " Are sure you want to quit? ", |config| {
YNConfirmStyle {
foreground_color: config.settings.theme.important_popup_foreground(),
background_color: config.settings.theme.important_popup_background(),
border_color: config.settings.theme.important_popup_border(),
title_alignment: Alignment::Center,
}
});
Self { component }
}
}
impl Component<Msg, UserEvent> for QuitPopup {
fn on(&mut self, ev: Event<UserEvent>) -> Option<Msg> {
self.component.on(
ev,
Msg::QuitPopup(QuitPopupMsg::CloseOk),
Msg::QuitPopup(QuitPopupMsg::CloseCancel),
)
}
}
impl Model {
pub fn mount_quit_popup(&mut self) {
assert!(
self.app
.remount(
Id::QuitPopup,
Box::new(QuitPopup::new(self.config_tui.clone())),
vec![]
)
.is_ok()
);
assert!(self.app.active(&Id::QuitPopup).is_ok());
}
}