Add checkmark to selected line ending

This commit is contained in:
Matin Aniss 2025-08-21 03:55:23 +10:00
parent c2ca755d0b
commit 42e3a6036f

View file

@ -56,8 +56,9 @@ impl LineEndingSelector {
} }
fn new(buffer: Entity<Buffer>, window: &mut Window, cx: &mut Context<Self>) -> Self { fn new(buffer: Entity<Buffer>, window: &mut Window, cx: &mut Context<Self>) -> Self {
let delegate = LineEndingSelectorDelegate::new(cx.entity().downgrade(), buffer); let line_ending = buffer.read(cx).line_ending();
let delegate =
LineEndingSelectorDelegate::new(cx.entity().downgrade(), buffer, line_ending);
let picker = cx.new(|cx| Picker::uniform_list(delegate, window, cx)); let picker = cx.new(|cx| Picker::uniform_list(delegate, window, cx));
Self { picker } Self { picker }
} }
@ -81,15 +82,21 @@ impl ModalView for LineEndingSelector {}
struct LineEndingSelectorDelegate { struct LineEndingSelectorDelegate {
line_ending_selector: WeakEntity<LineEndingSelector>, line_ending_selector: WeakEntity<LineEndingSelector>,
buffer: Entity<Buffer>, buffer: Entity<Buffer>,
line_ending: LineEnding,
matches: Vec<StringMatch>, matches: Vec<StringMatch>,
selected_index: usize, selected_index: usize,
} }
impl LineEndingSelectorDelegate { impl LineEndingSelectorDelegate {
fn new(line_ending_selector: WeakEntity<LineEndingSelector>, buffer: Entity<Buffer>) -> Self { fn new(
line_ending_selector: WeakEntity<LineEndingSelector>,
buffer: Entity<Buffer>,
line_ending: LineEnding,
) -> Self {
Self { Self {
line_ending_selector, line_ending_selector,
buffer, buffer,
line_ending,
matches: vec![], matches: vec![],
selected_index: 0, selected_index: 0,
} }
@ -202,17 +209,26 @@ impl PickerDelegate for LineEndingSelectorDelegate {
_: &mut Context<Picker<Self>>, _: &mut Context<Picker<Self>>,
) -> Option<Self::ListItem> { ) -> Option<Self::ListItem> {
let mat = &self.matches[ix]; let mat = &self.matches[ix];
let label = match mat.candidate_id { let line_ending = match mat.candidate_id {
0 => "LF", 0 => LineEnding::Unix,
1 => "CRLF", 1 => LineEnding::Windows,
_ => unreachable!(), _ => unreachable!(),
}; };
Some( let label = match line_ending {
ListItem::new(ix) LineEnding::Unix => "LF",
.inset(true) LineEnding::Windows => "CRLF",
.spacing(ListItemSpacing::Sparse) };
.toggle_state(selected)
.child(HighlightedLabel::new(label, mat.positions.clone())), let mut list_item = ListItem::new(ix)
) .inset(true)
.spacing(ListItemSpacing::Sparse)
.toggle_state(selected)
.child(HighlightedLabel::new(label, mat.positions.clone()));
if self.line_ending == line_ending {
list_item = list_item.end_slot(Icon::new(IconName::Check).color(Color::Muted));
}
Some(list_item)
} }
} }