file_finder_settings.rs

 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}