summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorrabite <rabite@posteo.de>2019-01-29 18:54:13 +0100
committerrabite <rabite@posteo.de>2019-01-29 18:54:13 +0100
commitb96895a2f28e1e9fead9228617cdc02fdd1f3c31 (patch)
tree5dd4f2efeea2e3cda5eee147ab47c4a7e8e6418d /src
parentca521059e46ec5b9ff04bfad60284b9eb7ebcb1b (diff)
previews for directories
Diffstat (limited to 'src')
-rw-r--r--src/file_browser.rs38
-rw-r--r--src/listview.rs14
-rw-r--r--src/miller_columns.rs66
-rw-r--r--src/widget.rs39
4 files changed, 70 insertions, 87 deletions
diff --git a/src/file_browser.rs b/src/file_browser.rs
index e021dd9..1d2edeb 100644
--- a/src/file_browser.rs
+++ b/src/file_browser.rs
@@ -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(); }
diff --git a/src/listview.rs b/src/listview.rs
index 76bb240..ca1129c 100644
--- a/src/listview.rs
+++ b/src/listview.rs
@@ -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
}
diff --git a/src/miller_columns.rs b/src/miller_columns.rs
index fce25ac..2f92828 100644
--- a/src/miller_columns.rs
+++ b/src/miller_columns.rs
@@ -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) {
diff --git a/src/widget.rs b/src/widget.rs
index 7fc319c..db2a4f1 100644
--- a/src/widget.rs
+++ b/src/widget.rs
@@ -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();
+
+ 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 run(&mut self) {
- // self.draw();
- // self.handle_input();
- //}
+ 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;
}