diff options
author | rabite <rabite@posteo.de> | 2019-03-02 19:39:24 +0100 |
---|---|---|
committer | rabite <rabite@posteo.de> | 2019-03-02 23:28:03 +0100 |
commit | eb5a86b7cd37dc39d20f6ce122f671f94f51b75a (patch) | |
tree | a60e83dca33a46ebcc367dbfe98c2e8250210289 /src/textview.rs | |
parent | e2acef5ddfa5c7bf470aee5e24f429eabfb17951 (diff) |
moved window stuff to widget itself
Diffstat (limited to 'src/textview.rs')
-rw-r--r-- | src/textview.rs | 71 |
1 files changed, 37 insertions, 34 deletions
diff --git a/src/textview.rs b/src/textview.rs index 455e961..2d7fafd 100644 --- a/src/textview.rs +++ b/src/textview.rs @@ -1,77 +1,79 @@ use std::io::BufRead; -use crate::coordinates::{Coordinates}; use crate::files::File; use crate::term::sized_string; -use crate::widget::Widget; +use crate::widget::{Widget, WidgetCore}; +use crate::fail::HResult; #[derive(PartialEq)] pub struct TextView { pub lines: Vec<String>, pub buffer: String, - pub coordinates: Coordinates, + pub core: WidgetCore } impl TextView { - pub fn new_blank() -> TextView { + pub fn new_blank(core: &WidgetCore) -> TextView { TextView { lines: vec![], buffer: String::new(), - coordinates: Coordinates::new() + core: core.clone() } } - pub fn new_from_file(file: &File) -> TextView { - let file = std::fs::File::open(&file.path).unwrap(); + pub fn new_from_file(core: &WidgetCore, file: &File) -> HResult<TextView> { + let file = std::fs::File::open(&file.path)?; let file = std::io::BufReader::new(file); let lines = file.lines().map(|line| - line.unwrap() - .replace("\t", " ")).collect(); + Ok(line? + .replace("\t", " "))) + .filter_map(|l: HResult<String>| l.ok()) + .collect(); - TextView { + Ok(TextView { lines: lines, buffer: String::new(), - coordinates: Coordinates::new(), - } + core: core.clone() + }) } - pub fn new_from_file_limit_lines(file: &File, num: usize) -> TextView { + pub fn new_from_file_limit_lines(core: &WidgetCore, + file: &File, + num: usize) -> HResult<TextView> { let file = std::fs::File::open(&file.path).unwrap(); let file = std::io::BufReader::new(file); let lines = file.lines() .take(num) .map(|line| - line.unwrap() - .replace("\t", " ")).collect(); + Ok(line? + .replace("\t", " "))) + .filter_map(|l: HResult<String>| l.ok()) + .collect(); - TextView { + Ok(TextView { lines: lines, buffer: String::new(), - coordinates: Coordinates::new(), - } + core: core.clone() + }) } - pub fn set_text(&mut self, text: &str) { + pub fn set_text(&mut self, text: &str) -> HResult<()> { let lines = text.lines().map(|l| l.to_string()).collect(); self.lines = lines; - self.refresh(); + self.refresh() } } impl Widget for TextView { - fn get_coordinates(&self) -> &Coordinates { - &self.coordinates - } - fn set_coordinates(&mut self, coordinates: &Coordinates) { - self.coordinates = coordinates.clone(); - self.refresh(); + fn get_core(&self) -> HResult<&WidgetCore> { + Ok(&self.core) } - fn render_header(&self) -> String { - "".to_string() + fn get_core_mut(&mut self) -> HResult<&mut WidgetCore> { + Ok(&mut self.core) } - fn refresh(&mut self) { - let (xsize, ysize) = self.get_coordinates().size().size(); - let (xpos, ypos) = self.get_coordinates().position().position(); + fn refresh(&mut self) -> HResult<()> { + let (xsize, ysize) = self.get_coordinates()?.size().size(); + let (xpos, ypos) = self.get_coordinates()?.position().position(); - self.buffer = self.get_clearlist() + + self.buffer = self.get_clearlist()? + &self .lines .iter() @@ -85,9 +87,10 @@ impl Widget for TextView { sized_string(&line, xsize)) }) .collect::<String>(); + Ok(()) } - fn get_drawlist(&self) -> String { - self.buffer.clone() + fn get_drawlist(&self) -> HResult<String> { + Ok(self.buffer.clone()) } } |