nuke old settings UI controls

Ben Kunkle created

Change summary

crates/settings_ui/src/appearance_settings_controls.rs | 387 ------------
crates/settings_ui/src/settings_ui.rs                  |  28 
2 files changed, 415 deletions(-)

Detailed changes

crates/settings_ui/src/appearance_settings_controls.rs 🔗

@@ -1,387 +0,0 @@
-use std::sync::Arc;
-
-use gpui::{App, FontFeatures, FontWeight};
-use settings::{EditableSettingControl, Settings};
-use theme::{
-    FontFamilyCache, FontFamilyName, SystemAppearance, ThemeMode, ThemeRegistry, ThemeSettings,
-};
-use ui::{
-    CheckboxWithLabel, ContextMenu, DropdownMenu, NumericStepper, SettingsContainer, SettingsGroup,
-    ToggleButton, prelude::*,
-};
-
-#[derive(IntoElement)]
-pub struct AppearanceSettingsControls {}
-
-impl AppearanceSettingsControls {
-    pub fn new() -> Self {
-        Self {}
-    }
-}
-
-impl RenderOnce for AppearanceSettingsControls {
-    fn render(self, _window: &mut Window, _cx: &mut App) -> impl IntoElement {
-        SettingsContainer::new()
-            .child(
-                SettingsGroup::new("Theme").child(
-                    h_flex()
-                        .gap_2()
-                        .justify_between()
-                        .child(ThemeControl)
-                        .child(ThemeModeControl),
-                ),
-            )
-            .child(
-                SettingsGroup::new("Font")
-                    .child(
-                        h_flex()
-                            .gap_2()
-                            .justify_between()
-                            .child(UiFontFamilyControl)
-                            .child(UiFontWeightControl),
-                    )
-                    .child(UiFontSizeControl)
-                    .child(UiFontLigaturesControl),
-            )
-    }
-}
-
-#[derive(IntoElement)]
-struct ThemeControl;
-
-impl EditableSettingControl for ThemeControl {
-    type Value = String;
-    type Settings = ThemeSettings;
-
-    fn name(&self) -> SharedString {
-        "Theme".into()
-    }
-
-    fn read(cx: &App) -> Self::Value {
-        let settings = ThemeSettings::get_global(cx);
-        let appearance = SystemAppearance::global(cx);
-        settings
-            .theme_selection
-            .as_ref()
-            .map(|selection| selection.theme(appearance.0).to_string())
-            .unwrap_or_else(|| ThemeSettings::default_theme(*appearance).to_string())
-    }
-
-    fn apply(
-        settings: &mut <Self::Settings as Settings>::FileContent,
-        value: Self::Value,
-        cx: &App,
-    ) {
-        let appearance = SystemAppearance::global(cx);
-        settings.set_theme(value, appearance.0);
-    }
-}
-
-impl RenderOnce for ThemeControl {
-    fn render(self, window: &mut Window, cx: &mut App) -> impl IntoElement {
-        let value = Self::read(cx);
-
-        DropdownMenu::new(
-            "theme",
-            value,
-            ContextMenu::build(window, cx, |mut menu, _, cx| {
-                let theme_registry = ThemeRegistry::global(cx);
-
-                for theme in theme_registry.list_names() {
-                    menu = menu.custom_entry(
-                        {
-                            let theme = theme.clone();
-                            move |_window, _cx| Label::new(theme.clone()).into_any_element()
-                        },
-                        {
-                            let theme = theme.clone();
-                            move |_window, cx| {
-                                Self::write(theme.to_string(), cx);
-                            }
-                        },
-                    )
-                }
-
-                menu
-            }),
-        )
-        .full_width(true)
-    }
-}
-
-#[derive(IntoElement)]
-struct ThemeModeControl;
-
-impl EditableSettingControl for ThemeModeControl {
-    type Value = ThemeMode;
-    type Settings = ThemeSettings;
-
-    fn name(&self) -> SharedString {
-        "Theme Mode".into()
-    }
-
-    fn read(cx: &App) -> Self::Value {
-        let settings = ThemeSettings::get_global(cx);
-        settings
-            .theme_selection
-            .as_ref()
-            .and_then(|selection| selection.mode())
-            .unwrap_or_default()
-    }
-
-    fn apply(
-        settings: &mut <Self::Settings as Settings>::FileContent,
-        value: Self::Value,
-        _cx: &App,
-    ) {
-        settings.set_mode(value);
-    }
-}
-
-impl RenderOnce for ThemeModeControl {
-    fn render(self, _window: &mut Window, cx: &mut App) -> impl IntoElement {
-        let value = Self::read(cx);
-
-        h_flex()
-            .child(
-                ToggleButton::new("light", "Light")
-                    .style(ButtonStyle::Filled)
-                    .size(ButtonSize::Large)
-                    .toggle_state(value == ThemeMode::Light)
-                    .on_click(|_, _, cx| Self::write(ThemeMode::Light, cx))
-                    .first(),
-            )
-            .child(
-                ToggleButton::new("system", "System")
-                    .style(ButtonStyle::Filled)
-                    .size(ButtonSize::Large)
-                    .toggle_state(value == ThemeMode::System)
-                    .on_click(|_, _, cx| Self::write(ThemeMode::System, cx))
-                    .middle(),
-            )
-            .child(
-                ToggleButton::new("dark", "Dark")
-                    .style(ButtonStyle::Filled)
-                    .size(ButtonSize::Large)
-                    .toggle_state(value == ThemeMode::Dark)
-                    .on_click(|_, _, cx| Self::write(ThemeMode::Dark, cx))
-                    .last(),
-            )
-    }
-}
-
-#[derive(IntoElement)]
-struct UiFontFamilyControl;
-
-impl EditableSettingControl for UiFontFamilyControl {
-    type Value = SharedString;
-    type Settings = ThemeSettings;
-
-    fn name(&self) -> SharedString {
-        "UI Font Family".into()
-    }
-
-    fn read(cx: &App) -> Self::Value {
-        let settings = ThemeSettings::get_global(cx);
-        settings.ui_font.family.clone()
-    }
-
-    fn apply(
-        settings: &mut <Self::Settings as Settings>::FileContent,
-        value: Self::Value,
-        _cx: &App,
-    ) {
-        settings.ui_font_family = Some(FontFamilyName(value.into()));
-    }
-}
-
-impl RenderOnce for UiFontFamilyControl {
-    fn render(self, window: &mut Window, cx: &mut App) -> impl IntoElement {
-        let value = Self::read(cx);
-
-        h_flex()
-            .gap_2()
-            .child(Icon::new(IconName::Font))
-            .child(DropdownMenu::new(
-                "ui-font-family",
-                value,
-                ContextMenu::build(window, cx, |mut menu, _, cx| {
-                    let font_family_cache = FontFamilyCache::global(cx);
-
-                    for font_name in font_family_cache.list_font_families(cx) {
-                        menu = menu.custom_entry(
-                            {
-                                let font_name = font_name.clone();
-                                move |_window, _cx| Label::new(font_name.clone()).into_any_element()
-                            },
-                            {
-                                let font_name = font_name.clone();
-                                move |_window, cx| {
-                                    Self::write(font_name.clone(), cx);
-                                }
-                            },
-                        )
-                    }
-
-                    menu
-                }),
-            ))
-    }
-}
-
-#[derive(IntoElement)]
-struct UiFontSizeControl;
-
-impl EditableSettingControl for UiFontSizeControl {
-    type Value = Pixels;
-    type Settings = ThemeSettings;
-
-    fn name(&self) -> SharedString {
-        "UI Font Size".into()
-    }
-
-    fn read(cx: &App) -> Self::Value {
-        ThemeSettings::get_global(cx).ui_font_size(cx)
-    }
-
-    fn apply(
-        settings: &mut <Self::Settings as Settings>::FileContent,
-        value: Self::Value,
-        _cx: &App,
-    ) {
-        settings.ui_font_size = Some(value.into());
-    }
-}
-
-impl RenderOnce for UiFontSizeControl {
-    fn render(self, _window: &mut Window, cx: &mut App) -> impl IntoElement {
-        let value = Self::read(cx);
-
-        h_flex()
-            .gap_2()
-            .child(Icon::new(IconName::FontSize))
-            .child(NumericStepper::new(
-                "ui-font-size",
-                value.to_string(),
-                move |_, _, cx| {
-                    Self::write(value - px(1.), cx);
-                },
-                move |_, _, cx| {
-                    Self::write(value + px(1.), cx);
-                },
-            ))
-    }
-}
-
-#[derive(IntoElement)]
-struct UiFontWeightControl;
-
-impl EditableSettingControl for UiFontWeightControl {
-    type Value = FontWeight;
-    type Settings = ThemeSettings;
-
-    fn name(&self) -> SharedString {
-        "UI Font Weight".into()
-    }
-
-    fn read(cx: &App) -> Self::Value {
-        let settings = ThemeSettings::get_global(cx);
-        settings.ui_font.weight
-    }
-
-    fn apply(
-        settings: &mut <Self::Settings as Settings>::FileContent,
-        value: Self::Value,
-        _cx: &App,
-    ) {
-        settings.ui_font_weight = Some(value.0);
-    }
-}
-
-impl RenderOnce for UiFontWeightControl {
-    fn render(self, window: &mut Window, cx: &mut App) -> impl IntoElement {
-        let value = Self::read(cx);
-
-        h_flex()
-            .gap_2()
-            .child(Icon::new(IconName::FontWeight))
-            .child(DropdownMenu::new(
-                "ui-font-weight",
-                value.0.to_string(),
-                ContextMenu::build(window, cx, |mut menu, _window, _cx| {
-                    for weight in FontWeight::ALL {
-                        menu = menu.custom_entry(
-                            move |_window, _cx| Label::new(weight.0.to_string()).into_any_element(),
-                            {
-                                move |_window, cx| {
-                                    Self::write(weight, cx);
-                                }
-                            },
-                        )
-                    }
-
-                    menu
-                }),
-            ))
-    }
-}
-
-#[derive(IntoElement)]
-struct UiFontLigaturesControl;
-
-impl EditableSettingControl for UiFontLigaturesControl {
-    type Value = bool;
-    type Settings = ThemeSettings;
-
-    fn name(&self) -> SharedString {
-        "UI Font Ligatures".into()
-    }
-
-    fn read(cx: &App) -> Self::Value {
-        let settings = ThemeSettings::get_global(cx);
-        settings.ui_font.features.is_calt_enabled().unwrap_or(true)
-    }
-
-    fn apply(
-        settings: &mut <Self::Settings as Settings>::FileContent,
-        value: Self::Value,
-        _cx: &App,
-    ) {
-        let value = if value { 1 } else { 0 };
-
-        let mut features = settings
-            .ui_font_features
-            .as_ref()
-            .map(|features| features.tag_value_list().to_vec())
-            .unwrap_or_default();
-
-        if let Some(calt_index) = features.iter().position(|(tag, _)| tag == "calt") {
-            features[calt_index].1 = value;
-        } else {
-            features.push(("calt".into(), value));
-        }
-
-        settings.ui_font_features = Some(FontFeatures(Arc::new(features)));
-    }
-}
-
-impl RenderOnce for UiFontLigaturesControl {
-    fn render(self, _window: &mut Window, cx: &mut App) -> impl IntoElement {
-        let value = Self::read(cx);
-
-        CheckboxWithLabel::new(
-            "ui-font-ligatures",
-            Label::new(self.name()),
-            value.into(),
-            |selection, _, cx| {
-                Self::write(
-                    match selection {
-                        ToggleState::Selected => true,
-                        ToggleState::Unselected | ToggleState::Indeterminate => false,
-                    },
-                    cx,
-                );
-            },
-        )
-    }
-}

