blob: 0e1930feb30b497d208f59d8071a204be85b7ce5 [file] [log] [blame]
/**************************************************************
*
* 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 com.sun.star.wiki;
import com.sun.star.awt.XControl;
import com.sun.star.awt.XControlContainer;
import com.sun.star.awt.XControlModel;
import com.sun.star.awt.XDialog;
import com.sun.star.awt.XDialogEventHandler;
import com.sun.star.awt.XDialogProvider2;
import com.sun.star.awt.XAnimation;
import com.sun.star.beans.XPropertySet;
import com.sun.star.lang.XMultiComponentFactory;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.uno.XComponentContext;
import com.sun.star.awt.XTopWindow;
import com.sun.star.awt.XTopWindowListener;
import com.sun.star.awt.XWindow;
import com.sun.star.container.XNameContainer;
import com.sun.star.lang.EventObject;
import com.sun.star.lang.XMultiServiceFactory;
public class WikiDialog implements XDialogEventHandler, XTopWindowListener
{
XComponentContext m_xContext;
XControlContainer m_xControlContainer;
XDialog m_xDialog;
String[] m_aMethods;
boolean m_bAction = false;
Settings m_aSettings;
protected Thread m_aThread;
protected boolean m_bThreadFinished = false;
/** Creates a new instance of WikiDialog */
public WikiDialog(XComponentContext c, String DialogURL)
{
this.m_xContext = c;
XMultiComponentFactory xMCF = m_xContext.getServiceManager();
m_aSettings = Settings.getSettings(m_xContext);
try
{
Object obj;
obj = xMCF.createInstanceWithContext("com.sun.star.awt.DialogProvider2", m_xContext );
XDialogProvider2 xDialogProvider = (XDialogProvider2) UnoRuntime.queryInterface( XDialogProvider2.class, obj );
m_xDialog = xDialogProvider.createDialogWithHandler( DialogURL, this );
m_xControlContainer = (XControlContainer)UnoRuntime.queryInterface( XControlContainer.class, m_xDialog );
XTopWindow xTopWindow = (XTopWindow)UnoRuntime.queryInterface( XTopWindow.class, m_xDialog );
if ( xTopWindow != null )
xTopWindow.addTopWindowListener( this );
}
catch (com.sun.star.uno.Exception ex)
{
ex.printStackTrace();
}
}
public synchronized void ThreadStop( boolean bSelf )
{
if ( bSelf || m_aThread != null && !m_bThreadFinished )
{
try
{
Helper.AllowConnection( bSelf );
}
catch( Exception ex )
{
ex.printStackTrace();
}
}
m_aThread = null;
m_bThreadFinished = true;
}
protected void setMethods (String [] Methods)
{
this.m_aMethods = Methods;
}
public boolean show( )
{
m_bThreadFinished = false;
if( m_xDialog != null ) m_xDialog.execute();
return m_bAction;
}
public String[] getSupportedMethodNames()
{
return m_aMethods;
}
public boolean callHandlerMethod( XDialog xDialog, Object EventObject, String MethodName )
{
return true;
}
public void SetTitle( String sTitle )
throws Exception
{
SetTitle( m_xDialog, sTitle );
}
public static void SetTitle( XDialog xDialog, String sTitle )
throws Exception
{
if ( xDialog != null && sTitle != null )
{
XControl xDialogControl = (XControl)UnoRuntime.queryInterface( XControl.class, xDialog );
if ( xDialogControl != null )
{
XPropertySet xPropSet = (XPropertySet)UnoRuntime.queryInterface( XPropertySet.class, xDialogControl.getModel() );
if ( xPropSet != null )
xPropSet.setPropertyValue( "Title", sTitle );
}
}
}
protected XPropertySet GetPropSet(String sControl)
{
return GetPropSet( m_xControlContainer, sControl );
}
protected static XPropertySet GetPropSet( XControlContainer xControlContainer, String sControl )
{
XPropertySet xPS = null;
if ( xControlContainer != null && sControl != null )
{
XControl xControl = xControlContainer.getControl(sControl);
xPS = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, xControl.getModel() );
}
if ( xPS == null )
throw new com.sun.star.uno.RuntimeException();
return xPS;
}
public static XDialog CreateSimpleDialog( XComponentContext xContext, String sURL, int nTitleID, String[] pControls, int[] pStringIDs )
{
XDialog xResult = null;
if ( xContext != null && sURL != null && sURL.length() > 0 )
{
try
{
Object oDialogProvider = xContext.getServiceManager().createInstanceWithContext("com.sun.star.awt.DialogProvider2", xContext );
XDialogProvider2 xDialogProvider = (XDialogProvider2) UnoRuntime.queryInterface( XDialogProvider2.class, oDialogProvider );
if ( xDialogProvider != null )
xResult = xDialogProvider.createDialog( sURL );
if ( xResult != null )
{
SetTitle( xResult, Helper.GetLocalizedString( xContext, nTitleID ) );
if ( pControls != null && pStringIDs != null && pControls.length == pStringIDs.length )
{
XControlContainer xControlContainer = (XControlContainer)UnoRuntime.queryInterface( XControlContainer.class, xResult );
for ( int nInd = 0; nInd < pControls.length; nInd++ )
GetPropSet( xControlContainer, pControls[nInd] ).setPropertyValue( "Label", new Integer( pStringIDs[nInd] ) );
}
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
return xResult;
}
protected void InsertThrobber( int X, int Y, int Width, int Height )
{
try
{
XControl xDialogControl = ( XControl ) UnoRuntime.queryInterface( XControl.class, m_xDialog );
XControlModel xDialogModel = null;
if ( xDialogControl != null )
xDialogModel = xDialogControl.getModel();
XMultiServiceFactory xDialogFactory = ( XMultiServiceFactory ) UnoRuntime.queryInterface( XMultiServiceFactory.class, xDialogModel );
if ( xDialogFactory != null )
{
XControlModel xThrobberModel = (XControlModel)UnoRuntime.queryInterface( XControlModel.class, xDialogFactory.createInstance( "com.sun.star.awt.SpinningProgressControlModel" ) );
XPropertySet xThrobberProps = (XPropertySet)UnoRuntime.queryInterface( XPropertySet.class, xThrobberModel );
if ( xThrobberProps != null )
{
xThrobberProps.setPropertyValue( "Name", "WikiThrobber" );
xThrobberProps.setPropertyValue( "PositionX", new Integer( X ) );
xThrobberProps.setPropertyValue( "PositionY", new Integer( Y ) );
xThrobberProps.setPropertyValue( "Height", new Integer( Width ) );
xThrobberProps.setPropertyValue( "Width", new Integer( Height ) );
XNameContainer xDialogContainer = (XNameContainer)UnoRuntime.queryInterface( XNameContainer.class, xDialogModel );
xDialogContainer.insertByName( "WikiThrobber", xThrobberModel );
}
}
}
catch( Exception e )
{
e.printStackTrace();
}
SetThrobberVisible( false );
}
public void SetThrobberActive( boolean bActive )
{
if ( m_xControlContainer != null )
{
try
{
XAnimation xThrobber = (XAnimation)UnoRuntime.queryInterface( XAnimation.class, m_xControlContainer.getControl( "WikiThrobber" ) );
if ( xThrobber != null )
{
if ( bActive )
xThrobber.startAnimation();
else
xThrobber.stopAnimation();
}
}
catch( Exception e )
{
e.printStackTrace();
}
}
}
public void SetThrobberVisible( boolean bVisible )
{
if ( m_xControlContainer != null )
{
try
{
XWindow xWindow = (XWindow)UnoRuntime.queryInterface( XWindow.class, m_xControlContainer.getControl( "WikiThrobber" ) );
if ( xWindow != null )
xWindow.setVisible( bVisible );
}
catch ( Exception e )
{
e.printStackTrace();
}
}
}
public void SetFocusTo( String aControl )
{
if ( m_xControlContainer != null )
{
try
{
XWindow xWindow = (XWindow)UnoRuntime.queryInterface( XWindow.class, m_xControlContainer.getControl( aControl ) );
if ( xWindow != null )
xWindow.setFocus();
}
catch ( Exception e )
{
e.printStackTrace();
}
}
}
public void DisposeDialog()
{
Helper.Dispose( m_xDialog );
}
public void windowOpened( EventObject e )
{}
public void windowClosing( EventObject e )
{}
public void windowClosed( EventObject e )
{}
public void windowMinimized( EventObject e )
{}
public void windowNormalized( EventObject e )
{}
public void windowActivated( EventObject e )
{}
public void windowDeactivated( EventObject e )
{}
public void disposing( EventObject e )
{}
}