keybinding.rs

 1use itertools::Itertools;
 2use strum::IntoEnumIterator;
 3use ui::prelude::*;
 4use ui::{Keybinding, ModifierKey, ModifierKeys};
 5
 6use crate::story::Story;
 7
 8#[derive(Element, Default)]
 9pub struct KeybindingStory {}
10
11impl KeybindingStory {
12    fn render<V: 'static>(&mut self, _: &mut V, cx: &mut ViewContext<V>) -> impl IntoElement<V> {
13        let all_modifier_permutations = ModifierKey::iter().permutations(2);
14
15        Story::container(cx)
16            .child(Story::title_for::<_, Keybinding>(cx))
17            .child(Story::label(cx, "Single Key"))
18            .child(Keybinding::new("Z".to_string(), ModifierKeys::new()))
19            .child(Story::label(cx, "Single Key with Modifier"))
20            .child(
21                div()
22                    .flex()
23                    .gap_3()
24                    .children(ModifierKey::iter().map(|modifier| {
25                        Keybinding::new("C".to_string(), ModifierKeys::new().add(modifier))
26                    })),
27            )
28            .child(Story::label(cx, "Single Key with Modifier (Permuted)"))
29            .child(
30                div().flex().flex_col().children(
31                    all_modifier_permutations
32                        .chunks(4)
33                        .into_iter()
34                        .map(|chunk| {
35                            div()
36                                .flex()
37                                .gap_4()
38                                .py_3()
39                                .children(chunk.map(|permutation| {
40                                    let mut modifiers = ModifierKeys::new();
41
42                                    for modifier in permutation {
43                                        modifiers = modifiers.add(modifier);
44                                    }
45
46                                    Keybinding::new("X".to_string(), modifiers)
47                                }))
48                        }),
49                ),
50            )
51            .child(Story::label(cx, "Single Key with All Modifiers"))
52            .child(Keybinding::new("Z".to_string(), ModifierKeys::all()))
53            .child(Story::label(cx, "Chord"))
54            .child(Keybinding::new_chord(
55                ("A".to_string(), ModifierKeys::new()),
56                ("Z".to_string(), ModifierKeys::new()),
57            ))
58            .child(Story::label(cx, "Chord with Modifier"))
59            .child(Keybinding::new_chord(
60                ("A".to_string(), ModifierKeys::new().control(true)),
61                ("Z".to_string(), ModifierKeys::new().shift(true)),
62            ))
63    }
64}