use crate::{
command::CommandResult,
languages::{programming, spoken},
ui::tui::{screens::Screens, widgets::StatusMode},
};
use std::collections::HashMap;
use tokio::time::Duration;
pub type Evt = (Option<Screens>, Box<Event>);
#[macro_export]
macro_rules! evt {
(None, $event:expr $(,)?) => {
(None, Box::new($event))
};
($screen:expr, $event:expr $(,)?) => {
(Some($screen), Box::new($event))
};
}
#[derive(Clone, Debug)]
pub enum Event {
Log(String),
ToggleLog,
ShowLog(Option<Evt>),
HideLog(Option<Evt>),
Delay(Duration, Option<Evt>),
Quit,
Show(Screens),
LoadWorkshops,
SetWorkshop(
Option<String>,
HashMap<spoken::Code, Vec<programming::Code>>,
),
ShowLicense(String),
ChangeSpokenLanguage(
HashMap<spoken::Code, Vec<programming::Code>>,
Option<spoken::Code>,
bool, Option<Evt>, ),
SetSpokenLanguage(Option<spoken::Code>, Option<bool>, Option<Evt>),
ChangeProgrammingLanguage(
HashMap<spoken::Code, Vec<programming::Code>>,
Option<programming::Code>,
bool, Option<Evt>, ),
SetProgrammingLanguage(
Option<programming::Code>,
Option<bool>,
Option<Evt>, ),
SetDefault(
String,
Option<Evt>, Option<Evt>, ),
LoadLessons,
SetLesson(Option<String>),
LoadLesson,
CheckDeps(String, Option<Evt>, Option<Evt>),
CheckSolution(Option<Evt>, Option<Evt>),
SolutionComplete,
SolutionIncomplete,
CommandStarted(StatusMode, String),
CommandOutput(String, Option<u8>),
CommandCompleted(CommandResult, Option<Evt>, Option<Evt>),
InstallWorkshop(String, Option<Evt>),
}