1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 package org.openoffice.java.accessibility;
25 
26 import com.sun.star.uno.*;
27 import com.sun.star.accessibility.*;
28 
29 class Button extends AbstractButton implements javax.accessibility.Accessible {
30 
Button(XAccessible xAccessible, XAccessibleContext xAccessibleContext)31     public Button(XAccessible xAccessible, XAccessibleContext xAccessibleContext) {
32         super(xAccessible, xAccessibleContext);
33     }
34 
createEventListener()35     protected XAccessibleEventListener createEventListener() {
36         return new AccessibleButtonListener();
37     }
38 
39     protected class AccessibleButtonListener
40         extends AccessibleUNOComponentListener {
AccessibleButtonListener()41         protected AccessibleButtonListener() {
42             super();
43         }
44 
getContext( Object any )45         protected javax.accessibility.AccessibleContext getContext( Object any ) {
46             try {
47                 XAccessible xAccessible = (XAccessible)
48                     AnyConverter.toObject( AccessibleObjectFactory.XAccessibleType, any );
49 
50                     javax.accessibility.Accessible accessible =
51                     (javax.accessibility.Accessible) Button.this.getComponent( xAccessible );
52 
53                     return accessible.getAccessibleContext();
54             } catch( com.sun.star.uno.Exception e ) {
55                 return null;
56             }
57         }
58 
59         /** Called by OpenOffice process to notify property changes */
notifyEvent(AccessibleEventObject event)60         public void notifyEvent(AccessibleEventObject event) {
61             switch (event.EventId) {
62                 case AccessibleEventId.CHILD:
63                     java.awt.Component c = getComponent(unoAccessible);
64 
65                     Object values[] = { null, null };
66 
67                     if (AnyConverter.isObject(event.OldValue)) {
68                         values[0] = getContext( event.OldValue );
69                     }
70 
71                     if (AnyConverter.isObject(event.NewValue)) {
72                         values[1] = getContext( event.NewValue);
73                     }
74 
75                     firePropertyChange(javax.accessibility.AccessibleContext.ACCESSIBLE_CHILD_PROPERTY,
76                         values[0], values[1]);
77                     break;
78 
79                 default:
80                     super.notifyEvent(event);
81             }
82         }
83     }
84 
85     /** Creates the AccessibleContext associated with this object */
createAccessibleContext()86     public javax.accessibility.AccessibleContext createAccessibleContext() {
87         return new AccessibleButton();
88     }
89 
getComponent(XAccessible unoAccessible)90     protected java.awt.Component getComponent(XAccessible unoAccessible) {
91         java.awt.Component c = AccessibleObjectFactory.getAccessibleComponent(unoAccessible);
92 
93         if (c == null) {
94             c = AccessibleObjectFactory.createAccessibleComponent(unoAccessible);
95 
96             if (c instanceof javax.accessibility.Accessible) {
97                 ((javax.accessibility.Accessible) c).getAccessibleContext()
98                  .setAccessibleParent(this);
99             }
100 
101             if( c instanceof java.awt.Container ) {
102                 AccessibleObjectFactory.populateContainer((java.awt.Container) c, unoAccessible.getAccessibleContext() );
103             }
104         }
105 
106         return c;
107     }
108 
109     protected class AccessibleButton extends AccessibleAbstractButton {
110 
111         /** Gets the role of this object */
getAccessibleRole()112         public javax.accessibility.AccessibleRole getAccessibleRole() {
113             return javax.accessibility.AccessibleRole.PUSH_BUTTON;
114         }
115 
116         /** Returns the number of accessible children of the object */
getAccessibleChildrenCount()117         public int getAccessibleChildrenCount() {
118             try {
119                 return unoAccessibleContext.getAccessibleChildCount();
120             } catch (com.sun.star.uno.RuntimeException e) {
121                 return 0;
122             }
123         }
124 
125         /** Returns the specified Accessible child of the object */
getAccessibleChild( int i)126         public synchronized javax.accessibility.Accessible getAccessibleChild( int i) {
127             try {
128                  return (javax.accessibility.Accessible) getComponent( unoAccessibleContext.getAccessibleChild(i) );
129             } catch (com.sun.star.uno.RuntimeException e) {
130             } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
131             }
132             return null;
133         }
134 
135         /*
136         * AccessibleComponent
137         */
138 
139         /** Returns the Accessible child, if one exists, contained at the local coordinate Point */
getAccessibleAt(java.awt.Point p)140         public javax.accessibility.Accessible getAccessibleAt(java.awt.Point p) {
141             try {
142                 java.awt.Component c = getComponent(unoAccessibleComponent.getAccessibleAtPoint(
143                             new com.sun.star.awt.Point(p.x, p.y)));
144 
145                 return (javax.accessibility.Accessible) c;
146             } catch (com.sun.star.uno.RuntimeException e) {
147                 return null;
148             }
149         }
150 
151     }
152 }
153 
154