forked from amazingfate/loongoffice
219 lines
8.3 KiB
Java
219 lines
8.3 KiB
Java
/*************************************************************************
|
|
*
|
|
* The Contents of this file are made available subject to the terms of
|
|
* the BSD license.
|
|
*
|
|
* Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
* 3. Neither the name of Sun Microsystems, Inc. nor the names of its
|
|
* contributors may be used to endorse or promote products derived
|
|
* from this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
|
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
|
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
|
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
*************************************************************************/
|
|
|
|
import com.sun.star.uno.Type;
|
|
import com.sun.star.uno.UnoRuntime;
|
|
import com.sun.star.uno.XComponentContext;
|
|
import com.sun.star.lang.XTypeProvider;
|
|
import com.sun.star.lang.XServiceInfo;
|
|
import com.sun.star.lang.XSingleComponentFactory;
|
|
import com.sun.star.lib.uno.helper.Factory;
|
|
import com.sun.star.awt.XDialog;
|
|
import com.sun.star.awt.XDialogEventHandler;
|
|
import com.sun.star.frame.XFrame;
|
|
|
|
import com.sun.star.awt.XToolkit;
|
|
import com.sun.star.awt.XWindowPeer;
|
|
import com.sun.star.awt.XMessageBox;
|
|
import com.sun.star.awt.WindowAttribute;
|
|
import com.sun.star.awt.WindowClass;
|
|
import com.sun.star.awt.WindowDescriptor;
|
|
import com.sun.star.awt.Rectangle;
|
|
|
|
import com.sun.star.test.XTestDialogHandler;
|
|
|
|
// DialogComponent implements all necessary interfaces self, this is only
|
|
// for demonstration. More convenient is to use the impelmentation WeakBase or
|
|
// ComponentBase, see implementation of TestComponentA.
|
|
public class DialogComponent {
|
|
|
|
private static class _DialogComponent
|
|
implements XTypeProvider, XServiceInfo, XTestDialogHandler, XDialogEventHandler {
|
|
|
|
private static final String __serviceName= "com.sun.star.test.TestDialogHandler";
|
|
|
|
|
|
private XComponentContext m_xCmpCtx;
|
|
|
|
private XFrame m_xFrame;
|
|
private XToolkit m_xToolkit;
|
|
|
|
public _DialogComponent(XComponentContext context) {
|
|
m_xCmpCtx= context;
|
|
|
|
try {
|
|
// Create the toolkit to have access to it later
|
|
m_xToolkit = UnoRuntime.queryInterface(
|
|
XToolkit.class,
|
|
m_xCmpCtx.getServiceManager().createInstanceWithContext("com.sun.star.awt.Toolkit",
|
|
m_xCmpCtx));
|
|
}
|
|
catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private final String aHandlerMethod1 = "doit1";
|
|
private final String aHandlerMethod2 = "doit2";
|
|
private final String aHandlerMethod3 = "doit3";
|
|
|
|
//XDialogEventHandler
|
|
public boolean callHandlerMethod( /*IN*/XDialog xDialog, /*IN*/Object EventObject, /*IN*/String MethodName ) {
|
|
if ( MethodName.equals( aHandlerMethod1 ) )
|
|
{
|
|
showMessageBox( "DialogComponent", "callHandlerMethod() handled \"" + aHandlerMethod1 + "\"" );
|
|
return true;
|
|
}
|
|
else if ( MethodName.equals( aHandlerMethod2 ) )
|
|
{
|
|
showMessageBox( "DialogComponent", "callHandlerMethod() handled \"" + aHandlerMethod2 + "\"" );
|
|
return true;
|
|
}
|
|
else if ( MethodName.equals( aHandlerMethod3 ) )
|
|
{
|
|
showMessageBox( "DialogComponent", "callHandlerMethod() handled \"" + aHandlerMethod3 + "\"" );
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public String[] getSupportedMethodNames() {
|
|
String[] retValue= new String[3];
|
|
retValue[0]= aHandlerMethod1;
|
|
retValue[1]= aHandlerMethod2;
|
|
retValue[2]= aHandlerMethod3;
|
|
return retValue;
|
|
}
|
|
|
|
|
|
//XTypeProvider
|
|
public com.sun.star.uno.Type[] getTypes( ) {
|
|
Type[] retValue= new Type[4];
|
|
retValue[0]= new Type( XServiceInfo.class);
|
|
retValue[1]= new Type( XTypeProvider.class);
|
|
retValue[2]= new Type( XTestDialogHandler.class);
|
|
retValue[3]= new Type( XDialogEventHandler.class);
|
|
return retValue;
|
|
}
|
|
//XTypeProvider
|
|
public byte[] getImplementationId( ) {
|
|
return new byte[0];
|
|
}
|
|
|
|
|
|
|
|
/** This method is a simple helper function to used in the
|
|
* static component initialisation functions as well as in
|
|
* getSupportedServiceNames.
|
|
*/
|
|
private static String[] getServiceNames() {
|
|
String[] sSupportedServiceNames = { __serviceName };
|
|
return sSupportedServiceNames;
|
|
}
|
|
|
|
//XServiceInfo
|
|
public String[] getSupportedServiceNames() {
|
|
return getServiceNames();
|
|
}
|
|
|
|
//XServiceInfo
|
|
public boolean supportsService( String sServiceName ) {
|
|
return sServiceName.equals( __serviceName );
|
|
}
|
|
|
|
//XServiceInfo
|
|
public String getImplementationName() {
|
|
return _DialogComponent.class.getName();
|
|
}
|
|
|
|
private void showMessageBox(String sTitle, String sMessage) {
|
|
if ( null != m_xFrame && null != m_xToolkit ) {
|
|
|
|
// describe window properties.
|
|
WindowDescriptor aDescriptor = new WindowDescriptor();
|
|
aDescriptor.Type = WindowClass.MODALTOP;
|
|
aDescriptor.WindowServiceName = "infobox";
|
|
aDescriptor.ParentIndex = -1;
|
|
aDescriptor.Parent = UnoRuntime.queryInterface(
|
|
XWindowPeer.class, m_xFrame.getContainerWindow());
|
|
aDescriptor.Bounds = new Rectangle(0,0,300,200);
|
|
aDescriptor.WindowAttributes = WindowAttribute.BORDER |
|
|
WindowAttribute.MOVEABLE |
|
|
WindowAttribute.CLOSEABLE;
|
|
|
|
XWindowPeer xPeer = m_xToolkit.createWindow( aDescriptor );
|
|
if ( null != xPeer ) {
|
|
XMessageBox xMsgBox = UnoRuntime.queryInterface(
|
|
XMessageBox.class, xPeer);
|
|
if ( null != xMsgBox )
|
|
{
|
|
xMsgBox.setCaptionText( sTitle );
|
|
xMsgBox.setMessageText( sMessage );
|
|
xMsgBox.execute();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Gives a factory for creating the service.
|
|
* This method is called by the <code>JavaLoader</code>
|
|
* <p>
|
|
* @return returns a <code>XSingleComponentFactory</code> for creating
|
|
* the component
|
|
* @param sImplName the name of the implementation for which a
|
|
* service is desired
|
|
* @see com.sun.star.comp.loader.JavaLoader
|
|
*/
|
|
public static XSingleComponentFactory __getComponentFactory(String sImplName)
|
|
{
|
|
XSingleComponentFactory xFactory = null;
|
|
|
|
if ( sImplName.equals( _DialogComponent.class.getName() ) )
|
|
xFactory = Factory.createComponentFactory(_DialogComponent.class,
|
|
_DialogComponent.getServiceNames());
|
|
|
|
return xFactory;
|
|
}
|
|
}
|