1 /*************************************************************************
3 * $RCSfile: RegistrationThread.java,v $
7 * last change: $Author: hr $ $Date: 2003-06-30 15:07:21 $
9 * The Contents of this file are made available subject to the terms of
12 * Copyright (c) 2003 by Sun Microsystems, Inc.
13 * All rights reserved.
15 * Redistribution and use in source and binary forms, with or without
16 * modification, are permitted provided that the following conditions
18 * 1. Redistributions of source code must retain the above copyright
19 * notice, this list of conditions and the following disclaimer.
20 * 2. Redistributions in binary form must reproduce the above copyright
21 * notice, this list of conditions and the following disclaimer in the
22 * documentation and/or other materials provided with the distribution.
23 * 3. Neither the name of Sun Microsystems, Inc. nor the names of its
24 * contributors may be used to endorse or promote products derived
25 * from this software without specific prior written permission.
27 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
30 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
31 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
32 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
33 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
34 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
35 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
36 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
37 * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39 *************************************************************************/
41 import java
.awt
.event
.ActionListener
;
46 import com
.sun
.star
.awt
.XTopWindowListener
;
47 import com
.sun
.star
.uno
.UnoRuntime
;
48 import com
.sun
.star
.bridge
.XUnoUrlResolver
;
49 import com
.sun
.star
.lang
.XMultiServiceFactory
;
50 import com
.sun
.star
.accessibility
.*;
51 import com
.sun
.star
.awt
.XExtendedToolkit
;
53 /** This class is used as a thread and registers or unregsiters a listener
54 given the constructor at all nodes of a tree of accessibility objects.
56 public class RegistrationThread
59 /** Start a new thread that adds or removes the given listener at all
60 accessible objects in the sub-tree rooted in the given accessible
63 The listener that is added or removed.
65 The root of the sub-tree of accessibility objects.
67 This flag decides whether to add or remove the listener.
69 public RegistrationThread (
70 EventListenerProxy aListener
,
71 XAccessibleContext xRoot
,
73 boolean bShowMessages
)
75 maListener
= aListener
;
77 mbRegister
= bRegister
;
78 mbShowMessages
= bShowMessages
;
83 MessageArea
.println ("starting to register at " + mxRoot
.getAccessibleName());
84 new Thread (this, "RegistrationThread").start();
92 System
.out
.println ("starting registration");
93 long nNodeCount
= traverseTree (mxRoot
);
94 System
.out
.println ("ending registration");
98 MessageArea
.print ("un");
99 MessageArea
.println ("registered at " + nNodeCount
100 + " objects in accessibility tree of " + mxRoot
.getAccessibleName());
107 /** Register this object as listener for accessibility events at all nodes
110 The root node of the tree at which to register.
112 public long traverseTree (XAccessibleContext xRoot
)
117 // Register the root node.
118 XAccessibleEventBroadcaster xBroadcaster
=
119 (XAccessibleEventBroadcaster
) UnoRuntime
.queryInterface (
120 XAccessibleEventBroadcaster
.class,
122 if (xBroadcaster
!= null)
125 xBroadcaster
.addEventListener (maListener
);
127 xBroadcaster
.removeEventListener (maListener
);
131 // Call this method recursively to register all sub-trees.
134 int nChildCount
= xRoot
.getAccessibleChildCount();
135 for (int i
=0; i
<nChildCount
; i
++)
137 XAccessible xChild
= xRoot
.getAccessibleChild (i
);
139 nNodeCount
+= traverseTree (xChild
.getAccessibleContext());
142 catch (com
.sun
.star
.lang
.IndexOutOfBoundsException aException
)
144 // The set of children has changed since our last call to
145 // getAccesibleChildCount(). Don't try any further on this
148 catch (com
.sun
.star
.lang
.DisposedException aException
)
150 // The child has been destroyed since our last call to
151 // getAccesibleChildCount(). That is OK. Don't try any
152 // further on this sub-tree.
158 private EventListenerProxy maListener
;
159 private XAccessibleContext mxRoot
;
160 private boolean mbRegister
;
161 private boolean mbShowMessages
;