gui/collects/framework/autosave.ss
Robby Findler 8418866da8 ...
original commit: 0a0cdb5079f69d7fa03712b3e3e6818bfcba9269
1998-08-31 18:26:59 +00:00

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))))])))))))