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