summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrabite <rabite@posteo.de>2019-02-05 15:56:58 +0100
committerrabite <rabite@posteo.de>2019-02-05 15:59:36 +0100
commit89ffedad18f6a45874bf7ac98ba7a0ed69eb0685 (patch)
tree7fe53aca4399bf5e4bc72a91ce6f898488f9cb07
parentd3746dacb2308523902501208bdca28965f2954a (diff)
unnecessary animations
-rw-r--r--src/coordinates.rs13
-rw-r--r--src/file_browser.rs17
-rw-r--r--src/hbox.rs2
-rw-r--r--src/main.rs1
-rw-r--r--src/miller_columns.rs7
-rw-r--r--src/preview.rs45
-rw-r--r--src/textview.rs5
-rw-r--r--src/widget.rs26
-rw-r--r--src/window.rs3
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<FileBrowser, Box<Error>> {
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<Vec<ListView<Files>>, Box<Error>> = 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<T> HBox<T> 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<String>;
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();
}
}