fm/modes/menu/
picker.rs

1use crate::io::DrawMenu;
2use crate::modes::Menu;
3use crate::{impl_content, impl_selectable};
4
5/// Which part of fm asked a picker ?
6/// Only cloud uses a picker atm.
7pub enum PickerCaller {
8    Cloud,
9    Menu(Menu),
10    Unknown,
11}
12
13/// A basic picker, allowing to display some text and pick one element.
14/// It records a [`PickerCaller`], used to call it back.
15#[derive(Default)]
16pub struct Picker {
17    pub caller: Option<PickerCaller>,
18    pub desc: Option<String>,
19    pub index: usize,
20    pub content: Vec<String>,
21}
22
23impl Picker {
24    pub fn clear(&mut self) {
25        self.caller = None;
26        self.index = 0;
27        self.content = vec![];
28    }
29
30    pub fn set(
31        &mut self,
32        caller: Option<PickerCaller>,
33        desc: Option<String>,
34        content: Vec<String>,
35    ) {
36        self.clear();
37        self.caller = caller;
38        self.desc = desc;
39        self.content = content;
40    }
41}
42
43impl_content!(Picker, String);
44
45impl DrawMenu<String> for Picker {}