bacon/tui/menu/
action_menu.rs1use crate::*;
2
3pub type ActionMenu = Menu<Action>;
4
5#[derive(Debug, Clone, PartialEq, Eq, Hash)]
6pub struct ActionMenuDefinition {
7 pub intro: Option<String>,
8 pub actions: Vec<Action>,
9}
10
11impl ActionMenu {
12 pub fn add_action(
13 &mut self,
14 action: Action,
15 ) {
16 self.add_item(action, None); }
18 pub fn with_all_jobs(mission: &Mission) -> Self {
19 let mut menu = Self::new();
20 let mut job_names = mission.settings.jobs.keys().collect::<Vec<_>>();
21 job_names.sort();
22 let actions = job_names
23 .into_iter()
24 .map(|job_name| Action::Job(ConcreteJobRef::from_job_name(job_name).into()));
25 for action in actions {
26 let key = mission.settings.keybindings.shortest_key_for(&action);
27 menu.add_item(action, key);
28 }
29 menu
30 }
31 pub fn from_definition(
32 ActionMenuDefinition { intro, actions }: ActionMenuDefinition,
33 settings: &Settings,
34 ) -> Self {
35 let mut menu = Self::new();
36 if let Some(intro) = intro {
37 menu.set_intro(intro);
38 }
39 for action in actions {
40 let key = settings.keybindings.shortest_key_for(&action);
41 menu.add_item(action, key);
42 }
43 menu
44 }
45}