389 lines
11 KiB
Java
Executable file
389 lines
11 KiB
Java
Executable file
import java.lang.Thread;
|
|
|
|
import com.sun.star.awt.Rectangle;
|
|
import com.sun.star.awt.XWindow;
|
|
|
|
import com.sun.star.beans.PropertyValue;
|
|
import com.sun.star.beans.XPropertySet;
|
|
|
|
import com.sun.star.container.XIndexAccess;
|
|
import com.sun.star.container.XChild;
|
|
import com.sun.star.container.XEnumerationAccess;
|
|
import com.sun.star.container.XEnumeration;
|
|
|
|
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.frame.XTasksSupplier;
|
|
import com.sun.star.frame.XTask;
|
|
|
|
import com.sun.star.lang.XComponent;
|
|
import com.sun.star.lang.XMultiServiceFactory;
|
|
import com.sun.star.lang.XServiceInfo;
|
|
import com.sun.star.lang.XServiceName;
|
|
import com.sun.star.lang.XTypeProvider;
|
|
|
|
import com.sun.star.uno.UnoRuntime;
|
|
import com.sun.star.uno.XInterface;
|
|
import com.sun.star.uno.Type;
|
|
|
|
import com.sun.star.drawing.XDrawView;
|
|
import com.sun.star.drawing.XDrawPage;
|
|
import com.sun.star.drawing.XShapes;
|
|
import com.sun.star.drawing.XShape;
|
|
import com.sun.star.drawing.XShapeDescriptor;
|
|
|
|
import com.sun.star.accessibility.XAccessible;
|
|
import com.sun.star.accessibility.XAccessibleContext;
|
|
import com.sun.star.accessibility.XAccessibleComponent;
|
|
import com.sun.star.accessibility.XAccessibleRelationSet;
|
|
import com.sun.star.accessibility.XAccessibleStateSet;
|
|
|
|
import com.sun.star.awt.XExtendedToolkit;
|
|
|
|
|
|
/** This class tries to simplify some tasks like loading a document or
|
|
getting various objects.
|
|
*/
|
|
public class SimpleOffice
|
|
{
|
|
XDesktop mxDesktop = null;
|
|
OfficeConnection aConnection;
|
|
int mnPortNumber;
|
|
|
|
public SimpleOffice (int nPortNumber)
|
|
{
|
|
mnPortNumber = nPortNumber;
|
|
connect ();
|
|
getDesktop ();
|
|
}
|
|
|
|
public void connect ()
|
|
{
|
|
aConnection = new OfficeConnection (mnPortNumber);
|
|
mxDesktop = null;
|
|
getDesktop ();
|
|
}
|
|
|
|
public XModel loadDocument (String URL)
|
|
{
|
|
XModel xModel = null;
|
|
try
|
|
{
|
|
// Load the document from the specified URL.
|
|
XComponentLoader xLoader =
|
|
(XComponentLoader)UnoRuntime.queryInterface(
|
|
XComponentLoader.class, mxDesktop);
|
|
|
|
XComponent xComponent = xLoader.loadComponentFromURL (
|
|
URL,
|
|
"_blank",
|
|
0,
|
|
new PropertyValue[0]
|
|
);
|
|
|
|
xModel = (XModel) UnoRuntime.queryInterface(
|
|
XModel.class, xComponent);
|
|
}
|
|
catch (java.lang.NullPointerException e)
|
|
{
|
|
MessageArea.println ("caught exception while loading "
|
|
+ URL + " : " + e);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
MessageArea.println ("caught exception while loading "
|
|
+ URL + " : " + e);
|
|
}
|
|
return xModel;
|
|
}
|
|
|
|
|
|
|
|
|
|
public XModel getModel (String name)
|
|
{
|
|
XModel xModel = null;
|
|
try
|
|
{
|
|
XTasksSupplier xTasksSupplier =
|
|
(XTasksSupplier) UnoRuntime.queryInterface(
|
|
XTasksSupplier.class, mxDesktop);
|
|
XEnumerationAccess xEA = xTasksSupplier.getTasks();
|
|
XEnumeration xE = xEA.createEnumeration();
|
|
while (xE.hasMoreElements())
|
|
{
|
|
XTask xTask = (XTask) UnoRuntime.queryInterface(
|
|
XTask.class, xE.nextElement());
|
|
MessageArea.print (xTask.getName());
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
MessageArea.println ("caught exception while getting Model " + name
|
|
+ ": " + e);
|
|
}
|
|
return xModel;
|
|
}
|
|
|
|
|
|
public XModel getModel (XDrawView xView)
|
|
{
|
|
XController xController = (XController) UnoRuntime.queryInterface(
|
|
XController.class, xView);
|
|
if (xController != null)
|
|
return xController.getModel();
|
|
else
|
|
{
|
|
MessageArea.println ("can't cast view to controller");
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public XDesktop getDesktop ()
|
|
{
|
|
if (mxDesktop != null)
|
|
return mxDesktop;
|
|
try
|
|
{
|
|
// Get the factory of the connected office.
|
|
XMultiServiceFactory xMSF = aConnection.getServiceManager ();
|
|
if (xMSF == null)
|
|
{
|
|
MessageArea.println ("can't connect to office");
|
|
return null;
|
|
}
|
|
else
|
|
MessageArea.println ("Connected successfully.");
|
|
|
|
// Create a new desktop.
|
|
mxDesktop = (XDesktop) UnoRuntime.queryInterface(
|
|
XDesktop.class,
|
|
xMSF.createInstance ("com.sun.star.frame.Desktop")
|
|
);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
MessageArea.println ("caught exception while creating desktop: "
|
|
+ e);
|
|
}
|
|
|
|
return mxDesktop;
|
|
}
|
|
|
|
|
|
/** Return a reference to the extended toolkit which is a broadcaster of
|
|
top window, key, and focus events.
|
|
*/
|
|
public XExtendedToolkit getExtendedToolkit ()
|
|
{
|
|
XExtendedToolkit xToolkit = null;
|
|
try
|
|
{
|
|
// Get the factory of the connected office.
|
|
XMultiServiceFactory xMSF = aConnection.getServiceManager ();
|
|
if (xMSF != null)
|
|
{
|
|
xToolkit = (XExtendedToolkit) UnoRuntime.queryInterface(
|
|
XExtendedToolkit.class,
|
|
xMSF.createInstance ("stardiv.Toolkit.VCLXToolkit")
|
|
);
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
MessageArea.println ("caught exception while creating extended toolkit: " + e);
|
|
}
|
|
|
|
return xToolkit;
|
|
}
|
|
|
|
|
|
|
|
public XAccessible getAccessibleObject (XInterface xObject)
|
|
{
|
|
XAccessible xAccessible = null;
|
|
try
|
|
{
|
|
xAccessible = (XAccessible) UnoRuntime.queryInterface(
|
|
XAccessible.class, xObject);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
MessageArea.println (
|
|
"caught exception while getting accessible object" + e);
|
|
e.printStackTrace();
|
|
}
|
|
return xAccessible;
|
|
}
|
|
|
|
/** Return the root object of the accessibility hierarchy.
|
|
*/
|
|
public XAccessible getAccessibleRoot (XAccessible xAccessible)
|
|
{
|
|
try
|
|
{
|
|
XAccessible xParent = null;
|
|
do
|
|
{
|
|
XAccessibleContext xContext = xAccessible.getAccessibleContext();
|
|
if (xContext != null)
|
|
xParent = xContext.getAccessibleParent();
|
|
if (xParent != null)
|
|
xAccessible = xParent;
|
|
}
|
|
while (xParent != null);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
MessageArea.println (
|
|
"caught exception while getting accessible root" + e);
|
|
e.printStackTrace();
|
|
}
|
|
return xAccessible;
|
|
}
|
|
|
|
|
|
|
|
|
|
/** @descr Return the current window associated with the given
|
|
model.
|
|
*/
|
|
public XWindow getCurrentWindow ()
|
|
{
|
|
return getCurrentWindow ((XModel) UnoRuntime.queryInterface(
|
|
XModel.class, getDesktop()));
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public XWindow getCurrentWindow (XModel xModel)
|
|
{
|
|
XWindow xWindow = null;
|
|
try
|
|
{
|
|
if (xModel == null)
|
|
MessageArea.println ("invalid model (==null)");
|
|
XController xController = xModel.getCurrentController();
|
|
if (xController == null)
|
|
MessageArea.println ("can't get controller from model");
|
|
XFrame xFrame = xController.getFrame();
|
|
if (xFrame == null)
|
|
MessageArea.println ("can't get frame from controller");
|
|
xWindow = xFrame.getComponentWindow ();
|
|
if (xWindow == null)
|
|
MessageArea.println ("can't get window from frame");
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
MessageArea.println ("caught exception while getting current window" + e);
|
|
}
|
|
|
|
return xWindow;
|
|
}
|
|
|
|
|
|
/** @descr Return the current draw page of the given desktop.
|
|
*/
|
|
public XDrawPage getCurrentDrawPage ()
|
|
{
|
|
return getCurrentDrawPage ((XDrawView) UnoRuntime.queryInterface(
|
|
XDrawView.class, getCurrentView()));
|
|
}
|
|
|
|
|
|
|
|
|
|
public XDrawPage getCurrentDrawPage (XDrawView xView)
|
|
{
|
|
XDrawPage xPage = null;
|
|
try
|
|
{
|
|
if (xView == null)
|
|
MessageArea.println ("can't get current draw page from null view");
|
|
else
|
|
xPage = xView.getCurrentPage();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
MessageArea.println ("caught exception while getting current draw page : " + e);
|
|
}
|
|
|
|
return xPage;
|
|
}
|
|
|
|
|
|
|
|
|
|
/** @descr Return the current view of the given desktop.
|
|
*/
|
|
public XDrawView getCurrentView ()
|
|
{
|
|
return getCurrentView (getDesktop());
|
|
}
|
|
|
|
public XDrawView getCurrentView (XDesktop xDesktop)
|
|
{
|
|
if (xDesktop == null)
|
|
MessageArea.println ("can't get desktop to retrieve current view");
|
|
|
|
XDrawView xView = null;
|
|
try
|
|
{
|
|
XComponent xComponent = xDesktop.getCurrentComponent();
|
|
if (xComponent == null)
|
|
MessageArea.println ("can't get component to retrieve current view");
|
|
|
|
XFrame xFrame = xDesktop.getCurrentFrame();
|
|
if (xFrame == null)
|
|
MessageArea.println ("can't get frame to retrieve current view");
|
|
|
|
XController xController = xFrame.getController();
|
|
if (xController == null)
|
|
MessageArea.println ("can't get controller to retrieve current view");
|
|
|
|
xView = (XDrawView) UnoRuntime.queryInterface(
|
|
XDrawView.class, xController);
|
|
if (xView == null)
|
|
MessageArea.println ("could not cast controller into view");
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
MessageArea.println ("caught exception while getting current view : " + e);
|
|
}
|
|
|
|
return xView;
|
|
}
|
|
|
|
|
|
|
|
|
|
// Return the accessible object of the document window.
|
|
public static XAccessible getAccessibleDocumentWindow (XDrawPage xPage)
|
|
{
|
|
XIndexAccess xShapeList = (XIndexAccess) UnoRuntime.queryInterface(
|
|
XIndexAccess.class, xPage);
|
|
if (xShapeList.getCount() > 0)
|
|
{
|
|
// All shapes return as accessible object the document window's
|
|
// accessible object. This is, of course, a hack and will be
|
|
// removed as soon as the missing infrastructure for obtaining
|
|
// the object directly is implemented.
|
|
XShape xShape = null;
|
|
try{
|
|
xShape = (XShape) UnoRuntime.queryInterface(
|
|
XShape.class, xShapeList.getByIndex (0));
|
|
} catch (Exception e)
|
|
{}
|
|
XAccessible xAccessible = (XAccessible) UnoRuntime.queryInterface (
|
|
XAccessible.class, xShape);
|
|
return xAccessible;
|
|
}
|
|
else
|
|
return null;
|
|
}
|
|
}
|