Add checkmark to selected line ending
This commit is contained in:
parent
c2ca755d0b
commit
42e3a6036f
1 changed files with 29 additions and 13 deletions
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue