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.ui_scale = SettingValue::UserDefined(2.);
12    settings
13}
14
15#[derive(Clone)]
16pub enum SettingValue<T> {
17    UserDefined(T),
18    Default(T),
19}
20
21impl<T> Deref for SettingValue<T> {
22    type Target = T;
23
24    fn deref(&self) -> &Self::Target {
25        match self {
26            Self::UserDefined(value) => value,
27            Self::Default(value) => value,
28        }
29    }
30}
31
32#[derive(Clone)]
33pub struct TitlebarSettings {
34    pub show_project_owner: SettingValue<bool>,
35    pub show_git_status: SettingValue<bool>,
36    pub show_git_controls: SettingValue<bool>,
37}
38
39impl Default for TitlebarSettings {
40    fn default() -> Self {
41        Self {
42            show_project_owner: SettingValue::Default(true),
43            show_git_status: SettingValue::Default(true),
44            show_git_controls: SettingValue::Default(true),
45        }
46    }
47}
48
49// These should be merged into settings
50#[derive(Clone)]
51pub struct Settings {
52    pub default_panel_size: SettingValue<AbsoluteLength>,
53    pub list_disclosure_style: SettingValue<DisclosureControlStyle>,
54    pub list_indent_depth: SettingValue<AbsoluteLength>,
55    pub titlebar: TitlebarSettings,
56    pub ui_scale: SettingValue<f32>,
57}
58
59impl Default for Settings {
60    fn default() -> Self {
61        Self {
62            titlebar: TitlebarSettings::default(),
63            list_disclosure_style: SettingValue::Default(DisclosureControlStyle::ChevronOnHover),
64            list_indent_depth: SettingValue::Default(rems(0.3).into()),
65            default_panel_size: SettingValue::Default(rems(16.).into()),
66            ui_scale: SettingValue::Default(1.),
67        }
68    }
69}
70
71impl Settings {}