diff --git a/Cargo.toml b/Cargo.toml index b2244c9..b7d15fc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,3 +13,6 @@ toml = "0.9.5" [build-dependencies] slint-build = "1.12.1" + +[profile.release] +opt-level = "s" diff --git a/src/main.rs b/src/main.rs index 3e34f4c..19baaa8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -12,9 +12,18 @@ slint::include_modules!(); impl From for TimelineEvent { fn from(event: Event) -> Self { - let start = (event.start.hour as i32) * 3600 + (event.start.minute as i32) * 60 + (event.start.second as i32); - let end = (event.end.hour as i32) * 3600 + (event.end.minute as i32) * 60 + (event.end.second as i32); - TimelineEvent { start, duration: end - start, label: event.name.to_shared_string(), finished: event.finished } + let start = (event.start.hour as i32) * 3600 + + (event.start.minute as i32) * 60 + + (event.start.second as i32); + let end = (event.end.hour as i32) * 3600 + + (event.end.minute as i32) * 60 + + (event.end.second as i32); + TimelineEvent { + start, + duration: end - start, + label: event.name.to_shared_string(), + finished: event.finished + } } } @@ -72,6 +81,26 @@ fn main() -> Result<(), Box> { ui.invoke_update_record_offset(offset as i32); + ui.on_fetch_log({ + let config = config.clone(); + let ui_weak = ui.as_weak(); + move |year: i32, month: i32, day: i32| { + let ui = ui_weak.unwrap(); + let date = TomlDate { + year: year as u16, + month: month as u8, + day: day as u8 + }; + let events: Vec = Log::load_from(&config, date) + .events + .iter() + .map(|event| TimelineEvent::from((*event).clone())) + .collect(); + let model: ModelRc = Rc::new(VecModel::from(events)).into(); + ui.set_review_events(model); + } + }); + ui.on_save_log({ let config = config.clone(); let log = writing_log.clone(); diff --git a/ui/review.slint b/ui/review.slint index 229658b..9727c24 100644 --- a/ui/review.slint +++ b/ui/review.slint @@ -1,4 +1,4 @@ -import { VerticalBox, LineEdit, Button, DatePickerPopup, ComboBox } from "std-widgets.slint"; +import { VerticalBox, LineEdit, Button, DatePickerPopup, ComboBox, Slider } from "std-widgets.slint"; import { Timeline } from "timeline.slint"; export component ReviewWidget inherits VerticalBox { @@ -16,44 +16,44 @@ export component ReviewWidget inherits VerticalBox { tl := Timeline { updating: false; - TouchArea { - preferred-width: 100%; - preferred-height: 100%; - moved => { - if self.pressed { - root.offset -= (self.mouse-x - self.pressed-x) / 1px; - root.offset = clamp(root.offset, visible-time, max-offset); - } - } - } } GridLayout { spacing-vertical: 8px; spacing-horizontal: 16px; + Slider { + minimum: visible-time; + maximum: 24 * 3600; + value: offset; + row: 0; + colspan: 2; + changed(value) => { + offset = value; + } + } Text { text: "Day: \{current-day}/\{current-month}/\{current-year}"; font-size: 32px; horizontal-alignment: right; - row: 0; + row: 1; } Button { text: "Select"; clicked => { date-picker.show() } - row: 0; + row: 1; col: 1; } Text { text: "Span: "; font-size: 24px; - row: 1; + row: 2; horizontal-alignment: right; } ComboBox { model: combo-spans; current-index: 0; - row: 1; + row: 2; col: 1; selected(current-value) => { root.update-visible-time(current-value);