1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
use {
super::{Screen, W},
crate::{
app::Status,
errors::ProgramError,
skin::PanelSkin,
},
minimad::{Alignment, Composite},
termimad::{Area, StyledChar},
};
pub fn write(
w: &mut W,
task: Option<&str>,
status: &Status,
area: &Area,
panel_skin: &PanelSkin,
screen: Screen,
) -> Result<(), ProgramError> {
let y = area.top;
screen.goto(w, area.left, y)?;
let mut x = area.left;
if let Some(pending_task) = task {
let pending_task = format!(" {}… ", pending_task);
x += pending_task.chars().count() as u16;
panel_skin.styles.status_job.queue(w, pending_task)?;
}
screen.goto(w, x, y)?;
let style = if status.error {
&panel_skin.status_skin.error
} else {
&panel_skin.status_skin.normal
};
style.write_inline_on(w, " ")?;
let remaining_width = (area.width - (x - area.left) - 1) as usize;
style.write_composite_fill(
w,
Composite::from_inline(&status.message),
remaining_width,
Alignment::Left,
)?;
Ok(())
}
pub fn erase(
w: &mut W,
area: &Area,
panel_skin: &PanelSkin,
screen: Screen,
) -> Result<(), ProgramError> {
screen.goto(w, area.left, area.top)?;
let sc = StyledChar::new(
panel_skin.status_skin.normal.paragraph.compound_style.clone(),
' ',
);
sc.queue_repeat(w, area.width as usize)?;
Ok(())
}