mirror of
https://github.com/bobwen-dev/hunter
synced 2025-04-12 00:55:41 +02:00
async_widget2
This commit is contained in:
parent
205e9dc426
commit
2860b1b8b1
@ -196,8 +196,8 @@ where
|
|||||||
let pos = self
|
let pos = self
|
||||||
.content
|
.content
|
||||||
.files
|
.files
|
||||||
.par_iter()
|
.iter()
|
||||||
.position_any(|item| item == file)
|
.position(|item| item == file)
|
||||||
.unwrap_or(0);
|
.unwrap_or(0);
|
||||||
self.set_selection(pos);
|
self.set_selection(pos);
|
||||||
}
|
}
|
||||||
@ -346,7 +346,7 @@ where
|
|||||||
let offset = self.offset;
|
let offset = self.offset;
|
||||||
self.content
|
self.content
|
||||||
.files
|
.files
|
||||||
.par_iter()
|
.iter()
|
||||||
.skip(offset)
|
.skip(offset)
|
||||||
.take(ysize)
|
.take(ysize)
|
||||||
.map(|file| self.render_line(&file))
|
.map(|file| self.render_line(&file))
|
||||||
@ -378,7 +378,7 @@ impl Widget for ListView<Files> {
|
|||||||
|
|
||||||
output += &self
|
output += &self
|
||||||
.buffer
|
.buffer
|
||||||
.par_iter()
|
.iter()
|
||||||
//.skip(self.offset)
|
//.skip(self.offset)
|
||||||
//.take(ysize as usize)
|
//.take(ysize as usize)
|
||||||
.enumerate()
|
.enumerate()
|
||||||
|
@ -37,7 +37,7 @@ mod tabview;
|
|||||||
mod async_widget;
|
mod async_widget;
|
||||||
|
|
||||||
use window::Window;
|
use window::Window;
|
||||||
use async_widget::AsyncPlug;
|
///use async_widget::AsyncPlug;
|
||||||
use widget::Widget;
|
use widget::Widget;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
@ -2,13 +2,13 @@ use std::io::Write;
|
|||||||
use std::sync::Mutex;
|
use std::sync::Mutex;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use crate::coordinates::{Coordinates, Position, Size};
|
use crate::coordinates::{Coordinates};
|
||||||
use crate::files::{File, Files, Kind};
|
use crate::files::{File, Files, Kind};
|
||||||
use crate::listview::ListView;
|
use crate::listview::ListView;
|
||||||
use crate::textview::TextView;
|
use crate::textview::TextView;
|
||||||
use crate::widget::Widget;
|
use crate::widget::Widget;
|
||||||
use crate::async_widget::AsyncPlug;
|
//use crate::async_widget::AsyncPlug;
|
||||||
|
use crate::async_widget::AsyncPlug2;
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
static ref PIDS: Arc<Mutex<Vec<u32>>> = { Arc::new(Mutex::new(vec![])) };
|
static ref PIDS: Arc<Mutex<Vec<u32>>> = { Arc::new(Mutex::new(vec![])) };
|
||||||
@ -30,36 +30,43 @@ fn is_current(file: &File) -> bool {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum WillBe<T> {
|
||||||
|
Is(T),
|
||||||
|
Becoming,
|
||||||
|
Wont(Box<std::error::Error>)
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(PartialEq)]
|
#[derive(PartialEq)]
|
||||||
pub struct AsyncPreviewer {
|
pub struct AsyncPreviewer {
|
||||||
pub file: Option<File>,
|
pub file: Option<File>,
|
||||||
pub buffer: String,
|
pub buffer: String,
|
||||||
pub coordinates: Coordinates,
|
pub coordinates: Coordinates,
|
||||||
pub async_plug: AsyncPlug
|
pub async_plug: AsyncPlug2<Box<dyn Widget + Send + 'static>>
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AsyncPreviewer {
|
impl AsyncPreviewer {
|
||||||
pub fn new() -> AsyncPreviewer {
|
pub fn new() -> AsyncPreviewer {
|
||||||
let textview = crate::textview::TextView {
|
let closure = Box::new(|| {
|
||||||
lines: vec![],
|
Box::new(crate::textview::TextView {
|
||||||
buffer: "".to_string(),
|
lines: vec![],
|
||||||
coordinates: Coordinates::new(),
|
buffer: "".to_string(),
|
||||||
};
|
coordinates: Coordinates::new()
|
||||||
let textview = Box::new(textview);
|
}) as Box<dyn Widget + Send + 'static>
|
||||||
|
});
|
||||||
|
|
||||||
AsyncPreviewer {
|
AsyncPreviewer {
|
||||||
file: None,
|
file: None,
|
||||||
buffer: String::new(),
|
buffer: String::new(),
|
||||||
coordinates: Coordinates::new(),
|
coordinates: Coordinates::new(),
|
||||||
async_plug: AsyncPlug::new(textview)
|
async_plug: AsyncPlug2::new_from_closure(closure),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn set_file(&mut self, file: &File) {
|
pub fn set_file(&mut self, file: &File) {
|
||||||
let coordinates = self.coordinates.clone();
|
let coordinates = self.coordinates.clone();
|
||||||
let file = file.clone();
|
let file = file.clone();
|
||||||
let redraw = crate::term::reset() + &self.get_redraw_empty_list(0);
|
let redraw = crate::term::reset() + &self.get_redraw_empty_list(0);
|
||||||
let pids = PIDS.clone();
|
//let pids = PIDS.clone();
|
||||||
kill_procs();
|
//kill_procs();
|
||||||
|
|
||||||
self.async_plug.replace_widget(Box::new(move || {
|
self.async_plug.replace_widget(Box::new(move || {
|
||||||
kill_procs();
|
kill_procs();
|
||||||
@ -75,7 +82,7 @@ impl AsyncPreviewer {
|
|||||||
file_list.refresh();
|
file_list.refresh();
|
||||||
//if !is_current(&file) { return }
|
//if !is_current(&file) { return }
|
||||||
file_list.animate_slide_up();
|
file_list.animate_slide_up();
|
||||||
return Box::new(file_list) as Box<dyn Widget + Send>;
|
return Box::new(file_list)
|
||||||
|
|
||||||
}
|
}
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
@ -85,7 +92,7 @@ impl AsyncPreviewer {
|
|||||||
buffer: "".to_string(),
|
buffer: "".to_string(),
|
||||||
coordinates: Coordinates::new(),
|
coordinates: Coordinates::new(),
|
||||||
};
|
};
|
||||||
return Box::new(textview) as Box<dyn Widget + Send>;
|
return Box::new(textview)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
@ -99,7 +106,7 @@ impl AsyncPreviewer {
|
|||||||
textview.refresh();
|
textview.refresh();
|
||||||
//if !is_current(&file) { return }
|
//if !is_current(&file) { return }
|
||||||
textview.animate_slide_up();
|
textview.animate_slide_up();
|
||||||
return Box::new(textview);
|
return Box::new(textview)
|
||||||
} else {
|
} else {
|
||||||
let process =
|
let process =
|
||||||
std::process::Command::new("scope.sh")
|
std::process::Command::new("scope.sh")
|
||||||
@ -135,7 +142,7 @@ impl AsyncPreviewer {
|
|||||||
textview.set_coordinates(&coordinates);
|
textview.set_coordinates(&coordinates);
|
||||||
textview.refresh();
|
textview.refresh();
|
||||||
textview.animate_slide_up();
|
textview.animate_slide_up();
|
||||||
return Box::new(textview);
|
return Box::new(textview)
|
||||||
}
|
}
|
||||||
}, None => {}
|
}, None => {}
|
||||||
}
|
}
|
||||||
@ -149,7 +156,7 @@ impl AsyncPreviewer {
|
|||||||
buffer: "".to_string(),
|
buffer: "".to_string(),
|
||||||
coordinates: Coordinates::new(),
|
coordinates: Coordinates::new(),
|
||||||
};
|
};
|
||||||
return Box::new(textview);
|
return Box::new(textview)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}}))
|
}}))
|
||||||
@ -184,3 +191,25 @@ impl Widget for AsyncPreviewer {
|
|||||||
"".to_string()
|
"".to_string()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<T> Widget for Box<T> where T: Widget + ?Sized {
|
||||||
|
fn get_coordinates(&self) -> &Coordinates {
|
||||||
|
(**self).get_coordinates()
|
||||||
|
}
|
||||||
|
fn set_coordinates(&mut self, coordinates: &Coordinates) {
|
||||||
|
if (**self).get_coordinates() == coordinates {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
(**self).set_coordinates(&coordinates);
|
||||||
|
(**self).refresh();
|
||||||
|
}
|
||||||
|
fn render_header(&self) -> String {
|
||||||
|
(**self).render_header()
|
||||||
|
}
|
||||||
|
fn refresh(&mut self) {
|
||||||
|
(**self).refresh()
|
||||||
|
}
|
||||||
|
fn get_drawlist(&self) -> String {
|
||||||
|
(**self).get_drawlist()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -63,7 +63,7 @@ impl Widget for TextView {
|
|||||||
self.buffer = self.get_clearlist() +
|
self.buffer = self.get_clearlist() +
|
||||||
&self
|
&self
|
||||||
.lines
|
.lines
|
||||||
.par_iter()
|
.iter()
|
||||||
.take(ysize as usize)
|
.take(ysize as usize)
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.map(|(i, line)| {
|
.map(|(i, line)| {
|
||||||
|
@ -132,7 +132,8 @@ pub trait Widget {
|
|||||||
let buffer = self.get_drawlist();
|
let buffer = self.get_drawlist();
|
||||||
write!(bufout, "{}{}",
|
write!(bufout, "{}{}",
|
||||||
clear, buffer).unwrap();
|
clear, buffer).unwrap();
|
||||||
|
bufout.flush();
|
||||||
|
|
||||||
|
|
||||||
std::thread::sleep(pause);
|
std::thread::sleep(pause);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user