Package complex.toolkit

Source Code of complex.toolkit.UnitConversion

/**************************************************************
*
* 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
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/



package complex.toolkit;

import com.sun.star.awt.XUnitConversion;
import com.sun.star.uno.UnoRuntime;

import com.sun.star.awt.XWindow;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.awt.XWindowPeer;

import util.DesktopTools;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openoffice.test.OfficeConnection;
import static org.junit.Assert.*;

/**
* This complex test is only for testing the com.sun.star.awt.XUnitConversion methods
* These are converter methods to get the size of a well known awt component
* in a com.sun.star.util.MeasureUnit you want.
* You don't need to know the factors to calculate by hand.
*
* @author ll93751
*/
public class UnitConversion
{
    /**
     * returns the delta value between a and b
     * @param a
     * @param b
     * @return
     */
    private int delta(int a, int b)
    {
        final int n = Math.abs(a - b);
        return n;
    }

    private XUnitConversion m_xConversion = null;

    /**
     * Not really a check,
     * only a simple test call to convertSizeToLogic(...) with different parameters
     * @param _aSize
     * @param _aMeasureUnit
     * @param _sEinheit
     */
    private void checkSize(com.sun.star.awt.Size _aSize, short _aMeasureUnit, String _sEinheit)
    {
        try
        {
            com.sun.star.awt.Size aSizeIn = m_xConversion.convertSizeToLogic(_aSize, _aMeasureUnit);
            System.out.println("Window size:");
            System.out.println("Width:" + aSizeIn.Width + " " + _sEinheit);
            System.out.println("Height:" + aSizeIn.Height + " " + _sEinheit);
            System.out.println("");
        }
        catch (com.sun.star.lang.IllegalArgumentException e)
        {
            System.out.println("Caught IllegalArgumentException in convertSizeToLogic with '" + _sEinheit + "' " + e.getMessage());
        }
    }
   
    /**
     * The real test function
     * 1. try to get the XMultiServiceFactory of an already running office. Therefore make sure an (open|star)office is running with
     *    parameters like -accept="socket,host=localhost,port=8100;urp;"
     * 2. try to create an empty window
     * 3. try to convert the WindowPeer to an XWindow
     * 4. try to resize and move the window to an other position, so we get a well knowing position and size.
     * 5. run some more tests
     *
     * If no test fails, the test is well done and returns with 'PASSED, OK'
     *
     */
    @Test
    public void testXUnitConversion()
    {
        final XMultiServiceFactory xMSF = UnoRuntime.queryInterface(XMultiServiceFactory.class, connection.getComponentContext().getServiceManager());

        assertNotNull("failed: There is no office.", xMSF);

        // create a window
        XWindowPeer xWindowPeer = DesktopTools.createFloatingWindow(xMSF);
        assertNotNull("failed: there is no window peer", xWindowPeer);


        // resize and move the window to a well known position and size
        XWindow xWindow = UnoRuntime.queryInterface(XWindow.class, xWindowPeer);
        assertNotNull("failed: there is no window, cast wrong?", xWindow);

        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);

        System.out.println("Window position and size in pixel:");
        System.out.println("X:" + aPoint.X);
        System.out.println("Y:" + aPoint.Y);
        System.out.println("Width:" + aSize.Width);
        System.out.println("Height:" + aSize.Height);
        System.out.println("");

        assertTrue("Window pos size wrong", aSize.Width == width && aSize.Height == height && aPoint.X == x && aPoint.Y == y);

        m_xConversion = 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);
            System.out.println("Window position:");
            System.out.println("X:" + aPointInMM_100TH.X + " 1/100mm");
            System.out.println("Y:" + aPointInMM_100TH.Y + " 1/100mm");
            System.out.println("");
        }
        catch (com.sun.star.lang.IllegalArgumentException e)
        {
            fail("failed: IllegalArgumentException caught in convertPointToLogic " + e.getMessage());
        }

        // 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);
            System.out.println("Window size:");
            System.out.println("Width:" + aSizeInMM_100TH.Width + " 1/100mm");
            System.out.println("Height:" + aSizeInMM_100TH.Height + " 1/100mm");
            System.out.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);
            System.out.println("Window size:");
            System.out.println("Width:" + aSizeInMM_10TH.Width + " 1/10mm");
            System.out.println("Height:" + aSizeInMM_10TH.Height + " 1/10mm");
            System.out.println("");

            // check the size with a delta which must be smaller a given difference
            assertTrue("Size.Width  not correct", delta(aSizeInMM_100TH.Width, aSizeInMM_10TH.Width * 10) < 10);
            assertTrue("Size.Height not correct", delta(aSizeInMM_100TH.Height, aSizeInMM_10TH.Height * 10) < 10);

            // new
            checkSize(aSize, com.sun.star.util.MeasureUnit.PIXEL, "pixel");
            checkSize(aSize, com.sun.star.util.MeasureUnit.APPFONT, "appfont");
            checkSize(aSize, com.sun.star.util.MeasureUnit.SYSFONT, "sysfont");

            // 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)
        {
            fail("failed: IllegalArgumentException caught in convertSizeToLogic " + e.getMessage());
        }

        // 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);
            System.out.println("Window size:");
            System.out.println("Width:" + aNewSize.Width + " pixel");
            System.out.println("Height:" + aNewSize.Height + " pixel");

            // assure the pixels are the same as we already know
            assertTrue("failed: Size from pixel to 1/100mm to pixel", aSize.Width == aNewSize.Width && aSize.Height == aNewSize.Height);
        }
        catch (com.sun.star.lang.IllegalArgumentException e)
        {
            fail("failed: IllegalArgumentException caught in convertSizeToPixel " + e.getMessage());
        }

        // close the window.
        // IMHO a little bit stupid, but the XWindow doesn't support a XCloseable interface
        xWindow.dispose();
    }

    @BeforeClass
    public static void setUpConnection() throws Exception
    {
        System.out.println( "--------------------------------------------------------------------------------" );
        System.out.println( "starting class: " + UnitConversion.class.getName() );
        System.out.println( "connecting ..." );
        connection.setUp();
    }

    @AfterClass
    public static void tearDownConnection()
        throws InterruptedException, com.sun.star.uno.Exception
    {
        System.out.println();
        System.out.println( "tearing down connection" );
        connection.tearDown();
        System.out.println( "finished class: " + UnitConversion.class.getName() );
        System.out.println( "--------------------------------------------------------------------------------" );
    }

    private static final OfficeConnection connection = new OfficeConnection();
}
TOP

Related Classes of complex.toolkit.UnitConversion

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.