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 {}