Split git/project label into a flex row

This commit is contained in:
Piotr Osiewicz 2023-06-19 12:06:42 +02:00
parent ecd2129c2f
commit 91f2f31daa

View file

@ -17,7 +17,7 @@ use gpui::{
AppContext, Entity, ImageData, LayoutContext, ModelHandle, SceneBuilder, Subscription, View,
ViewContext, ViewHandle, WeakViewHandle,
};
use project::Project;
use project::{Project, RepositoryEntry};
use std::{ops::Range, sync::Arc};
use theme::{AvatarStyle, Theme};
use util::ResultExt;
@ -193,37 +193,16 @@ impl CollabTitlebarItem {
theme: Arc<Theme>,
cx: &ViewContext<Self>,
) -> AnyElement<Self> {
let names_and_branches = project.visible_worktrees(cx).map(|worktree| {
let mut names_and_branches = project.visible_worktrees(cx).map(|worktree| {
let worktree = worktree.read(cx);
(worktree.root_name(), worktree.root_git_entry())
});
fn push_str(buffer: &mut String, index: &mut usize, str: &str) {
buffer.push_str(str);
*index += str.chars().count();
}
let mut indices = Vec::new();
let mut index = 0;
let mut title = String::new();
let mut names_and_branches = names_and_branches.peekable();
while let Some((name, entry)) = names_and_branches.next() {
let pre_index = index;
push_str(&mut title, &mut index, name);
indices.extend((pre_index..index).into_iter());
if let Some(branch) = entry.and_then(|entry| entry.branch()) {
push_str(&mut title, &mut index, "/");
push_str(&mut title, &mut index, &branch);
}
if names_and_branches.peek().is_some() {
push_str(&mut title, &mut index, ", ");
if index >= MAX_TITLE_LENGTH {
title.push_str("");
break;
}
}
}
let (name, entry) = names_and_branches.next().unwrap_or(("", None));
let branch_prepended = entry
.as_ref()
.and_then(RepositoryEntry::branch)
.map(|branch| format!("/{branch}"));
let text_style = theme.workspace.titlebar.title.clone();
let item_spacing = theme.workspace.titlebar.item_spacing;
@ -234,14 +213,25 @@ impl CollabTitlebarItem {
text: text_style,
highlight_text: Some(highlight),
};
Label::new(title, style)
.with_highlights(indices)
.contained()
.with_margin_right(item_spacing)
.aligned()
.left()
.into_any_named("title-with-git-information")
let mut ret = Flex::row().with_child(
Label::new(name.to_owned(), style.clone())
.with_highlights((0..name.len()).into_iter().collect())
.contained()
.aligned()
.left()
.into_any_named("title-project-name"),
);
if let Some(git_branch) = branch_prepended {
ret = ret.with_child(
Label::new(git_branch, style)
.contained()
.with_margin_right(item_spacing)
.aligned()
.left()
.into_any_named("title-project-branch"),
)
}
ret.into_any()
}
fn window_activation_changed(&mut self, active: bool, cx: &mut ViewContext<Self>) {