1
0
mirror of https://github.com/bobwen-dev/hunter synced 2025-04-12 00:55:41 +02:00

unnecessary animations

This commit is contained in:
rabite 2019-02-05 15:56:58 +01:00
parent d3746dacb2
commit 89ffedad18
9 changed files with 80 additions and 39 deletions

View File

@ -17,9 +17,16 @@ impl Coordinates {
} }
} }
pub fn size(&self) -> &Size { pub fn new_at(xsize: u16, ysize: u16, xpos: u16, ypos: u16 ) -> Coordinates {
&self.size Coordinates {
size: Size((xsize, ysize)),
position: Position((xpos, ypos))
} }
}
// pub fn size(&self) -> &Size {
// &self.size
// }
pub fn xsize(&self) -> u16 { pub fn xsize(&self) -> u16 {
self.size.xsize() self.size.xsize()
@ -57,7 +64,7 @@ impl Position {
self.0 self.0
} }
pub fn x(&self) -> u16 { pub fn x(&self) -> u16 {
(self.0).1 (self.0).0
} }
pub fn y(&self) -> u16 { pub fn y(&self) -> u16 {
(self.0).1 (self.0).1

View File

@ -17,7 +17,14 @@ pub struct FileBrowser {
impl FileBrowser { impl FileBrowser {
pub fn new() -> Result<FileBrowser, Box<Error>> { pub fn new() -> Result<FileBrowser, Box<Error>> {
let cwd = std::env::current_dir().unwrap(); 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(); let mut miller = MillerColumns::new();
miller.set_coordinates(&coords);
let lists: Result<Vec<ListView<Files>>, Box<Error>> = cwd let lists: Result<Vec<ListView<Files>>, Box<Error>> = cwd
.ancestors() .ancestors()
@ -32,8 +39,10 @@ impl FileBrowser {
let mut file_browser = FileBrowser { columns: miller }; let mut file_browser = FileBrowser { columns: miller };
file_browser.update_preview();
file_browser.fix_selection(); file_browser.fix_selection();
file_browser.animate_columns();
file_browser.update_preview();
Ok(file_browser) Ok(file_browser)
} }
@ -130,6 +139,11 @@ impl FileBrowser {
file.write(output.as_bytes()).unwrap(); file.write(output.as_bytes()).unwrap();
panic!("Quitting!"); 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 { impl Widget for FileBrowser {
@ -150,6 +164,7 @@ impl Widget for FileBrowser {
} }
fn set_coordinates(&mut self, coordinates: &Coordinates) { fn set_coordinates(&mut self, coordinates: &Coordinates) {
self.columns.coordinates = coordinates.clone(); self.columns.coordinates = coordinates.clone();
self.refresh();
} }
fn render_header(&self) -> String { fn render_header(&self) -> String {
let file = self.selected_file(); let file = self.selected_file();

View File

@ -53,7 +53,7 @@ impl<T> HBox<T> where T: Widget {
-> Coordinates where T: PartialEq { -> Coordinates where T: PartialEq {
let xsize = self.coordinates.xsize(); let xsize = self.coordinates.xsize();
let ysize = self.coordinates.ysize(); 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 pos = self.widgets.iter().position(|w | w == widget).unwrap();
let num = self.widgets.len(); let num = self.widgets.len();

View File

@ -39,6 +39,7 @@ fn main() {
let filebrowser = crate::file_browser::FileBrowser::new().unwrap(); let filebrowser = crate::file_browser::FileBrowser::new().unwrap();
let mut win = Window::new(filebrowser); let mut win = Window::new(filebrowser);
win.draw();
win.handle_input(); win.handle_input();
write!(_stdout, "{}", termion::cursor::Show).unwrap(); write!(_stdout, "{}", termion::cursor::Show).unwrap();

View File

@ -46,7 +46,7 @@ where
pub fn calculate_coordinates(&self) -> (Coordinates, Coordinates, Coordinates) { pub fn calculate_coordinates(&self) -> (Coordinates, Coordinates, Coordinates) {
let xsize = self.coordinates.xsize(); let xsize = self.coordinates.xsize();
let ysize = self.coordinates.ysize(); let ysize = self.coordinates.ysize();
let top = self.coordinates.top().x(); let top = self.coordinates.top().y();
let ratio = self.ratio; let ratio = self.ratio;
let left_xsize = xsize * ratio.0 / 100; let left_xsize = xsize * ratio.0 / 100;
@ -138,8 +138,9 @@ where
left_widget.set_coordinates(&left_coords); left_widget.set_coordinates(&left_coords);
} }
let main_widget = self.get_main_widget_mut(); if let Some(main_widget) = self.widgets.widgets.last_mut() {
main_widget.set_coordinates(&main_coords); main_widget.set_coordinates(&main_coords);
}
let preview_widget = &mut self.preview; let preview_widget = &mut self.preview;
preview_widget.set_coordinates(&preview_coords); preview_widget.set_coordinates(&preview_coords);

View File

@ -47,6 +47,7 @@ impl Previewer {
//self.threads.install(|| { //self.threads.install(|| {
std::thread::spawn(move || { std::thread::spawn(move || {
dbg!(&file);
match &file.kind { match &file.kind {
Kind::Directory => match Files::new_from_path(&file.path) { Kind::Directory => match Files::new_from_path(&file.path) {
Ok(files) => { Ok(files) => {
@ -55,11 +56,7 @@ impl Previewer {
let mut file_list = ListView::new(files); let mut file_list = ListView::new(files);
file_list.set_coordinates(&coordinates); file_list.set_coordinates(&coordinates);
file_list.refresh(); file_list.refresh();
write!(std::io::stdout(), file_list.animate_slide_up();
"{}{}",
&file_list.get_drawlist(),
&file_list.get_redraw_empty_list(len)).unwrap();
} }
Err(err) => { Err(err) => {
crate::window::show_status(&format!("Can't preview because: {}", err)); crate::window::show_status(&format!("Can't preview because: {}", err));
@ -71,10 +68,7 @@ impl Previewer {
let mut textview = TextView::new_from_file(&file); let mut textview = TextView::new_from_file(&file);
textview.set_coordinates(&coordinates); textview.set_coordinates(&coordinates);
textview.refresh(); textview.refresh();
let len = textview.lines.len(); textview.animate_slide_up();
let output = textview.get_drawlist()
+ &textview.get_redraw_empty_list(len - 1);
write!(std::io::stdout(), "{}", output).unwrap();
} else { } else {
let output = let output =
std::process::Command::new("scope.sh").arg(&file.name) std::process::Command::new("scope.sh").arg(&file.name)
@ -85,9 +79,8 @@ impl Previewer {
.output().unwrap(); .output().unwrap();
if output.status.code().unwrap() != 0 {
write!(std::io::stdout(), "{}", redraw).unwrap(); if output.status.code().unwrap() == 0 {
} else {
let output = std::str::from_utf8(&output.stdout) let output = std::str::from_utf8(&output.stdout)
.unwrap() .unwrap()
.to_string(); .to_string();
@ -97,10 +90,11 @@ impl Previewer {
coordinates: Coordinates::new() }; coordinates: Coordinates::new() };
textview.set_coordinates(&coordinates); textview.set_coordinates(&coordinates);
textview.refresh(); textview.refresh();
let len = textview.lines.len(); textview.animate_slide_up();
let output = textview.get_drawlist()
+ &textview.get_redraw_empty_list(len - 1); } else
write!(std::io::stdout(), "{}", output).unwrap(); {
write!(std::io::stdout(), "{}", redraw).unwrap();
} }
} }
@ -138,11 +132,10 @@ impl Widget for Previewer {
"".to_string() "".to_string()
} }
fn refresh(&mut self) { fn refresh(&mut self) {
if self.file == None { let file = self.file.clone();
return; if let Some(file) = file {
self.set_file(&file);
} }
} }
fn get_drawlist(&self) -> String { fn get_drawlist(&self) -> String {
self.buffer.clone() self.buffer.clone()

View File

@ -46,13 +46,14 @@ impl Widget for TextView {
} }
fn set_coordinates(&mut self, coordinates: &Coordinates) { fn set_coordinates(&mut self, coordinates: &Coordinates) {
self.coordinates = coordinates.clone(); self.coordinates = coordinates.clone();
self.refresh();
} }
fn render_header(&self) -> String { fn render_header(&self) -> String {
"".to_string() "".to_string()
} }
fn refresh(&mut self) { fn refresh(&mut self) {
let (xsize, ysize) = self.get_size().size(); let (xsize, ysize) = self.get_size().size();
let (xpos, _) = self.get_position().position(); let (xpos, ypos) = self.get_position().position();
self.buffer = self self.buffer = self
.lines .lines
@ -62,7 +63,7 @@ impl Widget for TextView {
.map(|(i, line)| { .map(|(i, line)| {
format!( format!(
"{}{}{:xsize$}", "{}{}{:xsize$}",
crate::term::goto_xy(xpos, i as u16 + 2), crate::term::goto_xy(xpos, i as u16 + ypos),
crate::term::reset(), crate::term::reset(),
sized_string(&line, xsize), sized_string(&line, xsize),
xsize = xsize as usize xsize = xsize as usize

View File

@ -2,6 +2,8 @@ use termion::event::{Event, Key, MouseEvent};
use crate::coordinates::{Coordinates, Position, Size}; use crate::coordinates::{Coordinates, Position, Size};
use std::io::Write;
pub trait Widget: PartialEq { pub trait Widget: PartialEq {
//fn render(&self) -> Vec<String>; //fn render(&self) -> Vec<String>;
fn get_size(&self) -> &Size; fn get_size(&self) -> &Size;
@ -97,6 +99,30 @@ pub trait Widget: PartialEq {
.collect() .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 refresh(&mut self);
fn get_drawlist(&self) -> String; fn get_drawlist(&self) -> String;
} }

View File

@ -70,13 +70,10 @@ where
} }
pub fn handle_input(&mut self) { pub fn handle_input(&mut self) {
self.draw();
for event in stdin().events() { for event in stdin().events() {
Self::clear_status(); Self::clear_status();
self.draw();
let event = event.unwrap(); let event = event.unwrap();
self.widget.on_event(event); self.widget.on_event(event);
//self.widget.refresh();
self.draw(); self.draw();
} }
} }