diff options
-rw-r--r-- | src/interactive/app/eventloop.rs | 1 | ||||
-rw-r--r-- | src/interactive/widgets/mark.rs | 13 |
2 files changed, 12 insertions, 2 deletions
diff --git a/src/interactive/app/eventloop.rs b/src/interactive/app/eventloop.rs index adf0955..25c6ef2 100644 --- a/src/interactive/app/eventloop.rs +++ b/src/interactive/app/eventloop.rs @@ -30,6 +30,7 @@ pub type EntryMarkMap = BTreeMap<TreeIndex, EntryMark>; pub struct EntryMark { pub size: u64, pub path: PathBuf, + pub index: usize, } #[derive(Default)] diff --git a/src/interactive/widgets/mark.rs b/src/interactive/widgets/mark.rs index 8479741..7d50991 100644 --- a/src/interactive/widgets/mark.rs +++ b/src/interactive/widgets/mark.rs @@ -45,11 +45,19 @@ impl MarkPane { self.marked.remove(&index); } else { if let Some(e) = tree.node_weight(index) { + let sorting_index = self + .marked + .values() + .map(|v| v.index) + .max() + .unwrap_or(0) + .wrapping_add(1); self.marked.insert( index, EntryMark { size: e.size, path: path_of(tree, index), + index: sorting_index, }, ); } @@ -85,8 +93,9 @@ impl MarkPane { let MarkPaneProps { border_style } = props.borrow(); let marked: &_ = &self.marked; + let title = format!("Marked Entries: {}", marked.len()); let block = Block::default() - .title("Marked Entries") + .title(&title) .border_style(*border_style) .borders(Borders::ALL); let entry_in_view = self @@ -96,7 +105,7 @@ impl MarkPane { let selected = self.selected; let entries = marked .values() - .sorted_by_key(|v| &v.path) + .sorted_by_key(|v| &v.index) .enumerate() .map(|(idx, v)| { let modifier = match selected { |