Re: Setting cursor for application
Sarah Calvo writes:
> I have an application with lots of windows, and for an operation that
> takes a long time I would like to set the cursor for all windows to a
> "watch" temporarily.
>
> I can easily set the cursor for a particular widget, but can't find a
> way to set it for the entire application. I do not want to run through
> all widgets in the program and store the old cursor value, and then set
> the cursor to the watch.
Why not?
After all this is quite easy:
(define start-wait #f)
(define stop-wait #f)
(let ((cursors '()))
(set! start-wait (lambda (cursor)
(for-each-widget (lambda (x)
(set! cursors
(cons (cons x (tk-get x :cursor))
cursors))
(tk-set! x :cursor cursor)))))
(set! stop-wait (lambda ()
(for-each (lambda (x)
(tk-set! (car x) :cursor (cdr x)))
cursors))))
with the for-each-widget defined as
(define (for-each-widget proc)
;; Apply PROC to all the living widgets
(letrec ((aux (lambda (w)
(for-each (lambda (x)
(proc x)
(if (member (winfo 'class x)
'("Toplevel" "Frame"))
(aux x)))
(winfo 'children w)))))
(proc *root*)
(aux *root*)))
After that you just say
(start-wait "watch")
to set the wath cursor to all the widgets and
(stop-wait)
to restore the initial cursors.
Hope it helps
-- Erick
Received on Thu Aug 19 1999 - 21:46:27 CEST
This archive was generated by hypermail 2.3.0
: Mon Jul 21 2014 - 19:38:59 CEST