diff --git a/apps/ely-show/src/output/dialog.rs b/apps/ely-show/src/output/dialog.rs index 2a734c5..8b5c282 100644 --- a/apps/ely-show/src/output/dialog.rs +++ b/apps/ely-show/src/output/dialog.rs @@ -13,6 +13,11 @@ use super::{Kind, Output, Range}; use crate::deck::Deck; use crate::dialog::Dialog; +/// A typed slide number on the deck; 0 means all. +fn slide_number(value: f64, last: u32) -> u32 { + value.round().clamp(1.0, f64::from(last.max(1))) as u32 +} + /// What goes out, which slides, how many a page. pub fn output_dialog( this: gpui::Entity, @@ -79,7 +84,7 @@ pub fn output_dialog( let bound = |id: &'static str, value: u32, first: bool| { // A typed number counts before blur commits it. let set = move |this: &gpui::Entity, value: f64, cx: &mut gpui::App| { - let value = value.round() as u32; + let value = slide_number(value, last); change(this, cx, &|output| { if let Range::Slides(from, to) = &mut output.range { *(if first { from } else { to }) = value; @@ -135,3 +140,16 @@ pub fn output_dialog( .on_click(move |_, _, cx| this.update(cx, |deck, cx| deck.output(cx))) }) } + +#[cfg(test)] +mod tests { + use super::slide_number; + + #[test] + fn a_typed_number_stays_on_the_deck() { + assert_eq!(slide_number(0.0, 5), 1, "0 would export every slide"); + assert_eq!(slide_number(-3.0, 5), 1); + assert_eq!(slide_number(2.6, 5), 3); + assert_eq!(slide_number(9.0, 5), 5); + } +} diff --git a/tasks/BUGS.md b/tasks/BUGS.md index 11e03f8..11bdce8 100644 --- a/tasks/BUGS.md +++ b/tasks/BUGS.md @@ -28,7 +28,7 @@ - [x] S-03 ElyShow 的缩放一两帧后弹回“适合幻灯片”,缩放功能不可用 — 只在标签首次观察时适合一次;R1 PASS - [x] S-04 选屏对话框被别的对话框顶掉后,`show_starting` 卡住、放映副本泄漏 — 有对话框开着时不再顶掉它,提示先完成;选屏对话框被拒即丢副本;R2 PASS - [x] S-05 一条批注的时间恰为午夜或只有日期,整个批注栏不显示 — 读不出时间的批注只占一行汇总,其余照常显示(jiff 本可读只有日期的时间);R2 PASS -- [ ] S-06 导出或打印的“从–到”填 0 时导出全部幻灯片 +- [x] S-06 导出或打印的“从–到”填 0 时导出全部幻灯片 — 键入的页码夹到 1..=末页;R1 PASS - [ ] S-07 母版视图下演示检查的行按幻灯片序号跳转 - [ ] S-08 刚编辑过幻灯片就进备注栏键入,备注可能丢 - [ ] S-09 改尺寸失败后 `size_asked` 一直留着 diff --git a/tasks/reviews/S-06-r1.md b/tasks/reviews/S-06-r1.md new file mode 100644 index 0000000..7ef22e9 --- /dev/null +++ b/tasks/reviews/S-06-r1.md @@ -0,0 +1 @@ +PASS