1ef39d40dSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3ef39d40dSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4ef39d40dSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5ef39d40dSAndrew Rist  * distributed with this work for additional information
6ef39d40dSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7ef39d40dSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8ef39d40dSAndrew Rist  * "License"); you may not use this file except in compliance
9ef39d40dSAndrew Rist  * with the License.  You may obtain a copy of the License at
10ef39d40dSAndrew Rist  *
11ef39d40dSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12ef39d40dSAndrew Rist  *
13ef39d40dSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14ef39d40dSAndrew Rist  * software distributed under the License is distributed on an
15ef39d40dSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16ef39d40dSAndrew Rist  * KIND, either express or implied.  See the License for the
17ef39d40dSAndrew Rist  * specific language governing permissions and limitations
18ef39d40dSAndrew Rist  * under the License.
19ef39d40dSAndrew Rist  *
20ef39d40dSAndrew Rist  *************************************************************/
21ef39d40dSAndrew Rist 
22ef39d40dSAndrew Rist 
23cdf0e10cSrcweir package ifc.sheet;
24cdf0e10cSrcweir 
25cdf0e10cSrcweir import com.sun.star.accessibility.AccessibleRole;
26cdf0e10cSrcweir import com.sun.star.accessibility.XAccessible;
27cdf0e10cSrcweir import com.sun.star.accessibility.XAccessibleComponent;
28cdf0e10cSrcweir import com.sun.star.accessibility.XAccessibleContext;
29cdf0e10cSrcweir import com.sun.star.awt.Point;
30cdf0e10cSrcweir import com.sun.star.awt.PosSize;
31cdf0e10cSrcweir import com.sun.star.awt.Rectangle;
32cdf0e10cSrcweir import com.sun.star.awt.XExtendedToolkit;
33cdf0e10cSrcweir import com.sun.star.awt.XTopWindow;
34cdf0e10cSrcweir import com.sun.star.awt.XWindow;
35cdf0e10cSrcweir import com.sun.star.beans.PropertyValue;
36cdf0e10cSrcweir import com.sun.star.frame.XModel;
37cdf0e10cSrcweir import com.sun.star.lang.EventObject;
38cdf0e10cSrcweir import com.sun.star.lang.XComponent;
39cdf0e10cSrcweir import com.sun.star.lang.XMultiServiceFactory;
40cdf0e10cSrcweir import com.sun.star.sheet.RangeSelectionEvent;
41cdf0e10cSrcweir import com.sun.star.sheet.XRangeSelection;
42cdf0e10cSrcweir import com.sun.star.sheet.XRangeSelectionChangeListener;
43cdf0e10cSrcweir import com.sun.star.sheet.XRangeSelectionListener;
44cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime;
45cdf0e10cSrcweir import java.awt.Robot;
46cdf0e10cSrcweir import java.awt.event.InputEvent;
47cdf0e10cSrcweir import java.io.PrintWriter;
48cdf0e10cSrcweir import lib.MultiMethodTest;
49cdf0e10cSrcweir import lib.Status;
50cdf0e10cSrcweir import lib.StatusException;
51cdf0e10cSrcweir import util.AccessibilityTools;
52cdf0e10cSrcweir 
53cdf0e10cSrcweir /**
54cdf0e10cSrcweir  * Check the XRangeSelection interface.
55cdf0e10cSrcweir  */
56cdf0e10cSrcweir public class _XRangeSelection extends MultiMethodTest {
57cdf0e10cSrcweir     public XRangeSelection oObj = null;
58cdf0e10cSrcweir     MyRangeSelectionListener aListener = null;
59cdf0e10cSrcweir 
before()60cdf0e10cSrcweir     public void before() {
61cdf0e10cSrcweir         aListener = new _XRangeSelection.MyRangeSelectionListener(log);
62cdf0e10cSrcweir         // workaround for i34499
63cdf0e10cSrcweir         XModel xModel = (XModel)tEnv.getObjRelation("FirstModel");
64cdf0e10cSrcweir         if (xModel == null)
65cdf0e10cSrcweir             throw new StatusException(Status.failed("Object relation FirstModel' not set."));
66cdf0e10cSrcweir         XWindow xWindow = xModel.getCurrentController().getFrame().getContainerWindow();
67cdf0e10cSrcweir         XTopWindow xTopWindow = (XTopWindow)UnoRuntime.queryInterface(XTopWindow.class, xWindow);
68cdf0e10cSrcweir         xTopWindow.toFront();
69cdf0e10cSrcweir         util.utils.shortWait(500);
70cdf0e10cSrcweir     }
71cdf0e10cSrcweir 
72cdf0e10cSrcweir 
_abortRangeSelection()73cdf0e10cSrcweir     public void _abortRangeSelection() {
74cdf0e10cSrcweir         requiredMethod("removeRangeSelectionChangeListener()");
75cdf0e10cSrcweir         requiredMethod("removeRangeSelectionListener()");
76cdf0e10cSrcweir         oObj.abortRangeSelection();
77cdf0e10cSrcweir         tRes.tested("abortRangeSelection()", true);
78cdf0e10cSrcweir     }
79cdf0e10cSrcweir 
_addRangeSelectionChangeListener()80cdf0e10cSrcweir     public void _addRangeSelectionChangeListener() {
81cdf0e10cSrcweir         oObj.addRangeSelectionChangeListener(aListener);
82cdf0e10cSrcweir         tRes.tested("addRangeSelectionChangeListener()", true);
83cdf0e10cSrcweir     }
84cdf0e10cSrcweir 
_addRangeSelectionListener()85cdf0e10cSrcweir     public void _addRangeSelectionListener() {
86cdf0e10cSrcweir         oObj.addRangeSelectionListener(aListener);
87cdf0e10cSrcweir         tRes.tested("addRangeSelectionListener()", true);
88cdf0e10cSrcweir     }
89cdf0e10cSrcweir 
_removeRangeSelectionChangeListener()90cdf0e10cSrcweir     public void _removeRangeSelectionChangeListener() {
91cdf0e10cSrcweir         oObj.removeRangeSelectionChangeListener(aListener);
92cdf0e10cSrcweir         tRes.tested("removeRangeSelectionChangeListener()", true);
93cdf0e10cSrcweir     }
94cdf0e10cSrcweir 
_removeRangeSelectionListener()95cdf0e10cSrcweir     public void _removeRangeSelectionListener() {
96cdf0e10cSrcweir         oObj.removeRangeSelectionListener(aListener);
97cdf0e10cSrcweir         tRes.tested("removeRangeSelectionListener()", true);
98cdf0e10cSrcweir     }
99cdf0e10cSrcweir 
_startRangeSelection()100cdf0e10cSrcweir     public void _startRangeSelection() {
101cdf0e10cSrcweir         requiredMethod("addRangeSelectionChangeListener()");
102cdf0e10cSrcweir         requiredMethod("addRangeSelectionListener()");
103cdf0e10cSrcweir 
104cdf0e10cSrcweir         // get the sheet center
105170fb961SPedro Giffuni         Point center = getSheetCenter();
106cdf0e10cSrcweir         if (center == null)
107cdf0e10cSrcweir             throw new StatusException(Status.failed("Couldn't get the sheet center."));
108cdf0e10cSrcweir 
109cdf0e10cSrcweir         PropertyValue[] props = new PropertyValue[3];
110cdf0e10cSrcweir         props[0] = new PropertyValue();
111cdf0e10cSrcweir         props[0].Name = "InitialValue";
112cdf0e10cSrcweir         props[0].Value = "B3:D5";
113cdf0e10cSrcweir         props[1] = new PropertyValue();
114cdf0e10cSrcweir         props[1].Name = "Title";
115cdf0e10cSrcweir         props[1].Value = "the title";
116cdf0e10cSrcweir         props[2] = new PropertyValue();
117cdf0e10cSrcweir         props[2].Name = "CloseOnMouseRelease";
118cdf0e10cSrcweir         props[2].Value = Boolean.FALSE;
119cdf0e10cSrcweir         oObj.startRangeSelection(props);
120cdf0e10cSrcweir         // wait for listeners
121cdf0e10cSrcweir         util.utils.shortWait(1000);
122cdf0e10cSrcweir 
123cdf0e10cSrcweir         // get closer button: move if window cobvers the sheet center
124cdf0e10cSrcweir         Point closer = getCloser(center);
125cdf0e10cSrcweir         if (closer == null)
126cdf0e10cSrcweir             throw new StatusException(Status.failed("Couldn't get the close Button."));
127cdf0e10cSrcweir 
128cdf0e10cSrcweir         // do something to trigger the listeners
129cdf0e10cSrcweir         clickOnSheet(center);
130cdf0e10cSrcweir         util.utils.shortWait(5000);
131cdf0e10cSrcweir 
132cdf0e10cSrcweir         // click on closer
133cdf0e10cSrcweir         clickOnSheet(closer);
134cdf0e10cSrcweir         util.utils.shortWait(5000);
135cdf0e10cSrcweir 
136cdf0e10cSrcweir //        System.out.println("X: " + closer.X + "    Y: " + closer.Y);
137cdf0e10cSrcweir 
138cdf0e10cSrcweir         // just check that we do not have the page instead of the range descriptor
139cdf0e10cSrcweir /*        int childCount = xRoot.getAccessibleContext().getAccessibleChildCount();
140cdf0e10cSrcweir         if (childCount > 3) {// too many children: wrong type
141cdf0e10cSrcweir             throw new StatusException(Status.failed("Could not get the Range Descriptor"));
142cdf0e10cSrcweir         }
143cdf0e10cSrcweir         XAccessible xAcc = null;
144cdf0e10cSrcweir         try {
145cdf0e10cSrcweir             xAcc = xRoot.getAccessibleContext().getAccessibleChild(1);
146cdf0e10cSrcweir         }
147cdf0e10cSrcweir         catch(com.sun.star.lang.IndexOutOfBoundsException e) {
148cdf0e10cSrcweir 
149cdf0e10cSrcweir         }
150cdf0e10cSrcweir         accTools.printAccessibleTree(log, xAcc);
151cdf0e10cSrcweir */
152cdf0e10cSrcweir         // open a new range selection
153cdf0e10cSrcweir         props[0].Value = "C4:E6";
154cdf0e10cSrcweir         oObj.startRangeSelection(props);
155cdf0e10cSrcweir         util.utils.shortWait(1000);
156cdf0e10cSrcweir         props[0].Value = "C2:E3";
157cdf0e10cSrcweir         oObj.startRangeSelection(props);
158cdf0e10cSrcweir         util.utils.shortWait(1000);
159cdf0e10cSrcweir 
160cdf0e10cSrcweir         oObj.startRangeSelection(props);
161cdf0e10cSrcweir         util.utils.shortWait(1000);
162cdf0e10cSrcweir         oObj.abortRangeSelection();
163cdf0e10cSrcweir         aListener.reset();
164cdf0e10cSrcweir         System.out.println("Listener called: " + aListener.bAbortCalled);
165cdf0e10cSrcweir 
166cdf0e10cSrcweir         tRes.tested("startRangeSelection()", aListener.listenerCalled());
167cdf0e10cSrcweir     }
168cdf0e10cSrcweir 
169cdf0e10cSrcweir     /**
170cdf0e10cSrcweir      * Determine the current top window center and return this as a point.
171e6b649b5SPedro Giffuni      * @return a point representing the sheet center.
172cdf0e10cSrcweir      */
getSheetCenter()173cdf0e10cSrcweir     protected Point getSheetCenter() {
174cdf0e10cSrcweir         log.println("Trying to get AccessibleSpreadsheet");
175cdf0e10cSrcweir         AccessibilityTools at = new AccessibilityTools();
176cdf0e10cSrcweir         XComponent xSheetDoc = (XComponent) tEnv.getObjRelation("DOCUMENT");
177cdf0e10cSrcweir 
178cdf0e10cSrcweir         XModel xModel = (XModel)
179cdf0e10cSrcweir             UnoRuntime.queryInterface(XModel.class, xSheetDoc);
180cdf0e10cSrcweir         System.out.println("Name: " + xModel.getCurrentController().getFrame().getName());
181cdf0e10cSrcweir 
182cdf0e10cSrcweir         XWindow xWindow = at.getCurrentWindow((XMultiServiceFactory)tParam.getMSF(), xModel);
183cdf0e10cSrcweir         XAccessible xRoot = at.getAccessibleObject(xWindow);
184cdf0e10cSrcweir 
185cdf0e10cSrcweir         at.getAccessibleObjectForRole(xRoot, AccessibleRole.TABLE  );
186cdf0e10cSrcweir 
187cdf0e10cSrcweir         XAccessibleComponent AccessibleSpreadsheet = (XAccessibleComponent) UnoRuntime.queryInterface(XAccessibleComponent.class,AccessibilityTools.SearchedContext);
188cdf0e10cSrcweir 
189cdf0e10cSrcweir         log.println("Got " + util.utils.getImplName(AccessibleSpreadsheet));
190cdf0e10cSrcweir 
191cdf0e10cSrcweir         Object toolkit = null;
192cdf0e10cSrcweir 
193cdf0e10cSrcweir         try {
194cdf0e10cSrcweir             toolkit = ((XMultiServiceFactory)tParam.getMSF()).createInstance("com.sun.star.awt.Toolkit");
195cdf0e10cSrcweir         } catch (com.sun.star.uno.Exception e) {
196cdf0e10cSrcweir             log.println("Couldn't get toolkit");
197cdf0e10cSrcweir             e.printStackTrace(log);
198cdf0e10cSrcweir             throw new StatusException("Couldn't get toolkit", e);
199cdf0e10cSrcweir         }
200cdf0e10cSrcweir 
201cdf0e10cSrcweir         XExtendedToolkit tk = (XExtendedToolkit) UnoRuntime.queryInterface(
202cdf0e10cSrcweir                                       XExtendedToolkit.class, toolkit);
203cdf0e10cSrcweir 
204cdf0e10cSrcweir         XTopWindow tw = null;
205cdf0e10cSrcweir 
206cdf0e10cSrcweir         int k = tk.getTopWindowCount();
207cdf0e10cSrcweir         for (int i=0;i<k;i++) {
208cdf0e10cSrcweir             try {
209cdf0e10cSrcweir                 XTopWindow tw_temp = tk.getTopWindow(i);
210cdf0e10cSrcweir                 XAccessible xacc = (XAccessible) UnoRuntime.queryInterface(XAccessible.class,  tw_temp);
211cdf0e10cSrcweir                 if (xacc != null) {
212cdf0e10cSrcweir                     if (xacc.getAccessibleContext().getAccessibleName().indexOf("d2")>0) {
213cdf0e10cSrcweir                         tw=tw_temp;
214170fb961SPedro Giffuni                     }
215cdf0e10cSrcweir                 } else {
216cdf0e10cSrcweir                     log.println("\t unknown window");
217cdf0e10cSrcweir                 }
218cdf0e10cSrcweir 
219cdf0e10cSrcweir             } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
220cdf0e10cSrcweir             }
221cdf0e10cSrcweir         }
222cdf0e10cSrcweir         if (tw == null) {
223cdf0e10cSrcweir             System.out.println("No TopWindow :-(");
224cdf0e10cSrcweir             return null;
225cdf0e10cSrcweir         }
226cdf0e10cSrcweir 
227cdf0e10cSrcweir         Point point = AccessibleSpreadsheet.getLocationOnScreen();
228cdf0e10cSrcweir         Rectangle rect = AccessibleSpreadsheet.getBounds();
229cdf0e10cSrcweir         Point retPoint = new Point();
230cdf0e10cSrcweir         retPoint.X = point.X + (rect.Width / 2);
231cdf0e10cSrcweir         retPoint.Y = point.Y + (rect.Height / 2);
232cdf0e10cSrcweir         return retPoint;
233cdf0e10cSrcweir     }
234cdf0e10cSrcweir 
235cdf0e10cSrcweir     /**
236cdf0e10cSrcweir      * Get the closer button on the right top of the current window.
237cdf0e10cSrcweir      * @return A point representing the closer button.
238cdf0e10cSrcweir      */
getCloser(Point center)239cdf0e10cSrcweir     private Point getCloser(Point center) {
240cdf0e10cSrcweir         XMultiServiceFactory xMSF = (XMultiServiceFactory)tParam.getMSF();
241cdf0e10cSrcweir         Object aToolkit = null;
242cdf0e10cSrcweir         try {
243cdf0e10cSrcweir             aToolkit = xMSF.createInstance("com.sun.star.awt.Toolkit");
244cdf0e10cSrcweir         }
245cdf0e10cSrcweir         catch(com.sun.star.uno.Exception e) {
246cdf0e10cSrcweir             throw new StatusException("Could not create 'com.sun.star.awt.Toolkit'.", e);
247cdf0e10cSrcweir         }
248cdf0e10cSrcweir         XExtendedToolkit xExtendedToolkit = (XExtendedToolkit)UnoRuntime.queryInterface(XExtendedToolkit.class, aToolkit);
249cdf0e10cSrcweir         XTopWindow tw = null;
250cdf0e10cSrcweir 
251cdf0e10cSrcweir         XAccessibleComponent xAccessibleComponent = null;
252cdf0e10cSrcweir         int k = xExtendedToolkit.getTopWindowCount();
253cdf0e10cSrcweir         for (int i=0;i<k;i++) {
254cdf0e10cSrcweir             try {
255cdf0e10cSrcweir                 XTopWindow tw_temp = xExtendedToolkit.getTopWindow(i);
256cdf0e10cSrcweir                 XAccessible xacc = (XAccessible)UnoRuntime.queryInterface(XAccessible.class,  tw_temp);
257cdf0e10cSrcweir                 if (xacc != null) {
258cdf0e10cSrcweir                     System.out.println("Name: " + xacc.getAccessibleContext().getAccessibleName());
259cdf0e10cSrcweir                     if (xacc.getAccessibleContext().getAccessibleName().startsWith("the title")) {
260cdf0e10cSrcweir                         tw = tw_temp;
261cdf0e10cSrcweir                         XAccessibleContext xContext = xacc.getAccessibleContext();
262cdf0e10cSrcweir                         xAccessibleComponent = (XAccessibleComponent)UnoRuntime.queryInterface(XAccessibleComponent.class, xContext);
263cdf0e10cSrcweir                         if (xAccessibleComponent == null)
264cdf0e10cSrcweir                             System.out.println("!!!! MIST !!!!");
265cdf0e10cSrcweir                         else
266cdf0e10cSrcweir                             System.out.println("########## KLAPPT ########## ");
267cdf0e10cSrcweir                     }
268cdf0e10cSrcweir                 }
269cdf0e10cSrcweir                 else {
270cdf0e10cSrcweir                     log.println("\t unknown window");
271cdf0e10cSrcweir                 }
272cdf0e10cSrcweir 
273cdf0e10cSrcweir             } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
274cdf0e10cSrcweir             }
275cdf0e10cSrcweir         }
276cdf0e10cSrcweir         if (tw == null) {
277cdf0e10cSrcweir             System.out.println("No TopWindow :-(");
278cdf0e10cSrcweir             return null;
279cdf0e10cSrcweir         }
280cdf0e10cSrcweir 
281cdf0e10cSrcweir         XWindow xWindow = (XWindow)UnoRuntime.queryInterface(XWindow.class, tw);
282cdf0e10cSrcweir         Rectangle posSize = xWindow.getPosSize();
283cdf0e10cSrcweir 
284cdf0e10cSrcweir         // compare the center point with the dimensions of the current top window
285cdf0e10cSrcweir         boolean windowOK = false;
286cdf0e10cSrcweir         while(!windowOK) {
287cdf0e10cSrcweir             if (posSize.X <= center.X && center.X <= posSize.X + posSize.Width) {
288cdf0e10cSrcweir                 if (posSize.Y <= center.Y && center.Y <= posSize.Y +posSize.Height) {
289cdf0e10cSrcweir                     // move window out of the way
290cdf0e10cSrcweir                     posSize.X = posSize.X + 10;
291cdf0e10cSrcweir                     posSize.Y = posSize.Y +10;
292cdf0e10cSrcweir                     xWindow.setPosSize(posSize.X, posSize.Y, posSize.Width, posSize.Height, PosSize.POS);
293cdf0e10cSrcweir                 }
294cdf0e10cSrcweir                 else {
295cdf0e10cSrcweir                     windowOK = true;
296cdf0e10cSrcweir                 }
297cdf0e10cSrcweir             }
298cdf0e10cSrcweir             else {
299cdf0e10cSrcweir                 windowOK = true;
300cdf0e10cSrcweir             }
301cdf0e10cSrcweir 
302cdf0e10cSrcweir         }
303cdf0e10cSrcweir 
304cdf0e10cSrcweir         Point p = xAccessibleComponent.getLocationOnScreen();
305cdf0e10cSrcweir //        System.out.println("ScreenPoint: " + p.X + "   " + p.Y );
306cdf0e10cSrcweir //        System.out.println("WindowPoint: " + posSize.X + "   " + posSize.Y + "   " + posSize.Width + "   " + posSize.Height);
307cdf0e10cSrcweir         Point closer = new Point();
308cdf0e10cSrcweir         closer.X = p.X + posSize.Width - 2;
309cdf0e10cSrcweir         closer.Y = p.Y + 5;
310cdf0e10cSrcweir         System.out.println("Closer: " + closer.X + "   " + closer.Y);
311cdf0e10cSrcweir         return closer;
312cdf0e10cSrcweir     }
313cdf0e10cSrcweir 
clickOnSheet(Point point)314cdf0e10cSrcweir     protected boolean clickOnSheet(Point point) {
315cdf0e10cSrcweir         log.println("Clicking in the center of the AccessibleSpreadsheet");
316cdf0e10cSrcweir 
317cdf0e10cSrcweir         try {
318cdf0e10cSrcweir             Robot rob = new Robot();
319cdf0e10cSrcweir             rob.mouseMove(point.X, point.Y);
320cdf0e10cSrcweir             rob.mousePress(InputEvent.BUTTON1_MASK);
321cdf0e10cSrcweir             util.utils.shortWait(1000);
322cdf0e10cSrcweir             rob.mouseRelease(InputEvent.BUTTON1_MASK);
323cdf0e10cSrcweir             util.utils.shortWait(1000);
324cdf0e10cSrcweir         } catch (java.awt.AWTException e) {
325cdf0e10cSrcweir             log.println("couldn't press mouse button");
326cdf0e10cSrcweir         }
327cdf0e10cSrcweir 
328cdf0e10cSrcweir         return true;
329cdf0e10cSrcweir     }
330cdf0e10cSrcweir 
331cdf0e10cSrcweir     /**
332cdf0e10cSrcweir      *
333cdf0e10cSrcweir      */
334cdf0e10cSrcweir     public static class MyRangeSelectionListener implements XRangeSelectionListener, XRangeSelectionChangeListener {
335cdf0e10cSrcweir         boolean bAbortCalled = false;
336cdf0e10cSrcweir         boolean bChangeCalled = false;
337cdf0e10cSrcweir         boolean bDoneCalled = false;
338cdf0e10cSrcweir         PrintWriter log = null;
339cdf0e10cSrcweir 
MyRangeSelectionListener(PrintWriter log)340cdf0e10cSrcweir         public MyRangeSelectionListener(PrintWriter log) {
341cdf0e10cSrcweir             this.log = log;
342cdf0e10cSrcweir         }
343cdf0e10cSrcweir 
aborted(RangeSelectionEvent rangeSelectionEvent)344cdf0e10cSrcweir         public void aborted(RangeSelectionEvent rangeSelectionEvent) {
345cdf0e10cSrcweir             log.println("Called 'aborted' with: " + rangeSelectionEvent.RangeDescriptor);
346cdf0e10cSrcweir             bAbortCalled = true;
347cdf0e10cSrcweir         }
348cdf0e10cSrcweir 
descriptorChanged(RangeSelectionEvent rangeSelectionEvent)349cdf0e10cSrcweir         public void descriptorChanged(RangeSelectionEvent rangeSelectionEvent) {
350cdf0e10cSrcweir             log.println("Called 'descriptorChanged' with: " + rangeSelectionEvent.RangeDescriptor);
351cdf0e10cSrcweir             bChangeCalled = true;
352cdf0e10cSrcweir         }
353cdf0e10cSrcweir 
done(RangeSelectionEvent rangeSelectionEvent)354cdf0e10cSrcweir         public void done(RangeSelectionEvent rangeSelectionEvent) {
355cdf0e10cSrcweir             log.println("Called 'done' with: " + rangeSelectionEvent.RangeDescriptor);
356cdf0e10cSrcweir             bDoneCalled = true;
357cdf0e10cSrcweir         }
358cdf0e10cSrcweir 
listenerCalled()359cdf0e10cSrcweir         public boolean listenerCalled() {
360cdf0e10cSrcweir             return bAbortCalled & bChangeCalled & bDoneCalled;
361cdf0e10cSrcweir         }
362cdf0e10cSrcweir 
reset()363cdf0e10cSrcweir         public void reset() {
364cdf0e10cSrcweir             bAbortCalled = false;
365cdf0e10cSrcweir             bChangeCalled = false;
366cdf0e10cSrcweir             bDoneCalled = false;
367cdf0e10cSrcweir         }
368cdf0e10cSrcweir 
369cdf0e10cSrcweir         /**
370cdf0e10cSrcweir          * ignore disposing
371cdf0e10cSrcweir          * @param eventObject The event.
372cdf0e10cSrcweir          */
disposing(EventObject eventObject)373cdf0e10cSrcweir         public void disposing(EventObject eventObject) {
374cdf0e10cSrcweir         }
375cdf0e10cSrcweir     }
376cdf0e10cSrcweir }
377