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