XWindowPeer xWindowPeer = DesktopTools.createFloatingWindow(xMSF);
assure("failed: there is no window peer", xWindowPeer != null);
// resize and move the window to a well known position and size
XWindow xWindow = (XWindow) UnoRuntime.queryInterface(XWindow.class, xWindowPeer);
assure("failed: there is no window, cast wrong?", xWindow != null);
xWindow.setVisible(Boolean.TRUE);
int x = 100;
int y = 100;
int width = 640;
int height = 480;
xWindow.setPosSize(x, y, width, height, com.sun.star.awt.PosSize.POSSIZE);
com.sun.star.awt.Rectangle aRect = xWindow.getPosSize();
com.sun.star.awt.Point aPoint = new com.sun.star.awt.Point(aRect.X, aRect.Y);
com.sun.star.awt.Size aSize = new com.sun.star.awt.Size(aRect.Width, aRect.Height);
log.println("Window position and size in pixel:");
log.println("X:" + aPoint.X);
log.println("Y:" + aPoint.Y);
log.println("Width:" + aSize.Width);
log.println("Height:" + aSize.Height);
log.println("");
assure("Window pos size wrong", aSize.Width == width && aSize.Height == height && aPoint.X == x && aPoint.Y == y);
// XToolkit aToolkit = xWindowPeer.getToolkit();
m_xConversion = (XUnitConversion) UnoRuntime.queryInterface(XUnitConversion.class, xWindowPeer);
// try to get the position of the window in 1/100mm with the XUnitConversion method
try
{
com.sun.star.awt.Point aPointInMM_100TH = m_xConversion.convertPointToLogic(aPoint, com.sun.star.util.MeasureUnit.MM_100TH);
log.println("Window position:");
log.println("X:" + aPointInMM_100TH.X + " 1/100mm");
log.println("Y:" + aPointInMM_100TH.Y + " 1/100mm");
log.println("");
}
catch (com.sun.star.lang.IllegalArgumentException e)
{
assure("failed: IllegalArgumentException caught in convertPointToLogic " + e.getMessage(), Boolean.FALSE);
}
// try to get the size of the window in 1/100mm with the XUnitConversion method
com.sun.star.awt.Size aSizeInMM_100TH = null;
com.sun.star.awt.Size aSizeInMM_10TH = null;
try
{
aSizeInMM_100TH = m_xConversion.convertSizeToLogic(aSize, com.sun.star.util.MeasureUnit.MM_100TH);
log.println("Window size:");
log.println("Width:" + aSizeInMM_100TH.Width + " 1/100mm");
log.println("Height:" + aSizeInMM_100TH.Height + " 1/100mm");
log.println("");
// try to get the size of the window in 1/10mm with the XUnitConversion method
aSizeInMM_10TH = m_xConversion.convertSizeToLogic(aSize, com.sun.star.util.MeasureUnit.MM_10TH);
log.println("Window size:");
log.println("Width:" + aSizeInMM_10TH.Width + " 1/10mm");
log.println("Height:" + aSizeInMM_10TH.Height + " 1/10mm");
log.println("");
// check the size with a delta which must be smaller a given difference
assure("Size.Width not correct", delta(aSizeInMM_100TH.Width, aSizeInMM_10TH.Width * 10) < 10);
assure("Size.Height not correct", delta(aSizeInMM_100TH.Height, aSizeInMM_10TH.Height * 10) < 10);
// simply check some more parameters
checkSize(aSize, com.sun.star.util.MeasureUnit.MM, "mm");
checkSize(aSize, com.sun.star.util.MeasureUnit.CM, "cm");
checkSize(aSize, com.sun.star.util.MeasureUnit.INCH_1000TH, "1/1000inch");
checkSize(aSize, com.sun.star.util.MeasureUnit.INCH_100TH, "1/100inch");
checkSize(aSize, com.sun.star.util.MeasureUnit.INCH_10TH, "1/10inch");
checkSize(aSize, com.sun.star.util.MeasureUnit.INCH, "inch");
// checkSize(aSize, com.sun.star.util.MeasureUnit.M, "m");
checkSize(aSize, com.sun.star.util.MeasureUnit.POINT, "point");
checkSize(aSize, com.sun.star.util.MeasureUnit.TWIP, "twip");
// checkSize(aSize, com.sun.star.util.MeasureUnit.KM, "km");
// checkSize(aSize, com.sun.star.util.MeasureUnit.PICA, "pica");
// checkSize(aSize, com.sun.star.util.MeasureUnit.FOOT, "foot");
// checkSize(aSize, com.sun.star.util.MeasureUnit.MILE, "mile");
}
catch (com.sun.star.lang.IllegalArgumentException e)
{
assure("failed: IllegalArgumentException caught in convertSizeToLogic " + e.getMessage(), Boolean.FALSE);
}
// convert the 1/100mm window size back to pixel
try
{
com.sun.star.awt.Size aNewSize = m_xConversion.convertSizeToPixel(aSizeInMM_100TH, com.sun.star.util.MeasureUnit.MM_100TH);
log.println("Window size:");
log.println("Width:" + aNewSize.Width + " pixel");
log.println("Height:" + aNewSize.Height + " pixel");
// assure the pixels are the same as we already know
assure("failed: Size from pixel to 1/100mm to pixel", aSize.Width == aNewSize.Width && aSize.Height == aNewSize.Height);
}
catch (com.sun.star.lang.IllegalArgumentException e)
{
assure("failed: IllegalArgumentException caught in convertSizeToPixel " + e.getMessage(), Boolean.FALSE);
}
// close the window.
// IMHO a little bit stupid, but the XWindow doesn't support a XCloseable interface
xWindow.dispose();
}