crates/settings_ui/src/settings_ui.rs 🔗

@@ -1,5 +1,3 @@
-mod appearance_settings_controls;
-
 use std::{
     num::NonZeroU32,
     ops::{Not, Range},
@@ -25,8 +23,6 @@ use workspace::{
     item::{Item, ItemEvent},
 };
 
-use crate::appearance_settings_controls::AppearanceSettingsControls;
-
 pub struct SettingsUiFeatureFlag;
 
 impl FeatureFlag for SettingsUiFeatureFlag {
@@ -581,30 +577,6 @@ impl Render for SettingsPage {
     }
 }
 
-// todo(settings_ui): remove, only here as inspiration
-#[allow(dead_code)]
-fn render_old_appearance_settings(cx: &mut App) -> impl IntoElement {
-    v_flex()
-        .p_4()
-        .size_full()
-        .gap_4()
-        .child(Label::new("Settings").size(LabelSize::Large))
-        .child(
-            v_flex().gap_1().child(Label::new("Appearance")).child(
-                v_flex()
-                    .elevation_2(cx)
-                    .child(AppearanceSettingsControls::new()),
-            ),
-        )
-        .child(
-            v_flex().gap_1().child(Label::new("Editor")).child(
-                v_flex()
-                    .elevation_2(cx)
-                    .child(EditorSettingsControls::new()),
-            ),
-        )
-}
-
 fn element_id_from_path(path: &[SharedString]) -> ElementId {
     if path.len() == 0 {
         panic!("Path length must not be zero");