From 0ccb4a50e6b952ccf2b25e506521fc6c028889f2 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Wed, 10 May 2023 16:52:10 +0200 Subject: [PATCH] Create more specific dock position settings associated with each panel --- crates/project_panel/src/project_panel.rs | 17 ++++++++++---- crates/settings/src/settings.rs | 27 ++++++++++++++-------- crates/terminal_view/src/terminal_panel.rs | 18 +++++++++++---- crates/workspace/src/dock.rs | 20 ---------------- 4 files changed, 44 insertions(+), 38 deletions(-) diff --git a/crates/project_panel/src/project_panel.rs b/crates/project_panel/src/project_panel.rs index 4c75035c83..14779f9b6f 100644 --- a/crates/project_panel/src/project_panel.rs +++ b/crates/project_panel/src/project_panel.rs @@ -1347,12 +1347,15 @@ impl Entity for ProjectPanel { impl workspace::dock::Panel for ProjectPanel { fn position(&self, cx: &gpui::WindowContext) -> DockPosition { let settings = cx.global::(); - settings + let dock = settings .project_panel_overrides .dock .or(settings.project_panel_defaults.dock) - .unwrap() - .into() + .unwrap(); + match dock { + settings::ProjectPanelDockPosition::Left => DockPosition::Left, + settings::ProjectPanelDockPosition::Right => DockPosition::Right, + } } fn position_is_valid(&self, position: DockPosition) -> bool { @@ -1361,7 +1364,13 @@ impl workspace::dock::Panel for ProjectPanel { fn set_position(&mut self, position: DockPosition, cx: &mut ViewContext) { SettingsFile::update(cx, move |settings| { - settings.project_panel.dock = Some(position.into()) + let dock = match position { + DockPosition::Left | DockPosition::Bottom => { + settings::ProjectPanelDockPosition::Left + } + DockPosition::Right => settings::ProjectPanelDockPosition::Right, + }; + settings.project_panel.dock = Some(dock); }) } diff --git a/crates/settings/src/settings.rs b/crates/settings/src/settings.rs index 3bd3786071..67acd12939 100644 --- a/crates/settings/src/settings.rs +++ b/crates/settings/src/settings.rs @@ -131,14 +131,6 @@ impl TelemetrySettings { } } -#[derive(Clone, Copy, Debug, Serialize, Deserialize, JsonSchema, Eq, PartialEq)] -#[serde(rename_all = "lowercase")] -pub enum DockPosition { - Left, - Right, - Bottom, -} - #[derive(Clone, Debug, Default)] pub struct CopilotSettings { pub disabled_globs: Vec, @@ -168,7 +160,14 @@ pub struct GitGutterConfig {} #[derive(Clone, Debug, Default, Serialize, Deserialize, JsonSchema)] pub struct ProjectPanelSettings { - pub dock: Option, + pub dock: Option, +} + +#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema)] +#[serde(rename_all = "lowercase")] +pub enum ProjectPanelDockPosition { + Left, + Right, } #[derive(Clone, Debug, Default, Serialize, Deserialize, JsonSchema)] @@ -265,7 +264,15 @@ pub struct TerminalSettings { pub alternate_scroll: Option, pub option_as_meta: Option, pub copy_on_select: Option, - pub dock: Option, + pub dock: Option, +} + +#[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq, JsonSchema)] +#[serde(rename_all = "lowercase")] +pub enum TerminalDockPosition { + Left, + Bottom, + Right, } #[derive(Clone, Debug, Serialize, Deserialize, PartialEq, JsonSchema, Default)] diff --git a/crates/terminal_view/src/terminal_panel.rs b/crates/terminal_view/src/terminal_panel.rs index 4e90a8fec4..5d4099c446 100644 --- a/crates/terminal_view/src/terminal_panel.rs +++ b/crates/terminal_view/src/terminal_panel.rs @@ -4,7 +4,7 @@ use gpui::{ WeakViewHandle, }; use project::Project; -use settings::{settings_file::SettingsFile, Settings, WorkingDirectory}; +use settings::{settings_file::SettingsFile, Settings, TerminalDockPosition, WorkingDirectory}; use util::ResultExt; use workspace::{ dock::{DockPosition, Panel}, @@ -151,12 +151,17 @@ impl View for TerminalPanel { impl Panel for TerminalPanel { fn position(&self, cx: &gpui::WindowContext) -> DockPosition { let settings = cx.global::(); - settings + let dock = settings .terminal_overrides .dock .or(settings.terminal_defaults.dock) .unwrap() - .into() + .into(); + match dock { + settings::TerminalDockPosition::Left => DockPosition::Left, + settings::TerminalDockPosition::Bottom => DockPosition::Bottom, + settings::TerminalDockPosition::Right => DockPosition::Right, + } } fn position_is_valid(&self, _: DockPosition) -> bool { @@ -165,7 +170,12 @@ impl Panel for TerminalPanel { fn set_position(&mut self, position: DockPosition, cx: &mut ViewContext) { SettingsFile::update(cx, move |settings| { - settings.terminal.dock = Some(position.into()); + let dock = match position { + DockPosition::Left => TerminalDockPosition::Left, + DockPosition::Bottom => TerminalDockPosition::Bottom, + DockPosition::Right => TerminalDockPosition::Right, + }; + settings.terminal.dock = Some(dock); }); } diff --git a/crates/workspace/src/dock.rs b/crates/workspace/src/dock.rs index 0948140e8e..7413209874 100644 --- a/crates/workspace/src/dock.rs +++ b/crates/workspace/src/dock.rs @@ -95,26 +95,6 @@ pub enum DockPosition { Right, } -impl From for DockPosition { - fn from(value: settings::DockPosition) -> Self { - match value { - settings::DockPosition::Left => Self::Left, - settings::DockPosition::Bottom => Self::Bottom, - settings::DockPosition::Right => Self::Right, - } - } -} - -impl From for settings::DockPosition { - fn from(value: DockPosition) -> settings::DockPosition { - match value { - DockPosition::Left => settings::DockPosition::Left, - DockPosition::Bottom => settings::DockPosition::Bottom, - DockPosition::Right => settings::DockPosition::Right, - } - } -} - impl DockPosition { fn to_label(&self) -> &'static str { match self {