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 complex.toolkit.accessibility; 25 26 import com.sun.star.lang.EventObject; 27 import com.sun.star.awt.Rectangle; 28 import com.sun.star.awt.PosSize; 29 import com.sun.star.awt.XWindow; 30 import com.sun.star.accessibility.AccessibleEventObject; 31 import com.sun.star.accessibility.XAccessible; 32 import com.sun.star.accessibility.XAccessibleEventBroadcaster; 33 import com.sun.star.accessibility.XAccessibleEventListener; 34 import com.sun.star.accessibility.XAccessibleContext; 35 import com.sun.star.uno.XInterface; 36 import com.sun.star.uno.UnoRuntime; 37 38 /** 39 * Testing <code> 40 * com.sun.star.accessibility.XAccessibleEventBroadcaster</code> 41 * interface methods : 42 * <ul> 43 * <li><code> addEventListener()</code></li> 44 * <li><code> removeEventListener()</code></li> 45 * </ul> <p> 46 * 47 * This test needs the following object relations : 48 * <ul> 49 * <li> <code>'EventProducer'</code> (of type 50 * <code>ifc.accessibility._XAccessibleEventBroadcaster.EventProducer</code>): 51 * this must be an implementation of the interface which could perform 52 * some actions for generating any kind of <code>AccessibleEvent</code></li> 53 * <ul> <p> 54 * 55 * @see com.sun.star.accessibility.XAccessibleEventBroadcaster 56 */ 57 public class _XAccessibleEventBroadcaster { 58 59 public XAccessibleEventBroadcaster oObj = null; 60 EventProducer prod = null ; 61 EvListener list = new EvListener(); 62 63 /** 64 * An event producer 65 */ 66 public static class EventProducer { 67 XWindow xWindow; EventProducer(XWindow window)68 public EventProducer(XWindow window) { 69 xWindow = window; 70 } 71 fireEvent()72 public void fireEvent() { 73 Rectangle newPosSize = xWindow.getPosSize(); 74 newPosSize.Width = newPosSize.Width - 20; 75 newPosSize.Height = newPosSize.Height - 20; 76 newPosSize.X = newPosSize.X + 20; 77 newPosSize.Y = newPosSize.Y + 20; 78 xWindow.setPosSize(newPosSize.X, newPosSize.Y, newPosSize.Width, 79 newPosSize.Height, PosSize.POSSIZE); 80 } 81 } 82 83 /** 84 * Listener implementation which registers listener calls. 85 */ 86 private class EvListener implements XAccessibleEventListener { 87 public AccessibleEventObject notifiedEvent = null ; notifyEvent(AccessibleEventObject ev)88 public void notifyEvent(AccessibleEventObject ev) { 89 System.out.println("Listener, Event : " + ev.EventId); 90 System.out.println("EventID: " + ev.EventId); 91 Object old=ev.OldValue; 92 if (old instanceof com.sun.star.accessibility.XAccessible) { 93 System.out.println("Old: "+((XAccessible)old).getAccessibleContext().getAccessibleName()); 94 } 95 96 Object nev=ev.NewValue; 97 if (nev instanceof com.sun.star.accessibility.XAccessible) { 98 System.out.println("New: "+((XAccessible)nev).getAccessibleContext().getAccessibleName()); 99 } 100 notifiedEvent = ev; 101 } 102 disposing(EventObject ev)103 public void disposing(EventObject ev) {} 104 } 105 106 /** 107 * c'tor 108 * @param object 109 * @param eventMessage 110 * @param window 111 */ _XAccessibleEventBroadcaster(XInterface object, XWindow window)112 public _XAccessibleEventBroadcaster(XInterface object, XWindow window) { 113 oObj = UnoRuntime.queryInterface(XAccessibleEventBroadcaster.class, object); 114 prod = new EventProducer(window); 115 } 116 117 /** 118 * Adds two listeners and fires event by mean of object relation. <p> 119 * Has <b> OK </b> status if both listeners were called 120 * @return 121 */ _addEventListener()122 public boolean _addEventListener() { 123 System.out.println("adding two listeners"); 124 oObj.addEventListener(list); 125 boolean isTransient = chkTransient(oObj); 126 System.out.println("fire event"); 127 prod.fireEvent() ; 128 129 try { 130 Thread.sleep(1500); 131 } 132 catch (InterruptedException ex) { 133 } 134 135 boolean works = true; 136 137 if (list.notifiedEvent == null) { 138 if (!isTransient) { 139 System.out.println("listener wasn't called"); 140 works = false; 141 } else { 142 System.out.println("Object is Transient, listener isn't expected to be called"); 143 } 144 oObj.removeEventListener(list); 145 } 146 147 return works; 148 } 149 150 /** 151 * Removes one of two listeners added before and and fires event 152 * by mean of object relation. <p> 153 * 154 * Has <b> OK </b> status if the removed listener wasn't called. <p> 155 * 156 * The following method tests are to be completed successfully before : 157 * <ul> 158 * <li> <code>addEventListener()</code> : to have added listeners </li> 159 * </ul> 160 * @return 161 */ _removeEventListener()162 public boolean _removeEventListener() { 163 164 list.notifiedEvent = null; 165 166 System.out.println("remove first listener"); 167 oObj.removeEventListener(list); 168 169 System.out.println("fire event"); 170 prod.fireEvent() ; 171 172 try { 173 Thread.sleep(500); 174 } 175 catch (InterruptedException ex) { 176 } 177 178 if (list.notifiedEvent == null) { 179 System.out.println("listener wasn't called -- OK"); 180 } 181 182 return list.notifiedEvent == null; 183 184 } 185 chkTransient(Object Testcase)186 protected static boolean chkTransient(Object Testcase) { 187 XAccessibleContext accCon = UnoRuntime.queryInterface(XAccessibleContext.class, Testcase); 188 if (accCon.getAccessibleStateSet().contains( 189 com.sun.star.accessibility.AccessibleStateType.TRANSIENT)){ 190 if (!accCon.getAccessibleParent().getAccessibleContext().getAccessibleStateSet().contains( 191 com.sun.star.accessibility.AccessibleStateType.MANAGES_DESCENDANTS)) { 192 return false; 193 } 194 return true; 195 } 196 return false; 197 } 198 199 } 200 201