mirror of
https://github.com/bobwen-dev/hunter
synced 2025-04-12 00:55:41 +02:00
unnecessary animations
This commit is contained in:
parent
d3746dacb2
commit
89ffedad18
@ -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
|
||||||
|
@ -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();
|
||||||
|
@ -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();
|
||||||
|
@ -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();
|
||||||
|
@ -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);
|
||||||
|
@ -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()
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user