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