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.
memfd
Manos Pitsidianakis 5 years ago
parent 9b2621145c
commit 9c3284d3fe
No known key found for this signature in database
GPG Key ID: 73627C2F690DF710

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

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

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

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

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

Loading…
Cancel
Save