ui: add shortcuts in compose menu

embed
Manos Pitsidianakis 2019-03-31 00:28:01 +02:00
parent c3adc244d7
commit e4aec7c17e
Signed by: Manos Pitsidianakis
GPG Key ID: 73627C2F690DF710
1 changed files with 58 additions and 19 deletions

View File

@ -59,7 +59,7 @@ impl Default for Composer {
draft: Draft::default(), draft: Draft::default(),
form: FormWidget::default(), form: FormWidget::default(),
mode: ViewMode::Overview, mode: ViewMode::Edit,
dirty: true, dirty: true,
initialized: false, initialized: false,
} }
@ -69,7 +69,7 @@ impl Default for Composer {
#[derive(Debug)] #[derive(Debug)]
enum ViewMode { enum ViewMode {
Discard(Uuid), Discard(Uuid),
Pager, Edit,
//Selector(Selector), //Selector(Selector),
Overview, Overview,
} }
@ -83,16 +83,16 @@ impl ViewMode {
} }
} }
fn is_overview(&self) -> bool { fn is_edit(&self) -> bool {
if let ViewMode::Overview = self { if let ViewMode::Edit = self {
true true
} else { } else {
false false
} }
} }
fn is_pager(&self) -> bool { fn is_overview(&self) -> bool {
if let ViewMode::Pager = self { if let ViewMode::Overview = self {
true true
} else { } else {
false false
@ -361,7 +361,7 @@ impl Component for Composer {
self.form.draw(grid, header_area, context); self.form.draw(grid, header_area, context);
match self.mode { match self.mode {
ViewMode::Overview | ViewMode::Pager => { ViewMode::Overview | ViewMode::Edit => {
self.pager.set_dirty(); self.pager.set_dirty();
self.pager.draw(grid, body_area, context); self.pager.draw(grid, body_area, context);
} }
@ -424,18 +424,24 @@ impl Component for Composer {
} }
fn process_event(&mut self, event: &mut UIEvent, context: &mut Context) -> bool { fn process_event(&mut self, event: &mut UIEvent, context: &mut Context) -> bool {
match (&mut self.mode, &mut self.reply_context) { match (&mut self.mode, &mut self.reply_context, &event.event_type) {
(ViewMode::Pager, _) => { // don't pass Reply command to thread view in reply_context
(_, _, UIEventType::Input(Key::Char('R'))) => {},
(ViewMode::Overview, Some((_, ref mut view)), _) => {
if view.process_event(event, context) {
self.dirty = true;
return true;
}
/* Cannot mutably borrow in pattern guard, pah! */ /* Cannot mutably borrow in pattern guard, pah! */
if self.pager.process_event(event, context) { if self.pager.process_event(event, context) {
return true; return true;
} }
} }
(ViewMode::Overview, Some((_, ref mut _view))) => { (ViewMode::Overview, _, _) => {
//if view.process_event(event, context) { /* Cannot mutably borrow in pattern guard, pah! */
// self.dirty = true; if self.pager.process_event(event, context) {
// return true; return true;
//} }
} }
_ => {} _ => {}
} }
@ -512,15 +518,15 @@ impl Component for Composer {
self.set_dirty(); self.set_dirty();
return true; return true;
} }
/* Switch to Overview mode if we're on Pager mode */ /* Switch to Overview mode if we're on Edit mode */
UIEventType::Input(Key::Char('o')) if self.mode.is_pager() => { UIEventType::Input(Key::Char('v')) if self.mode.is_edit() => {
self.mode = ViewMode::Overview; self.mode = ViewMode::Overview;
self.set_dirty(); self.set_dirty();
return true; return true;
} }
/* Switch to Pager mode if we're on Overview mode */ /* Switch to Edit mode if we're on Overview mode */
UIEventType::Input(Key::Char('v')) if self.mode.is_overview() => { UIEventType::Input(Key::Char('o')) if self.mode.is_overview() => {
self.mode = ViewMode::Pager; self.mode = ViewMode::Edit;
self.set_dirty(); self.set_dirty();
return true; return true;
} }
@ -598,6 +604,39 @@ impl Component for Composer {
fn kill(&mut self, uuid: Uuid) { fn kill(&mut self, uuid: Uuid) {
self.mode = ViewMode::Discard(uuid); self.mode = ViewMode::Discard(uuid);
} }
fn get_shortcuts(&self, context: &Context) -> ShortcutMap {
let mut map = if self.mode.is_overview() {
self.pager
.get_shortcuts(context)
} else {
Default::default()
};
if let Some((_, ref view)) = self.reply_context {
map.extend(view.get_shortcuts(context));
map.remove("reply");
}
if self.mode.is_overview() {
map.insert(
"Switch to edit mode",
Key::Char('o')
);
}
if self.mode.is_edit() {
map.insert(
"Switch to overview",
Key::Char('v')
);
}
map.insert(
"Edit in $EDITOR",
Key::Char('e')
);
map
}
} }
fn get_display_name(context: &Context, idx: usize) -> String { fn get_display_name(context: &Context, idx: usize) -> String {