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