settings.rs

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