1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 package ifc.sheet; 28 29 import com.sun.star.accessibility.AccessibleRole; 30 import com.sun.star.accessibility.XAccessible; 31 import com.sun.star.accessibility.XAccessibleComponent; 32 import com.sun.star.awt.Point; 33 import com.sun.star.awt.Rectangle; 34 import com.sun.star.awt.XEnhancedMouseClickHandler; 35 import com.sun.star.awt.XExtendedToolkit; 36 import com.sun.star.awt.XTopWindow; 37 import com.sun.star.awt.XWindow; 38 import com.sun.star.frame.XModel; 39 import com.sun.star.lang.XComponent; 40 import com.sun.star.lang.XMultiServiceFactory; 41 import com.sun.star.sheet.XEnhancedMouseClickBroadcaster; 42 import com.sun.star.uno.UnoRuntime; 43 import com.sun.star.uno.XInterface; 44 45 import lib.MultiMethodTest; 46 import lib.StatusException; 47 48 import util.AccessibilityTools; 49 import util.DesktopTools; 50 import util.utils; 51 52 import java.awt.Robot; 53 import java.awt.event.InputEvent; 54 55 56 public class _XEnhancedMouseClickBroadcaster extends MultiMethodTest { 57 public XEnhancedMouseClickBroadcaster oObj; 58 protected boolean mousePressed = false; 59 protected boolean mouseReleased = false; 60 protected XEnhancedMouseClickHandler listener = new MyListener(); 61 private XModel docModel = null; 62 63 public void before() { 64 docModel = (XModel) UnoRuntime.queryInterface( 65 XModel.class,tEnv.getObjRelation("FirstModel")); 66 DesktopTools.bringWindowToFront(docModel); 67 } 68 69 public void _addEnhancedMouseClickHandler() { 70 oObj.addEnhancedMouseClickHandler(listener); 71 clickOnSheet(); 72 73 //make sure that the listener is removed even if the test fails 74 if ((!mousePressed) || (!mouseReleased)) { 75 oObj.removeEnhancedMouseClickHandler(listener); 76 } 77 78 tRes.tested("addEnhancedMouseClickHandler()", 79 mousePressed && mouseReleased); 80 } 81 82 public void _removeEnhancedMouseClickHandler() { 83 requiredMethod("addEnhancedMouseClickHandler()"); 84 mousePressed = false; 85 mouseReleased = false; 86 oObj.removeEnhancedMouseClickHandler(listener); 87 clickOnSheet(); 88 tRes.tested("removeEnhancedMouseClickHandler()", 89 (!mousePressed) && (!mouseReleased)); 90 } 91 92 protected boolean clickOnSheet() { 93 log.println("try to open contex menu..."); 94 AccessibilityTools at = new AccessibilityTools(); 95 96 XWindow xWindow = at.getCurrentWindow((XMultiServiceFactory)tParam.getMSF(), docModel); 97 98 XAccessible xRoot = at.getAccessibleObject(xWindow); 99 100 XInterface oObj = at.getAccessibleObjectForRole(xRoot, AccessibleRole.PANEL); 101 102 XAccessibleComponent window = (XAccessibleComponent) UnoRuntime.queryInterface( 103 XAccessibleComponent.class, oObj); 104 105 Point point = window.getLocationOnScreen(); 106 Rectangle rect = window.getBounds(); 107 108 log.println("klick mouse button..."); 109 try { 110 Robot rob = new Robot(); 111 int x = point.X + (rect.Width / 2)+50; 112 int y = point.Y + (rect.Height / 2)+50; 113 rob.mouseMove(x, y); 114 System.out.println("Press Button"); 115 rob.mousePress(InputEvent.BUTTON3_MASK); 116 System.out.println("Release Button"); 117 rob.mouseRelease(InputEvent.BUTTON3_MASK); 118 System.out.println("done"); 119 System.out.println("warte"); 120 shortWait(); 121 System.out.println("Press Button"); 122 rob.mousePress(InputEvent.BUTTON1_MASK); 123 System.out.println("Release Button"); 124 rob.mouseRelease(InputEvent.BUTTON1_MASK); 125 System.out.println("done "+rob.getAutoDelay()); 126 } catch (java.awt.AWTException e) { 127 log.println("couldn't press mouse button"); 128 } 129 130 131 return true; 132 } 133 134 private void shortWait() { 135 try { 136 Thread.currentThread().sleep(2000); 137 } catch (InterruptedException e) { 138 System.out.println("While waiting :" + e); 139 } 140 } 141 142 protected class MyListener implements XEnhancedMouseClickHandler { 143 public void disposing( 144 com.sun.star.lang.EventObject eventObject) { 145 } 146 147 public boolean mousePressed( 148 com.sun.star.awt.EnhancedMouseEvent enhancedMouseEvent) { 149 log.println("mousePressed"); 150 mousePressed = true; 151 152 return true; 153 } 154 155 public boolean mouseReleased( 156 com.sun.star.awt.EnhancedMouseEvent enhancedMouseEvent) { 157 log.println("mouseReleased"); 158 mouseReleased = true; 159 160 return true; 161 } 162 } 163 } 164