mirror of https://github.com/bobwen-dev/hunter
previews for directories
This commit is contained in:
parent
ca521059e4
commit
b96895a2f2
|
@ -1,12 +1,12 @@
|
|||
use termion::event::{Key,Event};
|
||||
use termion::event::{Key};
|
||||
|
||||
|
||||
use crate::widget::Widget;
|
||||
use crate::files::Files;
|
||||
//use crate::hbox::HBox;
|
||||
use crate::listview::ListView;
|
||||
use crate::coordinates::{Coordinates, Size,Position};
|
||||
use crate::files::File;
|
||||
use crate::coordinates::{Size,Position};
|
||||
use crate::preview::Previewer;
|
||||
use crate::miller_columns::MillerColumns;
|
||||
|
||||
pub struct FileBrowser {
|
||||
|
@ -14,9 +14,6 @@ pub struct FileBrowser {
|
|||
}
|
||||
|
||||
impl FileBrowser {
|
||||
pub fn set_left_directory(&mut self) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -40,26 +37,22 @@ impl Widget for FileBrowser {
|
|||
"".to_string()
|
||||
}
|
||||
fn refresh(&mut self) {
|
||||
let file
|
||||
= self.columns.get_main_widget().as_ref().unwrap().selected_file().clone();
|
||||
let (_, _, preview_coordinates) = self.columns.calculate_coordinates();
|
||||
|
||||
match &mut self.columns.preview {
|
||||
Some(preview) => preview.set_file(&file),
|
||||
None => {
|
||||
let preview = Previewer::new(&file, &preview_coordinates);
|
||||
self.columns.preview = Some(preview);
|
||||
}
|
||||
}
|
||||
self.columns.refresh();
|
||||
}
|
||||
|
||||
fn get_drawlist(&self) -> String {
|
||||
self.columns.get_drawlist()
|
||||
// let view_count = self.columns.widgets.len();
|
||||
|
||||
// if view_count < 2 {
|
||||
// // TODO: Special handling
|
||||
// } else if view_count < 1 {
|
||||
// // etc.
|
||||
// }
|
||||
|
||||
// self.views
|
||||
// .iter()
|
||||
// .skip(view_count - 2)
|
||||
// .map(|view| {
|
||||
// eprintln!("{}", view.get_drawlist());
|
||||
// view.get_drawlist()
|
||||
// }).collect()
|
||||
}
|
||||
|
||||
|
||||
|
@ -71,6 +64,8 @@ impl Widget for FileBrowser {
|
|||
let path = widget.selected_file().path();
|
||||
let files = Files::new_from_path(&path).unwrap();
|
||||
let view = ListView::new(files);
|
||||
let selected_file = view.selected_file();
|
||||
self.columns.set_preview(selected_file);
|
||||
self.columns.widgets.push(view);
|
||||
self.refresh();
|
||||
}, None => { }
|
||||
|
@ -86,7 +81,6 @@ impl Widget for FileBrowser {
|
|||
match self.columns.get_main_widget_mut() {
|
||||
Some(widget) => {
|
||||
widget.on_key(key);
|
||||
self.set_left_directory();
|
||||
self.refresh();
|
||||
}, None => { self.refresh(); }
|
||||
|
||||
|
|
|
@ -220,9 +220,6 @@ impl Widget for ListView<Files> {
|
|||
fn refresh(&mut self) {
|
||||
self.buffer = self.render();
|
||||
}
|
||||
|
||||
|
||||
|
||||
fn render(&self) -> Vec<String> {
|
||||
self.content.iter().map(|file| {
|
||||
self.render_line(&file)
|
||||
|
@ -251,16 +248,7 @@ impl Widget for ListView<Files> {
|
|||
term::reset());
|
||||
}
|
||||
|
||||
|
||||
if ysize as usize > self.buffer.len() {
|
||||
let start_y = self.buffer.len() + 1 + ypos as usize;
|
||||
for i in start_y..(ysize+2) as usize {
|
||||
output += &format!("{}{:xsize$}",
|
||||
term::goto_xy(xpos,i as u16),
|
||||
" ",
|
||||
xsize = xsize as usize);
|
||||
}
|
||||
}
|
||||
output += &self.get_redraw_empty_list(self.buffer.len());
|
||||
|
||||
output
|
||||
}
|
||||
|
|
|
@ -7,14 +7,15 @@ use crate::files::Files;
|
|||
use crate::listview::ListView;
|
||||
use crate::coordinates::{Coordinates, Size,Position};
|
||||
use crate::files::File;
|
||||
use crate::preview::Previewer;
|
||||
|
||||
pub struct MillerColumns<T> {
|
||||
pub widgets: Vec<T>,
|
||||
// pub left: Option<T>,
|
||||
// pub main: Option<T>,
|
||||
// pub preview: Option<T>,
|
||||
ratio: (u16,u16,u16),
|
||||
coordinates: Coordinates,
|
||||
pub preview: Option<Previewer>,
|
||||
pub ratio: (u16,u16,u16),
|
||||
pub coordinates: Coordinates,
|
||||
}
|
||||
|
||||
|
||||
|
@ -27,7 +28,8 @@ impl<T> MillerColumns<T> where T: Widget {
|
|||
ratio: (u16, u16, u16))
|
||||
-> Self { Self { widgets: widgets,
|
||||
coordinates: coordinates,
|
||||
ratio: ratio } }
|
||||
ratio: ratio,
|
||||
preview: None } }
|
||||
|
||||
|
||||
pub fn push_widget(&mut self, widget: T) {
|
||||
|
@ -51,7 +53,7 @@ impl<T> MillerColumns<T> where T: Widget {
|
|||
|
||||
let preview_xsize = xsize * ratio.2 / 100;
|
||||
let preview_size = Size ( (preview_xsize, ysize) );
|
||||
let preview_pos = Position ( (left_xsize + main_xsize + 2, top) );
|
||||
let preview_pos = Position ( (left_xsize + main_xsize + 3, top) );
|
||||
|
||||
let left_coords = Coordinates { size: left_size,
|
||||
position: left_pos };
|
||||
|
@ -83,8 +85,12 @@ impl<T> MillerColumns<T> where T: Widget {
|
|||
pub fn get_main_widget_mut(&mut self) -> Option<&mut T> {
|
||||
self.widgets.last_mut()
|
||||
}
|
||||
|
||||
|
||||
pub fn set_preview(&mut self, file: &File) {
|
||||
match &mut self.preview {
|
||||
Some(preview) => preview.set_file(file),
|
||||
None => {}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Widget for MillerColumns<T> where T: Widget {
|
||||
|
@ -107,17 +113,6 @@ impl<T> Widget for MillerColumns<T> where T: Widget {
|
|||
"".to_string()
|
||||
}
|
||||
fn refresh(&mut self) {
|
||||
let (left_coords, main_coords, preview_coords) = self.calculate_coordinates();
|
||||
|
||||
// self.left.as_mut().unwrap().set_size(left_coords.size);
|
||||
// self.left.as_mut().unwrap().set_position(left_coords.position);
|
||||
|
||||
// self.get_main_widget_mut().map(|widget| {
|
||||
// widget.set_size(main_coords.size);
|
||||
// widget.set_position(main_coords.position);
|
||||
// });
|
||||
|
||||
|
||||
let (left_coords, main_coords, preview_coords) = self.calculate_coordinates();
|
||||
|
||||
let widget2 = self.get_left_widget_mut().unwrap();
|
||||
|
@ -130,39 +125,20 @@ impl<T> Widget for MillerColumns<T> where T: Widget {
|
|||
widget.set_size(main_coords.size);
|
||||
widget.set_position(main_coords.position);
|
||||
widget.refresh();
|
||||
|
||||
|
||||
// self.main.as_mut().unwrap().set_size(main_coords.size);
|
||||
// self.main.as_mut().unwrap().set_position(main_coords.position);
|
||||
|
||||
// self.preview.as_mut().unwrap().set_size(preview_coords.size);
|
||||
// self.preview.as_mut().unwrap().set_position(preview_coords.position);
|
||||
|
||||
// self.left.as_mut().unwrap().refresh();
|
||||
// self.main.as_mut().unwrap().refresh();
|
||||
// self.preview.as_mut().unwrap().refresh()
|
||||
match &mut self.preview {
|
||||
Some(preview) => { preview.set_size(preview_coords.size);
|
||||
preview.set_position(preview_coords.position);
|
||||
preview.refresh(); },
|
||||
None => {}
|
||||
};
|
||||
}
|
||||
|
||||
fn get_drawlist(&self) -> String {
|
||||
let left_widget = self.get_left_widget().unwrap().get_drawlist();
|
||||
let main_widget = self.get_main_widget().unwrap().get_drawlist();
|
||||
format!("{}{}", main_widget, left_widget)
|
||||
// let left_drawlist = &self.left.as_ref().unwrap().get_drawlist();
|
||||
// let main_drawlist = &self.main.as_ref().unwrap().get_drawlist();
|
||||
// let preview_drawlist = &self.preview.as_ref().unwrap().get_drawlist();
|
||||
|
||||
// format!("{}{}{}", left_drawlist, &main_drawlist, &preview_drawlist)
|
||||
// let main_widget_drawlist = self.get_main_widget().map(|widget| {
|
||||
|
||||
// widget.get_drawlist()
|
||||
// });
|
||||
|
||||
|
||||
// match main_widget_drawlist {
|
||||
// Some(drawlist) => { drawlist },
|
||||
// None => "Can't draw this".to_string()
|
||||
// }
|
||||
|
||||
let preview = self.preview.as_ref().unwrap().get_drawlist();
|
||||
format!("{}{}{}", main_widget, left_widget, preview)
|
||||
}
|
||||
|
||||
fn on_key(&mut self, key: Key) {
|
||||
|
|
|
@ -68,16 +68,41 @@ pub trait Widget {
|
|||
)
|
||||
}
|
||||
|
||||
//fn get_window(&self) -> Window<Widget>;
|
||||
//fn get_window_mut(&mut self) -> &mut Window<dyn Widget>;
|
||||
fn get_clearlist(&self) -> String {
|
||||
let (xpos, ypos) = self.get_position().position();
|
||||
let (xsize, ysize) = self.get_size().size();
|
||||
|
||||
//fn run(&mut self) {
|
||||
// self.draw();
|
||||
// self.handle_input();
|
||||
//}
|
||||
let mut clearcmd = String::from("");
|
||||
for line in ypos..ysize {
|
||||
clearcmd += &format!("{}{:xsize$}",
|
||||
crate::term::goto_xy(xpos, line),
|
||||
" ",
|
||||
xsize=xsize as usize);
|
||||
}
|
||||
|
||||
clearcmd
|
||||
}
|
||||
|
||||
fn get_redraw_empty_list(&self, lines: usize) -> String {
|
||||
let (xpos, ypos) = self.get_position().position();
|
||||
let (xsize, ysize) = self.get_size().size();
|
||||
|
||||
let mut output = String::new();
|
||||
|
||||
if ysize as usize > lines {
|
||||
let start_y = lines + 1 + ypos as usize;
|
||||
for i in start_y..(ysize+2) as usize {
|
||||
output += &format!("{}{:xsize$}",
|
||||
crate::term::goto_xy(xpos,i as u16),
|
||||
" ",
|
||||
xsize = xsize as usize);
|
||||
}
|
||||
}
|
||||
|
||||
output
|
||||
}
|
||||
|
||||
|
||||
//fn get_buffer(&self) -> &Vec<String>;
|
||||
fn refresh(&mut self);
|
||||
fn get_drawlist(&self) -> String;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue