/************************************************************** * * 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. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sdext.hxx" #include "unodialog.hxx" #include #include #include #include #include #include #include #include #include #include #include // ------------- // - UnoDialog - // ------------- using namespace ::com::sun::star::awt; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::util; using namespace ::com::sun::star::lang; using namespace ::com::sun::star::view; using namespace ::com::sun::star::frame; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::script; using ::rtl::OUString; UnoDialog::UnoDialog( const Reference< XComponentContext > &rxContext, const Reference< XWindowPeer >& rxParent ) : mxContext( rxContext ), mxParent( rxParent ), mxDialogModel( mxContext->getServiceManager()->createInstanceWithContext( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlDialogModel" ) ), mxContext ), UNO_QUERY_THROW ), mxDialogModelMultiPropertySet( mxDialogModel, UNO_QUERY_THROW ), mxDialogModelPropertySet( mxDialogModel, UNO_QUERY_THROW ), mxDialogModelMSF( mxDialogModel, UNO_QUERY_THROW ), mxDialogModelNameContainer( mxDialogModel, UNO_QUERY_THROW ), mxDialogModelNameAccess( mxDialogModel, UNO_QUERY_THROW ), mxControlModel( mxDialogModel, UNO_QUERY_THROW ), mxDialog( mxContext->getServiceManager()->createInstanceWithContext( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlDialog" ) ), mxContext ), UNO_QUERY_THROW ), mxControl( mxDialog, UNO_QUERY_THROW ), mbStatus( sal_False ) { OSL_TRACE("UnoDialog::UnoDialog"); mxControl->setModel( mxControlModel ); mxDialogControlContainer = Reference< XControlContainer >( mxDialog, UNO_QUERY_THROW ); mxDialogWindow = Reference< XWindow >( mxDialog, UNO_QUERY ); mxDialogWindowPeer = createWindowPeer(); } // ----------------------------------------------------------------------------- UnoDialog::~UnoDialog() { OSL_TRACE("UnoDialog::~UnoDialog"); Reference< XComponent > xComponent( mxDialog, UNO_QUERY ); if ( xComponent.is() ) { xComponent->dispose(); } } // ----------------------------------------------------------------------------- void UnoDialog::setTitle( const rtl::OUString &rTitle ) { if ( rTitle.getLength() ) { mxDialog->setTitle( rTitle ); } } void UnoDialog::execute() { OSL_TRACE("UnoDialog::execute"); mxDialogWindow->setEnable( sal_True ); mxDialogWindow->setVisible( sal_True ); mxDialog->execute(); } void UnoDialog::endExecute( sal_Bool bStatus ) { OSL_TRACE("UnoDialog::endExecute"); mbStatus = bStatus; mxDialog->endExecute(); } void UnoDialog::centerDialog() { Reference< XWindow > xParent( mxParent, UNO_QUERY ); if ( !xParent.is() ) return; Rectangle aParentPosSize = xParent->getPosSize(); Rectangle aWinPosSize = mxDialogWindow->getPosSize(); Point aWinPos((aParentPosSize.Width - aWinPosSize.Width) / 2, (aParentPosSize.Height - aWinPosSize.Height) / 2); if ( ( aWinPos.X + aWinPosSize.Width ) > ( aParentPosSize.X + aParentPosSize.Width ) ) aWinPos.X = aParentPosSize.X + aParentPosSize.Width - aWinPosSize.Width; if ( ( aWinPos.Y + aWinPosSize.Height ) > ( aParentPosSize.Y + aParentPosSize.Height ) ) aWinPos.Y = aParentPosSize.Y + aParentPosSize.Height - aWinPosSize.Height; mxDialogWindow->setPosSize( aWinPos.X, aWinPos.Y, aWinPosSize.Width, aWinPosSize.Height, PosSize::POS ); } // ----------------------------------------------------------------------------- Reference< XWindowPeer > UnoDialog::createWindowPeer() throw ( Exception ) { mxDialogWindow->setVisible( sal_False ); // reuse the parent's toolkit Reference< XToolkit > xToolkit; if ( mxParent.is() ) xToolkit.set( mxParent->getToolkit() ); if ( !xToolkit.is() ) xToolkit.set( mxContext->getServiceManager()->createInstanceWithContext( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.Toolkit" ) ), mxContext ), UNO_QUERY_THROW ); mxReschedule = Reference< XReschedule >( xToolkit, UNO_QUERY ); mxControl->createPeer( xToolkit, mxParent ); return mxControl->getPeer(); } // ----------------------------------------------------------------------------- Reference< XInterface > UnoDialog::insertControlModel( const OUString& rServiceName, const OUString& rName, const Sequence< OUString >& rPropertyNames, const Sequence< Any >& rPropertyValues ) { Reference< XInterface > xControlModel; try { xControlModel = mxDialogModelMSF->createInstance( rServiceName ); Reference< XMultiPropertySet > xMultiPropSet( xControlModel, UNO_QUERY_THROW ); xMultiPropSet->setPropertyValues( rPropertyNames, rPropertyValues ); mxDialogModelNameContainer->insertByName( rName, Any( xControlModel ) ); } catch( Exception& ) { } return xControlModel; } // ----------------------------------------------------------------------------- void UnoDialog::setVisible( const OUString& rName, sal_Bool bVisible ) { try { Reference< XInterface > xControl( mxDialogControlContainer->getControl( rName ), UNO_QUERY_THROW ); Reference< XWindow > xWindow( xControl, UNO_QUERY_THROW ); xWindow->setVisible( bVisible ); } catch ( Exception& ) { } } // ----------------------------------------------------------------------------- sal_Bool UnoDialog::isHighContrast() { sal_Bool bHighContrast = sal_False; try { Reference< XStyleSettingsSupplier > xStyleSettingsSuppl( mxDialogWindow, UNO_QUERY_THROW ); Reference< XStyleSettings > xStyleSettings( xStyleSettingsSuppl->getStyleSettings() ); bHighContrast = xStyleSettings->getHighContrastMode(); } catch( Exception& ) { } return bHighContrast; } // ----------------------------------------------------------------------------- Reference< XButton > UnoDialog::insertButton( const OUString& rName, Reference< XActionListener > xActionListener, const Sequence< OUString >& rPropertyNames, const Sequence< Any >& rPropertyValues ) { Reference< XButton > xButton; try { Reference< XInterface > xButtonModel( insertControlModel( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlButtonModel" ) ), rName, rPropertyNames, rPropertyValues ) ); Reference< XPropertySet > xPropertySet( xButtonModel, UNO_QUERY_THROW ); xPropertySet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "Name" ) ), Any( rName ) ); xButton = Reference< XButton >( mxDialogControlContainer->getControl( rName ), UNO_QUERY_THROW ); if ( xActionListener.is() ) { xButton->addActionListener( xActionListener ); xButton->setActionCommand( rName ); } return xButton; } catch( Exception& ) { } return xButton; } // ----------------------------------------------------------------------------- Reference< XFixedText > UnoDialog::insertFixedText( const OUString& rName, const Sequence< OUString > rPropertyNames, const Sequence< Any > rPropertyValues ) { Reference< XFixedText > xFixedText; try { Reference< XPropertySet > xPropertySet( insertControlModel( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlFixedTextModel" ) ), rName, rPropertyNames, rPropertyValues ), UNO_QUERY_THROW ); xPropertySet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "Name" ) ), Any( rName ) ); xFixedText = Reference< XFixedText >( mxDialogControlContainer->getControl( rName ), UNO_QUERY_THROW ); } catch ( Exception& ) { } return xFixedText; } // ----------------------------------------------------------------------------- Reference< XCheckBox > UnoDialog::insertCheckBox( const OUString& rName, const Sequence< OUString > rPropertyNames, const Sequence< Any > rPropertyValues ) { Reference< XCheckBox > xCheckBox; try { Reference< XPropertySet > xPropertySet( insertControlModel( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlCheckBoxModel" ) ), rName, rPropertyNames, rPropertyValues ), UNO_QUERY_THROW ); xPropertySet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "Name" ) ), Any( rName ) ); xCheckBox = Reference< XCheckBox >( mxDialogControlContainer->getControl( rName ), UNO_QUERY_THROW ); } catch ( Exception& ) { } return xCheckBox; } // ----------------------------------------------------------------------------- Reference< XControl > UnoDialog::insertFormattedField( const OUString& rName, const Sequence< OUString > rPropertyNames, const Sequence< Any > rPropertyValues ) { Reference< XControl > xControl; try { Reference< XPropertySet > xPropertySet( insertControlModel( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlFormattedFieldModel" ) ), rName, rPropertyNames, rPropertyValues ), UNO_QUERY_THROW ); xPropertySet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "Name" ) ), Any( rName ) ); xControl = Reference< XControl >( mxDialogControlContainer->getControl( rName ), UNO_QUERY_THROW ); } catch ( Exception& ) { } return xControl; } // ----------------------------------------------------------------------------- Reference< XComboBox > UnoDialog::insertComboBox( const OUString& rName, const Sequence< OUString > rPropertyNames, const Sequence< Any > rPropertyValues ) { Reference< XComboBox > xControl; try { Reference< XPropertySet > xPropertySet( insertControlModel( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlComboBoxModel" ) ), rName, rPropertyNames, rPropertyValues ), UNO_QUERY_THROW ); xPropertySet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "Name" ) ), Any( rName ) ); xControl = Reference< XComboBox >( mxDialogControlContainer->getControl( rName ), UNO_QUERY_THROW ); } catch ( Exception& ) { } return xControl; } // ----------------------------------------------------------------------------- Reference< XRadioButton > UnoDialog::insertRadioButton( const OUString& rName, const Sequence< OUString > rPropertyNames, const Sequence< Any > rPropertyValues ) { Reference< XRadioButton > xControl; try { Reference< XPropertySet > xPropertySet( insertControlModel( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlRadioButtonModel" ) ), rName, rPropertyNames, rPropertyValues ), UNO_QUERY_THROW ); xPropertySet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "Name" ) ), Any( rName ) ); xControl = Reference< XRadioButton >( mxDialogControlContainer->getControl( rName ), UNO_QUERY_THROW ); } catch ( Exception& ) { } return xControl; } // ----------------------------------------------------------------------------- Reference< XListBox > UnoDialog::insertListBox( const OUString& rName, const Sequence< OUString > rPropertyNames, const Sequence< Any > rPropertyValues ) { Reference< XListBox > xControl; try { Reference< XPropertySet > xPropertySet( insertControlModel( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlListBoxModel" ) ), rName, rPropertyNames, rPropertyValues ), UNO_QUERY_THROW ); xPropertySet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "Name" ) ), Any( rName ) ); xControl = Reference< XListBox >( mxDialogControlContainer->getControl( rName ), UNO_QUERY_THROW ); } catch ( Exception& ) { } return xControl; } // ----------------------------------------------------------------------------- Reference< XControl > UnoDialog::insertImage( const OUString& rName, const Sequence< OUString > rPropertyNames, const Sequence< Any > rPropertyValues ) { Reference< XControl > xControl; try { Reference< XPropertySet > xPropertySet( insertControlModel( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlImageControlModel" ) ), rName, rPropertyNames, rPropertyValues ), UNO_QUERY_THROW ); xPropertySet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "Name" ) ), Any( rName ) ); xControl = Reference< XControl >( mxDialogControlContainer->getControl( rName ), UNO_QUERY_THROW ); } catch ( Exception& ) { } return xControl; } // ----------------------------------------------------------------------------- void UnoDialog::setControlProperty( const OUString& rControlName, const OUString& rPropertyName, const Any& rPropertyValue ) { try { if ( mxDialogModelNameAccess->hasByName( rControlName ) ) { Reference< XPropertySet > xPropertySet( mxDialogModelNameAccess->getByName( rControlName ), UNO_QUERY_THROW ); xPropertySet->setPropertyValue( rPropertyName, rPropertyValue ); } } catch ( Exception& ) { } } // ----------------------------------------------------------------------------- sal_Int32 UnoDialog::getMapsFromPixels( sal_Int32 nPixels ) const { double dMaps = 0; try { sal_Int32 nMapWidth = 0; const OUString sWidth( RTL_CONSTASCII_USTRINGPARAM( "Width" ) ); if ( mxDialogModelPropertySet->getPropertyValue( sWidth ) >>= nMapWidth ) { Reference< XWindow > xWindow( mxDialog, UNO_QUERY_THROW ); double pxWidth = xWindow->getPosSize().Width; double mapRatio = ( pxWidth / nMapWidth ); dMaps = nPixels / mapRatio; } } catch ( Exception& ) { } return static_cast< sal_Int32 >( dMaps ); } // ----------------------------------------------------------------------------- Any UnoDialog::getControlProperty( const OUString& rControlName, const OUString& rPropertyName ) { Any aRet; try { if ( mxDialogModelNameAccess->hasByName( rControlName ) ) { Reference< XPropertySet > xPropertySet( mxDialogModelNameAccess->getByName( rControlName ), UNO_QUERY_THROW ); aRet = xPropertySet->getPropertyValue( rPropertyName ); } } catch ( Exception& ) { } return aRet; } // ----------------------------------------------------------------------------- void UnoDialog::enableControl( const OUString& rControlName ) { const OUString sEnabled( RTL_CONSTASCII_USTRINGPARAM( "Enabled" ) ); setControlProperty( rControlName, sEnabled, Any( sal_True ) ); } // ----------------------------------------------------------------------------- void UnoDialog::disableControl( const OUString& rControlName ) { const OUString sEnabled( RTL_CONSTASCII_USTRINGPARAM( "Enabled" ) ); setControlProperty( rControlName, sEnabled, Any( sal_False ) ); } // -----------------------------------------------------------------------------