/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
package complex.toolkit.accessibility;
import com.sun.star.lang.EventObject;
import com.sun.star.awt.Rectangle;
import com.sun.star.awt.PosSize;
import com.sun.star.awt.XWindow;
import com.sun.star.accessibility.AccessibleEventObject;
import com.sun.star.accessibility.XAccessible;
import com.sun.star.accessibility.XAccessibleEventBroadcaster;
import com.sun.star.accessibility.XAccessibleEventListener;
import com.sun.star.accessibility.XAccessibleContext;
import com.sun.star.uno.XInterface;
import com.sun.star.uno.UnoRuntime;
/**
* Testing
* com.sun.star.accessibility.XAccessibleEventBroadcaster
* interface methods :
*
addAccessibleEventListener()
removeAccessibleEventListener()
* * This test needs the following object relations : *
'EventProducer'
(of type
* ifc.accessibility._XAccessibleEventBroadcaster.EventProducer
):
* this must be an implementation of the interface which could perform
* some actions for generating any kind of AccessibleEvent
* * @see com.sun.star.accessibility.XAccessibleEventBroadcaster */ public class _XAccessibleEventBroadcaster { public XAccessibleEventBroadcaster oObj = null; EventProducer prod = null ; EvListener list = new EvListener(); /** * An event producer */ public static class EventProducer { XWindow xWindow; public EventProducer(XWindow window) { xWindow = window; } public void fireEvent() { Rectangle newPosSize = xWindow.getPosSize(); newPosSize.Width = newPosSize.Width - 20; newPosSize.Height = newPosSize.Height - 20; newPosSize.X = newPosSize.X + 20; newPosSize.Y = newPosSize.Y + 20; xWindow.setPosSize(newPosSize.X, newPosSize.Y, newPosSize.Width, newPosSize.Height, PosSize.POSSIZE); } } /** * Listener implementation which registers listener calls. */ private class EvListener implements XAccessibleEventListener { public AccessibleEventObject notifiedEvent = null ; public void notifyEvent(AccessibleEventObject ev) { System.out.println("Listener, Event : " + ev.EventId); System.out.println("EventID: " + ev.EventId); Object old=ev.OldValue; if (old instanceof com.sun.star.accessibility.XAccessible) { System.out.println("Old: "+((XAccessible)old).getAccessibleContext().getAccessibleName()); } Object nev=ev.NewValue; if (nev instanceof com.sun.star.accessibility.XAccessible) { System.out.println("New: "+((XAccessible)nev).getAccessibleContext().getAccessibleName()); } notifiedEvent = ev; } public void disposing(EventObject ev) {} } /** * c'tor * @param object * @param window */ public _XAccessibleEventBroadcaster(XInterface object, XWindow window) { oObj = UnoRuntime.queryInterface(XAccessibleEventBroadcaster.class, object); prod = new EventProducer(window); } /** * Adds two listeners and fires event by mean of object relation.
* Has OK status if both listeners were called * @return */ public boolean _addEventListener() { System.out.println("adding two listeners"); oObj.addAccessibleEventListener(list); boolean isTransient = chkTransient(oObj); System.out.println("fire event"); prod.fireEvent() ; try { Thread.sleep(1500); } catch (InterruptedException ex) { } boolean works = true; if (list.notifiedEvent == null) { if (!isTransient) { System.out.println("listener wasn't called"); works = false; } else { System.out.println("Object is Transient, listener isn't expected to be called"); } oObj.removeAccessibleEventListener(list); } return works; } /** * Removes one of two listeners added before and and fires event * by mean of object relation.
* * Has OK status if the removed listener wasn't called.
* * The following method tests are to be completed successfully before : *
addEventListener()
: to have added listeners