1use editor::{EditorSettings, ui_scrollbar_settings_from_raw};
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
36#[derive(Default)]
37pub(crate) struct OutlinePanelSettingsScrollbarProxy;
38
39impl ScrollbarVisibility for OutlinePanelSettingsScrollbarProxy {
40 fn visibility(&self, cx: &App) -> ShowScrollbar {
41 OutlinePanelSettings::get_global(cx)
42 .scrollbar
43 .show
44 .unwrap_or_else(|| EditorSettings::get_global(cx).scrollbar.show)
45 }
46}
47
48impl Settings for OutlinePanelSettings {
49 fn from_settings(content: &settings::SettingsContent) -> Self {
50 let panel = content.outline_panel.as_ref().unwrap();
51 Self {
52 button: panel.button.unwrap(),
53 default_width: panel.default_width.map(gpui::px).unwrap(),
54 dock: panel.dock.unwrap(),
55 file_icons: panel.file_icons.unwrap(),
56 folder_icons: panel.folder_icons.unwrap(),
57 git_status: panel.git_status.unwrap()
58 && content
59 .git
60 .as_ref()
61 .unwrap()
62 .enabled
63 .unwrap()
64 .is_git_status_enabled(),
65 indent_size: panel.indent_size.unwrap(),
66 indent_guides: IndentGuidesSettings {
67 show: panel.indent_guides.unwrap().show.unwrap(),
68 },
69 auto_reveal_entries: panel.auto_reveal_entries.unwrap(),
70 auto_fold_dirs: panel.auto_fold_dirs.unwrap(),
71 scrollbar: ScrollbarSettings {
72 show: panel
73 .scrollbar
74 .unwrap()
75 .show
76 .map(ui_scrollbar_settings_from_raw),
77 },
78 expand_outlines_with_depth: panel.expand_outlines_with_depth.unwrap(),
79 }
80 }
81}