diff options
| author | lukeflo | 2024-10-21 12:26:44 +0200 |
|---|---|---|
| committer | lukeflo | 2024-10-21 12:26:44 +0200 |
| commit | 4337f1c8524b3774a9b10ea41543cc89ae7fb5a9 (patch) | |
| tree | 482ae156d760354c9ddebe2d2ab6a9833ae53e84 | |
| parent | 23461438ad1ef51cfabf76e1530574e8bac28faa (diff) | |
| download | bibiman-4337f1c8524b3774a9b10ea41543cc89ae7fb5a9.tar.gz bibiman-4337f1c8524b3774a9b10ea41543cc89ae7fb5a9.zip | |
fix sorting
| -rw-r--r-- | Cargo.toml | 2 | ||||
| -rw-r--r-- | src/frontend/entries.rs | 18 | ||||
| -rw-r--r-- | src/frontend/ui.rs | 165 |
3 files changed, 108 insertions, 77 deletions
@@ -1,6 +1,6 @@ [package] name = "bibiman" -version = "0.4.2" +version = "0.4.3" authors = ["lukeflo <lukeflo@some.email.not>"] license = "GPL-3.0-or-later" edition = "2021" diff --git a/src/frontend/entries.rs b/src/frontend/entries.rs index d5b0d8c..7883a17 100644 --- a/src/frontend/entries.rs +++ b/src/frontend/entries.rs @@ -24,7 +24,7 @@ use editor_command::EditorBuilder; use ratatui::widgets::{ScrollbarState, TableState}; use std::process::{Command, Stdio}; -#[derive(Debug)] +#[derive(Debug, Clone, PartialEq, Eq)] pub enum EntryTableColumn { Authors, Title, @@ -33,11 +33,12 @@ pub enum EntryTableColumn { } // Define list containing entries as table -#[derive(Debug)] +#[derive(Debug, PartialEq, Eq)] pub struct EntryTable { pub entry_table_items: Vec<EntryTableItem>, pub entry_table_at_search_start: Vec<EntryTableItem>, pub entry_table_selected_column: EntryTableColumn, + pub entry_table_sorted_by_col: EntryTableColumn, pub entry_table_reversed_sort: bool, pub entry_table_state: TableState, pub entry_scroll_state: ScrollbarState, @@ -55,6 +56,7 @@ impl EntryTable { entry_table_items, entry_table_at_search_start: Vec::new(), entry_table_selected_column: EntryTableColumn::Authors, + entry_table_sorted_by_col: EntryTableColumn::Authors, entry_table_reversed_sort: false, entry_table_state, entry_scroll_state, @@ -90,6 +92,10 @@ impl EntryTable { if toggle { self.entry_table_reversed_sort = !self.entry_table_reversed_sort; } + if self.entry_table_selected_column != self.entry_table_sorted_by_col { + self.entry_table_reversed_sort = false + } + self.entry_table_sorted_by_col = self.entry_table_selected_column.clone(); if self.entry_table_reversed_sort { match self.entry_table_selected_column { EntryTableColumn::Authors => self @@ -248,19 +254,15 @@ impl App { match self.entry_table.entry_table_selected_column { EntryTableColumn::Authors => { self.entry_table.entry_table_selected_column = EntryTableColumn::Title; - self.entry_table.sort_entry_table(false); } EntryTableColumn::Title => { self.entry_table.entry_table_selected_column = EntryTableColumn::Year; - self.entry_table.sort_entry_table(false); } EntryTableColumn::Year => { self.entry_table.entry_table_selected_column = EntryTableColumn::Pubtype; - self.entry_table.sort_entry_table(false); } EntryTableColumn::Pubtype => { self.entry_table.entry_table_selected_column = EntryTableColumn::Authors; - self.entry_table.sort_entry_table(false); } } } @@ -269,19 +271,15 @@ impl App { match self.entry_table.entry_table_selected_column { EntryTableColumn::Authors => { self.entry_table.entry_table_selected_column = EntryTableColumn::Pubtype; - self.entry_table.sort_entry_table(false); } EntryTableColumn::Title => { self.entry_table.entry_table_selected_column = EntryTableColumn::Authors; - self.entry_table.sort_entry_table(false); } EntryTableColumn::Year => { self.entry_table.entry_table_selected_column = EntryTableColumn::Title; - self.entry_table.sort_entry_table(false); } EntryTableColumn::Pubtype => { self.entry_table.entry_table_selected_column = EntryTableColumn::Year; - self.entry_table.sort_entry_table(false); } } } diff --git a/src/frontend/ui.rs b/src/frontend/ui.rs index d4fbba1..59a07f3 100644 --- a/src/frontend/ui.rs +++ b/src/frontend/ui.rs @@ -228,11 +228,8 @@ impl App { .right_aligned() .bg(HEADER_FOOTER_BG) .render(count_area, buf); - // Paragraph::new(Line::from(vec![Span::raw( - // self.main_bibfile.display().to_string(), - // )])) - // .block(block) - // .render(area, buf); + + // Render that stuff Widget::render(block, area, buf) } @@ -266,67 +263,103 @@ impl App { .fg(TEXT_FG_COLOR) .bg(HEADER_FOOTER_BG); + let header_selected_col = Style::default().underlined(); + let header = Row::new(vec![ - if let EntryTableColumn::Authors = self.entry_table.entry_table_selected_column { - Cell::from(Line::from(vec![ - Span::raw("Author").underlined(), - Span::raw(format!( - " {}", - if self.entry_table.entry_table_reversed_sort { - SORTED_ENTRIES_REVERSED - } else { - SORTED_ENTRIES - } - )), - ])) - } else { - Cell::from("Author".to_string()) - }, - if let EntryTableColumn::Title = self.entry_table.entry_table_selected_column { - Cell::from(Line::from(vec![ - Span::raw("Title").underlined(), - Span::raw(format!( - " {}", - if self.entry_table.entry_table_reversed_sort { - SORTED_ENTRIES_REVERSED - } else { - SORTED_ENTRIES - } - )), - ])) - } else { - Cell::from("Title".to_string()) - }, - if let EntryTableColumn::Year = self.entry_table.entry_table_selected_column { - Cell::from(Line::from(vec![ - Span::raw("Year").underlined(), - Span::raw(format!( - " {}", - if self.entry_table.entry_table_reversed_sort { - SORTED_ENTRIES_REVERSED - } else { - SORTED_ENTRIES - } - )), - ])) - } else { - Cell::from("Year".to_string()) - }, - if let EntryTableColumn::Pubtype = self.entry_table.entry_table_selected_column { - Cell::from(Line::from(vec![ - Span::raw("Pubtype").underlined(), - Span::raw(format!( - " {}", - if self.entry_table.entry_table_reversed_sort { - SORTED_ENTRIES_REVERSED - } else { - SORTED_ENTRIES - } - )), - ])) - } else { - Cell::from("Pubtype".to_string()) - }, + Cell::from(Line::from(vec![ + { + if let EntryTableColumn::Authors = self.entry_table.entry_table_selected_column + { + Span::styled("Author", header_selected_col) + } else { + Span::raw("Author") + } + }, + { + if let EntryTableColumn::Authors = self.entry_table.entry_table_sorted_by_col { + Span::raw(format!( + " {}", + if self.entry_table.entry_table_reversed_sort { + SORTED_ENTRIES_REVERSED + } else { + SORTED_ENTRIES + } + )) + } else { + Span::raw("") + } + }, + ])), + Cell::from(Line::from(vec![ + { + if let EntryTableColumn::Title = self.entry_table.entry_table_selected_column { + Span::styled("Title", header_selected_col) + } else { + Span::raw("Title") + } + }, + { + if let EntryTableColumn::Title = self.entry_table.entry_table_sorted_by_col { + Span::raw(format!( + " {}", + if self.entry_table.entry_table_reversed_sort { + SORTED_ENTRIES_REVERSED + } else { + SORTED_ENTRIES + } + )) + } else { + Span::raw("") + } + }, + ])), + Cell::from(Line::from(vec![ + { + if let EntryTableColumn::Year = self.entry_table.entry_table_selected_column { + Span::styled("Year", header_selected_col) + } else { + Span::raw("Year") + } + }, + { + if let EntryTableColumn::Year = self.entry_table.entry_table_sorted_by_col { + Span::raw(format!( + " {}", + if self.entry_table.entry_table_reversed_sort { + SORTED_ENTRIES_REVERSED + } else { + SORTED_ENTRIES + } + )) + } else { + Span::raw("") + } + }, + ])), + Cell::from(Line::from(vec![ + { + if let EntryTableColumn::Pubtype = self.entry_table.entry_table_selected_column + { + Span::styled("Pubtype", header_selected_col) + } else { + Span::raw("Pubtype") + } + }, + { + if let EntryTableColumn::Pubtype = self.entry_table.entry_table_sorted_by_col { + Span::raw(format!( + " {}", + if self.entry_table.entry_table_reversed_sort { + SORTED_ENTRIES_REVERSED + } else { + SORTED_ENTRIES + } + )) + } else { + Span::raw("") + } + }, + ])), ]) .style(header_style) .height(1); @@ -351,7 +384,7 @@ impl App { Constraint::Percentage(20), Constraint::Fill(1), Constraint::Length( - if let EntryTableColumn::Year = self.entry_table.entry_table_selected_column { + if let EntryTableColumn::Year = self.entry_table.entry_table_sorted_by_col { 6 } else { 4 |
