aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlukeflo2024-10-21 12:26:44 +0200
committerlukeflo2024-10-21 12:26:44 +0200
commit4337f1c8524b3774a9b10ea41543cc89ae7fb5a9 (patch)
tree482ae156d760354c9ddebe2d2ab6a9833ae53e84
parent23461438ad1ef51cfabf76e1530574e8bac28faa (diff)
downloadbibiman-4337f1c8524b3774a9b10ea41543cc89ae7fb5a9.tar.gz
bibiman-4337f1c8524b3774a9b10ea41543cc89ae7fb5a9.zip
fix sorting
-rw-r--r--Cargo.toml2
-rw-r--r--src/frontend/entries.rs18
-rw-r--r--src/frontend/ui.rs165
3 files changed, 108 insertions, 77 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 1ae10fc..b099f89 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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