removed useless miller column widget

This commit is contained in:
rabite 2019-03-20 20:48:46 +01:00
parent 118aeac6e0
commit 04c40ec3ca
3 changed files with 171 additions and 139 deletions

View File

@ -11,8 +11,10 @@ use std::ffi::{OsString, OsStr};
use crate::files::{File, Files, PathBufExt, OsStrTools}; use crate::files::{File, Files, PathBufExt, OsStrTools};
use crate::listview::ListView; use crate::listview::ListView;
use crate::miller_columns::MillerColumns; //use crate::miller_columns::MillerColumns;
use crate::hbox::HBox;
use crate::widget::Widget; use crate::widget::Widget;
use crate::dirty::Dirtyable;
use crate::tabview::{TabView, Tabbable}; use crate::tabview::{TabView, Tabbable};
use crate::preview::{Previewer, WillBeWidget}; use crate::preview::{Previewer, WillBeWidget};
use crate::fail::{HResult, HError, ErrorLog}; use crate::fail::{HResult, HError, ErrorLog};
@ -64,7 +66,7 @@ impl Widget for FileBrowserWidgets {
} }
pub struct FileBrowser { pub struct FileBrowser {
pub columns: MillerColumns<FileBrowserWidgets>, pub columns: HBox<FileBrowserWidgets>,
pub cwd: File, pub cwd: File,
pub prev_cwd: Option<File>, pub prev_cwd: Option<File>,
selections: HashMap<File, File>, selections: HashMap<File, File>,
@ -175,9 +177,9 @@ impl FileBrowser {
let mut core_l = core.clone(); let mut core_l = core.clone();
let mut core_p = core.clone(); let mut core_p = core.clone();
let mut miller = MillerColumns::new(core); let mut columns = HBox::new(core);
miller.set_ratios(vec![20,30,49]); columns.set_ratios(vec![20,30,49]);
let list_coords = miller.calculate_coordinates()?; let list_coords = columns.calculate_coordinates()?;
core_l.coordinates = list_coords[0].clone(); core_l.coordinates = list_coords[0].clone();
core_m.coordinates = list_coords[1].clone(); core_m.coordinates = list_coords[1].clone();
@ -205,14 +207,15 @@ impl FileBrowser {
Ok(list) Ok(list)
})); }));
let left_widget = FileBrowserWidgets::FileList(left_widget); let left_widget = FileBrowserWidgets::FileList(left_widget);
miller.push_widget(left_widget); columns.push_widget(left_widget);
} }
let previewer = Previewer::new(&core_p); let previewer = Previewer::new(&core_p);
miller.push_widget(FileBrowserWidgets::FileList(main_widget)); columns.push_widget(FileBrowserWidgets::FileList(main_widget));
miller.push_widget(FileBrowserWidgets::Previewer(previewer)); columns.push_widget(FileBrowserWidgets::Previewer(previewer));
miller.refresh().log(); columns.set_active(1).log();
columns.refresh().log();
let cwd = File::new_from_path(&cwd).unwrap(); let cwd = File::new_from_path(&cwd).unwrap();
@ -228,7 +231,7 @@ impl FileBrowser {
Ok(FileBrowser { columns: miller, Ok(FileBrowser { columns: columns,
cwd: cwd, cwd: cwd,
prev_cwd: None, prev_cwd: None,
selections: HashMap::new(), selections: HashMap::new(),
@ -363,10 +366,10 @@ impl FileBrowser {
let bookmark = self.bookmarks.lock()?.pick(cwd.to_string()); let bookmark = self.bookmarks.lock()?.pick(cwd.to_string());
if let Err(HError::TerminalResizedError) = bookmark { if let Err(HError::TerminalResizedError) = bookmark {
self.core.screen.clear(); self.core.screen.clear().log();
self.resize(); self.resize().log();
self.refresh(); self.refresh().log();
self.draw(); self.draw().log();
continue; continue;
} }
return bookmark; return bookmark;
@ -546,23 +549,27 @@ impl FileBrowser {
} }
pub fn main_widget(&self) -> HResult<&WillBeWidget<ListView<Files>>> { pub fn main_widget(&self) -> HResult<&WillBeWidget<ListView<Files>>> {
let widget = match self.columns.get_main_widget()? { let widget = self.columns.active_widget()?;
let widget = match widget {
FileBrowserWidgets::FileList(filelist) => Ok(filelist), FileBrowserWidgets::FileList(filelist) => Ok(filelist),
_ => { return HError::wrong_widget("previewer", "filelist"); } _ => { HError::wrong_widget("previewer", "filelist")? }
}; };
widget widget
} }
pub fn main_widget_mut(&mut self) -> HResult<&mut WillBeWidget<ListView<Files>>> { pub fn main_widget_mut(&mut self) -> HResult<&mut WillBeWidget<ListView<Files>>> {
let widget = match self.columns.get_main_widget_mut()? { let widget = self.columns.active_widget_mut()?;
let widget = match widget {
FileBrowserWidgets::FileList(filelist) => Ok(filelist), FileBrowserWidgets::FileList(filelist) => Ok(filelist),
_ => { return HError::wrong_widget("previewer", "filelist"); } _ => { HError::wrong_widget("previewer", "filelist")? }
}; };
widget widget
} }
pub fn left_widget(&self) -> HResult<&WillBeWidget<ListView<Files>>> { pub fn left_widget(&self) -> HResult<&WillBeWidget<ListView<Files>>> {
let widget = match self.columns.get_left_widget()? { let widget = match self.columns.widgets.get(0)? {
FileBrowserWidgets::FileList(filelist) => Ok(filelist), FileBrowserWidgets::FileList(filelist) => Ok(filelist),
_ => { return HError::wrong_widget("previewer", "filelist"); } _ => { return HError::wrong_widget("previewer", "filelist"); }
}; };
@ -570,7 +577,7 @@ impl FileBrowser {
} }
pub fn left_widget_mut(&mut self) -> HResult<&mut WillBeWidget<ListView<Files>>> { pub fn left_widget_mut(&mut self) -> HResult<&mut WillBeWidget<ListView<Files>>> {
let widget = match self.columns.get_left_widget_mut()? { let widget = match self.columns.widgets.get_mut(0)? {
FileBrowserWidgets::FileList(filelist) => Ok(filelist), FileBrowserWidgets::FileList(filelist) => Ok(filelist),
_ => { return HError::wrong_widget("previewer", "filelist"); } _ => { return HError::wrong_widget("previewer", "filelist"); }
}; };
@ -578,19 +585,32 @@ impl FileBrowser {
} }
pub fn preview_widget(&self) -> HResult<&Previewer> { pub fn preview_widget(&self) -> HResult<&Previewer> {
match self.columns.get_right_widget()? { match self.columns.widgets.get(2)? {
FileBrowserWidgets::Previewer(previewer) => Ok(previewer), FileBrowserWidgets::Previewer(previewer) => Ok(previewer),
_ => { return HError::wrong_widget("filelist", "previewer"); } _ => { return HError::wrong_widget("filelist", "previewer"); }
} }
} }
pub fn preview_widget_mut(&mut self) -> HResult<&mut Previewer> { pub fn preview_widget_mut(&mut self) -> HResult<&mut Previewer> {
match self.columns.get_right_widget_mut()? { match self.columns.widgets.get_mut(2)? {
FileBrowserWidgets::Previewer(previewer) => Ok(previewer), FileBrowserWidgets::Previewer(previewer) => Ok(previewer),
_ => { return HError::wrong_widget("filelist", "previewer"); } _ => { return HError::wrong_widget("filelist", "previewer"); }
} }
} }
pub fn toggle_colums(&mut self) -> HResult<()> {
self.show_columns = !self.show_columns;
if !self.show_columns {
self.columns.set_ratios(vec![1,99,1]);
self.left_widget_mut()?.set_stale().log();
self.preview_widget_mut()?.set_stale().log()
}
self.core.set_dirty();
self.refresh()
}
pub fn quit_with_dir(&self) -> HResult<()> { pub fn quit_with_dir(&self) -> HResult<()> {
let cwd = self.cwd()?.clone().path; let cwd = self.cwd()?.clone().path;
let selected_file = self.selected_file()?; let selected_file = self.selected_file()?;
@ -613,7 +633,7 @@ impl FileBrowser {
match dir { match dir {
Ok(dir) => { Ok(dir) => {
self.columns.widgets.widgets.clear(); self.columns.widgets.clear();
let cwd = File::new_from_path(&std::path::PathBuf::from(&dir))?; let cwd = File::new_from_path(&std::path::PathBuf::from(&dir))?;
self.cwd = cwd; self.cwd = cwd;
let dir = std::path::PathBuf::from(&dir); let dir = std::path::PathBuf::from(&dir);
@ -710,7 +730,7 @@ impl FileBrowser {
let shell = std::env::var("SHELL").unwrap_or("bash".into()); let shell = std::env::var("SHELL").unwrap_or("bash".into());
let status = std::process::Command::new(&shell).status(); let status = std::process::Command::new(&shell).status();
self.core.screen.reset_screen(); self.core.screen.reset_screen().log();
self.core.get_sender().send(Events::InputEnabled(true))?; self.core.get_sender().send(Events::InputEnabled(true))?;
@ -815,19 +835,20 @@ impl Widget for FileBrowser {
} }
fn refresh(&mut self) -> HResult<()> { fn refresh(&mut self) -> HResult<()> {
//self.proc_view.lock()?.set_coordinates(self.get_coordinates()?); //self.proc_view.lock()?.set_coordinates(self.get_coordinates()?);
self.set_title().ok(); self.set_title().log();
self.handle_dir_events().ok(); self.handle_dir_events().log();
self.columns.refresh().ok(); self.columns.refresh().log();
self.set_left_selection().log(); self.set_left_selection().log();
self.save_selection().log(); self.save_selection().log();
self.set_cwd().ok(); self.set_cwd().log();
self.update_watches().ok(); self.update_watches().log();
self.update_preview().ok(); self.update_preview().log();
self.columns.refresh().ok(); self.columns.refresh().log();
Ok(()) Ok(())
} }
fn get_drawlist(&self) -> HResult<String> { fn get_drawlist(&self) -> HResult<String> {
return self.columns.get_drawlist();
let left = self.left_widget()?.get_drawlist()?; let left = self.left_widget()?.get_drawlist()?;
let main = self.main_widget()?.get_drawlist()?; let main = self.main_widget()?.get_drawlist()?;
let prev = self.preview_widget()?.get_drawlist()?; let prev = self.preview_widget()?.get_drawlist()?;

View File

@ -102,10 +102,21 @@ impl<T> HBox<T> where T: Widget + PartialEq {
Ok(coords) Ok(coords)
} }
pub fn active_widget(&self) -> &T { pub fn set_active(&mut self, i: usize) -> HResult<()> {
&self.widgets.last().unwrap() if i+1 > self.widgets.len() {
HError::no_widget()?
}
self.active = Some(i);
Ok(())
} }
pub fn active_widget(&self) -> Option<&T> {
self.widgets.get(self.active?)
}
pub fn active_widget_mut(&mut self) -> Option<&mut T> {
self.widgets.get_mut(self.active?)
}
} }
@ -125,7 +136,7 @@ impl<T> Widget for HBox<T> where T: Widget + PartialEq {
} }
fn render_header(&self) -> HResult<String> { fn render_header(&self) -> HResult<String> {
self.active_widget().render_header() self.active_widget()?.render_header()
} }
fn refresh(&mut self) -> HResult<()> { fn refresh(&mut self) -> HResult<()> {

View File

@ -1,119 +1,119 @@
use termion::event::Key; // use termion::event::Key;
use failure::Backtrace; // use failure::Backtrace;
use crate::coordinates::{Coordinates}; // use crate::coordinates::{Coordinates};
use crate::widget::{Widget, WidgetCore}; // use crate::widget::{Widget, WidgetCore};
use crate::hbox::HBox; // use crate::hbox::HBox;
use crate::fail::{HError, HResult, ErrorLog}; // use crate::fail::{HError, HResult, ErrorLog};
#[derive(PartialEq)] // #[derive(PartialEq)]
pub struct MillerColumns<T> where T: Widget { // pub struct MillerColumns<T> where T: Widget {
pub widgets: HBox<T>, // pub widgets: HBox<T>,
pub core: WidgetCore, // pub core: WidgetCore,
} // }
impl<T> MillerColumns<T> // impl<T> MillerColumns<T>
where // where
T: Widget + PartialEq, // T: Widget + PartialEq,
{ // {
pub fn new(core: &WidgetCore) -> MillerColumns<T> { // pub fn new(core: &WidgetCore) -> MillerColumns<T> {
MillerColumns { // MillerColumns {
widgets: HBox::new(core), // widgets: HBox::new(core),
core: core.clone(), // core: core.clone(),
} // }
} // }
pub fn push_widget(&mut self, widget: T) { // pub fn push_widget(&mut self, widget: T) {
self.widgets.push_widget(widget); // self.widgets.push_widget(widget);
self.refresh().log(); // self.refresh().log();
} // }
pub fn pop_widget(&mut self) -> Option<T> { // pub fn pop_widget(&mut self) -> Option<T> {
let widget = self.widgets.pop_widget(); // let widget = self.widgets.pop_widget();
self.refresh().log(); // self.refresh().log();
widget // widget
} // }
pub fn prepend_widget(&mut self, widget: T) { // pub fn prepend_widget(&mut self, widget: T) {
self.widgets.prepend_widget(widget); // self.widgets.prepend_widget(widget);
} // }
pub fn set_ratios(&mut self, ratios: Vec<usize>) { // pub fn set_ratios(&mut self, ratios: Vec<usize>) {
self.widgets.set_ratios(ratios); // self.widgets.set_ratios(ratios);
} // }
pub fn calculate_coordinates(&self) -> HResult<Vec<Coordinates>> { // pub fn calculate_coordinates(&self) -> HResult<Vec<Coordinates>> {
self.widgets.calculate_coordinates() // self.widgets.calculate_coordinates()
} // }
pub fn get_left_widget(&self) -> HResult<&T> { // pub fn get_left_widget(&self) -> HResult<&T> {
let len = self.widgets.widgets.len(); // let len = self.widgets.widgets.len();
if len < 3 { // if len < 3 {
return Err(HError::NoWidgetError(Backtrace::new())); // return Err(HError::NoWidgetError(Backtrace::new()));
} // }
let widget = self.widgets.widgets.get(len - 3)?; // let widget = self.widgets.widgets.get(len - 3)?;
Ok(widget) // Ok(widget)
} // }
pub fn get_left_widget_mut(&mut self) -> HResult<&mut T> { // pub fn get_left_widget_mut(&mut self) -> HResult<&mut T> {
let len = self.widgets.widgets.len(); // let len = self.widgets.widgets.len();
if len < 3 { // if len < 3 {
return Err(HError::NoWidgetError(Backtrace::new())); // return Err(HError::NoWidgetError(Backtrace::new()));
} // }
let widget = self.widgets.widgets.get_mut(len - 3)?; // let widget = self.widgets.widgets.get_mut(len - 3)?;
Ok(widget) // Ok(widget)
} // }
pub fn get_main_widget(&self) -> HResult<&T> { // pub fn get_main_widget(&self) -> HResult<&T> {
let len = self.widgets.widgets.len(); // let len = self.widgets.widgets.len();
let widget = self.widgets.widgets.get(len-2)?; // let widget = self.widgets.widgets.get(len-2)?;
Ok(widget) // Ok(widget)
} // }
pub fn get_main_widget_mut(&mut self) -> HResult<&mut T> { // pub fn get_main_widget_mut(&mut self) -> HResult<&mut T> {
let len = self.widgets.widgets.len(); // let len = self.widgets.widgets.len();
let widget = self.widgets.widgets.get_mut(len-2)?; // let widget = self.widgets.widgets.get_mut(len-2)?;
Ok(widget) // Ok(widget)
} // }
pub fn get_right_widget(&self) -> HResult<&T> { // pub fn get_right_widget(&self) -> HResult<&T> {
let widget = self.widgets.widgets.last()?; // let widget = self.widgets.widgets.last()?;
Ok(widget) // Ok(widget)
} // }
pub fn get_right_widget_mut(&mut self) -> HResult<&mut T> { // pub fn get_right_widget_mut(&mut self) -> HResult<&mut T> {
let widget = self.widgets.widgets.last_mut()?; // let widget = self.widgets.widgets.last_mut()?;
Ok(widget) // Ok(widget)
} // }
} // }
impl<T> Widget for MillerColumns<T> // impl<T> Widget for MillerColumns<T>
where // where
T: Widget, // T: Widget,
T: PartialEq // T: PartialEq
{ // {
fn get_core(&self) -> HResult<&WidgetCore> { // fn get_core(&self) -> HResult<&WidgetCore> {
Ok(&self.core) // Ok(&self.core)
} // }
fn get_core_mut(&mut self) -> HResult<&mut WidgetCore> { // fn get_core_mut(&mut self) -> HResult<&mut WidgetCore> {
Ok(&mut self.core) // Ok(&mut self.core)
} // }
fn set_coordinates(&mut self, coordinates: &Coordinates) -> HResult<()> { // fn set_coordinates(&mut self, coordinates: &Coordinates) -> HResult<()> {
self.core.coordinates = coordinates.clone(); // self.core.coordinates = coordinates.clone();
self.widgets.set_coordinates(&coordinates) // self.widgets.set_coordinates(&coordinates)
} // }
fn refresh(&mut self) -> HResult<()> { // fn refresh(&mut self) -> HResult<()> {
self.widgets.refresh() // self.widgets.refresh()
} // }
fn get_drawlist(&self) -> HResult<String> { // fn get_drawlist(&self) -> HResult<String> {
let left_widget = self.get_left_widget()?; // let left_widget = self.get_left_widget()?;
let main_widget = self.get_main_widget()?; // let main_widget = self.get_main_widget()?;
let right_widget = self.get_right_widget()?; // let right_widget = self.get_right_widget()?;
Ok(format!("{}{}{}", // Ok(format!("{}{}{}",
main_widget.get_drawlist()?, // main_widget.get_drawlist()?,
left_widget.get_drawlist()?, // left_widget.get_drawlist()?,
right_widget.get_drawlist()?)) // right_widget.get_drawlist()?))
} // }
fn on_key(&mut self, key: Key) -> HResult<()> { // fn on_key(&mut self, key: Key) -> HResult<()> {
self.get_main_widget_mut().unwrap().on_key(key) // self.get_main_widget_mut().unwrap().on_key(key)
} // }
} // }