diff --git a/.gitignore b/.gitignore index 91e558f..95fc34f 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,6 @@ # These are backup files generated by rustfmt **/*.rs.bk + +# Logs may be created here if $XDG_CONFIG_HOME is not set +/logs/ diff --git a/src/main.rs b/src/main.rs index 9b1c5a0..9797339 100644 --- a/src/main.rs +++ b/src/main.rs @@ -59,6 +59,7 @@ fn load_log(ui_weak: Weak, log: Arc>) { let model: ModelRc = Rc::new(VecModel::from(events)).into(); ui.set_record_events(model); ui.set_in_progress(in_progress); + ui.invoke_get_previous_event(); } fn load_colors(ui_weak: Weak, config: Arc) { @@ -229,6 +230,25 @@ fn main() -> Result<(), Box> { ui.invoke_start_new_event(event_name); } }); + + ui.on_get_previous_event({ + let ui_weak = ui.as_weak(); + let log = writing_log.clone(); + move || { + let ui = ui_weak.unwrap(); + let prev_event_name = { + let log_guard = log.lock().expect("Log shouldn't be used twice"); + let prev_index = log_guard.events.len() - 2; + log_guard.events + .get(prev_index) + .expect("Index is already checked") + .name + .clone() + }; + println!("{}", prev_event_name.as_str()); + ui.set_previous_event_name(prev_event_name.to_shared_string()); + } + }); ui.on_new_day_started({ let ui_weak = ui.as_weak(); @@ -272,7 +292,10 @@ fn main() -> Result<(), Box> { } }); + ui.invoke_get_previous_event(); + ui.run()?; + Ok(()) } diff --git a/ui/app-window.slint b/ui/app-window.slint index 7535149..76cbad1 100644 --- a/ui/app-window.slint +++ b/ui/app-window.slint @@ -9,6 +9,7 @@ export component AppWindow inherits Window { callback stop-event <=> record.stop-event; callback chain-event <=> record.chain-event; callback new-day-started <=> record.new-day-started; + callback get-previous-event <=> record.get-previous-event; callback update-record-offset(int); callback save-log; @@ -24,6 +25,7 @@ export component AppWindow inherits Window { in-out property record-offset <=> record.offset; in-out property record-visible-time <=> record.visible-time; in-out property in-progress <=> record.in-progress; + in property previous-event-name <=> record.previous-event-name; in-out property review-events <=> review.events; in-out property review-offset <=> review.offset; diff --git a/ui/record.slint b/ui/record.slint index 4d7090c..0f0c8e5 100644 --- a/ui/record.slint +++ b/ui/record.slint @@ -7,6 +7,7 @@ export component RecordWidget inherits VerticalBox { callback start-new-event(string); callback chain-event(string); callback stop-event; + callback get-previous-event(); in-out property visible-time <=> tl.visible-time; in-out property updating <=> tl.updating; in-out property offset <=> tl.offset; @@ -14,6 +15,7 @@ export component RecordWidget inherits VerticalBox { in property<[string]> combo-spans: []; in-out property in-progress: false; property event-name: ""; + in property previous-event-name: ""; property minimized: false; property combo-index: 0; tl := Timeline { @@ -31,7 +33,7 @@ export component RecordWidget inherits VerticalBox { text: event-name; font-size: 24px; horizontal-alignment: center; - colspan: 2; + colspan: 6; row: 0; edited(text) => { event-name = text; @@ -40,11 +42,13 @@ export component RecordWidget inherits VerticalBox { Button { text: in-progress ? "Stop" : "Start"; row: 1; + colspan: 2; clicked => { if in-progress { root.stop-event(); } else { root.start-new-event(event-name); + root.get-previous-event(); } in-progress = !in-progress; } @@ -52,23 +56,39 @@ export component RecordWidget inherits VerticalBox { Button { text: "Chain"; enabled: in-progress; - col: 1; + col: 3; row: 1; + colspan: 2; clicked => { root.chain-event(event-name); + root.get-previous-event(); + } + } + Button { + text: previous-event-name == "" ? "Chain previous event (None)" : "Chain previous event (\{previous-event-name})"; + enabled: in-progress && previous-event-name != ""; + col: 5; + row: 1; + colspan: 2; + clicked => { + event-name = previous-event-name; + root.chain-event(event-name); + root.get-previous-event(); } } Text { text: "Span:"; font-size: 24px; row: 2; + colspan: 3; horizontal-alignment: right; } ComboBox { model: combo-spans; current-index: combo-index; row: 2; - col: 1; + col: 3; + colspan: 3; selected(current-value) => { root.update-visible-time(current-value); combo-index = self.current-index;