/************************************************************** * * 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( "Width", new Integer( Width ) ); xThrobberProps.setPropertyValue( "Height", 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 ) {} }