1use anyhow::Result;
2use schemars::JsonSchema;
3use serde::{Deserialize, Serialize};
4use settings::Settings;
5use util::MergeFrom;
6
7#[derive(Deserialize, Debug, Clone, Copy, PartialEq)]
8pub struct FileFinderSettings {
9 pub file_icons: bool,
10 pub modal_max_width: FileFinderWidth,
11 pub skip_focus_for_active_in_search: bool,
12 pub include_ignored: Option<bool>,
13}
14
15impl Settings for FileFinderSettings {
16 fn from_defaults(content: &settings::SettingsContent, cx: &mut ui::App) -> Self {
17 let file_finder = content.file_finder.as_ref().unwrap();
18
19 Self {
20 file_icons: file_finder.file_icons.unwrap(),
21 modal_max_width: file_finder.modal_max_width.unwrap().into(),
22 skip_focus_for_active_in_search: file_finder.skip_focus_for_active_in_search.unwrap(),
23 include_ignored: file_finder.include_ignored.unwrap(),
24 }
25 }
26
27 fn refine(&mut self, content: &settings::SettingsContent, _cx: &mut ui::App) {
28 let Some(file_finder) = content.file_finder.as_ref() else {
29 return;
30 };
31
32 self.file_icons.merge_from(&file_finder.file_icons);
33 self.modal_max_width
34 .merge_from(&file_finder.modal_max_width.map(Into::into));
35 self.skip_focus_for_active_in_search
36 .merge_from(&file_finder.skip_focus_for_active_in_search);
37 self.include_ignored
38 .merge_from(&file_finder.include_ignored);
39 }
40
41 fn import_from_vscode(_vscode: &settings::VsCodeSettings, _current: &mut Self::FileContent) {}
42}
43
44#[derive(Debug, PartialEq, Eq, Clone, Copy, Default, Serialize, Deserialize, JsonSchema)]
45#[serde(rename_all = "lowercase")]
46pub enum FileFinderWidth {
47 #[default]
48 Small,
49 Medium,
50 Large,
51 XLarge,
52 Full,
53}
54
55impl From<settings::FileFinderWidthContent> for FileFinderWidth {
56 fn from(content: settings::FileFinderWidthContent) -> Self {
57 match content {
58 settings::FileFinderWidthContent::Small => FileFinderWidth::Small,
59 settings::FileFinderWidthContent::Medium => FileFinderWidth::Medium,
60 settings::FileFinderWidthContent::Large => FileFinderWidth::Large,
61 settings::FileFinderWidthContent::XLarge => FileFinderWidth::XLarge,
62 settings::FileFinderWidthContent::Full => FileFinderWidth::Full,
63 }
64 }
65}