From 89ffedad18f6a45874bf7ac98ba7a0ed69eb0685 Mon Sep 17 00:00:00 2001 From: rabite Date: Tue, 5 Feb 2019 15:56:58 +0100 Subject: [PATCH] unnecessary animations --- src/coordinates.rs | 13 ++++++++++--- src/file_browser.rs | 17 +++++++++++++++- src/hbox.rs | 2 +- src/main.rs | 1 + src/miller_columns.rs | 7 ++++--- src/preview.rs | 45 ++++++++++++++++++------------------------- src/textview.rs | 5 +++-- src/widget.rs | 26 +++++++++++++++++++++++++ src/window.rs | 3 --- 9 files changed, 80 insertions(+), 39 deletions(-) diff --git a/src/coordinates.rs b/src/coordinates.rs index 56cfe40..d4dc914 100644 --- a/src/coordinates.rs +++ b/src/coordinates.rs @@ -17,10 +17,17 @@ impl Coordinates { } } - pub fn size(&self) -> &Size { - &self.size + pub fn new_at(xsize: u16, ysize: u16, xpos: u16, ypos: u16 ) -> Coordinates { + Coordinates { + size: Size((xsize, ysize)), + position: Position((xpos, ypos)) + } } + // pub fn size(&self) -> &Size { + // &self.size + // } + pub fn xsize(&self) -> u16 { self.size.xsize() } @@ -57,7 +64,7 @@ impl Position { self.0 } pub fn x(&self) -> u16 { - (self.0).1 + (self.0).0 } pub fn y(&self) -> u16 { (self.0).1 diff --git a/src/file_browser.rs b/src/file_browser.rs index 0402f9a..2f0904d 100644 --- a/src/file_browser.rs +++ b/src/file_browser.rs @@ -17,7 +17,14 @@ pub struct FileBrowser { impl FileBrowser { pub fn new() -> Result> { let cwd = std::env::current_dir().unwrap(); + let coords = Coordinates::new_at(crate::term::xsize(), + crate::term::ysize() - 2, + 1, + 2); + let mut miller = MillerColumns::new(); + miller.set_coordinates(&coords); + let lists: Result>, Box> = cwd .ancestors() @@ -32,8 +39,10 @@ impl FileBrowser { let mut file_browser = FileBrowser { columns: miller }; - file_browser.update_preview(); + file_browser.fix_selection(); + file_browser.animate_columns(); + file_browser.update_preview(); Ok(file_browser) } @@ -130,6 +139,11 @@ impl FileBrowser { file.write(output.as_bytes()).unwrap(); panic!("Quitting!"); } + + pub fn animate_columns(&mut self) { + self.columns.get_left_widget_mut().map(|w| w.animate_slide_up()); + self.columns.get_main_widget_mut().animate_slide_up(); + } } impl Widget for FileBrowser { @@ -150,6 +164,7 @@ impl Widget for FileBrowser { } fn set_coordinates(&mut self, coordinates: &Coordinates) { self.columns.coordinates = coordinates.clone(); + self.refresh(); } fn render_header(&self) -> String { let file = self.selected_file(); diff --git a/src/hbox.rs b/src/hbox.rs index ab40da7..cdd7023 100644 --- a/src/hbox.rs +++ b/src/hbox.rs @@ -53,7 +53,7 @@ impl HBox where T: Widget { -> Coordinates where T: PartialEq { let xsize = self.coordinates.xsize(); let ysize = self.coordinates.ysize(); - let top = self.coordinates.top().x(); + let top = self.coordinates.top().y(); let pos = self.widgets.iter().position(|w | w == widget).unwrap(); let num = self.widgets.len(); diff --git a/src/main.rs b/src/main.rs index a59ad14..24550d2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -39,6 +39,7 @@ fn main() { let filebrowser = crate::file_browser::FileBrowser::new().unwrap(); let mut win = Window::new(filebrowser); + win.draw(); win.handle_input(); write!(_stdout, "{}", termion::cursor::Show).unwrap(); diff --git a/src/miller_columns.rs b/src/miller_columns.rs index 2937ce8..c38efe6 100644 --- a/src/miller_columns.rs +++ b/src/miller_columns.rs @@ -46,7 +46,7 @@ where pub fn calculate_coordinates(&self) -> (Coordinates, Coordinates, Coordinates) { let xsize = self.coordinates.xsize(); let ysize = self.coordinates.ysize(); - let top = self.coordinates.top().x(); + let top = self.coordinates.top().y(); let ratio = self.ratio; let left_xsize = xsize * ratio.0 / 100; @@ -138,8 +138,9 @@ where left_widget.set_coordinates(&left_coords); } - let main_widget = self.get_main_widget_mut(); - main_widget.set_coordinates(&main_coords); + if let Some(main_widget) = self.widgets.widgets.last_mut() { + main_widget.set_coordinates(&main_coords); + } let preview_widget = &mut self.preview; preview_widget.set_coordinates(&preview_coords); diff --git a/src/preview.rs b/src/preview.rs index d3cb74a..d5e7fde 100644 --- a/src/preview.rs +++ b/src/preview.rs @@ -43,10 +43,11 @@ impl Previewer { let coordinates = self.coordinates.clone(); let file = file.clone(); let redraw = crate::term::reset() + &self.get_redraw_empty_list(0); - - + + //self.threads.install(|| { std::thread::spawn(move || { + dbg!(&file); match &file.kind { Kind::Directory => match Files::new_from_path(&file.path) { Ok(files) => { @@ -55,26 +56,19 @@ impl Previewer { let mut file_list = ListView::new(files); file_list.set_coordinates(&coordinates); file_list.refresh(); - write!(std::io::stdout(), - "{}{}", - &file_list.get_drawlist(), - &file_list.get_redraw_empty_list(len)).unwrap(); - + file_list.animate_slide_up(); } Err(err) => { crate::window::show_status(&format!("Can't preview because: {}", err)); } - + }, _ => { if file.get_mime() == Some("text".to_string()) { let mut textview = TextView::new_from_file(&file); textview.set_coordinates(&coordinates); textview.refresh(); - let len = textview.lines.len(); - let output = textview.get_drawlist() - + &textview.get_redraw_empty_list(len - 1); - write!(std::io::stdout(), "{}", output).unwrap(); + textview.animate_slide_up(); } else { let output = std::process::Command::new("scope.sh").arg(&file.name) @@ -84,10 +78,9 @@ impl Previewer { .arg("false".to_string()) .output().unwrap(); - - if output.status.code().unwrap() != 0 { - write!(std::io::stdout(), "{}", redraw).unwrap(); - } else { + + + if output.status.code().unwrap() == 0 { let output = std::str::from_utf8(&output.stdout) .unwrap() .to_string(); @@ -97,13 +90,14 @@ impl Previewer { coordinates: Coordinates::new() }; textview.set_coordinates(&coordinates); textview.refresh(); - let len = textview.lines.len(); - let output = textview.get_drawlist() - + &textview.get_redraw_empty_list(len - 1); - write!(std::io::stdout(), "{}", output).unwrap(); - } + textview.animate_slide_up(); + + } else + { + write!(std::io::stdout(), "{}", redraw).unwrap(); + } } - + } } }); @@ -138,11 +132,10 @@ impl Widget for Previewer { "".to_string() } fn refresh(&mut self) { - if self.file == None { - return; + let file = self.file.clone(); + if let Some(file) = file { + self.set_file(&file); } - - } fn get_drawlist(&self) -> String { self.buffer.clone() diff --git a/src/textview.rs b/src/textview.rs index b3e168b..888338f 100644 --- a/src/textview.rs +++ b/src/textview.rs @@ -46,13 +46,14 @@ impl Widget for TextView { } fn set_coordinates(&mut self, coordinates: &Coordinates) { self.coordinates = coordinates.clone(); + self.refresh(); } fn render_header(&self) -> String { "".to_string() } fn refresh(&mut self) { let (xsize, ysize) = self.get_size().size(); - let (xpos, _) = self.get_position().position(); + let (xpos, ypos) = self.get_position().position(); self.buffer = self .lines @@ -62,7 +63,7 @@ impl Widget for TextView { .map(|(i, line)| { format!( "{}{}{:xsize$}", - crate::term::goto_xy(xpos, i as u16 + 2), + crate::term::goto_xy(xpos, i as u16 + ypos), crate::term::reset(), sized_string(&line, xsize), xsize = xsize as usize diff --git a/src/widget.rs b/src/widget.rs index f6ea4b6..02103fc 100644 --- a/src/widget.rs +++ b/src/widget.rs @@ -2,6 +2,8 @@ use termion::event::{Event, Key, MouseEvent}; use crate::coordinates::{Coordinates, Position, Size}; +use std::io::Write; + pub trait Widget: PartialEq { //fn render(&self) -> Vec; fn get_size(&self) -> &Size; @@ -97,6 +99,30 @@ pub trait Widget: PartialEq { .collect() } + fn animate_slide_up(&mut self) { + 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 pause = std::time::Duration::from_millis(5); + + for i in (0..10).rev() { + let coords = Coordinates { size: Size((xsize,ysize-i)), + position: Position + ((xpos, + ypos+i)) + }; + self.set_coordinates(&coords); + let buffer = self.get_drawlist(); + write!(std::io::stdout(), "{}{}", + clear, buffer).unwrap(); + + std::thread::sleep(pause); + } + } + fn refresh(&mut self); fn get_drawlist(&self) -> String; } diff --git a/src/window.rs b/src/window.rs index ce0bfed..a06c276 100644 --- a/src/window.rs +++ b/src/window.rs @@ -70,13 +70,10 @@ where } pub fn handle_input(&mut self) { - self.draw(); for event in stdin().events() { Self::clear_status(); - self.draw(); let event = event.unwrap(); self.widget.on_event(event); - //self.widget.refresh(); self.draw(); } }