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.
embed
Manos Pitsidianakis 2019-10-12 17:41:06 +03:00
parent 9b2621145c
commit 9c3284d3fe
Signed by: Manos Pitsidianakis
GPG Key ID: 73627C2F690DF710
5 changed files with 45 additions and 32 deletions

View File

@ -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();

View File

@ -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);

View File

@ -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);

View File

@ -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 {

View File

@ -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 {