forked from amazingfate/loongoffice
2005/10/17 07:16:55 cd 1.1.2.1: #126010# Added test to check context menu interceptor implementation (including self-defined bitmaps)
288 lines
10 KiB
Java
288 lines
10 KiB
Java
package contextMenuInterceptor;
|
|
|
|
import com.sun.star.accessibility.AccessibleRole;
|
|
import com.sun.star.accessibility.XAccessible;
|
|
import com.sun.star.accessibility.XAccessibleComponent;
|
|
import com.sun.star.accessibility.XAccessibleContext;
|
|
import com.sun.star.awt.Point;
|
|
import com.sun.star.awt.Rectangle;
|
|
import com.sun.star.awt.XBitmap;
|
|
import com.sun.star.awt.XExtendedToolkit;
|
|
import com.sun.star.awt.XWindow;
|
|
import com.sun.star.beans.PropertyValue;
|
|
import com.sun.star.beans.XPropertySet;
|
|
import com.sun.star.beans.XPropertySetInfo;
|
|
import com.sun.star.container.XIndexAccess;
|
|
import com.sun.star.drawing.XShape;
|
|
import com.sun.star.frame.XComponentLoader;
|
|
import com.sun.star.frame.XController;
|
|
import com.sun.star.frame.XDesktop;
|
|
import com.sun.star.frame.XFrame;
|
|
import com.sun.star.frame.XModel;
|
|
import com.sun.star.lang.IndexOutOfBoundsException;
|
|
import com.sun.star.lang.XComponent;
|
|
import com.sun.star.lang.XInitialization;
|
|
import com.sun.star.lang.XMultiServiceFactory;
|
|
import com.sun.star.lang.XTypeProvider;
|
|
import com.sun.star.text.XTextDocument;
|
|
import com.sun.star.ui.XContextMenuInterceptor;
|
|
import com.sun.star.ui.XContextMenuInterception;
|
|
import com.sun.star.uno.AnyConverter;
|
|
import com.sun.star.uno.Type;
|
|
import com.sun.star.uno.UnoRuntime;
|
|
import com.sun.star.uno.XInterface;
|
|
import com.sun.star.uno.Exception;
|
|
import com.sun.star.util.CloseVetoException;
|
|
import com.sun.star.util.XCloseable;
|
|
import com.sun.star.view.XViewSettingsSupplier;
|
|
import complexlib.ComplexTestCase;
|
|
import java.awt.Robot;
|
|
import java.awt.event.InputEvent;
|
|
import java.io.PrintWriter;
|
|
import share.LogWriter;
|
|
import util.AccessibilityTools;
|
|
import util.DesktopTools;
|
|
import util.DrawTools;
|
|
import util.SOfficeFactory;
|
|
import util.utils;
|
|
|
|
/**
|
|
*
|
|
*/
|
|
public class CheckContextMenuInterceptor extends ComplexTestCase {
|
|
XMultiServiceFactory xMSF = null;
|
|
XFrame xFrame = null;
|
|
Point point = null;
|
|
XWindow xWindow = null;
|
|
|
|
public void before() {
|
|
xMSF = (XMultiServiceFactory)param.getMSF();
|
|
}
|
|
|
|
public void after() {
|
|
log.println("release the popup menu");
|
|
try {
|
|
Robot rob = new Robot();
|
|
int x = point.X;
|
|
int y = point.Y;
|
|
rob.mouseMove(x, y);
|
|
rob.mousePress(InputEvent.BUTTON1_MASK);
|
|
rob.mouseRelease(InputEvent.BUTTON1_MASK);
|
|
} catch (java.awt.AWTException e) {
|
|
log.println("couldn't press mouse button");
|
|
}
|
|
|
|
com.sun.star.util.XCloseable xClose = (com.sun.star.util.XCloseable)UnoRuntime.queryInterface(
|
|
com.sun.star.util.XCloseable.class, xFrame);
|
|
|
|
try
|
|
{
|
|
xClose.close(false);
|
|
}
|
|
catch(com.sun.star.util.CloseVetoException exVeto)
|
|
{
|
|
failed("Test frame couldn't be closed successfully.");
|
|
}
|
|
|
|
xFrame = null;
|
|
}
|
|
|
|
public String[] getTestMethodNames() {
|
|
return new String[]{"checkContextMenuInterceptor"};
|
|
}
|
|
|
|
public void checkContextMenuInterceptor() {
|
|
log.println(" **** Context Menu Interceptor *** ");
|
|
|
|
try {
|
|
// intialize the test document
|
|
com.sun.star.lang.XComponent xDrawDoc = DrawTools.createDrawDoc(xMSF);
|
|
|
|
SOfficeFactory SOF = SOfficeFactory.getFactory( xMSF);
|
|
XShape oShape = SOF.createShape(xDrawDoc,5000,5000,1500,1000,"GraphicObject");
|
|
DrawTools.getShapes(DrawTools.getDrawPage(xDrawDoc,0)).add(oShape);
|
|
|
|
com.sun.star.frame.XModel xModel =
|
|
(com.sun.star.frame.XModel)UnoRuntime.queryInterface(
|
|
com.sun.star.frame.XModel.class, xDrawDoc);
|
|
|
|
// get the frame for later usage
|
|
xFrame = xModel.getCurrentController().getFrame();
|
|
|
|
// ensure that the document content is optimal visible
|
|
DesktopTools.zoomToEntirePage(xDrawDoc);
|
|
|
|
XBitmap xBitmap = null;
|
|
|
|
// adding graphic as ObjRelation for GraphicObjectShape
|
|
XPropertySet oShapeProps = (XPropertySet)
|
|
UnoRuntime.queryInterface(XPropertySet.class,oShape);
|
|
log.println( "Inserting a shape into the document");
|
|
|
|
try
|
|
{
|
|
oShapeProps.setPropertyValue(
|
|
"GraphicURL",util.utils.getFullTestURL("space-metal.jpg"));
|
|
xBitmap = (XBitmap) AnyConverter.toObject(
|
|
new Type(XBitmap.class),oShapeProps.getPropertyValue
|
|
("GraphicObjectFillBitmap"));
|
|
} catch (com.sun.star.lang.WrappedTargetException e) {
|
|
} catch (com.sun.star.lang.IllegalArgumentException e) {
|
|
} catch (com.sun.star.beans.PropertyVetoException e) {
|
|
} catch (com.sun.star.beans.UnknownPropertyException e) {
|
|
}
|
|
|
|
// reuse the frame
|
|
com.sun.star.frame.XController xController = xFrame.getController();
|
|
com.sun.star.ui.XContextMenuInterception xContextMenuInterception = null;
|
|
com.sun.star.ui.XContextMenuInterceptor xContextMenuInterceptor = null;
|
|
|
|
if ( xController != null )
|
|
{
|
|
log.println( "Creating context menu interceptor");
|
|
|
|
// add our context menu interceptor
|
|
xContextMenuInterception =
|
|
(com.sun.star.ui.XContextMenuInterception)UnoRuntime.queryInterface(
|
|
com.sun.star.ui.XContextMenuInterception.class, xController );
|
|
|
|
if( xContextMenuInterception != null )
|
|
{
|
|
ContextMenuInterceptor aContextMenuInterceptor = new ContextMenuInterceptor( xBitmap );
|
|
xContextMenuInterceptor =
|
|
(com.sun.star.ui.XContextMenuInterceptor)UnoRuntime.queryInterface(
|
|
com.sun.star.ui.XContextMenuInterceptor.class, aContextMenuInterceptor );
|
|
|
|
log.println( "Register context menu interceptor");
|
|
xContextMenuInterception.registerContextMenuInterceptor( xContextMenuInterceptor );
|
|
}
|
|
}
|
|
|
|
// utils.shortWait(10000);
|
|
|
|
openContextMenu((XModel) UnoRuntime.queryInterface(XModel.class, xDrawDoc));
|
|
|
|
checkHelpEntry();
|
|
|
|
// remove our context menu interceptor
|
|
if ( xContextMenuInterception != null &&
|
|
xContextMenuInterceptor != null ) {
|
|
log.println( "Release context menu interceptor");
|
|
xContextMenuInterception.releaseContextMenuInterceptor(
|
|
xContextMenuInterceptor );
|
|
}
|
|
}
|
|
catch ( com.sun.star.uno.RuntimeException ex ) {
|
|
ex.printStackTrace((PrintWriter)log);
|
|
failed("Runtime exception caught!" + ex.getMessage());
|
|
}
|
|
catch ( java.lang.Exception ex ) {
|
|
ex.printStackTrace((PrintWriter)log);
|
|
failed("Java lang exception caught!" + ex.getMessage());
|
|
}
|
|
}
|
|
|
|
private void checkHelpEntry(){
|
|
XInterface toolkit = null;
|
|
|
|
log.println("get accesibility...");
|
|
try{
|
|
toolkit = (XInterface) xMSF.createInstance("com.sun.star.awt.Toolkit");
|
|
} catch (com.sun.star.uno.Exception e){
|
|
log.println("could not get Toolkit " + e.toString());
|
|
}
|
|
XExtendedToolkit tk = (XExtendedToolkit) UnoRuntime.queryInterface(
|
|
XExtendedToolkit.class, toolkit);
|
|
|
|
XAccessible xRoot = null;
|
|
|
|
AccessibilityTools at = new AccessibilityTools();
|
|
|
|
try {
|
|
xWindow = (XWindow) UnoRuntime.queryInterface(XWindow.class,
|
|
tk.getTopWindow(0));
|
|
|
|
xRoot = at.getAccessibleObject(xWindow);
|
|
|
|
// at.printAccessibleTree((PrintWriter)log, xRoot, param.getBool(util.PropertyName.DEBUG_IS_ACTIVE));
|
|
at.printAccessibleTree((PrintWriter)log, xRoot, true);
|
|
}
|
|
catch (com.sun.star.lang.IndexOutOfBoundsException e)
|
|
{
|
|
log.println("Couldn't get Window");
|
|
}
|
|
|
|
XAccessibleContext oPopMenu = at.getAccessibleObjectForRole(xRoot, AccessibleRole.POPUP_MENU);
|
|
|
|
log.println("ImplementationName: " + util.utils.getImplName(oPopMenu));
|
|
|
|
XAccessible xHelp = null;
|
|
try{
|
|
log.println("Try to get first entry of context menu...");
|
|
xHelp = oPopMenu.getAccessibleChild(0);
|
|
|
|
} catch (IndexOutOfBoundsException e){
|
|
failed("Not possible to get first entry of context menu");
|
|
}
|
|
|
|
if (xHelp == null) failed("first entry of context menu is NULL");
|
|
|
|
XAccessibleContext xHelpCont = xHelp.getAccessibleContext();
|
|
|
|
if ( xHelpCont == null )
|
|
failed("No able to retrieve accessible context from first entry of context menu");
|
|
|
|
String aAccessibleName = xHelpCont.getAccessibleName();
|
|
if ( !aAccessibleName.equals( "Help" )) {
|
|
log.println("Accessible name found = "+aAccessibleName );
|
|
failed("First entry of context menu is not from context menu interceptor");
|
|
}
|
|
|
|
try
|
|
{
|
|
log.println("try to get first children of Help context...");
|
|
XAccessible xHelpChild = xHelpCont.getAccessibleChild(0);
|
|
|
|
} catch (IndexOutOfBoundsException e){
|
|
failed("not possible to get first children of Help context");
|
|
}
|
|
|
|
}
|
|
|
|
private void openContextMenu(XModel aModel){
|
|
|
|
log.println("try to open contex menu...");
|
|
AccessibilityTools at = new AccessibilityTools();
|
|
|
|
xWindow = at.getCurrentWindow(xMSF, aModel);
|
|
|
|
XAccessible xRoot = at.getAccessibleObject(xWindow);
|
|
|
|
XInterface oObj = at.getAccessibleObjectForRole(xRoot, AccessibleRole.PANEL);
|
|
|
|
XAccessibleComponent window = (XAccessibleComponent) UnoRuntime.queryInterface(
|
|
XAccessibleComponent.class, oObj);
|
|
|
|
point = window.getLocationOnScreen();
|
|
Rectangle rect = window.getBounds();
|
|
|
|
log.println("klick mouse button...");
|
|
try {
|
|
Robot rob = new Robot();
|
|
int x = point.X + (rect.Width / 2);
|
|
int y = point.Y + (rect.Height / 2);
|
|
rob.mouseMove(x, y);
|
|
System.out.println("Press Button");
|
|
rob.mousePress(InputEvent.BUTTON3_MASK);
|
|
System.out.println("Release Button");
|
|
rob.mouseRelease(InputEvent.BUTTON3_MASK);
|
|
System.out.println("done");
|
|
} catch (java.awt.AWTException e) {
|
|
log.println("couldn't press mouse button");
|
|
}
|
|
|
|
utils.shortWait(3000);
|
|
|
|
}
|
|
}
|