Skip to main content

editor/
app.rs

1//! App-owned configuration.
2
3use gpui::App;
4
5/// Configuration carried by the application. Import as `use editor::AppExt as _;`.
6pub trait AppExt {
7    /// Reads editor layout.
8    fn editor_layout(&self) -> crate::Layout;
9
10    /// Reads editor text size.
11    fn editor_text_size(&self) -> crate::TextSize;
12
13    /// Configures editor layout.
14    fn set_editor_layout(&mut self, layout: crate::Layout);
15
16    /// Sets editor zoom steps and limits, not an individual editor’s base size.
17    fn set_editor_text_size(&mut self, text_size: crate::TextSize);
18
19    /// Installs the image store used when pasting pictures. Without one, a
20    /// screenshot cannot be pasted.
21    fn set_image_store(&mut self, store: crate::ImageStore);
22
23    /// Returns the installed image store, or the default that keeps nothing.
24    fn image_store(&self) -> crate::ImageStore;
25
26    /// Overrides clipboard paste; returning `None` keeps the default behavior.
27    /// File drops are not passed to this handler.
28    fn set_paste_handler(&mut self, handler: crate::PasteHandler);
29
30    /// Replaces the slash menu's items, which are [`crate::slash_defaults`]
31    /// until this is called.
32    fn set_slash_items(&mut self, items: Vec<crate::SlashItem>);
33
34    /// Replaces the block menu's items, which are
35    /// [`crate::block_menu_defaults`] until this is called.
36    fn set_block_menu_items(&mut self, items: Vec<crate::SlashItem>);
37
38    /// Replaces the glyphs the block and table handles paint, which are
39    /// [`crate::Handles::default`] until this is called.
40    fn set_handles(&mut self, handles: crate::Handles);
41
42    /// Installs what the menu `trigger` opens lists, in editors whose
43    /// [`crate::Chrome::mention`] is on. Replaces the source already installed
44    /// for `trigger`; sources for other characters stay.
45    fn set_mention_source(&mut self, trigger: char, source: crate::MentionSource);
46
47    /// Adjusts every open document by the given points and refreshes windows.
48    fn adjust_editor_text_size(&mut self, points: f32);
49
50    /// Resets the shared adjustment to zero and refreshes windows.
51    fn reset_editor_text_size(&mut self);
52
53    /// Returns the shared adjustment from each document’s base size, in points.
54    fn editor_text_size_adjustment(&self) -> f32;
55}
56
57impl AppExt for App {
58    fn editor_layout(&self) -> crate::Layout {
59        crate::layout::Layout::of(self)
60    }
61
62    fn editor_text_size(&self) -> crate::TextSize {
63        crate::text_size::TextSize::of(self)
64    }
65
66    fn set_editor_layout(&mut self, layout: crate::Layout) {
67        crate::layout::set_layout(self, layout)
68    }
69
70    fn set_editor_text_size(&mut self, text_size: crate::TextSize) {
71        crate::text_size::set_text_size(self, text_size)
72    }
73
74    fn set_image_store(&mut self, store: crate::ImageStore) {
75        crate::editor::image::set_image_store(self, store)
76    }
77
78    fn image_store(&self) -> crate::ImageStore {
79        crate::editor::image::store(self)
80    }
81
82    fn set_paste_handler(&mut self, handler: crate::PasteHandler) {
83        self.set_global(crate::paste::Installed(handler));
84    }
85
86    fn set_mention_source(&mut self, trigger: char, source: crate::MentionSource) {
87        let installed = &mut self.default_global::<crate::mention::Installed>().0;
88        installed.retain(|(installed, _)| *installed != trigger);
89        installed.push((trigger, source));
90    }
91
92    fn set_slash_items(&mut self, items: Vec<crate::SlashItem>) {
93        self.set_global(crate::slash::Installed(items));
94    }
95
96    fn set_block_menu_items(&mut self, items: Vec<crate::SlashItem>) {
97        self.set_global(crate::block_menu::Installed(items));
98    }
99
100    fn set_handles(&mut self, handles: crate::Handles) {
101        self.set_global(crate::handles::Installed(handles));
102    }
103
104    fn adjust_editor_text_size(&mut self, points: f32) {
105        crate::text_size::adjust_text_size(self, points)
106    }
107
108    fn reset_editor_text_size(&mut self) {
109        crate::text_size::reset_text_size(self)
110    }
111
112    fn editor_text_size_adjustment(&self) -> f32 {
113        crate::text_size::text_size_adjustment(self)
114    }
115}