summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrabite <rabite@posteo.de>2019-05-23 19:49:01 +0200
committerrabite <rabite@posteo.de>2019-05-23 19:49:01 +0200
commitcdaacd1ca6300a037140c01cce1d788bebf9baee (patch)
treee6268833bf817018e6401dd251ea82d011ec7f7d
parent6d43ce621de7ea82eadaf2806fbab3836bdade7e (diff)
move methods from Widget trait to WidgetCore
-rw-r--r--src/bookmarks.rs6
-rw-r--r--src/file_browser.rs42
-rw-r--r--src/hbox.rs2
-rw-r--r--src/listview.rs33
-rw-r--r--src/mediaview.rs4
-rw-r--r--src/minibuffer.rs8
-rw-r--r--src/preview.rs6
-rw-r--r--src/proclist.rs8
-rw-r--r--src/tabview.rs2
-rw-r--r--src/textview.rs2
-rw-r--r--src/widget.rs230
11 files changed, 171 insertions, 172 deletions
diff --git a/src/bookmarks.rs b/src/bookmarks.rs
index 326be7c..29a7b5c 100644
--- a/src/bookmarks.rs
+++ b/src/bookmarks.rs
@@ -102,7 +102,7 @@ impl BMPopup {
err @ Err(HError::WidgetResizedError) => err?,
err @ Err(_) => err?,
}
- self.clear()?;
+ self.get_core()?.clear()?;
let bookmark = self.bookmark_path.take();
Ok(bookmark?)
@@ -112,9 +112,9 @@ impl BMPopup {
self.add_mode = true;
self.bookmark_path = Some(path.to_string());
self.refresh()?;
- self.clear()?;
+ self.get_core()?.clear()?;
self.popup()?;
- self.clear()?;
+ self.get_core()?.clear()?;
Ok(())
}
diff --git a/src/file_browser.rs b/src/file_browser.rs
index 51afd13..e01f4b8 100644
--- a/src/file_browser.rs
+++ b/src/file_browser.rs
@@ -197,7 +197,7 @@ impl Tabbable for TabView<FileBrowser> {
}
fn on_config_loaded(&mut self) -> HResult<()> {
- let show_hidden = self.config().show_hidden();
+ let show_hidden = self.core.config().show_hidden();
for tab in self.widgets.iter_mut() {
tab.left_async_widget_mut().map(|async_w| {
@@ -366,7 +366,7 @@ impl FileBrowser {
let status =
format!("{}Stop right there, cowboy! Check your permisions!",
term::color_red());
- self.show_status(&status).log();
+ self.core.show_status(&status).log();
return Ok(());
}
err @ Err(_) => err.log()
@@ -414,17 +414,17 @@ impl FileBrowser {
.status();
self.core.screen.activate().log();
- self.clear().log();
+ self.core.clear().log();
self.core.get_sender().send(Events::InputEnabled(true))?;
match status {
Ok(status) =>
- self.show_status(&format!("\"{}\" exited with {}",
- "rifle", status)).log(),
+ self.core.show_status(&format!("\"{}\" exited with {}",
+ "rifle", status)).log(),
Err(err) =>
- self.show_status(&format!("Can't run this \"{}\": {}",
- "rifle", err)).log()
+ self.core.show_status(&format!("Can't run this \"{}\": {}",
+ "rifle", err)).log()
}
}
Ok(())
@@ -648,7 +648,7 @@ impl FileBrowser {
pub fn set_title(&self) -> HResult<()> {
let path = self.cwd.short_string();
- self.screen()?.set_title(&path)?;
+ self.core.screen()?.set_title(&path)?;
Ok(())
}
@@ -880,7 +880,7 @@ impl FileBrowser {
}
pub fn turbo_cd(&mut self) -> HResult<()> {
- let dir = self.minibuffer("cd")?;
+ let dir = self.core.minibuffer("cd")?;
let path = std::path::PathBuf::from(&dir);
let dir = File::new_from_path(&path.canonicalize()?, None)?;
@@ -910,7 +910,7 @@ impl FileBrowser {
.output();
self.core.screen.activate().log();
- self.clear().log();
+ self.core.clear().log();
self.core.get_sender().send(Events::InputEnabled(true))?;
match cmd_result {
@@ -954,7 +954,7 @@ impl FileBrowser {
} else {
let msg = format!("Can't access path: {}!",
path.to_string_lossy());
- self.show_status(&msg).log();
+ self.core.show_status(&msg).log();
}
} else {
let mut last_file = None;
@@ -962,7 +962,7 @@ impl FileBrowser {
if !file_path.exists() {
let msg = format!("Can't find: {}",
file_path .to_string_lossy());
- self.show_status(&msg).log();
+ self.core.show_status(&msg).log();
continue;
}
@@ -988,10 +988,10 @@ impl FileBrowser {
}).log();
}
} else {
- self.show_status("External program failed!").log();
+ self.core.show_status("External program failed!").log();
}
}
- Err(_) => self.show_status("Can't run external program!").log()
+ Err(_) => self.core.show_status("Can't run external program!").log()
}
Ok(())
@@ -1018,7 +1018,7 @@ impl FileBrowser {
.output();
self.core.screen.activate().log();
- self.clear().log();
+ self.core.clear().log();
self.core.get_sender().send(Events::InputEnabled(true))?;
match cmd_result {
@@ -1043,15 +1043,15 @@ impl FileBrowser {
else {
let msg = format!("Can't access path: {}!",
path.to_string_lossy());
- self.show_status(&msg).log();
+ self.core.show_status(&msg).log();
}
} else {
- self.show_status("External program failed!").log();
+ self.core.show_status("External program failed!").log();
}
}
}
- Err(_) => self.show_status("Can't run external program!").log()
+ Err(_) => self.core.show_status("Can't run external program!").log()
}
Ok(())
@@ -1066,7 +1066,7 @@ impl FileBrowser {
let selected_file = self.selected_file().ok();
let selected_files = self.selected_files().ok();
- let cmd = self.minibuffer("exec")?.trim_start().to_string() + " ";
+ let cmd = self.core.minibuffer("exec")?.trim_start().to_string() + " ";
let cwd_files = selected_files.map(|selected_files| {
if selected_files.len() == 0 {
@@ -1111,10 +1111,10 @@ impl FileBrowser {
match status {
Ok(status) =>
- self.show_status(&format!("\"{}\" exited with {}",
+ self.core.show_status(&format!("\"{}\" exited with {}",
shell, status)).log(),
Err(err) =>
- self.show_status(&format!("Can't run this \"{}\": {}",
+ self.core.show_status(&format!("Can't run this \"{}\": {}",
shell, err)).log()
}
diff --git a/src/hbox.rs b/src/hbox.rs
index 4537961..d85bc51 100644
--- a/src/hbox.rs
+++ b/src/hbox.rs
@@ -72,7 +72,7 @@ impl<T> HBox<T> where T: Widget + PartialEq {
}
pub fn toggle_zoom(&mut self) -> HResult<()> {
- self.clear().log();
+ self.core.clear().log();
self.zoom_active = !self.zoom_active;
self.resize_children()
}
diff --git a/src/listview.rs b/src/listview.rs
index 6a1326c..62e6ace 100644
--- a/src/listview.rs
+++ b/src/listview.rs
@@ -29,7 +29,7 @@ impl Listable for ListView<Files> {
}
fn on_new(&mut self) -> HResult<()> {
- let show_hidden = self.config().show_hidden();
+ let show_hidden = self.core.config().show_hidden();
self.content.show_hidden = show_hidden;
Ok(())
}
@@ -226,7 +226,7 @@ impl ListView<Files>
pub fn goto_grand_parent(&mut self) -> HResult<()> {
match self.grand_parent() {
Some(grand_parent) => self.goto_path(&grand_parent),
- None => { self.show_status("Can't go further!") },
+ None => { self.core.show_status("Can't go further!") },
}
}
@@ -245,7 +245,7 @@ impl ListView<Files>
self.refresh()
}
Err(err) => {
- self.show_status(&format!("Can't open this path: {}", err))
+ self.core.show_status(&format!("Can't open this path: {}", err))
}
}
}
@@ -266,7 +266,7 @@ impl ListView<Files>
self.content.sort();
self.select_file(&file);
self.refresh().log();
- self.show_status(&format!("Sorting by: {}", self.content.sort)).log();
+ self.core.show_status(&format!("Sorting by: {}", self.content.sort)).log();
}
fn reverse_sort(&mut self) {
@@ -275,7 +275,8 @@ impl ListView<Files>
self.content.sort();
self.select_file(&file);
self.refresh().log();
- self.show_status(&format!("Reversed sorting by: {}", self.content.sort)).log();
+ self.core.show_status(&format!("Reversed sorting by: {}",
+ self.content.sort)).log();
}
fn select_next_mtime(&mut self) {
@@ -346,8 +347,8 @@ impl ListView<Files>
self.content.sort();
self.select_file(&file);
self.refresh().log();
- self.show_status(&format!("Direcories first: {}",
- self.content.dirs_first)).log();
+ self.core.show_status(&format!("Direcories first: {}",
+ self.content.dirs_first)).log();
}
fn multi_select_file(&mut self) {
@@ -383,7 +384,7 @@ impl ListView<Files>
let selected_file = self.clone_selected_file();
loop {
- let input = self.minibuffer_continuous("search");
+ let input = self.core.minibuffer_continuous("search");
match input {
Ok(input) => {
@@ -414,7 +415,7 @@ impl ListView<Files>
fn search_next(&mut self) -> HResult<()> {
if self.searching.is_none() {
- self.show_status("No search pattern set!").log();
+ self.core.show_status("No search pattern set!").log();
}
let prev_search = self.searching.clone()?;
let selection = self.get_selection();
@@ -435,14 +436,14 @@ impl ListView<Files>
let file = file.clone();
self.select_file(&file);
} else {
- self.show_status("Reached last search result!").log();
+ self.core.show_status("Reached last search result!").log();
}
Ok(())
}
fn search_prev(&mut self) -> HResult<()> {
if self.searching.is_none() {
- self.show_status("No search pattern set!").log();
+ self.core.show_status("No search pattern set!").log();
}
let prev_search = self.searching.clone()?;
@@ -464,13 +465,13 @@ impl ListView<Files>
}).cloned();
self.reverse_sort();
- self.clear_status().log();
+ self.core.clear_status().log();
if let Some(file) = file {
let file = file.clone();
self.select_file(&file);
} else {
- self.show_status("Reached last search result!").log();
+ self.core.show_status("Reached last search result!").log();
}
Ok(())
@@ -480,7 +481,7 @@ impl ListView<Files>
let selected_file = self.selected_file().clone();
loop {
- let filter = self.minibuffer_continuous("filter");
+ let filter = self.core.minibuffer_continuous("filter");
match filter {
Err(HError::MiniBufferInputUpdated(input)) => {
@@ -502,7 +503,7 @@ impl ListView<Files>
}
let msgstr = filter.clone().unwrap_or(String::from(""));
- self.show_status(&format!("Filtering with: \"{}\"", msgstr)).log();
+ self.core.show_status(&format!("Filtering with: \"{}\"", msgstr)).log();
break;
}
@@ -511,7 +512,7 @@ impl ListView<Files>
}
fn render_line(&self, file: &File) -> String {
- let icon = if self.config().icons {
+ let icon = if self.core.config().icons {
file.icon()
} else { "" };
diff --git a/src/mediaview.rs b/src/mediaview.rs
index e868ee8..f502591 100644
--- a/src/mediaview.rs
+++ b/src/mediaview.rs
@@ -198,7 +198,7 @@ impl MediaView {
let mute = self.mute();
let position = self.position.clone();
let duration = self.duration.clone();
- let clear = self.get_clearlist()?;
+ let clear = self.get_core()?.get_clearlist()?;
std::thread::spawn(move || -> HResult<()> {
// Sleep a bit to avoid overloading the system when scrolling
@@ -460,6 +460,6 @@ impl Drop for MediaView {
self.stale.set_stale().ok();
self.kill().log();
- self.clear().log();
+ self.core.clear().log();
}
}
diff --git a/src/minibuffer.rs b/src/minibuffer.rs
index a8fb410..f7e0229 100644
--- a/src/minibuffer.rs
+++ b/src/minibuffer.rs
@@ -167,7 +167,7 @@ impl MiniBuffer {
self.clear();
}
- self.screen()?.cursor_hide().log();
+ self.core.screen()?.cursor_hide().log();
match self.popup() {
Err(HError::MiniBufferCancelledInput) => self.input_cancelled()?,
@@ -335,7 +335,7 @@ impl MiniBuffer {
}
pub fn input_cancelled(&self) -> HResult<()> {
- self.show_status("Input cancelled").log();
+ self.core.show_status("Input cancelled").log();
return HError::minibuffer_cancel()
}
@@ -344,7 +344,7 @@ impl MiniBuffer {
}
pub fn input_empty(&self) -> HResult<()> {
- self.show_status("Empty!").log();
+ self.core.show_status("Empty!").log();
return HError::minibuffer_empty()
}
}
@@ -502,7 +502,7 @@ impl Widget for MiniBuffer {
": ".len() +
self.position;
- let mut screen = self.screen()?;
+ let mut screen = self.core.screen()?;
let ysize = screen.ysize()?;
screen.goto_xy(cursor_pos, ysize).log();
diff --git a/src/preview.rs b/src/preview.rs
index a3c3a5f..1dbe511 100644
--- a/src/preview.rs
+++ b/src/preview.rs
@@ -166,14 +166,14 @@ impl<T: Widget + Send + 'static> Widget for AsyncWidget<T> {
}
fn get_drawlist(&self) -> HResult<String> {
if self.widget().is_err() {
- let clear = self.get_clearlist()?;
+ let clear = self.core.get_clearlist()?;
let (xpos, ypos) = self.get_coordinates()?.u16position();
let pos = crate::term::goto_xy(xpos, ypos);
return Ok(clear + &pos + "...")
}
if self.is_stale()? {
- return self.get_clearlist()
+ return self.core.get_clearlist()
}
self.widget()?.get_drawlist()
@@ -517,7 +517,7 @@ impl Widget for Previewer {
}
fn config_loaded(&mut self) -> HResult<()> {
- let show_hidden = self.config().show_hidden();
+ let show_hidden = self.core.config().show_hidden();
if let PreviewWidget::FileList(filelist) = self.widget.widget_mut()? {
filelist.content.show_hidden = show_hidden;
filelist.content.dirty_meta.set_dirty();
diff --git a/src/proclist.rs b/src/proclist.rs
index 99a74dd..fca5029 100644
--- a/src/proclist.rs
+++ b/src/proclist.rs
@@ -212,7 +212,7 @@ impl ListView<Vec<Process>> {
.to_string_lossy()
.to_string();
- self.show_status(&format!("Running: {}", &short_cmd)).log();
+ self.core.show_status(&format!("Running: {}", &short_cmd)).log();
let shell_args = cmd_args.concat();
let shell_args = vec![OsString::from("-c"), shell_args.clone()];
@@ -232,7 +232,7 @@ impl ListView<Vec<Process>> {
.to_string());
let args = cmd.args.unwrap_or(vec![]);
- self.show_status(&format!("Running: {}", &short_cmd)).log();
+ self.core.show_status(&format!("Running: {}", &short_cmd)).log();
let handle = std::process::Command::new(real_cmd)
.args(args)
@@ -411,7 +411,7 @@ impl ProcView {
pub fn remove_proc(&mut self) -> HResult<()> {
if self.get_listview_mut().content.len() == 0 { return Ok(()) }
self.get_listview_mut().remove_proc()?;
- self.get_textview().clear().log();
+ self.get_textview().get_core()?.clear().log();
self.get_textview().widget_mut()?.set_text("").log();
self.viewing = None;
Ok(())
@@ -563,7 +563,7 @@ impl Widget for ProcView {
match key {
Key::Char('w') => {
self.animator.set_stale().log();
- self.clear().log();
+ self.get_core()?.clear().log();
return Err(HError::PopupFinnished) }
Key::Char('d') => { self.remove_proc()? }
Key::Char('K') => { self.get_listview_mut().kill_proc()? }
diff --git a/src/tabview.rs b/src/tabview.rs
index adf22e7..8b87552 100644
--- a/src/tabview.rs
+++ b/src/tabview.rs
@@ -36,7 +36,7 @@ pub trait Tabbable {
pub struct TabView<T> where T: Widget, TabView<T>: Tabbable {
pub widgets: Vec<T>,
pub active: usize,
- core: WidgetCore
+ pub core: WidgetCore
}
impl<T> TabView<T> where T: Widget, TabView<T>: Tabbable {
diff --git a/src/textview.rs b/src/textview.rs
index 889b8fa..0a67160 100644
--- a/src/textview.rs
+++ b/src/textview.rs
@@ -152,7 +152,7 @@ impl Widget for TextView {
let (xsize, ysize) = self.get_coordinates()?.size().size();
let (xpos, ypos) = self.get_coordinates()?.position().position();
- let output = self.get_clearlist()? +
+ let output = self.core.get_clearlist()? +
&self
.lines
.iter()
diff --git a/src/widget.rs b/src/widget.rs
index 1a91994..43c1fdf 100644
--- a/src/widget.rs
+++ b/src/widget.rs
@@ -102,6 +102,100 @@ impl WidgetCore {
pub fn get_sender(&self) -> Sender<Events> {
self.event_sender.lock().unwrap().clone()
}
+
+ pub fn draw_status(&self) -> HResult<()> {
+ let xsize = term::xsize_u();
+ let status = match self.status_bar_content.lock()?.as_ref() {
+ Some(status) => status.to_string(),
+ None => "".to_string(),
+ };
+ let sized_status = term::sized_string_u(&status, xsize);
+
+ self.write_to_screen(
+ &format!(
+ "{}{}{}",
+ term::move_bottom(),
+ term::status_bg(),
+ sized_status
+ )).log();
+
+ Ok(())
+ }
+
+ pub fn show_status(&self, status: &str) -> HResult<()> {
+ HError::log::<()>(status.to_string()).log();
+ {
+ let mut status_content = self.status_bar_content.lock()?;
+ *status_content = Some(status.to_string());
+ }
+ self.draw_status()?;
+ Ok(())
+ }
+
+ pub fn clear_status(&self) -> HResult<()> {
+ if self.status_bar_content.lock()?.take().is_some() {
+ self.draw_status().log();
+ }
+ Ok(())
+ }
+
+ pub fn minibuffer(&self, query: &str) -> HResult<String> {
+ let answer = self.minibuffer
+ .lock()?
+ .as_mut()?
+ .query(query, false);
+ let mut screen = self.screen()?;
+ screen.cursor_hide().log();
+ answer
+ }
+
+ pub fn minibuffer_continuous(&self, query: &str) -> HResult<String> {
+ let answer = self.minibuffer
+ .lock()?
+ .as_mut()?
+ .query(query, true);
+ let mut screen = self.screen()?;
+ screen.cursor_hide().log();
+ answer
+ }
+
+ pub fn screen(&self) -> HResult<Screen> {
+ Ok(self.screen.clone())
+ }
+
+ pub fn clear(&self) -> HResult<()> {
+ let clearlist = self.get_clearlist()?;
+ self.write_to_screen(&clearlist)
+ }
+
+ pub fn get_clearlist(&self) -> HResult<String> {
+ let (xpos, ypos) = self.coordinates.u16position();
+ let (xsize, ysize) = self.coordinates.u16size();
+ let endpos = ypos + ysize;
+
+ Ok((ypos..endpos)
+ .map(|line| {
+ format!(
+ "{}{}{:xsize$}",
+ crate::term::reset(),
+ crate::term::goto_xy(xpos, line),
+ " ",
+ xsize = xsize as usize
+ )
+ })
+ .collect())
+ }
+
+ pub fn write_to_screen(&self, s: &str) -> HResult<()> {
+ let mut screen = self.screen()?;
+ screen.write_str(s)
+ }
+
+ pub fn config(&self) -> Config {
+ self.config.read().unwrap().get()
+ .map(|config| config.clone())
+ .unwrap_or(Config::new())
+ }
}
impl Dirtyable for WidgetCore {
@@ -149,7 +243,7 @@ pub trait Widget {
fn on_event(&mut self, event: Event) -> HResult<()> {
- self.clear_status().log();
+ self.get_core()?.clear_status().log();
match event {
Event::Key(key) => self.on_key(key),
Event::Mouse(button) => self.on_mouse(button),
@@ -179,7 +273,8 @@ pub trait Widget {
}
fn bad(&mut self, event: Event) -> HResult<()> {
- self.show_status(&format!("Stop it!! {:?} does nothing!", event)).log();
+ self.get_core()?.show_status(&format!("Stop it!! {:?} does nothing!",
+ event)).log();
if let Event::Key(key) = event {
HError::undefined_key(key)
} else { Ok(()) }
@@ -210,23 +305,7 @@ pub trait Widget {
xsize = xsize as usize))
}
- fn get_clearlist(&self) -> HResult<String> {
- let (xpos, ypos) = self.get_coordinates()?.u16position();
- let (xsize, ysize) = self.get_coordinates()?.u16size();
- let endpos = ypos + ysize;
- Ok((ypos..endpos)
- .map(|line| {
- format!(
- "{}{}{:xsize$}",
- crate::term::reset(),
- crate::term::goto_xy(xpos, line),
- " ",
- xsize = xsize as usize
- )
- })
- .collect())
- }
fn get_redraw_empty_list(&self, lines: usize) -> HResult<String> {
let (xpos, ypos) = self.get_coordinates()?.u16position();
@@ -247,7 +326,7 @@ pub trait Widget {
fn popup(&mut self) -> HResult<()> {
let result = self.run_widget();
- self.clear().log();
+ self.get_core()?.clear().log();
self.get_core()?.get_sender().send(Events::ExclusiveEvent(None))?;
result
}
@@ -263,7 +342,7 @@ pub trait Widget {
.send(Events::ExclusiveEvent(Some(Mutex::new(Some(tx_event)))))?;
self.get_core()?.get_sender().send(Events::RequestInput)?;
- self.clear()?;
+ self.get_core()?.clear()?;
self.refresh().log();
self.draw()?;
@@ -286,10 +365,10 @@ pub trait Widget {
self.draw().log();
}
Events::Status(status) => {
- self.show_status(&status).log();
+ self.get_core()?.show_status(&status).log();
}
Events::TerminalResized => {
- self.screen()?.clear().log();
+ self.get_core()?.screen()?.clear().log();
match self.resize() {
err @ Err(HError::TerminalResizedError) => err?,
_ => {}
@@ -310,30 +389,16 @@ pub trait Widget {
Ok(())
}
- fn clear(&self) -> HResult<()> {
- let clearlist = self.get_clearlist()?;
- self.write_to_screen(&clearlist)
- }
-
- fn config(&self) -> Config {
- self.get_core()
- .unwrap()
- .config.read().unwrap().get()
- .map(|config| config.clone())
- .unwrap_or(Config::new())
- }
fn animate_slide_up(&mut self, animator: Option<&Stale>) -> HResult<()> {
- if !self.config().animate() { return Ok(()); }
-
- self.config();
+ if !self.get_core()?.config().animate() { return Ok(()); }
let coords = self.get_coordinates()?.clone();
let xpos = coords.position().x();
let ypos = coords.position().y();
let xsize = coords.xsize();
let ysize = coords.ysize();
- let clear = self.get_clearlist()?;
+ let clear = self.get_core()?.get_clearlist()?;
let pause = std::time::Duration::from_millis(5);
if let Some(ref animator) = animator {
@@ -342,7 +407,7 @@ pub trait Widget {
}
}
- self.write_to_screen(&clear).log();
+ self.get_core()?.write_to_screen(&clear).log();
for i in (0..10).rev() {
if let Some(ref animator) = animator {
@@ -360,7 +425,7 @@ pub trait Widget {
let buffer = self.get_drawlist()?;
if !animator.as_ref()?.is_stale()? {
- self.write_to_screen(&buffer).log();
+ self.get_core()?.write_to_screen(&buffer).log();
}
std::thread::sleep(pause);
@@ -374,8 +439,8 @@ pub trait Widget {
self.get_drawlist().unwrap_or("".to_string()) +
&self.get_header_drawlist().unwrap_or("".to_string()) +
&self.get_footer_drawlist().unwrap_or("".to_string());
- self.write_to_screen(&output).log();
- self.screen()?.flush().ok();
+ self.get_core()?.write_to_screen(&output).log();
+ self.get_core()?.screen()?.flush().ok();
Ok(())
}
@@ -383,7 +448,7 @@ pub trait Widget {
let (tx_internal_event, rx_internal_event) = channel();
let rx_global_event = self.get_core()?.event_receiver.lock()?.take()?;
- dispatch_events(tx_internal_event, rx_global_event, self.screen()?);
+ dispatch_events(tx_internal_event, rx_global_event, self.get_core()?.screen()?);
for event in rx_internal_event.iter() {
match event {
@@ -395,10 +460,10 @@ pub trait Widget {
self.get_core()?.get_sender().send(Events::RequestInput)?;
}
Events::Status(status) => {
- self.show_status(&status).log();
+ self.get_core()?.show_status(&status).log();
}
Events::TerminalResized => {
- self.screen()?.clear().log();
+ self.get_core()?.screen()?.clear().log();
}
Events::ConfigLoaded => {
self.get_core_mut()?.config.write()?.pull_async()?;
@@ -407,8 +472,8 @@ pub trait Widget {
_ => {}
}
self.resize().log();
- if self.screen()?.is_resized()? {
- self.screen()?.take_size().ok();
+ if self.get_core()?.screen()?.is_resized()? {
+ self.get_core()?.screen()?.take_size().ok();
}
self.refresh().ok();
self.draw().ok();
@@ -416,76 +481,9 @@ pub trait Widget {
Ok(())
}
- fn draw_status(&self) -> HResult<()> {
- let xsize = term::xsize_u();
- let status = match self.get_core()?.status_bar_content.lock()?.as_ref() {
- Some(status) => status.to_string(),
- None => "".to_string(),
- };
- let sized_status = term::sized_string_u(&status, xsize);
-
- self.write_to_screen(
- &format!(
- "{}{}{}",
- term::move_bottom(),
- term::status_bg(),
- sized_status
- )).log();
-
- Ok(())
- }
-
- fn show_status(&self, status: &str) -> HResult<()> {
- HError::log::<()>(status.to_string()).log();
- {
- let mut status_content = self.get_core()?.status_bar_content.lock()?;
- *status_content = Some(status.to_string());
- }
- self.draw_status()?;
- Ok(())
- }
-
- fn clear_status(&self) -> HResult<()> {
- if self.get_core()?.status_bar_content.lock()?.take().is_some() {
- self.draw_status().log();
- }
- Ok(())
- }
-
- fn minibuffer(&self, query: &str) -> HResult<String> {
- let answer = self.get_core()?
- .minibuffer
- .lock()?
- .as_mut()?
- .query(query, false);
- let mut screen = self.screen()?;
- screen.cursor_hide().log();
- answer
- }
-
- fn minibuffer_continuous(&self, query: &str) -> HResult<String> {
- let answer = self.get_core()?
- .minibuffer
- .lock()?
- .as_mut()?
- .query(query, true);
- let mut screen = self.screen()?;
- screen.cursor_hide().log();
- answer
- }
-
- fn screen(&self) -> HResult<Screen> {
- Ok(self.get_core()?.screen.clone())
- }
-
- fn write_to_screen(&self, s: &str) -> HResult<()> {
- let mut screen = self.screen()?;
- screen.write_str(s)
- }
-
fn resize(&mut self) -> HResult<()> {
- if let Ok(true) = self.screen()?.is_resized() {
- let (xsize, ysize) = self.screen()?.get_size()?;
+ if let Ok(true) = self.get_core()?.screen()?.is_resized() {
+ let (xsize, ysize) = self.get_core()?.screen()?.get_size()?;
let mut coords = self.get_core()?.coordinates.clone();
coords.set_size_u(xsize, ysize-2);
self.set_coordinates(&coords)?;