file_finder_settings.rs

 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}