diff options
author | Sam Tay <sam.chong.tay@gmail.com> | 2020-07-11 00:51:30 -0700 |
---|---|---|
committer | Sam Tay <sam.chong.tay@gmail.com> | 2020-07-12 12:05:40 -0700 |
commit | ff8f1d878cdd226e14f22a3320df5fd4b2825c77 (patch) | |
tree | 41c72ad78ab428c81d2f888a7312c6bf9a6fe25c /src | |
parent | ae58ddce2d6e6b37110cc9405a38eec090ea0716 (diff) |
Refactor tui::views::Layout
Separates refocus from relayout
Diffstat (limited to 'src')
-rw-r--r-- | src/tui/views.rs | 60 |
1 files changed, 34 insertions, 26 deletions
diff --git a/src/tui/views.rs b/src/tui/views.rs index d7c7af9..7d1593d 100644 --- a/src/tui/views.rs +++ b/src/tui/views.rs @@ -381,7 +381,6 @@ impl LayoutView { self.call_on_md_views(move |v| v.resize(&width, &view_height)); } - // TODO separate out resizing | relayout | refocus; these are separate // concerns and should have their own methods of invalidation fn relayout(&mut self) { match self.layout { @@ -406,25 +405,7 @@ impl LayoutView { v.set_width(&SizeConstraint::Full); v.set_take_focus(true); }); - let name = Self::xy_to_name(self.get_focused_index()); - if name == NAME_QUESTION_LIST || name == NAME_QUESTION_VIEW { - self.view - .call_on_name(NAME_QUESTION_LIST, |v: &mut ListView| { - v.unhide(); - }); - self.view - .call_on_name(NAME_QUESTION_VIEW, |v: &mut MdView| { - v.unhide(); - }); - } else { - self.view - .call_on_name(NAME_ANSWER_LIST, |v: &mut ListView| { - v.unhide(); - }); - self.view.call_on_name(NAME_ANSWER_VIEW, |v: &mut MdView| { - v.unhide(); - }); - } + self.refocus(); } Layout::FullScreen => { self.call_on_md_views(|v| { @@ -437,17 +418,44 @@ impl LayoutView { v.hide(); v.resize(&SizeConstraint::Full, &SizeConstraint::Full); }); - let name = Self::xy_to_name(self.get_focused_index()); - if name == NAME_QUESTION_LIST || name == NAME_ANSWER_LIST { - self.view.call_on_name(name, |v: &mut ListView| { + self.refocus(); + } + } + } + + fn refocus(&mut self) { + let name = Self::xy_to_name(self.get_focused_index()); + match self.layout { + Layout::SingleColumn if name == NAME_QUESTION_LIST || name == NAME_QUESTION_VIEW => { + self.view + .call_on_name(NAME_QUESTION_LIST, |v: &mut ListView| { v.unhide(); }); - } else { - self.view.call_on_name(name, |v: &mut MdView| { + self.view + .call_on_name(NAME_QUESTION_VIEW, |v: &mut MdView| { v.unhide(); }); - } } + Layout::SingleColumn => { + self.view + .call_on_name(NAME_ANSWER_LIST, |v: &mut ListView| { + v.unhide(); + }); + self.view.call_on_name(NAME_ANSWER_VIEW, |v: &mut MdView| { + v.unhide(); + }); + } + Layout::FullScreen if name == NAME_QUESTION_LIST || name == NAME_ANSWER_LIST => { + self.view.call_on_name(name, |v: &mut ListView| { + v.unhide(); + }); + } + Layout::FullScreen => { + self.view.call_on_name(name, |v: &mut MdView| { + v.unhide(); + }); + } + _ => (), } } |