diff options
author | Jeff Zhao <jeff.no.zhao@gmail.com> | 2021-09-30 19:55:54 -0400 |
---|---|---|
committer | Jeff Zhao <jeff.no.zhao@gmail.com> | 2021-09-30 19:55:54 -0400 |
commit | 6b78a15f5dd4d3cd5329e67a42758cb53885d793 (patch) | |
tree | c64843976a9f1fb7b04f414e8ce674cc68f7131d /src/ui | |
parent | c818d56fa042445469b70bb44439ca85b9726615 (diff) |
move input logic out of tui_worker_view and into show_workers
Diffstat (limited to 'src/ui')
-rw-r--r-- | src/ui/views/tui_worker_view.rs | 72 | ||||
-rw-r--r-- | src/ui/widgets/tui_worker.rs | 10 |
2 files changed, 29 insertions, 53 deletions
diff --git a/src/ui/views/tui_worker_view.rs b/src/ui/views/tui_worker_view.rs index 035c137..ace4805 100644 --- a/src/ui/views/tui_worker_view.rs +++ b/src/ui/views/tui_worker_view.rs @@ -1,60 +1,36 @@ -use termion::event::{Event, Key}; - +use tui::buffer::Buffer; use tui::layout::Rect; +use tui::widgets::Widget; use crate::context::AppContext; -use crate::event::AppEvent; use crate::ui::widgets::{TuiTopBar, TuiWorker}; -use crate::ui::TuiBackend; -use crate::util::input; -pub struct TuiWorkerView { - exit_key: Key, +pub struct TuiWorkerView<'a> { + context: &'a AppContext, } -impl TuiWorkerView { - pub fn new(exit_key: Key) -> Self { - Self { exit_key } +impl<'a> TuiWorkerView<'a> { + pub fn new(context: &'a AppContext) -> Self { + Self { context } } +} - pub fn display(&self, context: &mut AppContext, backend: &mut TuiBackend) { - let terminal = backend.terminal_mut(); - - loop { - let _ = terminal.draw(|frame| { - let area: Rect = frame.size(); - if area.height == 0 { - return; - } - - let rect = Rect { height: 1, ..area }; - let curr_tab = context.tab_context_ref().curr_tab_ref(); - let view = TuiTopBar::new(context, curr_tab.cwd()); - frame.render_widget(view, rect); - - let rect = Rect { - x: 0, - y: 1, - width: area.width, - height: area.height - 1, - }; - let view = TuiWorker::new(context); - frame.render_widget(view, rect); - }); - - if let Ok(event) = context.poll_event() { - match event { - AppEvent::Termion(event) => { - match event { - Event::Key(Key::Esc) => break, - Event::Key(k) if k == self.exit_key => break, - _ => {} - } - context.flush_event(); - } - event => input::process_noninteractive(event, context), - }; - } +impl<'a> Widget for TuiWorkerView<'a> { + fn render(self, area: Rect, buf: &mut Buffer) { + if area.height == 0 { + return; } + + let rect = Rect { height: 1, ..area }; + let curr_tab = self.context.tab_context_ref().curr_tab_ref(); + TuiTopBar::new(self.context, curr_tab.cwd()).render(rect, buf); + + let rect = Rect { + x: 0, + y: 1, + width: area.width, + height: area.height - 1, + }; + TuiWorker::new(self.context.worker_context_ref()).render(rect, buf); } } diff --git a/src/ui/widgets/tui_worker.rs b/src/ui/widgets/tui_worker.rs index 110d694..f9e544d 100644 --- a/src/ui/widgets/tui_worker.rs +++ b/src/ui/widgets/tui_worker.rs @@ -3,23 +3,23 @@ use tui::layout::Rect; use tui::style::{Color, Modifier, Style}; use tui::widgets::Widget; -use crate::context::AppContext; +use crate::context::WorkerContext; use crate::io::FileOp; use crate::util::format; pub struct TuiWorker<'a> { - pub context: &'a AppContext, + pub context: &'a WorkerContext, } impl<'a> TuiWorker<'a> { - pub fn new(context: &'a AppContext) -> Self { + pub fn new(context: &'a WorkerContext) -> Self { Self { context } } } impl<'a> Widget for TuiWorker<'a> { fn render(self, area: Rect, buf: &mut Buffer) { - match self.context.worker_context_ref().worker_ref() { + match self.context.worker_ref() { Some(io_obs) => { if let Some(progress) = io_obs.progress.as_ref() { let op_str = match progress.kind() { @@ -59,7 +59,7 @@ impl<'a> Widget for TuiWorker<'a> { buf.set_stringn(0, 5, "Queue:", area.width as usize, style); let style = Style::default(); - for (i, worker) in self.context.worker_context_ref().iter().enumerate() { + for (i, worker) in self.context.iter().enumerate() { let op_str = match worker.kind() { FileOp::Copy => "Copy", FileOp::Cut => "Move", |