Provision for setting chained timers in the UI

master
Travis Evans 2025-04-11 21:20:24 -05:00
parent c7a0451649
commit 4cbdaa231a
2 changed files with 24 additions and 6 deletions

View File

@ -684,6 +684,21 @@ class TimerViewMenu {
} }
}, },
'Start': this.edit_start.bind(this), 'Start': this.edit_start.bind(this),
'At end': {
// Option to auto-start another timer when this one ends
format: v => v === -1
? "Stop"
: tt.TIMERS[v].display_status()
+ ' '
+ tt.TIMERS[v].display_name(),
value: tt.find_timer_by_id(this.timer.chain_id),
min: -1,
max: tt.TIMERS.length - 1,
onchange: v => {
this.timer.chain_id = v === -1 ? null : tt.TIMERS[v].id;
tt.set_timers_dirty();
}
},
'Vibrate pattern': require("buzz_menu").pattern( 'Vibrate pattern': require("buzz_menu").pattern(
this.timer.vibrate_pattern, this.timer.vibrate_pattern,
v => this.timer.vibrate_pattern = v), v => this.timer.vibrate_pattern = v),

View File

@ -29,6 +29,7 @@ class PrimitiveTimer {
this.vibrate_pattern = ';;;'; this.vibrate_pattern = ';;;';
this.buzz_count = 4; this.buzz_count = 4;
this.chain_id = null;
this._start_time = Date.now(); this._start_time = Date.now();
this._pause_time = is_running ? null : this._start_time; this._pause_time = is_running ? null : this._start_time;
@ -117,6 +118,7 @@ class PrimitiveTimer {
rate: this.rate, rate: this.rate,
name: this.name, name: this.name,
id: this.id, id: this.id,
chain_id: this.chain_id,
start_time: this._start_time, start_time: this._start_time,
pause_time: this._pause_time, pause_time: this._pause_time,
vibrate_pattern: this.vibrate_pattern, vibrate_pattern: this.vibrate_pattern,
@ -129,6 +131,7 @@ class PrimitiveTimer {
console.error('Incompatible data type for loading PrimitiveTimer state'); console.error('Incompatible data type for loading PrimitiveTimer state');
} }
let loaded = new this(data.origin, false, data.rate, data.name, data.id); let loaded = new this(data.origin, false, data.rate, data.name, data.id);
loaded.chain_id = data.chain_id;
loaded._start_time = data.start_time; loaded._start_time = data.start_time;
loaded._pause_time = data.pause_time; loaded._pause_time = data.pause_time;
loaded.vibrate_pattern = data.vibrate_pattern; loaded.vibrate_pattern = data.vibrate_pattern;
@ -176,14 +179,13 @@ function next_id() {
} }
function find_timer_by_id(id) { function find_timer_by_id(id) {
// Find a timer in TIMERS by its ID; return the timer object or null // Return index of timer with ID id, or -1 if not found
// if not found for (let idx = 0; idx < TIMERS.length; idx++) {
for (let timer of TIMERS) { if (TIMERS[idx].id == id) {
if (timer.id == id) { return idx;
return timer;
} }
} }
return null; return -1;
} }
function load_timers() { function load_timers() {
@ -339,6 +341,7 @@ E.on('kill', () => { save_settings(); });
exports = {TIMERS, SETTINGS, exports = {TIMERS, SETTINGS,
mod, ceil, mod, ceil,
next_id, find_timer_by_id,
load_timers, save_timers, schedule_save_timers, save_settings, schedule_save_settings, load_timers, save_timers, schedule_save_timers, save_settings, schedule_save_settings,
PrimitiveTimer, PrimitiveTimer,
format_duration, format_duration,