1 /*
2  * This file is part of the LibreOffice project.
3  *
4  * This Source Code Form is subject to the terms of the Mozilla Public
5  * License, v. 2.0. If a copy of the MPL was not distributed with this
6  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
7  *
8  * This file incorporates work covered by the following license notice:
9  *
10  *   Licensed to the Apache Software Foundation (ASF) under one or more
11  *   contributor license agreements. See the NOTICE file distributed
12  *   with this work for additional information regarding copyright
13  *   ownership. The ASF licenses this file to you under the Apache
14  *   License, Version 2.0 (the "License"); you may not use this file
15  *   except in compliance with the License. You may obtain a copy of
16  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
17  */
18 package ifc.sheet;
19 
20 import com.sun.star.accessibility.AccessibleRole;
21 import com.sun.star.accessibility.XAccessible;
22 import com.sun.star.accessibility.XAccessibleComponent;
23 import com.sun.star.awt.Point;
24 import com.sun.star.awt.Rectangle;
25 import com.sun.star.awt.XEnhancedMouseClickHandler;
26 import com.sun.star.awt.XWindow;
27 import com.sun.star.frame.XModel;
28 import com.sun.star.sheet.XEnhancedMouseClickBroadcaster;
29 import com.sun.star.uno.UnoRuntime;
30 import com.sun.star.uno.XInterface;
31 
32 import lib.MultiMethodTest;
33 import util.AccessibilityTools;
34 import util.DesktopTools;
35 import java.awt.Robot;
36 import java.awt.event.InputEvent;
37 
38 
39 public class _XEnhancedMouseClickBroadcaster extends MultiMethodTest {
40     public XEnhancedMouseClickBroadcaster oObj;
41     protected boolean mousePressed = false;
42     protected boolean mouseReleased = false;
43     protected XEnhancedMouseClickHandler listener = new MyListener();
44     private XModel docModel = null;
45 
46     @Override
before()47     public void before() {
48         docModel = UnoRuntime.queryInterface(
49                 XModel.class,tEnv.getObjRelation("FirstModel"));
50         DesktopTools.bringWindowToFront(docModel);
51     }
52 
_addEnhancedMouseClickHandler()53     public void _addEnhancedMouseClickHandler() {
54         oObj.addEnhancedMouseClickHandler(listener);
55         clickOnSheet();
56 
57         //make sure that the listener is removed even if the test fails
58         if ((!mousePressed) || (!mouseReleased)) {
59             oObj.removeEnhancedMouseClickHandler(listener);
60         }
61 
62         tRes.tested("addEnhancedMouseClickHandler()",
63             mousePressed && mouseReleased);
64     }
65 
_removeEnhancedMouseClickHandler()66     public void _removeEnhancedMouseClickHandler() {
67         requiredMethod("addEnhancedMouseClickHandler()");
68         mousePressed = false;
69         mouseReleased = false;
70         oObj.removeEnhancedMouseClickHandler(listener);
71         clickOnSheet();
72         tRes.tested("removeEnhancedMouseClickHandler()",
73             (!mousePressed) && (!mouseReleased));
74     }
75 
clickOnSheet()76     protected boolean clickOnSheet() {
77         log.println("try to open contex menu...");
78 
79         XWindow xWindow = AccessibilityTools.getCurrentWindow(docModel);
80 
81         XAccessible xRoot = AccessibilityTools.getAccessibleObject(xWindow);
82 
83         XInterface oObj = AccessibilityTools.getAccessibleObjectForRole(xRoot, AccessibleRole.PANEL);
84 
85         XAccessibleComponent window = UnoRuntime.queryInterface(
86                 XAccessibleComponent.class, oObj);
87 
88         Point point = window.getLocationOnScreen();
89         Rectangle rect = window.getBounds();
90 
91         log.println("click mouse button...");
92         try {
93             Robot rob = new Robot();
94             int x = point.X + (rect.Width / 2)+50;
95             int y = point.Y + (rect.Height / 2)+50;
96             rob.mouseMove(x, y);
97             System.out.println("Press Button");
98             rob.mousePress(InputEvent.BUTTON3_MASK);
99             System.out.println("Release Button");
100             rob.mouseRelease(InputEvent.BUTTON3_MASK);
101             System.out.println("done");
102             System.out.println("wait");
103             waitForEventIdle();
104             System.out.println("Press Button");
105             rob.mousePress(InputEvent.BUTTON1_MASK);
106             System.out.println("Release Button");
107             rob.mouseRelease(InputEvent.BUTTON1_MASK);
108             System.out.println("done "+rob.getAutoDelay());
109         } catch (java.awt.AWTException e) {
110             log.println("couldn't press mouse button");
111         }
112 
113 
114         return true;
115     }
116 
117     protected class MyListener implements XEnhancedMouseClickHandler {
disposing( com.sun.star.lang.EventObject eventObject)118         public void disposing(
119             com.sun.star.lang.EventObject eventObject) {
120         }
121 
mousePressed( com.sun.star.awt.EnhancedMouseEvent enhancedMouseEvent)122         public boolean mousePressed(
123             com.sun.star.awt.EnhancedMouseEvent enhancedMouseEvent) {
124             log.println("mousePressed");
125             mousePressed = true;
126 
127             return true;
128         }
129 
mouseReleased( com.sun.star.awt.EnhancedMouseEvent enhancedMouseEvent)130         public boolean mouseReleased(
131             com.sun.star.awt.EnhancedMouseEvent enhancedMouseEvent) {
132             log.println("mouseReleased");
133             mouseReleased = true;
134 
135             return true;
136         }
137     }
138 }
139