summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJeff Zhao <jeff.no.zhao@gmail.com>2021-04-05 10:29:41 -0400
committerJeff Zhao <jeff.no.zhao@gmail.com>2021-04-05 10:29:41 -0400
commit3d5a4f135aace86403820a292c9f9294dae4891b (patch)
tree0c49b18d2338c0c175d7e35da4a083e4e3e27c4d /src
parent9cf31fd66ac1367e7d57306f77b617b4eb620266 (diff)
make tui_worker more modular
- call flush_events outside of views to reduce coupling and unexpected behaviours
Diffstat (limited to 'src')
-rw-r--r--src/commands/command_line.rs1
-rw-r--r--src/commands/open_file.rs2
-rw-r--r--src/commands/set_mode.rs1
-rw-r--r--src/commands/show_workers.rs2
-rw-r--r--src/ui/views/tui_textfield.rs2
-rw-r--r--src/ui/views/tui_worker_view.rs28
-rw-r--r--src/ui/widgets/tui_worker.rs14
7 files changed, 26 insertions, 24 deletions
diff --git a/src/commands/command_line.rs b/src/commands/command_line.rs
index 2598283..aa86c6d 100644
--- a/src/commands/command_line.rs
+++ b/src/commands/command_line.rs
@@ -12,6 +12,7 @@ pub fn readline(
prefix: &str,
suffix: &str,
) -> JoshutoResult<()> {
+ context.flush_event();
let user_input: Option<String> = TuiTextField::default()
.prompt(":")
.prefix(prefix)
diff --git a/src/commands/open_file.rs b/src/commands/open_file.rs
index 3dd8d3d..0f3105f 100644
--- a/src/commands/open_file.rs
+++ b/src/commands/open_file.rs
@@ -77,6 +77,8 @@ where
const PROMPT: &str = "open_with ";
let user_input: Option<String> = {
+ context.flush_event();
+
let menu_options: Vec<String> = options
.iter()
.enumerate()
diff --git a/src/commands/set_mode.rs b/src/commands/set_mode.rs
index 214843c..6fecaad 100644
--- a/src/commands/set_mode.rs
+++ b/src/commands/set_mode.rs
@@ -44,6 +44,7 @@ pub fn set_mode(context: &mut JoshutoContext, backend: &mut TuiBackend) -> Joshu
let user_input = match entry {
Some(entry) => {
+ context.flush_event();
let mode = entry.metadata.permissions_ref().mode();
let mode_string = unix::mode_to_string(mode);
TuiTextField::default()
diff --git a/src/commands/show_workers.rs b/src/commands/show_workers.rs
index 1ddb74c..f539549 100644
--- a/src/commands/show_workers.rs
+++ b/src/commands/show_workers.rs
@@ -5,6 +5,8 @@ use crate::ui::views::TuiWorkerView;
use crate::ui::TuiBackend;
pub fn show_workers(context: &mut JoshutoContext, backend: &mut TuiBackend) -> JoshutoResult<()> {
+ context.flush_event();
+
let view = TuiWorkerView::new();
view.display(context, backend);
Ok(())
diff --git a/src/ui/views/tui_textfield.rs b/src/ui/views/tui_textfield.rs
index c341724..b2e72cb 100644
--- a/src/ui/views/tui_textfield.rs
+++ b/src/ui/views/tui_textfield.rs
@@ -72,8 +72,6 @@ impl<'a> TuiTextField<'a> {
backend: &mut TuiBackend,
context: &mut JoshutoContext,
) -> Option<String> {
- context.flush_event();
-
let mut line_buffer = line_buffer::LineBuffer::with_capacity(255);
let completer = FilenameCompleter::new();
diff --git a/src/ui/views/tui_worker_view.rs b/src/ui/views/tui_worker_view.rs
index 09b43b9..3f19fe3 100644
--- a/src/ui/views/tui_worker_view.rs
+++ b/src/ui/views/tui_worker_view.rs
@@ -3,7 +3,7 @@ use termion::event::{Event, Key};
use tui::layout::Rect;
use crate::context::JoshutoContext;
-use crate::ui::widgets::TuiWorker;
+use crate::ui::widgets::{TuiTopBar, TuiWorker};
use crate::ui::TuiBackend;
use crate::util::event::JoshutoEvent;
use crate::util::input;
@@ -16,19 +16,31 @@ impl TuiWorkerView {
}
pub fn display(&self, context: &mut JoshutoContext, backend: &mut TuiBackend) {
- context.flush_event();
let terminal = backend.terminal_mut();
loop {
let _ = terminal.draw(|frame| {
- let f_size: Rect = frame.size();
- if f_size.height == 0 {
+ let area: Rect = frame.size();
+ if area.height == 0 {
return;
}
- {
- let view = TuiWorker::new(&context);
- frame.render_widget(view, f_size);
- }
+
+ let rect = Rect {
+ height: 1,
+ ..area
+ };
+ let curr_tab = context.tab_context_ref().curr_tab_ref();
+ let view = TuiTopBar::new(context, curr_tab.pwd());
+ 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() {
diff --git a/src/ui/widgets/tui_worker.rs b/src/ui/widgets/tui_worker.rs
index 3033bb1..f4fad7f 100644
--- a/src/ui/widgets/tui_worker.rs
+++ b/src/ui/widgets/tui_worker.rs
@@ -5,7 +5,6 @@ use tui::widgets::Widget;
use crate::context::JoshutoContext;
use crate::io::FileOp;
-use crate::ui::widgets::TuiTopBar;
pub struct TuiWorker<'a> {
pub context: &'a JoshutoContext,
@@ -19,19 +18,6 @@ impl<'a> TuiWorker<'a> {
impl<'a> Widget for TuiWorker<'a> {
fn render(self, area: Rect, buf: &mut Buffer) {
- let f_size = area;
-
- let topbar_width = f_size.width;
-
- let curr_tab = self.context.tab_context_ref().curr_tab_ref();
- let rect = Rect {
- x: 0,
- y: 0,
- width: topbar_width,
- height: 1,
- };
- TuiTopBar::new(self.context, curr_tab.pwd()).render(rect, buf);
-
// TODO: could be styled better
match self.context.worker_ref() {