outline_panel_settings.rs

 1use editor::EditorSettings;
 2use gpui::{App, Pixels};
 3use settings::RegisterSetting;
 4pub use settings::{DockSide, Settings, ShowIndentGuides};
 5use ui::scrollbars::{ScrollbarVisibility, ShowScrollbar};
 6
 7#[derive(Debug, Clone, Copy, PartialEq, RegisterSetting)]
 8pub struct OutlinePanelSettings {
 9    pub button: bool,
10    pub default_width: Pixels,
11    pub dock: DockSide,
12    pub file_icons: bool,
13    pub folder_icons: bool,
14    pub git_status: bool,
15    pub indent_size: f32,
16    pub indent_guides: IndentGuidesSettings,
17    pub auto_reveal_entries: bool,
18    pub auto_fold_dirs: bool,
19    pub scrollbar: ScrollbarSettings,
20    pub expand_outlines_with_depth: usize,
21}
22
23#[derive(Copy, Clone, Debug, PartialEq, Eq)]
24pub struct ScrollbarSettings {
25    /// When to show the scrollbar in the project panel.
26    ///
27    /// Default: inherits editor scrollbar settings
28    pub show: Option<ShowScrollbar>,
29}
30
31#[derive(Copy, Clone, Debug, PartialEq, Eq)]
32pub struct IndentGuidesSettings {
33    pub show: ShowIndentGuides,
34}
35
36impl ScrollbarVisibility for OutlinePanelSettings {
37    fn visibility(&self, cx: &App) -> ShowScrollbar {
38        self.scrollbar
39            .show
40            .unwrap_or_else(|| EditorSettings::get_global(cx).scrollbar.show)
41    }
42}
43
44impl Settings for OutlinePanelSettings {
45    fn from_settings(content: &settings::SettingsContent) -> Self {
46        let panel = content.outline_panel.as_ref().unwrap();
47        Self {
48            button: panel.button.unwrap(),
49            default_width: panel.default_width.map(gpui::px).unwrap(),
50            dock: panel.dock.unwrap(),
51            file_icons: panel.file_icons.unwrap(),
52            folder_icons: panel.folder_icons.unwrap(),
53            git_status: panel.git_status.unwrap(),
54            indent_size: panel.indent_size.unwrap(),
55            indent_guides: IndentGuidesSettings {
56                show: panel.indent_guides.unwrap().show.unwrap(),
57            },
58            auto_reveal_entries: panel.auto_reveal_entries.unwrap(),
59            auto_fold_dirs: panel.auto_fold_dirs.unwrap(),
60            scrollbar: ScrollbarSettings {
61                show: panel.scrollbar.unwrap().show.map(Into::into),
62            },
63            expand_outlines_with_depth: panel.expand_outlines_with_depth.unwrap(),
64        }
65    }
66}