summaryrefslogtreecommitdiffstats
path: root/src/ui
diff options
context:
space:
mode:
authorJeff Zhao <jeff.no.zhao@gmail.com>2021-09-30 19:55:54 -0400
committerJeff Zhao <jeff.no.zhao@gmail.com>2021-09-30 19:55:54 -0400
commit6b78a15f5dd4d3cd5329e67a42758cb53885d793 (patch)
treec64843976a9f1fb7b04f414e8ce674cc68f7131d /src/ui
parentc818d56fa042445469b70bb44439ca85b9726615 (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.rs72
-rw-r--r--src/ui/widgets/tui_worker.rs10
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",