1 package embeddedobj.test; 2 3 import java.awt.*; 4 import java.applet.*; 5 import java.awt.event.*; 6 import java.net.*; 7 import java.io.*; 8 9 import com.sun.star.awt.XBitmap; 10 import com.sun.star.awt.XWindow; 11 import com.sun.star.awt.XWindowPeer; 12 import com.sun.star.awt.XToolkit; 13 import com.sun.star.awt.XSystemChildFactory; 14 import com.sun.star.awt.WindowDescriptor; 15 import com.sun.star.awt.WindowClass; 16 import com.sun.star.awt.WindowAttribute; 17 import com.sun.star.awt.VclWindowPeerAttribute; 18 19 import com.sun.star.uno.UnoRuntime; 20 import com.sun.star.uno.AnyConverter; 21 import com.sun.star.uno.Any; 22 23 import com.sun.star.lang.XMultiServiceFactory; 24 import com.sun.star.lang.XSingleServiceFactory; 25 26 class WindowHelper { 27 28 public static XWindow createWindow( XMultiServiceFactory xFactory, NativeView aParent, java.awt.Rectangle aBounds ) 29 { 30 XWindow xWindow = null; 31 XToolkit xToolkit = null; 32 33 // get access to toolkit of remote office to create the container window of new target frame 34 try{ 35 xToolkit = (XToolkit)UnoRuntime.queryInterface( XToolkit.class, 36 xFactory.createInstance("com.sun.star.awt.Toolkit") ); 37 } 38 catch( Exception ex ) 39 { 40 return null; 41 } 42 43 XSystemChildFactory xChildFactory = (XSystemChildFactory)UnoRuntime.queryInterface( 44 XSystemChildFactory.class, 45 xToolkit); 46 47 try 48 { 49 XWindowPeer xPeer = null; 50 Integer nHandle = aParent.getHWND(); 51 short nSystem = (short)aParent.getNativeWindowSystemType(); 52 byte[] lProcID = new byte[0]; 53 /* 54 try { 55 xPeer = xChildFactory.createSystemChild((Object)nHandle, lProcID, nSystem); 56 } 57 catch( Exception e ) 58 {} 59 */ 60 if (xPeer==null) 61 { 62 JavaWindowPeerFake aWrapper = new JavaWindowPeerFake(aParent); 63 64 XWindowPeer xParentPeer = (XWindowPeer)UnoRuntime.queryInterface( 65 XWindowPeer.class, 66 aWrapper); 67 68 WindowDescriptor aDescriptor = new WindowDescriptor(); 69 aDescriptor.Type = WindowClass.TOP; 70 aDescriptor.WindowServiceName = "workwindow"; 71 aDescriptor.ParentIndex = 1; 72 aDescriptor.Parent = xParentPeer; 73 aDescriptor.Bounds = new com.sun.star.awt.Rectangle( (int)aBounds.getX(), 74 (int)aBounds.getY(), 75 (int)aBounds.getWidth(), 76 (int)aBounds.getHeight() ); 77 78 System.out.println( "The rectangle for vcl window is:\nx = " + (int)aBounds.getX() 79 + "; y = " + (int)aBounds.getY() 80 + "; width = " + (int)aBounds.getWidth() 81 + "; height = " + (int)aBounds.getHeight() ); 82 83 if (nSystem == com.sun.star.lang.SystemDependent.SYSTEM_WIN32) 84 aDescriptor.WindowAttributes = WindowAttribute.SHOW; 85 else 86 aDescriptor.WindowAttributes = WindowAttribute.SYSTEMDEPENDENT; 87 88 aDescriptor.WindowAttributes |= VclWindowPeerAttribute.CLIPCHILDREN; 89 90 xPeer = xToolkit.createWindow( aDescriptor ); 91 } 92 93 xWindow = (XWindow)UnoRuntime.queryInterface( XWindow.class, xPeer); 94 if ( xWindow != null ) 95 xWindow.setPosSize( (int)aBounds.getX(), 96 (int)aBounds.getY(), 97 (int)aBounds.getWidth(), 98 (int)aBounds.getHeight(), 99 com.sun.star.awt.PosSize.POSSIZE ); 100 } 101 catch( Exception ex1 ) 102 { 103 System.out.println( "Exception on VCL window creation: " + ex1 ); 104 xWindow = null; 105 } 106 107 return xWindow; 108 } 109 110 public static XBitmap getVCLBitmapFromBytes( XMultiServiceFactory xFactory, Object aAny ) 111 { 112 if ( !AnyConverter.isArray( aAny ) ) 113 throw new com.sun.star.uno.RuntimeException(); 114 115 Object[] aArgs = new Object[1]; 116 aArgs[0] = aAny; 117 XBitmap xResult = null; 118 119 try { 120 XSingleServiceFactory xBitmapFactory = (XSingleServiceFactory)UnoRuntime.queryInterface( 121 XSingleServiceFactory.class, 122 xFactory.createInstance( "com.sun.star.embed.BitmapCreator" ) ); 123 124 xResult = (XBitmap)UnoRuntime.queryInterface( 125 XBitmap.class, 126 xBitmapFactory.createInstanceWithArguments( aArgs ) ); 127 } 128 catch( Exception e ) 129 { 130 System.out.println( "Could not create VCL bitmap based on sequence," ); 131 System.out.println( "exception: " + e ); 132 } 133 134 return xResult; 135 } 136 }; 137 138