From 9c3284d3fef9c5fdba5dd9655b43a083ae08c835 Mon Sep 17 00:00:00 2001 From: Manos Pitsidianakis Date: Sat, 12 Oct 2019 17:41:06 +0300 Subject: [PATCH] ui/listings: add set_movement method to ListingComponent Page movements is an enum that describes the movements of the keyboard keys "Home, End, PageUp, PageDown". Some mail listing Components interpret these keys as changes to their cursors. --- ui/src/components/mail/listing.rs | 25 +++++++++++++++++++ ui/src/components/mail/listing/compact.rs | 21 ++++------------ .../components/mail/listing/conversations.rs | 21 ++++------------ ui/src/components/mail/listing/plain.rs | 5 ++++ ui/src/components/mail/listing/thread.rs | 5 ++++ 5 files changed, 45 insertions(+), 32 deletions(-) diff --git a/ui/src/components/mail/listing.rs b/ui/src/components/mail/listing.rs index ec021d24..3b815971 100644 --- a/ui/src/components/mail/listing.rs +++ b/ui/src/components/mail/listing.rs @@ -58,6 +58,7 @@ trait ListingTrait { fn draw_list(&mut self, grid: &mut CellBuffer, area: Area, context: &mut Context); fn highlight_line(&mut self, grid: &mut CellBuffer, area: Area, idx: usize, context: &Context); fn filter(&mut self, _filter_term: &str, _context: &Context) {} + fn set_movement(&mut self, mvm: PageMovement); } #[derive(Debug)] @@ -102,6 +103,14 @@ impl ListingTrait for ListingComponent { Conversations(ref mut l) => l.highlight_line(grid, area, idx, context), } } + fn set_movement(&mut self, mvm: PageMovement) { + match self { + Compact(ref mut l) => l.set_movement(mvm), + Plain(ref mut l) => l.set_movement(mvm), + Threaded(ref mut l) => l.set_movement(mvm), + Conversations(ref mut l) => l.set_movement(mvm), + } + } } impl ListingComponent { @@ -392,6 +401,22 @@ impl Component for Listing { UIEvent::Resize => { self.dirty = true; } + UIEvent::Input(ref key) if *key == shortcuts["prev_page"] => { + self.component.set_movement(PageMovement::PageUp); + return true; + } + UIEvent::Input(ref key) if *key == shortcuts["next_page"] => { + self.component.set_movement(PageMovement::PageDown); + return true; + } + UIEvent::Input(ref key) if *key == Key::Home => { + self.component.set_movement(PageMovement::Home); + return true; + } + UIEvent::Input(ref key) if *key == Key::End => { + self.component.set_movement(PageMovement::End); + return true; + } UIEvent::Input(ref k) if k == shortcuts["toggle-menu-visibility"] => { self.menu_visibility = !self.menu_visibility; self.set_dirty(); diff --git a/ui/src/components/mail/listing/compact.rs b/ui/src/components/mail/listing/compact.rs index 6c9706b5..371fd25f 100644 --- a/ui/src/components/mail/listing/compact.rs +++ b/ui/src/components/mail/listing/compact.rs @@ -442,6 +442,11 @@ impl ListingTrait for CompactListing { ); } } + + fn set_movement(&mut self, mvm: PageMovement) { + self.movement = Some(mvm); + self.set_dirty(); + } } impl fmt::Display for CompactListing { @@ -1111,22 +1116,6 @@ impl Component for CompactListing { self.dirty = true; return true; } - UIEvent::Input(ref key) if *key == shortcuts["prev_page"] => { - self.movement = Some(PageMovement::PageUp); - self.set_dirty(); - } - UIEvent::Input(ref key) if *key == shortcuts["next_page"] => { - self.movement = Some(PageMovement::PageDown); - self.set_dirty(); - } - UIEvent::Input(ref key) if *key == Key::Home => { - self.movement = Some(PageMovement::Home); - self.set_dirty(); - } - UIEvent::Input(ref key) if *key == Key::End => { - self.movement = Some(PageMovement::End); - self.set_dirty(); - } UIEvent::Input(ref key) if *key == shortcuts["set_seen"] => { let thread_hash = self.get_thread_under_cursor(self.cursor_pos.2, context); self.perform_action(context, thread_hash, &ListingAction::SetSeen); diff --git a/ui/src/components/mail/listing/conversations.rs b/ui/src/components/mail/listing/conversations.rs index d628cce6..31cce4ce 100644 --- a/ui/src/components/mail/listing/conversations.rs +++ b/ui/src/components/mail/listing/conversations.rs @@ -483,6 +483,11 @@ impl ListingTrait for ConversationsListing { ); } } + + fn set_movement(&mut self, mvm: PageMovement) { + self.movement = Some(mvm); + self.set_dirty(); + } } impl fmt::Display for ConversationsListing { @@ -1193,22 +1198,6 @@ impl Component for ConversationsListing { self.dirty = true; return true; } - UIEvent::Input(ref key) if *key == shortcuts["prev_page"] => { - self.movement = Some(PageMovement::PageUp); - self.set_dirty(); - } - UIEvent::Input(ref key) if *key == shortcuts["next_page"] => { - self.movement = Some(PageMovement::PageDown); - self.set_dirty(); - } - UIEvent::Input(ref key) if *key == Key::Home => { - self.movement = Some(PageMovement::Home); - self.set_dirty(); - } - UIEvent::Input(ref key) if *key == Key::End => { - self.movement = Some(PageMovement::End); - self.set_dirty(); - } UIEvent::Input(ref key) if *key == shortcuts["set_seen"] => { let thread_hash = self.get_thread_under_cursor(self.cursor_pos.2, context); self.perform_action(context, thread_hash, &ListingAction::SetSeen); diff --git a/ui/src/components/mail/listing/plain.rs b/ui/src/components/mail/listing/plain.rs index e419bde9..4a1c941c 100644 --- a/ui/src/components/mail/listing/plain.rs +++ b/ui/src/components/mail/listing/plain.rs @@ -213,6 +213,11 @@ impl ListingTrait for PlainListing { ); context.dirty_areas.push_back(area); } + + fn set_movement(&mut self, mvm: PageMovement) { + self.movement = Some(mvm); + self.set_dirty(); + } } impl Default for PlainListing { diff --git a/ui/src/components/mail/listing/thread.rs b/ui/src/components/mail/listing/thread.rs index 9a8dfc65..5cc666a7 100644 --- a/ui/src/components/mail/listing/thread.rs +++ b/ui/src/components/mail/listing/thread.rs @@ -197,6 +197,11 @@ impl ListingTrait for ThreadListing { change_colors(grid, area, fg_color, bg_color); } } + + fn set_movement(&mut self, mvm: PageMovement) { + self.movement = Some(mvm); + self.set_dirty(); + } } impl Default for ThreadListing {