From d1889481b1c44ee45c0e55e2e682ca16fa5ed2de Mon Sep 17 00:00:00 2001 From: unspeaker Date: Mon, 7 Apr 2025 15:18:40 +0300 Subject: [PATCH] unify setters and deleters --- src/keys.rs | 12 +-- src/keys/edit.rs | 9 +- src/model.rs | 2 +- src/model/column.rs | 15 ++-- src/model/entry.rs | 211 +++++++++++++++----------------------------- 5 files changed, 86 insertions(+), 163 deletions(-) diff --git a/src/keys.rs b/src/keys.rs index d2b0bdf..66d461e 100644 --- a/src/keys.rs +++ b/src/keys.rs @@ -47,9 +47,9 @@ impl Handle for Taggart { press!(Right) => { self.column_select( 1); }, press!(Char('[')) => { self.column_resize(-1); }, press!(Char(']')) => { self.column_resize( 1); }, - press!(Char('{')) => { self.column_collapse(true, 1); }, - press!(Char('}')) => { self.column_collapse(false, -1); }, - press!(Delete) => { self.clear() }, + press!(Char('{')) => { self.column_collapse(true); self.column_select( 1); }, + press!(Char('}')) => { self.column_collapse(false); self.column_select(-1); }, + press!(Delete) => { self.edit_clear() }, press!(Enter) => { self.edit_begin() }, press!(Char(' ')) => { self.open_in_player()?; }, _ => {} @@ -61,9 +61,6 @@ impl Handle for Taggart { } impl Taggart { - fn clear (&self) { - todo!("clear") - } fn open_in_player (&self) -> Usually<()> { open(self.entries[self.cursor].path.as_ref())?; Ok(()) @@ -78,9 +75,8 @@ impl Taggart { let column = &mut self.columns.0[self.column]; column.width = ((column.width as isize) + amount).max(0) as usize; } - fn column_collapse (&mut self, value: bool, next: isize) { + fn column_collapse (&mut self, value: bool) { let column = &mut self.columns.0[self.column]; column.collapsed = value; - self.column = ((self.column as isize) + next).max(0) as usize; } } diff --git a/src/keys/edit.rs b/src/keys/edit.rs index 5af695c..3e56554 100644 --- a/src/keys/edit.rs +++ b/src/keys/edit.rs @@ -35,12 +35,17 @@ impl Taggart { && let Some(setter) = &column.setter && self.entries.get_mut(self.cursor).is_some() { - setter(self, self.cursor, value.as_ref()); + setter(self, self.cursor, Some(value.as_ref())); self.mode = None; } } pub fn edit_clear (&mut self) { - todo!("edit_clear") + if self.entries.get_mut(self.cursor).is_some() + && let Some(column) = self.columns.0.get(self.column) + && let Some(setter) = &column.setter + { + setter(self, self.cursor, None); + } } pub fn edit_insert (&mut self, c: char) { if let Some(Mode::Edit { value, index }) = &self.mode { diff --git a/src/model.rs b/src/model.rs index 382f19d..3855973 100644 --- a/src/model.rs +++ b/src/model.rs @@ -19,7 +19,7 @@ pub struct Taggart { /// Table columns to display pub columns: Columns< fn(&Entry)->Option>, - fn(&mut Self, usize, &str), + fn(&mut Self, usize, Option<&str>), fn(&Entry)->Option