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.UnoRuntime; 27 import com.sun.star.accessibility.*; 28 29 /** 30 */ 31 public class TextComponent extends Component implements javax.accessibility.Accessible { 32 TextComponent(XAccessible xAccessible, XAccessibleContext xAccessibleContext)33 protected TextComponent(XAccessible xAccessible, XAccessibleContext xAccessibleContext) { 34 super(xAccessible, xAccessibleContext); 35 } 36 37 protected class AccessibleTextComponentListener extends AccessibleUNOComponentListener { 38 AccessibleTextComponentListener()39 protected AccessibleTextComponentListener() { 40 super(); 41 } 42 setComponentState(short state, boolean enable)43 protected void setComponentState(short state, boolean enable) { 44 switch (state) { 45 case AccessibleStateType.EDITABLE: 46 fireStatePropertyChange(javax.accessibility.AccessibleState.EDITABLE, enable); 47 break; 48 case AccessibleStateType.MULTI_LINE: 49 fireStatePropertyChange(javax.accessibility.AccessibleState.MULTI_LINE, enable); 50 break; 51 case AccessibleStateType.SINGLE_LINE: 52 break; 53 default: 54 super.setComponentState(state, enable); 55 break; 56 } 57 } 58 } 59 createEventListener()60 protected XAccessibleEventListener createEventListener() { 61 return new AccessibleTextComponentListener(); 62 } 63 64 /** Creates the AccessibleContext associated with this object */ createAccessibleContext()65 public javax.accessibility.AccessibleContext createAccessibleContext() { 66 return new AccessibleTextComponent(); 67 } 68 69 protected class AccessibleTextComponent extends AccessibleUNOComponent { 70 71 /** 72 * Though the class is abstract, this should be called by all sub-classes 73 */ AccessibleTextComponent()74 protected AccessibleTextComponent() { 75 super(); 76 } 77 78 /* 79 * AccessibleContext 80 */ 81 82 /** Gets the role of this object */ getAccessibleRole()83 public javax.accessibility.AccessibleRole getAccessibleRole() { 84 return javax.accessibility.AccessibleRole.TEXT; 85 } 86 87 /** Gets the AccessibleText associated with this object presenting text on the display */ getAccessibleText()88 public javax.accessibility.AccessibleText getAccessibleText() { 89 90 if (disposed) 91 return null; 92 93 try { 94 XAccessibleText unoAccessibleText = (XAccessibleText) 95 UnoRuntime.queryInterface(XAccessibleText.class,unoAccessibleComponent); 96 if (unoAccessibleText != null) { 97 return new AccessibleTextImpl(unoAccessibleText); 98 } else { 99 return null; 100 } 101 } catch (com.sun.star.uno.RuntimeException e) { 102 return null; 103 } 104 } 105 106 /** Gets the AccessibleEditableText associated with this object presenting text on the display */ getAccessibleEditableText()107 public javax.accessibility.AccessibleEditableText getAccessibleEditableText() { 108 try { 109 XAccessibleEditableText unoAccessibleText = (XAccessibleEditableText) 110 UnoRuntime.queryInterface(XAccessibleEditableText.class,unoAccessibleComponent); 111 if (unoAccessibleText != null) { 112 return new AccessibleEditableTextImpl(unoAccessibleText); 113 } else { 114 return null; 115 } 116 } catch (com.sun.star.uno.RuntimeException e) { 117 return null; 118 } 119 } 120 121 /** Gets the AccessibleAction associated with this object that has a graphical representation */ getAccessibleAction()122 public javax.accessibility.AccessibleAction getAccessibleAction() { 123 try { 124 XAccessibleAction unoAccessibleAction = (XAccessibleAction) 125 UnoRuntime.queryInterface(XAccessibleAction.class, unoAccessibleComponent); 126 return (unoAccessibleAction != null) ? 127 new AccessibleActionImpl(unoAccessibleAction) : null; 128 } catch (com.sun.star.uno.RuntimeException e) { 129 return null; 130 } 131 } 132 133 /** Returns the relation set of this object */ getAccessibleRelationSet()134 public javax.accessibility.AccessibleRelationSet getAccessibleRelationSet() { 135 try { 136 XAccessibleRelationSet unoAccessibleRelationSet = 137 unoAccessible.getAccessibleContext().getAccessibleRelationSet(); 138 if (unoAccessibleRelationSet == null) { 139 return super.getAccessibleRelationSet(); 140 } 141 142 javax.accessibility.AccessibleRelationSet relationSet = new javax.accessibility.AccessibleRelationSet(); 143 int count = unoAccessibleRelationSet.getRelationCount(); 144 for (int i = 0; i < count; i++) { 145 AccessibleRelation unoAccessibleRelation = unoAccessibleRelationSet.getRelation(i); 146 switch (unoAccessibleRelation.RelationType) { 147 case AccessibleRelationType.CONTROLLED_BY: 148 relationSet.add(new javax.accessibility.AccessibleRelation( 149 javax.accessibility.AccessibleRelation.CONTROLLED_BY, 150 getAccessibleComponents(unoAccessibleRelation.TargetSet))); 151 break; 152 case AccessibleRelationType.CONTROLLER_FOR: 153 relationSet.add(new javax.accessibility.AccessibleRelation( 154 javax.accessibility.AccessibleRelation.CONTROLLER_FOR, 155 getAccessibleComponents(unoAccessibleRelation.TargetSet))); 156 break; 157 case AccessibleRelationType.LABELED_BY: 158 relationSet.add(new javax.accessibility.AccessibleRelation( 159 javax.accessibility.AccessibleRelation.LABELED_BY, 160 getAccessibleComponents(unoAccessibleRelation.TargetSet))); 161 break; 162 case AccessibleRelationType.MEMBER_OF: 163 relationSet.add(new javax.accessibility.AccessibleRelation( 164 javax.accessibility.AccessibleRelation.MEMBER_OF, 165 getAccessibleComponents(unoAccessibleRelation.TargetSet))); 166 break; 167 case AccessibleRelationType.CONTENT_FLOWS_TO: 168 relationSet.add(new javax.accessibility.AccessibleRelation( 169 "flowsTo", 170 getAccessibleComponents(unoAccessibleRelation.TargetSet))); 171 break; 172 case AccessibleRelationType.CONTENT_FLOWS_FROM: 173 relationSet.add(new javax.accessibility.AccessibleRelation( 174 "flowsFrom", 175 getAccessibleComponents(unoAccessibleRelation.TargetSet))); 176 break; 177 default: 178 break; 179 } 180 } 181 return relationSet; 182 } catch (com.sun.star.lang.IndexOutOfBoundsException e) { 183 return super.getAccessibleRelationSet(); 184 } catch (com.sun.star.uno.RuntimeException e) { 185 return super.getAccessibleRelationSet(); 186 } 187 } 188 } 189 } 190 191