xref: /AOO41X/main/qadevOOo/tests/java/ifc/awt/_XUserInputInterception.java (revision ef39d40d3f5e66cf3f035b3e93783012b340500d)
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