Fix delayed update of roster_width.
This commit is contained in:
parent
1e3e3d9fea
commit
91d3e81eca
3 changed files with 21 additions and 10 deletions
19
src/alarm.rs
19
src/alarm.rs
|
@ -1,6 +1,5 @@
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
use std::process::{Command, Stdio};
|
use std::process::{Command, Stdio};
|
||||||
use std::sync::atomic::Ordering;
|
|
||||||
use termion::{color, cursor, style};
|
use termion::{color, cursor, style};
|
||||||
use termion::raw::RawTerminal;
|
use termion::raw::RawTerminal;
|
||||||
use crate::{Clock, Config, Layout, Position};
|
use crate::{Clock, Config, Layout, Position};
|
||||||
|
@ -207,7 +206,6 @@ impl AlarmRoster {
|
||||||
|
|
||||||
// Draw alarm roster according to layout.
|
// Draw alarm roster according to layout.
|
||||||
pub fn draw<W: Write>(&self, stdout: &mut RawTerminal<W>, layout: &mut Layout) {
|
pub fn draw<W: Write>(&self, stdout: &mut RawTerminal<W>, layout: &mut Layout) {
|
||||||
let mut width: u16 = 0;
|
|
||||||
let mut index = 0;
|
let mut index = 0;
|
||||||
|
|
||||||
// Find first item to print in case we lack space to print them all.
|
// Find first item to print in case we lack space to print them all.
|
||||||
|
@ -247,16 +245,17 @@ impl AlarmRoster {
|
||||||
.unwrap();
|
.unwrap();
|
||||||
}
|
}
|
||||||
index += 1;
|
index += 1;
|
||||||
// Calculate roster width. Actual display width is 3 chars wider.
|
|
||||||
if 3 + alarm.display.len() as u16 > width {
|
|
||||||
width = 3 + alarm.display.len() as u16;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// Update layout information.
|
}
|
||||||
if layout.roster_width != width {
|
|
||||||
layout.roster_width = width;
|
// Return width of roster.
|
||||||
layout.force_recalc.store(true, Ordering::Relaxed);
|
pub fn width(&self) -> u16 {
|
||||||
|
let mut width: u16 = 0;
|
||||||
|
for alarm in &self.list {
|
||||||
|
if alarm.display.len() as u16 > width { width = alarm.display.len() as u16; }
|
||||||
}
|
}
|
||||||
|
// Actual width is 3 columns wider if it's not 0.
|
||||||
|
if width == 0 { 0 } else { width.saturating_add(3) }
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reset every alarm.
|
// Reset every alarm.
|
||||||
|
|
|
@ -127,5 +127,12 @@ impl Layout {
|
||||||
col: 12,
|
col: 12,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn set_roster_width(&mut self, width: u16) {
|
||||||
|
if self.width != width {
|
||||||
|
self.roster_width = width;
|
||||||
|
self.force_recalc.store(true, Ordering::Relaxed);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -79,6 +79,9 @@ fn main() {
|
||||||
let mut buffer_updated: bool = false;
|
let mut buffer_updated: bool = false;
|
||||||
let mut countdown = Countdown::new();
|
let mut countdown = Countdown::new();
|
||||||
|
|
||||||
|
// Initialise roster_width.
|
||||||
|
layout.set_roster_width(alarm_roster.width());
|
||||||
|
|
||||||
// Register signal handlers.
|
// Register signal handlers.
|
||||||
let signal = Arc::new(AtomicUsize::new(0));
|
let signal = Arc::new(AtomicUsize::new(0));
|
||||||
register_signal_handlers(&signal, &layout);
|
register_signal_handlers(&signal, &layout);
|
||||||
|
@ -154,6 +157,7 @@ fn main() {
|
||||||
if alarm_roster.drop_last() {
|
if alarm_roster.drop_last() {
|
||||||
// If we remove the last alarm we have to reset "countdown"
|
// If we remove the last alarm we have to reset "countdown"
|
||||||
// manually. It is safe to do it anyway.
|
// manually. It is safe to do it anyway.
|
||||||
|
layout.set_roster_width(alarm_roster.width());
|
||||||
countdown.reset();
|
countdown.reset();
|
||||||
layout.force_redraw = true;
|
layout.force_redraw = true;
|
||||||
}
|
}
|
||||||
|
@ -180,6 +184,7 @@ fn main() {
|
||||||
error_msg(&mut stdout, &layout, e);
|
error_msg(&mut stdout, &layout, e);
|
||||||
} else {
|
} else {
|
||||||
// Input buffer processed without error.
|
// Input buffer processed without error.
|
||||||
|
layout.set_roster_width(alarm_roster.width());
|
||||||
layout.force_redraw = true;
|
layout.force_redraw = true;
|
||||||
}
|
}
|
||||||
buffer.clear();
|
buffer.clear();
|
||||||
|
|
Loading…
Reference in a new issue