1*ef39d40dSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*ef39d40dSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*ef39d40dSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*ef39d40dSAndrew Rist * distributed with this work for additional information 6*ef39d40dSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*ef39d40dSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*ef39d40dSAndrew Rist * "License"); you may not use this file except in compliance 9*ef39d40dSAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*ef39d40dSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*ef39d40dSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*ef39d40dSAndrew Rist * software distributed under the License is distributed on an 15*ef39d40dSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*ef39d40dSAndrew Rist * KIND, either express or implied. See the License for the 17*ef39d40dSAndrew Rist * specific language governing permissions and limitations 18*ef39d40dSAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*ef39d40dSAndrew Rist *************************************************************/ 21*ef39d40dSAndrew Rist 22*ef39d40dSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir package ifc.awt; 25cdf0e10cSrcweir 26cdf0e10cSrcweir import com.sun.star.accessibility.AccessibleRole; 27cdf0e10cSrcweir import com.sun.star.accessibility.XAccessible; 28cdf0e10cSrcweir import com.sun.star.accessibility.XAccessibleComponent; 29cdf0e10cSrcweir import com.sun.star.accessibility.XAccessibleContext; 30cdf0e10cSrcweir import com.sun.star.awt.KeyEvent; 31cdf0e10cSrcweir import com.sun.star.awt.MouseEvent; 32cdf0e10cSrcweir import com.sun.star.awt.Point; 33cdf0e10cSrcweir import com.sun.star.awt.Rectangle; 34cdf0e10cSrcweir import com.sun.star.awt.XKeyHandler; 35cdf0e10cSrcweir import com.sun.star.awt.XMouseClickHandler; 36cdf0e10cSrcweir import com.sun.star.awt.XUserInputInterception; 37cdf0e10cSrcweir import com.sun.star.awt.XWindow; 38cdf0e10cSrcweir import com.sun.star.frame.XModel; 39cdf0e10cSrcweir import com.sun.star.lang.EventObject; 40cdf0e10cSrcweir import com.sun.star.lang.XMultiServiceFactory; 41cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime; 42cdf0e10cSrcweir import java.awt.Robot; 43cdf0e10cSrcweir import java.awt.event.InputEvent; 44cdf0e10cSrcweir import lib.MultiMethodTest; 45cdf0e10cSrcweir import util.AccessibilityTools; 46cdf0e10cSrcweir 47cdf0e10cSrcweir /** 48cdf0e10cSrcweir * Testing <code>com.sun.star.awt.XUserInputInterception</code> 49cdf0e10cSrcweir * interface methods: 50cdf0e10cSrcweir * <ul> 51cdf0e10cSrcweir * <li><code> addKeyHandler() </code></li> 52cdf0e10cSrcweir * <li><code> removeKeyHandler() </code></li> 53cdf0e10cSrcweir * <li><code> addMouseClickHandler() </code></li> 54cdf0e10cSrcweir * <li><code> removeMouseClickHandler() </code></li> 55cdf0e10cSrcweir * </ul><p> 56cdf0e10cSrcweir * This test needs the following object relations : 57cdf0e10cSrcweir * <ul> 58cdf0e10cSrcweir * <li> <code>'XUserInputInterception.XModel'</code> (of type <code>XModel</code>): 59cdf0e10cSrcweir * used as model where a mouse click or a key press could be done </li> 60cdf0e10cSrcweir * </ul> <p> 61cdf0e10cSrcweir * Test is <b> NOT </b> multithread compilant. <p> 62cdf0e10cSrcweir * @see com.sun.star.awt.XUserInputInterception 63cdf0e10cSrcweir */ 64cdf0e10cSrcweir public class _XUserInputInterception extends MultiMethodTest { 65cdf0e10cSrcweir public XUserInputInterception oObj = null; 66cdf0e10cSrcweir 67cdf0e10cSrcweir private XModel m_XModel = null; 68cdf0e10cSrcweir 69cdf0e10cSrcweir /** the listener 1 for the mouse click test */ 70cdf0e10cSrcweir private MyMouseClickHandler1 m_MouseListener1 = null; 71cdf0e10cSrcweir /** the listener 2 for the mouse click test */ 72cdf0e10cSrcweir private MyMouseClickHandler2 m_MouseListener2 = null; 73cdf0e10cSrcweir 74cdf0e10cSrcweir /** the listener 1 for the key event test */ 75cdf0e10cSrcweir private MyKeyHandler1 m_KeyListener1 = null; 76cdf0e10cSrcweir /** the listener 2 for the key event test */ 77cdf0e10cSrcweir private MyKeyHandler2 m_KeyListener2 = null; 78cdf0e10cSrcweir 79cdf0e10cSrcweir /** indicates if the mousePressed event was called*/ 80cdf0e10cSrcweir private boolean m_mousePressed1 = false; 81cdf0e10cSrcweir /** indicates if the mouseReleased event was called*/ 82cdf0e10cSrcweir private boolean m_mouseReleased1 = false; 83cdf0e10cSrcweir 84cdf0e10cSrcweir /** indicates if the mousePressed event was called*/ 85cdf0e10cSrcweir private boolean m_mousePressed2 = false; 86cdf0e10cSrcweir /** indicates if the mouseReleased event was called*/ 87cdf0e10cSrcweir private boolean m_mouseReleased2 = false; 88cdf0e10cSrcweir 89cdf0e10cSrcweir /** indicates if the mousePressed event was called*/ 90cdf0e10cSrcweir private boolean m_keyPressed1 = false; 91cdf0e10cSrcweir /** indicates if the mouseReleased event was called*/ 92cdf0e10cSrcweir private boolean m_keyReleased1 = false; 93cdf0e10cSrcweir 94cdf0e10cSrcweir /** indicates if the mousePressed event was called*/ 95cdf0e10cSrcweir private boolean m_keyPressed2 = false; 96cdf0e10cSrcweir /** indicates if the mouseReleased event was called*/ 97cdf0e10cSrcweir private boolean m_keyReleased2 = false; 98cdf0e10cSrcweir 99cdf0e10cSrcweir /** get the object rlation XUserInputInterception.XModel from the 100cdf0e10cSrcweir * test environment 101cdf0e10cSrcweir */ before()102cdf0e10cSrcweir protected void before() { 103cdf0e10cSrcweir log.print("try to get object relation 'XUserInputInterception.XModel': "); 104cdf0e10cSrcweir m_XModel = (XModel)tEnv.getObjRelation("XUserInputInterception.XModel"); 105cdf0e10cSrcweir if (m_XModel == null) log.println("failed => null"); 106cdf0e10cSrcweir else log.println("OK"); 107cdf0e10cSrcweir 108cdf0e10cSrcweir } 109cdf0e10cSrcweir 110cdf0e10cSrcweir /** 111cdf0e10cSrcweir * This test adds two different key listener to the object. <p> 112cdf0e10cSrcweir * 113cdf0e10cSrcweir * Has <b> OK </b> if no exception is thrown. 114cdf0e10cSrcweir */ _addKeyHandler()115cdf0e10cSrcweir public void _addKeyHandler() { 116cdf0e10cSrcweir 117cdf0e10cSrcweir log.println("creating key listener 1"); 118cdf0e10cSrcweir m_KeyListener1 = new MyKeyHandler1(); 119cdf0e10cSrcweir 120cdf0e10cSrcweir log.println("creating key listener 2"); 121cdf0e10cSrcweir m_KeyListener2 = new MyKeyHandler2(); 122cdf0e10cSrcweir 123cdf0e10cSrcweir 124cdf0e10cSrcweir log.println("adding key listener 1"); 125cdf0e10cSrcweir oObj.addKeyHandler(m_KeyListener1); 126cdf0e10cSrcweir 127cdf0e10cSrcweir 128cdf0e10cSrcweir log.println("adding key listener 2"); 129cdf0e10cSrcweir oObj.addKeyHandler(m_KeyListener2); 130cdf0e10cSrcweir 131cdf0e10cSrcweir tRes.tested("addKeyHandler()", true); 132cdf0e10cSrcweir } 133cdf0e10cSrcweir 134cdf0e10cSrcweir /** 135cdf0e10cSrcweir * The test requires <CODE>addKeyHandler()</CODE> which adds two key listener. 136cdf0e10cSrcweir * Then one of them will be removed. In a second thread a key event is released 137cdf0e10cSrcweir * by the <CODE>robot</CODE> class.<p> 138cdf0e10cSrcweir * Has <b> OK </b> status if only one of the listener are triggered. <p> 139cdf0e10cSrcweir * The following method tests are to be completed successfully before : 140cdf0e10cSrcweir * <ul> 141cdf0e10cSrcweir * <li> <code> addKeyHandler() </code> : adds two key listener </li> 142cdf0e10cSrcweir * </ul> 143cdf0e10cSrcweir */ _removeKeyHandler()144cdf0e10cSrcweir public void _removeKeyHandler() { 145cdf0e10cSrcweir requiredMethod("addKeyHandler()"); 146cdf0e10cSrcweir 147cdf0e10cSrcweir log.println("remove key listener 2"); 148cdf0e10cSrcweir 149cdf0e10cSrcweir oObj.removeKeyHandler(m_KeyListener2); 150cdf0e10cSrcweir 151cdf0e10cSrcweir log.println("starting thread to check the key listener..."); 152cdf0e10cSrcweir EventTrigger et = new EventTrigger(m_XModel, EventTriggerType.KEY_TEXT_INTO_DOC); 153cdf0e10cSrcweir 154cdf0e10cSrcweir et.run(); 155cdf0e10cSrcweir 156cdf0e10cSrcweir util.utils.shortWait(tParam.getInt(util.PropertyName.SHORT_WAIT) * 2); 157cdf0e10cSrcweir log.println("key listener thread should be finished."); 158cdf0e10cSrcweir 159cdf0e10cSrcweir 160cdf0e10cSrcweir boolean bOK = m_keyPressed1 & m_keyReleased1 & 161cdf0e10cSrcweir ! m_keyPressed2 & ! m_keyReleased2; 162cdf0e10cSrcweir 163cdf0e10cSrcweir if (! bOK){ 164cdf0e10cSrcweir log.println("The key listener has not the expectd status:"); 165cdf0e10cSrcweir log.println("listener\texpected\tgot"); 166cdf0e10cSrcweir log.println("keyPressed1\ttrue\t"+m_keyPressed1); 167cdf0e10cSrcweir log.println("keyReleased1\ttrue\t"+m_keyReleased1); 168cdf0e10cSrcweir log.println("keyPressed2\tfalse\t"+m_keyPressed2); 169cdf0e10cSrcweir log.println("keyReleased2\tfalse\t"+m_keyReleased2); 170cdf0e10cSrcweir } 171cdf0e10cSrcweir 172cdf0e10cSrcweir log.println("remove Key listener 1"); 173cdf0e10cSrcweir oObj.removeKeyHandler(m_KeyListener1); 174cdf0e10cSrcweir 175cdf0e10cSrcweir tRes.tested("removeKeyHandler()", bOK); 176cdf0e10cSrcweir } 177cdf0e10cSrcweir 178cdf0e10cSrcweir /** 179cdf0e10cSrcweir * This test adds two different mouse klick listener to the object. <p> 180cdf0e10cSrcweir * 181cdf0e10cSrcweir * Has <b> OK </b> if no exception is thrown. 182cdf0e10cSrcweir */ _addMouseClickHandler()183cdf0e10cSrcweir public void _addMouseClickHandler() { 184cdf0e10cSrcweir log.println("creating mouse listener 1"); 185cdf0e10cSrcweir m_MouseListener1 = new MyMouseClickHandler1(); 186cdf0e10cSrcweir log.println("creating mouse listener 2"); 187cdf0e10cSrcweir m_MouseListener2 = new MyMouseClickHandler2(); 188cdf0e10cSrcweir 189cdf0e10cSrcweir log.println("adding mouse listener 1"); 190cdf0e10cSrcweir oObj.addMouseClickHandler(m_MouseListener1); 191cdf0e10cSrcweir log.println("adding mouse listener 2"); 192cdf0e10cSrcweir oObj.addMouseClickHandler(m_MouseListener2); 193cdf0e10cSrcweir 194cdf0e10cSrcweir tRes.tested("addMouseClickHandler()", true); 195cdf0e10cSrcweir } 196cdf0e10cSrcweir 197cdf0e10cSrcweir /** 198cdf0e10cSrcweir * The test requires <CODE>addMouseClickHandler()</CODE> which adds two key listener. 199cdf0e10cSrcweir * Then one of them will be removed. In a second thread a mouse klick event is released 200cdf0e10cSrcweir * by the <CODE>robot</CODE> class.<p> 201cdf0e10cSrcweir * Has <b> OK </b> status if only one of the listener are triggered. <p> 202cdf0e10cSrcweir * The following method tests are to be completed successfully before : 203cdf0e10cSrcweir * <ul> 204cdf0e10cSrcweir * <li> <code> addMouseKlickHandler() </code> : adds two key listener </li> 205cdf0e10cSrcweir * </ul> 206cdf0e10cSrcweir */ _removeMouseClickHandler()207cdf0e10cSrcweir public void _removeMouseClickHandler() { 208cdf0e10cSrcweir requiredMethod("addMouseClickHandler"); 209cdf0e10cSrcweir 210cdf0e10cSrcweir log.println("remove mouse listener 2"); 211cdf0e10cSrcweir 212cdf0e10cSrcweir oObj.removeMouseClickHandler(m_MouseListener2); 213cdf0e10cSrcweir 214cdf0e10cSrcweir log.println("starting thread to check the mouse listener..."); 215cdf0e10cSrcweir EventTrigger et = new EventTrigger(m_XModel, EventTriggerType.MOUSE_KLICK_INTO_DOC); 216cdf0e10cSrcweir 217cdf0e10cSrcweir et.run(); 218cdf0e10cSrcweir 219cdf0e10cSrcweir util.utils.shortWait(tParam.getInt(util.PropertyName.SHORT_WAIT) * 2); 220cdf0e10cSrcweir log.println("mouse listener thread should be finished."); 221cdf0e10cSrcweir 222cdf0e10cSrcweir boolean bOK = m_mousePressed1 & m_mouseReleased1 & 223cdf0e10cSrcweir ! m_mousePressed2 & ! m_mouseReleased2; 224cdf0e10cSrcweir 225cdf0e10cSrcweir if (! bOK){ 226cdf0e10cSrcweir log.println("The mouse listener has not the expectd status:"); 227cdf0e10cSrcweir log.println("listener\t\texpected\tgot"); 228cdf0e10cSrcweir log.println("mousePressed1\ttrue\t\t"+m_mousePressed1); 229cdf0e10cSrcweir log.println("mouseReleased1\ttrue\t\t"+m_mouseReleased1); 230cdf0e10cSrcweir log.println("mousePressed2\tfalse\t\t"+m_mousePressed2); 231cdf0e10cSrcweir log.println("mouseReleased2\tfalse\t\t"+m_mouseReleased2); 232cdf0e10cSrcweir } 233cdf0e10cSrcweir 234cdf0e10cSrcweir log.println("remove mouse listener 1"); 235cdf0e10cSrcweir oObj.removeMouseClickHandler(m_MouseListener1); 236cdf0e10cSrcweir 237cdf0e10cSrcweir tRes.tested("removeMouseClickHandler()", bOK); 238cdf0e10cSrcweir } 239cdf0e10cSrcweir 240cdf0e10cSrcweir 241cdf0e10cSrcweir /** 242cdf0e10cSrcweir * Forces environment recreation. 243cdf0e10cSrcweir */ after()244cdf0e10cSrcweir protected void after() { 245cdf0e10cSrcweir disposeEnvironment(); 246cdf0e10cSrcweir } 247cdf0e10cSrcweir 248cdf0e10cSrcweir /** 249cdf0e10cSrcweir * Listener which added and its method must be called 250cdf0e10cSrcweir * on <code>keyPressed</code> and <code>keyReleased</code> call. 251cdf0e10cSrcweir */ 252cdf0e10cSrcweir public class MyKeyHandler1 implements XKeyHandler { 253cdf0e10cSrcweir /** 254cdf0e10cSrcweir * This event sets the member <code>m_keyPressed</coed> to 255cdf0e10cSrcweir * <code>true</code> 256cdf0e10cSrcweir * @param oEvent The key event informs about the pressed key. 257cdf0e10cSrcweir * @return returns <CODE>TRUE</CODE> in erery case 258cdf0e10cSrcweir */ keyPressed( KeyEvent oEvent )259cdf0e10cSrcweir public boolean keyPressed( KeyEvent oEvent ){ 260cdf0e10cSrcweir log.println("XKeyHandler 1: keyPressed-Event"); 261cdf0e10cSrcweir m_keyPressed1 = true; 262cdf0e10cSrcweir return true; 263cdf0e10cSrcweir } 264cdf0e10cSrcweir /** 265cdf0e10cSrcweir * This event sets the member <code>m_keyReleased</coed> to 266cdf0e10cSrcweir * <code>true</code> 267cdf0e10cSrcweir * @param oEvent The key event informs about the pressed key. 268cdf0e10cSrcweir * @return returns <CODE>TRUE</CODE> in erery case 269cdf0e10cSrcweir */ keyReleased( KeyEvent oEvent )270cdf0e10cSrcweir public boolean keyReleased( KeyEvent oEvent ){ 271cdf0e10cSrcweir log.println("XKeyHandler 1: keyReleased-Event"); 272cdf0e10cSrcweir m_keyReleased1 = true; 273cdf0e10cSrcweir return true; 274cdf0e10cSrcweir } 275cdf0e10cSrcweir /** 276cdf0e10cSrcweir * This event does nothing usefull 277cdf0e10cSrcweir * @param oEvent refers to the object that fired the event. 278cdf0e10cSrcweir */ disposing( EventObject oEvent )279cdf0e10cSrcweir public void disposing( EventObject oEvent ){ 280cdf0e10cSrcweir log.println("XKeyHandler 1: disposing-Event"); 281cdf0e10cSrcweir } 282cdf0e10cSrcweir } 283cdf0e10cSrcweir /** 284cdf0e10cSrcweir * Listener which added and its method must be called 285cdf0e10cSrcweir * on <code>keyPressed</code> and <code>keyReleased</code> call. 286cdf0e10cSrcweir */ 287cdf0e10cSrcweir public class MyKeyHandler2 implements XKeyHandler { 288cdf0e10cSrcweir /** 289cdf0e10cSrcweir * This event sets the member <code>m_keyPressed</coed> to 290cdf0e10cSrcweir * <code>true</code> 291cdf0e10cSrcweir * @param oEvent The key event informs about the pressed key. 292cdf0e10cSrcweir * @return returns <CODE>TRUE</CODE> in erery case 293cdf0e10cSrcweir */ keyPressed( KeyEvent oEvent )294cdf0e10cSrcweir public boolean keyPressed( KeyEvent oEvent ){ 295cdf0e10cSrcweir log.println("XKeyHandler 2: keyPressed-Event: " + 296cdf0e10cSrcweir "This should not be happen because listener is removed!"); 297cdf0e10cSrcweir m_keyPressed2 = true; 298cdf0e10cSrcweir return true; 299cdf0e10cSrcweir } 300cdf0e10cSrcweir /** 301cdf0e10cSrcweir * This event sets the member <code>m_keyReleased</coed> to 302cdf0e10cSrcweir * <code>true</code> 303cdf0e10cSrcweir * @param oEvent The key event informs about the pressed key. 304cdf0e10cSrcweir * @return returns <CODE>TRUE</CODE> in erery case 305cdf0e10cSrcweir */ keyReleased( KeyEvent oEvent )306cdf0e10cSrcweir public boolean keyReleased( KeyEvent oEvent ){ 307cdf0e10cSrcweir log.println("XKeyHandler 2: keyReleased-Event: " + 308cdf0e10cSrcweir "This should not be happen because listener is removed!"); 309cdf0e10cSrcweir m_keyReleased2 = true; 310cdf0e10cSrcweir return true; 311cdf0e10cSrcweir } 312cdf0e10cSrcweir /** 313cdf0e10cSrcweir * This event does nothing usefull 314cdf0e10cSrcweir * @param oEvent refers to the object that fired the event. 315cdf0e10cSrcweir */ disposing( EventObject oEvent )316cdf0e10cSrcweir public void disposing( EventObject oEvent ){ 317cdf0e10cSrcweir log.println("XKeyHandler 2: disposing-Event: " + 318cdf0e10cSrcweir "This should not be happen because listener is removed!"); 319cdf0e10cSrcweir } 320cdf0e10cSrcweir } 321cdf0e10cSrcweir 322cdf0e10cSrcweir /** 323cdf0e10cSrcweir * Listener which added and its method must be called 324cdf0e10cSrcweir * on <code>mousePressed</code> and <code>mouseReleased</code> call. 325cdf0e10cSrcweir */ 326cdf0e10cSrcweir public class MyMouseClickHandler1 implements XMouseClickHandler { 327cdf0e10cSrcweir /** 328cdf0e10cSrcweir * This event sets the member <code>m_mousePressed</coed> to 329cdf0e10cSrcweir * <code>true</code> 330cdf0e10cSrcweir * @param oEvent The mouse event informs about the kind of mouse event. 331cdf0e10cSrcweir * @return returns <CODE>TRUE</CODE> in erery case 332cdf0e10cSrcweir */ mousePressed( MouseEvent oEvent )333cdf0e10cSrcweir public boolean mousePressed( MouseEvent oEvent ){ 334cdf0e10cSrcweir log.println("XMouseClickHandler 1: mousePressed-Event"); 335cdf0e10cSrcweir m_mousePressed1 = true; 336cdf0e10cSrcweir return true; 337cdf0e10cSrcweir } 338cdf0e10cSrcweir /** 339cdf0e10cSrcweir * This event sets the member <code>m_mouseReleased</coed> to 340cdf0e10cSrcweir * <code>true</code> 341cdf0e10cSrcweir * @param oEvent The mouse event informs about the kind of mouse event. 342cdf0e10cSrcweir * @return returns <CODE>TRUE</CODE> in erery case 343cdf0e10cSrcweir */ mouseReleased( MouseEvent oEvent )344cdf0e10cSrcweir public boolean mouseReleased( MouseEvent oEvent ){ 345cdf0e10cSrcweir log.println("XMouseClickHandler 1: mouseReleased-Event"); 346cdf0e10cSrcweir m_mouseReleased1 = true; 347cdf0e10cSrcweir return true; 348cdf0e10cSrcweir } 349cdf0e10cSrcweir /** 350cdf0e10cSrcweir * This event does nothing usefull 351cdf0e10cSrcweir * @param oEvent refers to the object that fired the event. 352cdf0e10cSrcweir */ disposing( EventObject oEvent )353cdf0e10cSrcweir public void disposing( EventObject oEvent ){ 354cdf0e10cSrcweir log.println("XMouseClickHandler 1: disposing-Event"); 355cdf0e10cSrcweir } 356cdf0e10cSrcweir }; 357cdf0e10cSrcweir 358cdf0e10cSrcweir /** 359cdf0e10cSrcweir * Listener which added and removed. Its method must NOT be called 360cdf0e10cSrcweir * on <code>mousePressed</code> and <code>mouseReleased</code> call. 361cdf0e10cSrcweir */ 362cdf0e10cSrcweir public class MyMouseClickHandler2 implements XMouseClickHandler { 363cdf0e10cSrcweir /** 364cdf0e10cSrcweir * This event sets the member <code>m_mousePressed</coed> to 365cdf0e10cSrcweir * <code>true</code> 366cdf0e10cSrcweir * @param oEvent The mouse event informs about the kind of mouse event. 367cdf0e10cSrcweir * @return returns <CODE>TRUE</CODE> in erery case 368cdf0e10cSrcweir */ mousePressed( MouseEvent oEvent )369cdf0e10cSrcweir public boolean mousePressed( MouseEvent oEvent ){ 370cdf0e10cSrcweir log.println("XMouseClickHandler 2: mousePressed-Event: " + 371cdf0e10cSrcweir "This should not be happen because listener is removed!"); 372cdf0e10cSrcweir m_mousePressed2 = true; 373cdf0e10cSrcweir return true; 374cdf0e10cSrcweir } 375cdf0e10cSrcweir /** 376cdf0e10cSrcweir * This event sets the member <code>m_mouseReleased</coed> to 377cdf0e10cSrcweir * <code>true</code> 378cdf0e10cSrcweir * @param oEvent The mouse event informs about the kind of mouse event. 379cdf0e10cSrcweir * @return returns <CODE>TRUE</CODE> in erery case 380cdf0e10cSrcweir */ mouseReleased( MouseEvent oEvent )381cdf0e10cSrcweir public boolean mouseReleased( MouseEvent oEvent ){ 382cdf0e10cSrcweir log.println("XMouseClickHandler 2: mouseReleased-Event: " + 383cdf0e10cSrcweir "This should not be happen because listener is removed!"); 384cdf0e10cSrcweir m_mouseReleased2 = true; 385cdf0e10cSrcweir return true; 386cdf0e10cSrcweir } 387cdf0e10cSrcweir /** 388cdf0e10cSrcweir * This event does nothing usefull 389cdf0e10cSrcweir * @param oEvent refers to the object that fired the event. 390cdf0e10cSrcweir */ disposing( EventObject oEvent )391cdf0e10cSrcweir public void disposing( EventObject oEvent ){ 392cdf0e10cSrcweir log.println("XMouseClickHandler 2: disposing-Event: " + 393cdf0e10cSrcweir " This should not be happen because listener is removed!"); 394cdf0e10cSrcweir } 395cdf0e10cSrcweir }; 396cdf0e10cSrcweir 397cdf0e10cSrcweir /** 398cdf0e10cSrcweir * To check the events this class is a thread which click a mouse button and 399cdf0e10cSrcweir * press a key with the <CODE>Robot</CODE> class 400cdf0e10cSrcweir * @see java.awt.Robot 401cdf0e10cSrcweir */ 402cdf0e10cSrcweir private class EventTrigger extends Thread{ 403cdf0e10cSrcweir 404cdf0e10cSrcweir /** 405cdf0e10cSrcweir * represents a <CODE>AccessibilityTools</CODE> 406cdf0e10cSrcweir */ 407cdf0e10cSrcweir private final AccessibilityTools at = new AccessibilityTools(); 408cdf0e10cSrcweir /** 409cdf0e10cSrcweir * represents an <CODE>EventType</CODE> 410cdf0e10cSrcweir * @see EventTest.EventTriggerType 411cdf0e10cSrcweir */ 412cdf0e10cSrcweir private int eventType = 0; 413cdf0e10cSrcweir /** 414cdf0e10cSrcweir * represents a <CODE>XModel</CODE> of a document 415cdf0e10cSrcweir */ 416cdf0e10cSrcweir private XModel xModel = null; 417cdf0e10cSrcweir 418cdf0e10cSrcweir /** 419cdf0e10cSrcweir * Creates an instacne of this class. The parameter <CODE>eType</CODE> represents 420cdf0e10cSrcweir * the kind of event wich will be triggert at <CODE>run()</CODE> 421cdf0e10cSrcweir * @param model the model of a document 422cdf0e10cSrcweir * @param eType the kind of event which should be trigger 423cdf0e10cSrcweir */ EventTrigger(XModel model, int eType)424cdf0e10cSrcweir public EventTrigger(XModel model, int eType) 425cdf0e10cSrcweir { 426cdf0e10cSrcweir this.xModel = model; 427cdf0e10cSrcweir this.eventType = eType; 428cdf0e10cSrcweir } 429cdf0e10cSrcweir 430cdf0e10cSrcweir /** 431cdf0e10cSrcweir * Triggers the event wich is represented by <CODE>eventType</CODE> 432cdf0e10cSrcweir * The scenarios are: 433cdf0e10cSrcweir * <ul> 434cdf0e10cSrcweir * <li>EventTest.EventTriggerType.MOUSE_KLICK_INTO_DOC 435cdf0e10cSrcweir * which calls 436cdf0e10cSrcweir * <li><CODE>clickIntoDoc</CODE></LI> 437cdf0e10cSrcweir * </LI> 438cdf0e10cSrcweir * <li>EventTest.EventTriggerType.KEY_TEXT_INTO_DOC 439cdf0e10cSrcweir * which calls 440cdf0e10cSrcweir * <li><CODE>clickIntodoc</CODE></LI> 441cdf0e10cSrcweir * <li><CODE>keyIntoDoc</CODE></LI> 442cdf0e10cSrcweir * </LI> 443cdf0e10cSrcweir * </UL> 444cdf0e10cSrcweir */ run()445cdf0e10cSrcweir public void run(){ 446cdf0e10cSrcweir 447cdf0e10cSrcweir switch (this.eventType){ 448cdf0e10cSrcweir 449cdf0e10cSrcweir case EventTriggerType.MOUSE_KLICK_INTO_DOC: 450cdf0e10cSrcweir clickIntoDoc(); 451cdf0e10cSrcweir break; 452cdf0e10cSrcweir case EventTriggerType.KEY_TEXT_INTO_DOC: 453cdf0e10cSrcweir clickIntoDoc(); 454cdf0e10cSrcweir keyIntoDoc(); 455cdf0e10cSrcweir break; 456cdf0e10cSrcweir 457cdf0e10cSrcweir } 458cdf0e10cSrcweir } 459cdf0e10cSrcweir /** 460cdf0e10cSrcweir * This method cklicks into the middel of a document. It uses Accessibility 461cdf0e10cSrcweir * to get the document and query for its position and its range to calculate 462cdf0e10cSrcweir * the middle. This values was used for <CODE>Robot</CODE> Class. This 463cdf0e10cSrcweir * Robot class is able to move the mouse and to cklick a mouse button 464cdf0e10cSrcweir * @see java.awt.Robot 465cdf0e10cSrcweir */ clickIntoDoc()466cdf0e10cSrcweir private void clickIntoDoc(){ 467cdf0e10cSrcweir try{ 468cdf0e10cSrcweir 469cdf0e10cSrcweir util.DesktopTools.bringWindowToFront(xModel); 470cdf0e10cSrcweir 471cdf0e10cSrcweir XWindow xWindow = at.getCurrentWindow( 472cdf0e10cSrcweir (XMultiServiceFactory) tParam.getMSF(), 473cdf0e10cSrcweir xModel); 474cdf0e10cSrcweir 475cdf0e10cSrcweir XAccessible xRoot = at.getAccessibleObject(xWindow); 476cdf0e10cSrcweir 477cdf0e10cSrcweir 478cdf0e10cSrcweir 479cdf0e10cSrcweir XAccessibleContext xPanel = at.getAccessibleObjectForRole(xRoot, AccessibleRole.PANEL); 480cdf0e10cSrcweir XAccessibleComponent xPanelCont = (XAccessibleComponent) UnoRuntime.queryInterface(XAccessibleComponent.class, xPanel); 481cdf0e10cSrcweir 482cdf0e10cSrcweir // the position of the panel 483cdf0e10cSrcweir Point point = xPanelCont.getLocationOnScreen(); 484cdf0e10cSrcweir 485cdf0e10cSrcweir // the range of the panel 486cdf0e10cSrcweir Rectangle rect = xPanelCont.getBounds(); 487cdf0e10cSrcweir 488cdf0e10cSrcweir try { 489cdf0e10cSrcweir Robot rob = new Robot(); 490cdf0e10cSrcweir int x = point.X + (rect.Width / 2); 491cdf0e10cSrcweir int y = point.Y + (rect.Height / 2); 492cdf0e10cSrcweir log.println("try to klick into the middle of the document"); 493cdf0e10cSrcweir rob.mouseMove(x, y); 494cdf0e10cSrcweir rob.mousePress(InputEvent.BUTTON1_MASK); 495cdf0e10cSrcweir rob.mouseRelease(InputEvent.BUTTON1_MASK); 496cdf0e10cSrcweir } catch (java.awt.AWTException e) { 497cdf0e10cSrcweir log.println("couldn't press mouse button"); 498cdf0e10cSrcweir } 499cdf0e10cSrcweir } catch (java.lang.Exception e){ 500cdf0e10cSrcweir log.println("could not click into the scroll bar: " + e.toString()); 501cdf0e10cSrcweir } 502cdf0e10cSrcweir } 503cdf0e10cSrcweir 504cdf0e10cSrcweir /** 505cdf0e10cSrcweir * This method press the "A" key. Therefore it uses the <CODE>Robot</CODE> 506cdf0e10cSrcweir * class. 507cdf0e10cSrcweir * @see java.awt.Robot 508cdf0e10cSrcweir */ keyIntoDoc()509cdf0e10cSrcweir private void keyIntoDoc(){ 510cdf0e10cSrcweir try { 511cdf0e10cSrcweir Robot rob = new Robot(); 512cdf0e10cSrcweir log.println("try to press 'A'"); 513cdf0e10cSrcweir rob.keyPress(java.awt.event.KeyEvent.VK_A); 514cdf0e10cSrcweir rob.keyRelease(java.awt.event.KeyEvent.VK_A); 515cdf0e10cSrcweir } catch (java.awt.AWTException e) { 516cdf0e10cSrcweir log.println("couldn't press key"); 517cdf0e10cSrcweir } 518cdf0e10cSrcweir 519cdf0e10cSrcweir } 520cdf0e10cSrcweir } 521cdf0e10cSrcweir 522cdf0e10cSrcweir /** This interface represents all possible actions which could be used 523cdf0e10cSrcweir * in the <CODE>EventTrigger</CODE> class. 524cdf0e10cSrcweir * @see EventTest.EventTrigger 525cdf0e10cSrcweir */ 526cdf0e10cSrcweir private interface EventTriggerType{ 527cdf0e10cSrcweir 528cdf0e10cSrcweir /** klick the mouse into the scroll bar*/ 529cdf0e10cSrcweir final public static int MOUSE_KLICK_INTO_DOC = 1; 530cdf0e10cSrcweir 531cdf0e10cSrcweir /** write some text into a spread sheet*/ 532cdf0e10cSrcweir final public static int KEY_TEXT_INTO_DOC = 2; 533cdf0e10cSrcweir } 534cdf0e10cSrcweir } 535cdf0e10cSrcweir 536