1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski package embeddedobj.test;
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski import java.awt.*;
25*b1cdbd2cSJim Jagielski import java.applet.*;
26*b1cdbd2cSJim Jagielski import java.awt.event.*;
27*b1cdbd2cSJim Jagielski import java.net.*;
28*b1cdbd2cSJim Jagielski import java.io.*;
29*b1cdbd2cSJim Jagielski 
30*b1cdbd2cSJim Jagielski import com.sun.star.awt.XBitmap;
31*b1cdbd2cSJim Jagielski import com.sun.star.awt.XWindow;
32*b1cdbd2cSJim Jagielski import com.sun.star.awt.XWindowPeer;
33*b1cdbd2cSJim Jagielski import com.sun.star.awt.XToolkit;
34*b1cdbd2cSJim Jagielski import com.sun.star.awt.XSystemChildFactory;
35*b1cdbd2cSJim Jagielski import com.sun.star.awt.WindowDescriptor;
36*b1cdbd2cSJim Jagielski import com.sun.star.awt.WindowClass;
37*b1cdbd2cSJim Jagielski import com.sun.star.awt.WindowAttribute;
38*b1cdbd2cSJim Jagielski import com.sun.star.awt.VclWindowPeerAttribute;
39*b1cdbd2cSJim Jagielski 
40*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime;
41*b1cdbd2cSJim Jagielski import com.sun.star.uno.AnyConverter;
42*b1cdbd2cSJim Jagielski import com.sun.star.uno.Any;
43*b1cdbd2cSJim Jagielski 
44*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiServiceFactory;
45*b1cdbd2cSJim Jagielski import com.sun.star.lang.XSingleServiceFactory;
46*b1cdbd2cSJim Jagielski 
47*b1cdbd2cSJim Jagielski class WindowHelper {
48*b1cdbd2cSJim Jagielski 
createWindow( XMultiServiceFactory xFactory, NativeView aParent, java.awt.Rectangle aBounds )49*b1cdbd2cSJim Jagielski 	public static XWindow createWindow( XMultiServiceFactory xFactory, NativeView aParent, java.awt.Rectangle aBounds )
50*b1cdbd2cSJim Jagielski 	{
51*b1cdbd2cSJim Jagielski 		XWindow	 xWindow = null;
52*b1cdbd2cSJim Jagielski 		XToolkit	xToolkit = null;
53*b1cdbd2cSJim Jagielski 
54*b1cdbd2cSJim Jagielski 		// get access to toolkit of remote office to create the container window of new target frame
55*b1cdbd2cSJim Jagielski 		try{
56*b1cdbd2cSJim Jagielski 			xToolkit = (XToolkit)UnoRuntime.queryInterface( XToolkit.class,
57*b1cdbd2cSJim Jagielski 															xFactory.createInstance("com.sun.star.awt.Toolkit") );
58*b1cdbd2cSJim Jagielski 		}
59*b1cdbd2cSJim Jagielski 		catch( Exception ex )
60*b1cdbd2cSJim Jagielski 		{
61*b1cdbd2cSJim Jagielski 			return null;
62*b1cdbd2cSJim Jagielski 		}
63*b1cdbd2cSJim Jagielski 
64*b1cdbd2cSJim Jagielski 		XSystemChildFactory xChildFactory = (XSystemChildFactory)UnoRuntime.queryInterface(
65*b1cdbd2cSJim Jagielski 				XSystemChildFactory.class,
66*b1cdbd2cSJim Jagielski 				xToolkit);
67*b1cdbd2cSJim Jagielski 
68*b1cdbd2cSJim Jagielski 		try
69*b1cdbd2cSJim Jagielski 		{
70*b1cdbd2cSJim Jagielski 			XWindowPeer xPeer = null;
71*b1cdbd2cSJim Jagielski 			Integer nHandle = aParent.getHWND();
72*b1cdbd2cSJim Jagielski 			short   nSystem = (short)aParent.getNativeWindowSystemType();
73*b1cdbd2cSJim Jagielski 			byte[]  lProcID = new byte[0];
74*b1cdbd2cSJim Jagielski /*
75*b1cdbd2cSJim Jagielski 			try {
76*b1cdbd2cSJim Jagielski 				xPeer = xChildFactory.createSystemChild((Object)nHandle, lProcID, nSystem);
77*b1cdbd2cSJim Jagielski 			}
78*b1cdbd2cSJim Jagielski 			catch( Exception e )
79*b1cdbd2cSJim Jagielski 			{}
80*b1cdbd2cSJim Jagielski */
81*b1cdbd2cSJim Jagielski 			if (xPeer==null)
82*b1cdbd2cSJim Jagielski 			{
83*b1cdbd2cSJim Jagielski 				JavaWindowPeerFake aWrapper = new JavaWindowPeerFake(aParent);
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski 				XWindowPeer xParentPeer = (XWindowPeer)UnoRuntime.queryInterface(
86*b1cdbd2cSJim Jagielski 						XWindowPeer.class,
87*b1cdbd2cSJim Jagielski 						aWrapper);
88*b1cdbd2cSJim Jagielski 
89*b1cdbd2cSJim Jagielski 				WindowDescriptor aDescriptor = new WindowDescriptor();
90*b1cdbd2cSJim Jagielski 				aDescriptor.Type = WindowClass.TOP;
91*b1cdbd2cSJim Jagielski 				aDescriptor.WindowServiceName = "workwindow";
92*b1cdbd2cSJim Jagielski 				aDescriptor.ParentIndex = 1;
93*b1cdbd2cSJim Jagielski 				aDescriptor.Parent = xParentPeer;
94*b1cdbd2cSJim Jagielski 				aDescriptor.Bounds = new com.sun.star.awt.Rectangle( (int)aBounds.getX(),
95*b1cdbd2cSJim Jagielski 																	 (int)aBounds.getY(),
96*b1cdbd2cSJim Jagielski 																	 (int)aBounds.getWidth(),
97*b1cdbd2cSJim Jagielski 																	 (int)aBounds.getHeight() );
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski 				System.out.println( "The rectangle for vcl window is:\nx = " + (int)aBounds.getX()
100*b1cdbd2cSJim Jagielski 																+ "; y = " + (int)aBounds.getY()
101*b1cdbd2cSJim Jagielski 																+ "; width = " + (int)aBounds.getWidth()
102*b1cdbd2cSJim Jagielski 																+ "; height = " + (int)aBounds.getHeight() );
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski 				if (nSystem == com.sun.star.lang.SystemDependent.SYSTEM_WIN32)
105*b1cdbd2cSJim Jagielski 					aDescriptor.WindowAttributes = WindowAttribute.SHOW;
106*b1cdbd2cSJim Jagielski 				else
107*b1cdbd2cSJim Jagielski 					aDescriptor.WindowAttributes = WindowAttribute.SYSTEMDEPENDENT;
108*b1cdbd2cSJim Jagielski 
109*b1cdbd2cSJim Jagielski 				aDescriptor.WindowAttributes |= VclWindowPeerAttribute.CLIPCHILDREN;
110*b1cdbd2cSJim Jagielski 
111*b1cdbd2cSJim Jagielski 				xPeer = xToolkit.createWindow( aDescriptor );
112*b1cdbd2cSJim Jagielski 			}
113*b1cdbd2cSJim Jagielski 
114*b1cdbd2cSJim Jagielski 			xWindow = (XWindow)UnoRuntime.queryInterface( XWindow.class, xPeer);
115*b1cdbd2cSJim Jagielski 			if ( xWindow != null )
116*b1cdbd2cSJim Jagielski 				xWindow.setPosSize( (int)aBounds.getX(),
117*b1cdbd2cSJim Jagielski 									(int)aBounds.getY(),
118*b1cdbd2cSJim Jagielski 									(int)aBounds.getWidth(),
119*b1cdbd2cSJim Jagielski 									(int)aBounds.getHeight(),
120*b1cdbd2cSJim Jagielski 									com.sun.star.awt.PosSize.POSSIZE );
121*b1cdbd2cSJim Jagielski 		}
122*b1cdbd2cSJim Jagielski 		catch( Exception ex1 )
123*b1cdbd2cSJim Jagielski 		{
124*b1cdbd2cSJim Jagielski 			System.out.println( "Exception on VCL window creation: " + ex1 );
125*b1cdbd2cSJim Jagielski 			xWindow = null;
126*b1cdbd2cSJim Jagielski 		}
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski 		return xWindow;
129*b1cdbd2cSJim Jagielski 	}
130*b1cdbd2cSJim Jagielski 
getVCLBitmapFromBytes( XMultiServiceFactory xFactory, Object aAny )131*b1cdbd2cSJim Jagielski 	public static XBitmap getVCLBitmapFromBytes( XMultiServiceFactory xFactory, Object aAny )
132*b1cdbd2cSJim Jagielski 	{
133*b1cdbd2cSJim Jagielski 		if ( !AnyConverter.isArray( aAny ) )
134*b1cdbd2cSJim Jagielski 			throw new com.sun.star.uno.RuntimeException();
135*b1cdbd2cSJim Jagielski 
136*b1cdbd2cSJim Jagielski 		Object[] aArgs = new Object[1];
137*b1cdbd2cSJim Jagielski 		aArgs[0] = aAny;
138*b1cdbd2cSJim Jagielski 		XBitmap xResult = null;
139*b1cdbd2cSJim Jagielski 
140*b1cdbd2cSJim Jagielski 		try {
141*b1cdbd2cSJim Jagielski 			XSingleServiceFactory xBitmapFactory = (XSingleServiceFactory)UnoRuntime.queryInterface(
142*b1cdbd2cSJim Jagielski 					XSingleServiceFactory.class,
143*b1cdbd2cSJim Jagielski 					xFactory.createInstance( "com.sun.star.embed.BitmapCreator" ) );
144*b1cdbd2cSJim Jagielski 
145*b1cdbd2cSJim Jagielski 			xResult = (XBitmap)UnoRuntime.queryInterface(
146*b1cdbd2cSJim Jagielski 					XBitmap.class,
147*b1cdbd2cSJim Jagielski 					xBitmapFactory.createInstanceWithArguments( aArgs ) );
148*b1cdbd2cSJim Jagielski 		}
149*b1cdbd2cSJim Jagielski 		catch( Exception e )
150*b1cdbd2cSJim Jagielski 		{
151*b1cdbd2cSJim Jagielski 			System.out.println( "Could not create VCL bitmap based on sequence," );
152*b1cdbd2cSJim Jagielski 			System.out.println( "exception: " + e );
153*b1cdbd2cSJim Jagielski 		}
154*b1cdbd2cSJim Jagielski 
155*b1cdbd2cSJim Jagielski 		return xResult;
156*b1cdbd2cSJim Jagielski 	}
157*b1cdbd2cSJim Jagielski };
158*b1cdbd2cSJim Jagielski 
159