summaryrefslogtreecommitdiffstats
path: root/ui/src/components/mail/listing/compact.rs
diff options
context:
space:
mode:
authorManos Pitsidianakis <el13635@mail.ntua.gr>2018-08-23 14:39:54 +0300
committerManos Pitsidianakis <el13635@mail.ntua.gr>2019-06-10 19:40:31 +0300
commitb617fc013681f3c2a9b6f49fa6e2af8261bf99c7 (patch)
tree4144695055ea051cddfc0e6341537d053fc72186 /ui/src/components/mail/listing/compact.rs
parentad5d2353e835b0ec62453bc2462ada7b06a11bf0 (diff)
ThreadView and compact listing
closes #3
Diffstat (limited to 'ui/src/components/mail/listing/compact.rs')
-rw-r--r--ui/src/components/mail/listing/compact.rs31
1 files changed, 20 insertions, 11 deletions
diff --git a/ui/src/components/mail/listing/compact.rs b/ui/src/components/mail/listing/compact.rs
index 0ccebd72..96ab3d94 100644
--- a/ui/src/components/mail/listing/compact.rs
+++ b/ui/src/components/mail/listing/compact.rs
@@ -27,6 +27,7 @@ const MAX_COLS: usize = 500;
/// A list of all mail (`Envelope`s) in a `Mailbox`. On `\n` it opens the `Envelope` content in a
/// `ThreadView`.
+#[derive(Debug)]
pub struct CompactListing {
/// (x, y, z): x is accounts, y is folders, z is index inside a folder.
cursor_pos: (usize, usize, usize),
@@ -301,7 +302,7 @@ impl Component for CompactListing {
}
return;
}
- self.view = Some(ThreadView::new(self.cursor_pos));
+ self.view = Some(ThreadView::new(self.cursor_pos, context));
self.view.as_mut().unwrap().draw(
grid,
area,
@@ -310,28 +311,37 @@ impl Component for CompactListing {
self.dirty = false;
}
}
- fn process_event(&mut self, event: &UIEvent, context: &mut Context) {
+ fn process_event(&mut self, event: &UIEvent, context: &mut Context) -> bool {
+ if let Some(ref mut v) = self.view {
+ if v.process_event(event, context) {
+ return true;
+ }
+ }
match event.event_type {
UIEventType::Input(Key::Up) => {
if self.cursor_pos.2 > 0 {
- self.new_cursor_pos.2 -= 1;
+ self.new_cursor_pos.2 = self.new_cursor_pos.2.saturating_sub(1);
self.dirty = true;
}
+ return true;
}
UIEventType::Input(Key::Down) => {
if self.length > 0 && self.new_cursor_pos.2 < self.length - 1 {
self.new_cursor_pos.2 += 1;
self.dirty = true;
}
+ return true;
}
UIEventType::Input(Key::Char('\n')) if !self.unfocused => {
self.unfocused = true;
self.dirty = true;
+ return true;
}
UIEventType::Input(Key::Char('i')) if self.unfocused => {
self.unfocused = false;
self.dirty = true;
self.view = None;
+ return true;
}
UIEventType::Input(Key::Char(k @ 'J')) | UIEventType::Input(Key::Char(k @ 'K')) => {
let folder_length = context.accounts[self.cursor_pos.0].len();
@@ -364,6 +374,7 @@ impl Component for CompactListing {
}
_ => {}
}
+ return true;
}
UIEventType::Input(Key::Char(k @ 'h')) | UIEventType::Input(Key::Char(k @ 'l')) => {
let accounts_length = context.accounts.len();
@@ -382,6 +393,7 @@ impl Component for CompactListing {
}
_ => {}
}
+ return true;
}
UIEventType::RefreshMailbox(_) => {
self.dirty = true;
@@ -391,7 +403,6 @@ impl Component for CompactListing {
if *idxa == self.new_cursor_pos.0 && *idxf == self.new_cursor_pos.1 {
self.dirty = true;
self.refresh_mailbox(context);
- return;
}
}
UIEventType::ChangeMode(UIMode::Normal) => {
@@ -408,35 +419,33 @@ impl Component for CompactListing {
.toggle_threaded();
self.refresh_mailbox(context);
self.dirty = true;
- return;
+ return true;
}
Action::ViewMailbox(idx) => {
self.new_cursor_pos.1 = *idx;
self.dirty = true;
self.refresh_mailbox(context);
- return;
+ return true;
}
Action::SubSort(field, order) => {
eprintln!("SubSort {:?} , {:?}", field, order);
self.subsort = (*field, *order);
self.dirty = true;
self.refresh_mailbox(context);
- return;
+ return true;
}
Action::Sort(field, order) => {
eprintln!("Sort {:?} , {:?}", field, order);
self.sort = (*field, *order);
self.dirty = true;
self.refresh_mailbox(context);
- return;
+ return true;
}
// _ => {}
},
_ => {}
}
- if let Some(ref mut v) = self.view {
- v.process_event(event, context);
- }
+ false
}
fn is_dirty(&self) -> bool {
self.dirty || self.view.as_ref().map(|p| p.is_dirty()).unwrap_or(false)