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.unwrap(),
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    fn import_from_vscode(_vscode: &settings::VsCodeSettings, _current: &mut Self::FileContent) {}
41}
42
43#[derive(Debug, PartialEq, Eq, Clone, Copy, Default, Serialize, Deserialize, JsonSchema)]
44#[serde(rename_all = "lowercase")]
45pub enum FileFinderWidth {
46    #[default]
47    Small,
48    Medium,
49    Large,
50    XLarge,
51    Full,
52}
53
54impl From<settings::FileFinderWidthContent> for FileFinderWidth {
55    fn from(content: settings::FileFinderWidthContent) -> Self {
56        match content {
57            settings::FileFinderWidthContent::Small => FileFinderWidth::Small,
58            settings::FileFinderWidthContent::Medium => FileFinderWidth::Medium,
59            settings::FileFinderWidthContent::Large => FileFinderWidth::Large,
60            settings::FileFinderWidthContent::XLarge => FileFinderWidth::XLarge,
61            settings::FileFinderWidthContent::Full => FileFinderWidth::Full,
62        }
63    }
64}