keybinding.rs

 1use gpui::NoAction;
 2use gpui::Render;
 3use itertools::Itertools;
 4use story::Story;
 5
 6use crate::{KeyBinding, prelude::*};
 7
 8pub struct KeybindingStory;
 9
10pub fn binding(key: &str) -> gpui::KeyBinding {
11    gpui::KeyBinding::new(key, NoAction {}, None)
12}
13
14impl Render for KeybindingStory {
15    fn render(&mut self, _window: &mut Window, cx: &mut Context<Self>) -> impl IntoElement {
16        let all_modifier_permutations = ["ctrl", "alt", "cmd", "shift"].into_iter().permutations(2);
17
18        Story::container(cx)
19            .child(Story::title_for::<KeyBinding>(cx))
20            .child(Story::label("Single Key", cx))
21            .child(KeyBinding::new_from_gpui(binding("Z"), cx))
22            .child(Story::label("Single Key with Modifier", cx))
23            .child(
24                div()
25                    .flex()
26                    .gap_3()
27                    .child(KeyBinding::new_from_gpui(binding("ctrl-c"), cx))
28                    .child(KeyBinding::new_from_gpui(binding("alt-c"), cx))
29                    .child(KeyBinding::new_from_gpui(binding("cmd-c"), cx))
30                    .child(KeyBinding::new_from_gpui(binding("shift-c"), cx)),
31            )
32            .child(Story::label("Single Key with Modifier (Permuted)", cx))
33            .child(
34                div().flex().flex_col().children(
35                    all_modifier_permutations
36                        .chunks(4)
37                        .into_iter()
38                        .map(|chunk| {
39                            div()
40                                .flex()
41                                .gap_4()
42                                .py_3()
43                                .children(chunk.map(|permutation| {
44                                    KeyBinding::new_from_gpui(
45                                        binding(&(permutation.join("-") + "-x")),
46                                        cx,
47                                    )
48                                }))
49                        }),
50                ),
51            )
52            .child(Story::label("Single Key with All Modifiers", cx))
53            .child(KeyBinding::new_from_gpui(
54                binding("ctrl-alt-cmd-shift-z"),
55                cx,
56            ))
57            .child(Story::label("Chord", cx))
58            .child(KeyBinding::new_from_gpui(binding("a z"), cx))
59            .child(Story::label("Chord with Modifier", cx))
60            .child(KeyBinding::new_from_gpui(binding("ctrl-a shift-z"), cx))
61            .child(KeyBinding::new_from_gpui(binding("fn-s"), cx))
62            .child(Story::label("Single Key with All Modifiers (Linux)", cx))
63            .child(
64                KeyBinding::new_from_gpui(binding("ctrl-alt-cmd-shift-z"), cx)
65                    .platform_style(PlatformStyle::Linux),
66            )
67            .child(Story::label("Chord (Linux)", cx))
68            .child(
69                KeyBinding::new_from_gpui(binding("a z"), cx).platform_style(PlatformStyle::Linux),
70            )
71            .child(Story::label("Chord with Modifier (Linux)", cx))
72            .child(
73                KeyBinding::new_from_gpui(binding("ctrl-a shift-z"), cx)
74                    .platform_style(PlatformStyle::Linux),
75            )
76            .child(
77                KeyBinding::new_from_gpui(binding("fn-s"), cx).platform_style(PlatformStyle::Linux),
78            )
79            .child(Story::label("Single Key with All Modifiers (Windows)", cx))
80            .child(
81                KeyBinding::new_from_gpui(binding("ctrl-alt-cmd-shift-z"), cx)
82                    .platform_style(PlatformStyle::Windows),
83            )
84            .child(Story::label("Chord (Windows)", cx))
85            .child(
86                KeyBinding::new_from_gpui(binding("a z"), cx)
87                    .platform_style(PlatformStyle::Windows),
88            )
89            .child(Story::label("Chord with Modifier (Windows)", cx))
90            .child(
91                KeyBinding::new_from_gpui(binding("ctrl-a shift-z"), cx)
92                    .platform_style(PlatformStyle::Windows),
93            )
94            .child(
95                KeyBinding::new_from_gpui(binding("fn-s"), cx)
96                    .platform_style(PlatformStyle::Windows),
97            )
98    }
99}