42 lines
1.1 KiB
Scheme
42 lines
1.1 KiB
Scheme
(unit/sig framework:autosave^
|
|
(import [exit : framework:exit^]
|
|
[preferences : framework:preferences^])
|
|
|
|
(define register
|
|
(let* ([objects null]
|
|
[timer
|
|
(make-object
|
|
(class timer% ()
|
|
(inherit start)
|
|
(override
|
|
[notify
|
|
(lambda ()
|
|
(when (preferences:get-preference 'framework:autosaving-on?)
|
|
(set! objects
|
|
(let loop ([list objects])
|
|
(if (null? list)
|
|
null
|
|
(let ([object (weak-box-value (car list))])
|
|
(if object
|
|
(begin
|
|
(send object do-autosave)
|
|
(cons (car list) (loop (cdr list))))
|
|
(loop (cdr list))))))))
|
|
(let ([seconds (preferences:get 'framework:autosave-delay)])
|
|
(start (* 1000 seconds) #t)))])
|
|
(sequence
|
|
(super-init)
|
|
(let ([seconds (preferences:get 'framework:autosave-delay)])
|
|
(start (* 1000 seconds) #t)))))])
|
|
(lambda (b)
|
|
(set! objects
|
|
(let loop ([objects objects])
|
|
(cond
|
|
[(null? objects) (list (make-weak-box b))]
|
|
[else (let ([weak-box (car objects)])
|
|
(if (weak-box-value weak-box)
|
|
(cons weak-box (loop (cdr objects)))
|
|
(loop (cdr objects))))])))))))
|
|
|
|
|