settings.rs

 1use std::ops::Deref;
 2
 3use gpui3::{rems, AbsoluteLength};
 4
 5use crate::DisclosureControlStyle;
 6
 7// This is a fake static example of user settings overriding the default settings
 8pub fn user_settings() -> Settings {
 9    let mut settings = Settings::default();
10    settings.list_indent_depth = SettingValue::UserDefined(rems(0.5).into());
11    settings
12}
13
14#[derive(Clone)]
15pub enum SettingValue<T> {
16    UserDefined(T),
17    Default(T),
18}
19
20impl<T> Deref for SettingValue<T> {
21    type Target = T;
22
23    fn deref(&self) -> &Self::Target {
24        match self {
25            Self::UserDefined(value) => value,
26            Self::Default(value) => value,
27        }
28    }
29}
30
31#[derive(Clone)]
32pub struct TitlebarSettings {
33    pub show_project_owner: SettingValue<bool>,
34    pub show_git_status: SettingValue<bool>,
35    pub show_git_controls: SettingValue<bool>,
36}
37
38impl Default for TitlebarSettings {
39    fn default() -> Self {
40        Self {
41            show_project_owner: SettingValue::Default(true),
42            show_git_status: SettingValue::Default(true),
43            show_git_controls: SettingValue::Default(true),
44        }
45    }
46}
47
48// These should be merged into settings
49#[derive(Clone)]
50pub struct Settings {
51    pub default_panel_size: SettingValue<AbsoluteLength>,
52    pub list_disclosure_style: SettingValue<DisclosureControlStyle>,
53    pub list_indent_depth: SettingValue<AbsoluteLength>,
54    pub titlebar: TitlebarSettings,
55    pub ui_scale: SettingValue<f32>,
56}
57
58impl Default for Settings {
59    fn default() -> Self {
60        Self {
61            titlebar: TitlebarSettings::default(),
62            list_disclosure_style: SettingValue::Default(DisclosureControlStyle::ChevronOnHover),
63            list_indent_depth: SettingValue::Default(rems(0.3).into()),
64            default_panel_size: SettingValue::Default(rems(16.).into()),
65            ui_scale: SettingValue::Default(1.),
66        }
67    }
68}
69
70impl Settings {}