# Objective - Enable panels to show chevron and icon at the same time. - Closes #8661 ## Solution - Replaces `folder_icon` with a new `folder_indicator` which converts from a boolean to enum (`both`, `chevron`, `icon`) for the three display cases ## Testing - gpui and migration tests had been applied ## Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable ## Showcase ### project panel both | chevron | icon --- | --- | --- <img width="400" alt="both_project_panel" src="https://github.com/user-attachments/assets/4c21e1a1-a7a4-4471-b7de-fe867373ddbd" /> | <img width="400" alt="chevron_project_panel" src="https://github.com/user-attachments/assets/a626a82e-e5b7-470d-9d93-ed5787dc83d6" /> | <img width="400" alt="icon_project_panel" src="https://github.com/user-attachments/assets/20f9c55e-87c4-477a-b4c9-b070d6e5a1db" /> ### git panel both | chevron | icon --- | --- | --- <img width="400" alt="both_git_panel" src="https://github.com/user-attachments/assets/3dc166dd-9e63-4943-b803-df3f167876b6" /> | <img width="400" alt="chevron_git_panel" src="https://github.com/user-attachments/assets/8dfd2c10-3a68-439a-8019-4951b72e17d1" /> | <img width="400" alt="icon_git_panel" src="https://github.com/user-attachments/assets/d78a9938-91e7-4d39-a3c8-04647da67768" /> ### outline panel both | chevron | icon --- | --- | --- <img width="400" alt="both_outline_panel" src="https://github.com/user-attachments/assets/1b58c679-0bea-4600-a8ac-e800b0e8d24c" /> | <img width="400" alt="chevron_outline_panel" src="https://github.com/user-attachments/assets/0a9358e4-ec89-40d8-8d5e-a53b784ed30a" /> | <img width="400" alt="icon_outline_panel" src="https://github.com/user-attachments/assets/d8bf5199-5a8c-4de0-b516-00247e6531a5" /> --- Release Notes: - Added a `folder_indicator` setting that can show the disclosure chevron and folder icon at the same time in the project, outline, and git panels. --------- Co-authored-by: Kirill Bulatov <kirill@zed.dev>
88 lines
3.4 KiB
Rust
88 lines
3.4 KiB
Rust
use editor::{EditorSettings, ui_scrollbar_settings_from_raw};
|
|
use gpui::Pixels;
|
|
use schemars::JsonSchema;
|
|
use serde::{Deserialize, Serialize};
|
|
use settings::{
|
|
FolderIndicator, GitPanelClickBehavior, GitPanelGroupBy, GitPanelSortBy, IntoGpui,
|
|
RegisterSetting, Settings, StatusStyle,
|
|
};
|
|
use ui::scrollbars::{ScrollbarVisibility, ShowScrollbar};
|
|
use workspace::dock::DockPosition;
|
|
|
|
#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
|
|
pub struct ScrollbarSettings {
|
|
pub show: Option<ShowScrollbar>,
|
|
}
|
|
|
|
#[derive(Debug, Clone, PartialEq, RegisterSetting)]
|
|
pub struct GitPanelSettings {
|
|
pub button: bool,
|
|
pub dock: DockPosition,
|
|
pub default_width: Pixels,
|
|
pub status_style: StatusStyle,
|
|
pub file_icons: bool,
|
|
pub folder_indicator: FolderIndicator,
|
|
pub scrollbar: ScrollbarSettings,
|
|
pub fallback_branch_name: String,
|
|
pub sort_by: GitPanelSortBy,
|
|
pub group_by: GitPanelGroupBy,
|
|
pub collapse_untracked_diff: bool,
|
|
pub tree_view: bool,
|
|
pub diff_stats: bool,
|
|
pub show_count_badge: bool,
|
|
pub starts_open: bool,
|
|
pub commit_title_max_length: usize,
|
|
pub entry_primary_click_action: GitPanelClickBehavior,
|
|
}
|
|
|
|
#[derive(Default)]
|
|
pub(crate) struct GitPanelScrollbarAccessor;
|
|
|
|
impl ScrollbarVisibility for GitPanelScrollbarAccessor {
|
|
fn visibility(&self, cx: &ui::App) -> ShowScrollbar {
|
|
// TODO: This PR should have defined Editor's `scrollbar.axis`
|
|
// as an Option<ScrollbarAxis>, not a ScrollbarAxes as it would allow you to
|
|
// `.unwrap_or(EditorSettings::get_global(cx).scrollbar.show)`.
|
|
//
|
|
// Once this is fixed we can extend the GitPanelSettings with a `scrollbar.axis`
|
|
// so we can show each axis based on the settings.
|
|
//
|
|
// We should fix this. PR: https://github.com/zed-industries/zed/pull/19495
|
|
GitPanelSettings::get_global(cx)
|
|
.scrollbar
|
|
.show
|
|
.unwrap_or_else(|| EditorSettings::get_global(cx).scrollbar.show)
|
|
}
|
|
}
|
|
|
|
impl Settings for GitPanelSettings {
|
|
fn from_settings(content: &settings::SettingsContent) -> Self {
|
|
let git_panel = content.git_panel.clone().unwrap();
|
|
Self {
|
|
button: git_panel.button.unwrap(),
|
|
dock: git_panel.dock.unwrap().into(),
|
|
default_width: git_panel.default_width.unwrap().into_gpui(),
|
|
status_style: git_panel.status_style.unwrap(),
|
|
file_icons: git_panel.file_icons.unwrap(),
|
|
folder_indicator: git_panel.folder_indicator.unwrap(),
|
|
scrollbar: ScrollbarSettings {
|
|
show: git_panel
|
|
.scrollbar
|
|
.unwrap()
|
|
.show
|
|
.map(ui_scrollbar_settings_from_raw),
|
|
},
|
|
fallback_branch_name: git_panel.fallback_branch_name.unwrap(),
|
|
sort_by: git_panel.sort_by.unwrap(),
|
|
group_by: git_panel.group_by.unwrap(),
|
|
collapse_untracked_diff: git_panel.collapse_untracked_diff.unwrap(),
|
|
tree_view: git_panel.tree_view.unwrap(),
|
|
diff_stats: git_panel.diff_stats.unwrap(),
|
|
show_count_badge: git_panel.show_count_badge.unwrap(),
|
|
starts_open: git_panel.starts_open.unwrap(),
|
|
commit_title_max_length: git_panel.commit_title_max_length.unwrap(),
|
|
entry_primary_click_action: git_panel.entry_primary_click_action.unwrap(),
|
|
}
|
|
}
|
|
}
|