summaryrefslogtreecommitdiffstats
path: root/src/listview.rs
diff options
context:
space:
mode:
authorrabite <rabite@posteo.de>2019-02-13 10:08:29 +0100
committerrabite <rabite@posteo.de>2019-02-13 10:08:29 +0100
commit205e9dc4265b9a9d7fdcd836e646830bf8e0ce30 (patch)
tree0e0cc4907fd912e05c77a58700ca42bf2998f181 /src/listview.rs
parent56d9c3521599baef6ff1472c0c95fa07f17a5a67 (diff)
speed optimization
Diffstat (limited to 'src/listview.rs')
-rw-r--r--src/listview.rs19
1 files changed, 13 insertions, 6 deletions
diff --git a/src/listview.rs b/src/listview.rs
index cec6630..b3ab73f 100644
--- a/src/listview.rs
+++ b/src/listview.rs
@@ -19,6 +19,7 @@ where
T: Send,
{
pub content: T,
+ lines: usize,
selection: usize,
offset: usize,
buffer: Vec<String>,
@@ -29,11 +30,12 @@ where
impl<T> ListView<T>
where
ListView<T>: Widget,
- T: Send,
+ T: Send
{
pub fn new(content: T) -> ListView<T> {
let view = ListView::<T> {
content: content,
+ lines: 0,
selection: 0,
offset: 0,
buffer: Vec::new(),
@@ -59,7 +61,7 @@ where
self.seeking = false;
}
fn move_down(&mut self) {
- let lines = self.buffer.len();
+ let lines = self.lines;
let y_size = self.coordinates.ysize() as usize;
if self.selection == lines - 1 {
@@ -340,9 +342,13 @@ where
}
fn render(&self) -> Vec<String> {
+ let ysize = self.get_coordinates().ysize() as usize;
+ let offset = self.offset;
self.content
.files
.par_iter()
+ .skip(offset)
+ .take(ysize)
.map(|file| self.render_line(&file))
.collect()
}
@@ -360,6 +366,7 @@ impl Widget for ListView<Files> {
self.refresh();
}
fn refresh(&mut self) {
+ self.lines = self.content.len();
self.buffer = self.render();
}
@@ -372,8 +379,8 @@ impl Widget for ListView<Files> {
output += &self
.buffer
.par_iter()
- .skip(self.offset)
- .take(ysize as usize)
+ //.skip(self.offset)
+ //.take(ysize as usize)
.enumerate()
.map(|(i, item)| {
let mut output = term::normal_color();
@@ -405,8 +412,8 @@ impl Widget for ListView<Files> {
self.move_up();
self.refresh();
}
- Key::Char('P') => for _ in 0..10 { self.move_up() }
- Key::Char('N') => for _ in 0..10 { self.move_down() }
+ Key::Char('P') => { for _ in 0..10 { self.move_up() } self.refresh(); }
+ Key::Char('N') => { for _ in 0..10 { self.move_down() } self.refresh(); }
Key::Down | Key::Char('n') => {
self.move_down();
self.refresh();