/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /************************************************************************* * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 * only, as published by the Free Software Foundation. * * OpenOffice.org is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License version 3 for more details * (a copy is included in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU Lesser General Public License * version 3 along with OpenOffice.org. If not, see * * for a copy of the LGPLv3 License. * ************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "insdlg.hxx" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "svuidlg.hrc" #include #include #include #include using namespace ::com::sun::star; using namespace ::com::sun::star::lang; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::container; using namespace ::com::sun::star::ui::dialogs; using ::rtl::OUString; #define _SVSTDARR_STRINGSDTOR #include static String impl_getSvtResString( sal_uInt32 nId ) { String aRet; com::sun::star::lang::Locale aLocale = Application::GetSettings().GetUILocale(); ResMgr* pMgr = ResMgr::CreateResMgr( "svt", aLocale ); if( pMgr ) { aRet = String( ResId( nId, *pMgr ) ); delete pMgr; } return aRet; } sal_Bool InsertObjectDialog_Impl::IsCreateNew() const { return sal_False; } uno::Reference< io::XInputStream > InsertObjectDialog_Impl::GetIconIfIconified( ::rtl::OUString* /*pGraphicMediaType*/ ) { return uno::Reference< io::XInputStream >(); } InsertObjectDialog_Impl::InsertObjectDialog_Impl( Window * pParent, const ResId & rResId, const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >& xStorage ) : ModalDialog( pParent, rResId ) , m_xStorage( xStorage ) , aCnt( m_xStorage ) { } // ----------------------------------------------------------------------- IMPL_LINK_INLINE_START( SvInsertOleDlg, DoubleClickHdl, ListBox *, EMPTYARG ) { EndDialog( RET_OK ); return 0; } IMPL_LINK_INLINE_END( SvInsertOleDlg, DoubleClickHdl, ListBox *, pListBox ) // ----------------------------------------------------------------------- IMPL_LINK( SvInsertOleDlg, BrowseHdl, PushButton *, EMPTYARG ) { Reference< XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() ); if( xFactory.is() ) { Reference< XFilePicker > xFilePicker( xFactory->createInstance( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.ui.dialogs.FilePicker" ) ) ), UNO_QUERY ); DBG_ASSERT( xFilePicker.is(), "could not get FilePicker service" ); Reference< XInitialization > xInit( xFilePicker, UNO_QUERY ); Reference< XFilterManager > xFilterMgr( xFilePicker, UNO_QUERY ); if( xInit.is() && xFilePicker.is() && xFilterMgr.is() ) { Sequence< Any > aServiceType( 1 ); aServiceType[0] <<= TemplateDescription::FILEOPEN_SIMPLE; xInit->initialize( aServiceType ); // add filter try { xFilterMgr->appendFilter( OUString(), OUString( RTL_CONSTASCII_USTRINGPARAM( "*.*" ) ) ); } catch( IllegalArgumentException& ) { DBG_ASSERT( 0, "caught IllegalArgumentException when registering filter\n" ); } if( xFilePicker->execute() == ExecutableDialogResults::OK ) { Sequence< OUString > aPathSeq( xFilePicker->getFiles() ); INetURLObject aObj( aPathSeq[0] ); aEdFilepath.SetText( aObj.PathToFileName() ); } } } return 0; } // ----------------------------------------------------------------------- IMPL_LINK( SvInsertOleDlg, RadioHdl, RadioButton *, EMPTYARG ) { if ( aRbNewObject.IsChecked() ) { aLbObjecttype.Show(); aEdFilepath.Hide(); aBtnFilepath.Hide(); aCbFilelink.Hide(); aGbObject.SetText( _aOldStr ); } else { aCbFilelink.Show(); aLbObjecttype.Hide(); aEdFilepath.Show(); aBtnFilepath.Show(); aCbFilelink.Show(); aGbObject.SetText( aStrFile ); } return 0; } // ----------------------------------------------------------------------- void SvInsertOleDlg::SelectDefault() { aLbObjecttype.SelectEntryPos( 0 ); } // ----------------------------------------------------------------------- SvInsertOleDlg::SvInsertOleDlg ( Window* pParent, const Reference < embed::XStorage >& xStorage, const SvObjectServerList* pServers ) : InsertObjectDialog_Impl( pParent, CUI_RES( MD_INSERT_OLEOBJECT ), xStorage ), aRbNewObject( this, CUI_RES( RB_NEW_OBJECT ) ), aRbObjectFromfile( this, CUI_RES( RB_OBJECT_FROMFILE ) ), aGbObject( this, CUI_RES( GB_OBJECT ) ), aLbObjecttype( this, CUI_RES( LB_OBJECTTYPE ) ), aEdFilepath( this, CUI_RES( ED_FILEPATH ) ), aBtnFilepath( this, CUI_RES( BTN_FILEPATH ) ), aCbFilelink( this, CUI_RES( CB_FILELINK ) ), aOKButton1( this, CUI_RES( 1 ) ), aCancelButton1( this, CUI_RES( 1 ) ), aHelpButton1( this, CUI_RES( 1 ) ), aStrFile( CUI_RES( STR_FILE ) ), m_pServers( pServers ) { FreeResource(); _aOldStr = aGbObject.GetText(); aLbObjecttype.SetDoubleClickHdl( LINK( this, SvInsertOleDlg, DoubleClickHdl ) ); aBtnFilepath.SetClickHdl( LINK( this, SvInsertOleDlg, BrowseHdl ) ); Link aLink( LINK( this, SvInsertOleDlg, RadioHdl ) ); aRbNewObject.SetClickHdl( aLink ); aRbObjectFromfile.SetClickHdl( aLink ); aRbNewObject.Check( sal_True ); RadioHdl( NULL ); aBtnFilepath.SetAccessibleRelationMemberOf(&aGbObject); } short SvInsertOleDlg::Execute() { short nRet = RET_OK; SvObjectServerList aObjS; if ( !m_pServers ) { // if no list was provided, take the complete one aObjS.FillInsertObjects(); m_pServers = &aObjS; } // fill listbox and select default ListBox& rBox = GetObjectTypes(); rBox.SetUpdateMode( sal_False ); for ( sal_uLong i = 0; i < m_pServers->Count(); i++ ) rBox.InsertEntry( (*m_pServers)[i].GetHumanName() ); rBox.SetUpdateMode( sal_True ); SelectDefault(); ::rtl::OUString aName; DBG_ASSERT( m_xStorage.is(), "No storage!"); if ( m_xStorage.is() && ( nRet = Dialog::Execute() ) == RET_OK ) { String aFileName; sal_Bool bLink = sal_False; sal_Bool bCreateNew = IsCreateNew(); if ( bCreateNew ) { // create and insert new embedded object String aServerName = rBox.GetSelectEntry(); const SvObjectServer* pS = m_pServers->Get( aServerName ); if ( pS ) { if( pS->GetClassName() == SvGlobalName( SO3_OUT_CLASSID ) ) { try { uno::Reference < embed::XInsertObjectDialog > xDialogCreator( ::comphelper::getProcessServiceFactory()->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.embed.MSOLEObjectSystemCreator")) ), uno::UNO_QUERY ); if ( xDialogCreator.is() ) { aName = aCnt.CreateUniqueObjectName(); embed::InsertedObjectInfo aNewInf = xDialogCreator->createInstanceByDialog( m_xStorage, aName, uno::Sequence < beans::PropertyValue >() ); OSL_ENSURE( aNewInf.Object.is(), "The object must be created or an exception must be thrown!" ); m_xObj = aNewInf.Object; for ( sal_Int32 nInd = 0; nInd < aNewInf.Options.getLength(); nInd++ ) if ( aNewInf.Options[nInd].Name.equals( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Icon" ) ) ) ) { aNewInf.Options[nInd].Value >>= m_aIconMetaFile; } else if ( aNewInf.Options[nInd].Name.equals( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "IconFormat" ) ) ) ) { datatransfer::DataFlavor aFlavor; if ( aNewInf.Options[nInd].Value >>= aFlavor ) m_aIconMediaType = aFlavor.MimeType; } } } catch( ucb::CommandAbortedException& ) { // the user has pressed cancel } catch( uno::Exception& ) { // TODO: Error handling } } else { // create object with desired ClassId m_xObj = aCnt.CreateEmbeddedObject( pS->GetClassName().GetByteSequence(), aName ); } if ( !m_xObj.is() ) { if( aFileName.Len() ) // from OLE Dialog { // Objekt konnte nicht aus Datei erzeugt werden // global Resource from svtools (former so3 resource) String aErr( impl_getSvtResString( STR_ERROR_OBJNOCREATE_FROM_FILE ) ); aErr.SearchAndReplace( String( '%' ), aFileName ); ErrorBox( this, WB_3DLOOK | WB_OK, aErr ).Execute(); } else { // Objekt konnte nicht erzeugt werden // global Resource from svtools (former so3 resource) String aErr( impl_getSvtResString( STR_ERROR_OBJNOCREATE ) ); aErr.SearchAndReplace( String( '%' ), aServerName ); ErrorBox( this, WB_3DLOOK | WB_OK, aErr ).Execute(); } } } } else { aFileName = GetFilePath(); INetURLObject aURL; aURL.SetSmartProtocol( INET_PROT_FILE ); aURL.SetSmartURL( aFileName ); aFileName = aURL.GetMainURL( INetURLObject::NO_DECODE ); bLink = IsLinked(); if ( aFileName.Len() ) { // create MediaDescriptor for file to create object from uno::Sequence < beans::PropertyValue > aMedium( 2 ); aMedium[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "URL" ) ); aMedium[0].Value <<= ::rtl::OUString( aFileName ); uno::Reference< task::XInteractionHandler > xInteraction; uno::Reference< lang::XMultiServiceFactory > xFactory = ::comphelper::getProcessServiceFactory(); if ( xFactory.is() ) xInteraction = uno::Reference< task::XInteractionHandler >( xFactory->createInstance( DEFINE_CONST_UNICODE("com.sun.star.task.InteractionHandler") ), uno::UNO_QUERY_THROW ); if ( xInteraction.is() ) { aMedium[1].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "InteractionHandler" ) ); aMedium[1].Value <<= xInteraction; } else { OSL_FAIL( "Can not get InteractionHandler!\n" ); aMedium.realloc( 1 ); } // create object from media descriptor if ( bLink ) m_xObj = aCnt.InsertEmbeddedLink( aMedium, aName ); else m_xObj = aCnt.InsertEmbeddedObject( aMedium, aName ); } if ( !m_xObj.is() ) { // Objekt konnte nicht aus Datei erzeugt werden // global Resource from svtools (former so3 resource) String aErr( impl_getSvtResString( STR_ERROR_OBJNOCREATE_FROM_FILE ) ); aErr.SearchAndReplace( String( '%' ), aFileName ); ErrorBox( this, WB_3DLOOK | WB_OK, aErr ).Execute(); } } } m_pServers = 0; return nRet; } uno::Reference< io::XInputStream > SvInsertOleDlg::GetIconIfIconified( ::rtl::OUString* pGraphicMediaType ) { if ( m_aIconMetaFile.getLength() ) { if ( pGraphicMediaType ) *pGraphicMediaType = m_aIconMediaType; return uno::Reference< io::XInputStream >( new ::comphelper::SequenceInputStream( m_aIconMetaFile ) ); } return uno::Reference< io::XInputStream >(); } IMPL_LINK( SvInsertPlugInDialog, BrowseHdl, PushButton *, EMPTYARG ) { Sequence< OUString > aFilterNames, aFilterTypes; void fillNetscapePluginFilters( Sequence< OUString >& rNames, Sequence< OUString >& rTypes ); fillNetscapePluginFilters( aFilterNames, aFilterTypes ); Reference< XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() ); if( xFactory.is() ) { Reference< XFilePicker > xFilePicker( xFactory->createInstance( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.ui.dialogs.FilePicker" ) ) ), UNO_QUERY ); DBG_ASSERT( xFilePicker.is(), "could not get FilePicker service" ); Reference< XInitialization > xInit( xFilePicker, UNO_QUERY ); Reference< XFilterManager > xFilterMgr( xFilePicker, UNO_QUERY ); if( xInit.is() && xFilePicker.is() && xFilterMgr.is() ) { Sequence< Any > aServiceType( 1 ); aServiceType[0] <<= TemplateDescription::FILEOPEN_SIMPLE; xInit->initialize( aServiceType ); // add the filters try { const OUString* pNames = aFilterNames.getConstArray(); const OUString* pTypes = aFilterTypes.getConstArray(); for( int i = 0; i < aFilterNames.getLength(); i++ ) xFilterMgr->appendFilter( pNames[i], pTypes[i] ); } catch( IllegalArgumentException& ) { DBG_ASSERT( 0, "caught IllegalArgumentException when registering filter\n" ); } if( xFilePicker->execute() == ExecutableDialogResults::OK ) { Sequence< OUString > aPathSeq( xFilePicker->getFiles() ); INetURLObject aObj( aPathSeq[0] ); aEdFileurl.SetText( aObj.PathToFileName() ); } } } return 0; } // ----------------------------------------------------------------------- SvInsertPlugInDialog::SvInsertPlugInDialog( Window* pParent, const uno::Reference < embed::XStorage >& xStorage ) : InsertObjectDialog_Impl( pParent, CUI_RES( MD_INSERT_OBJECT_PLUGIN ), xStorage ), aGbFileurl( this, CUI_RES( GB_FILEURL ) ), aEdFileurl( this, CUI_RES( ED_FILEURL ) ), aBtnFileurl( this, CUI_RES( BTN_FILEURL ) ), aGbPluginsOptions( this, CUI_RES( GB_PLUGINS_OPTIONS ) ), aEdPluginsOptions( this, CUI_RES( ED_PLUGINS_OPTIONS ) ), aOKButton1( this, CUI_RES( 1 ) ), aCancelButton1( this, CUI_RES( 1 ) ), aHelpButton1( this, CUI_RES( 1 ) ), m_pURL(0) { FreeResource(); aBtnFileurl.SetClickHdl( LINK( this, SvInsertPlugInDialog, BrowseHdl ) ); } SvInsertPlugInDialog::~SvInsertPlugInDialog() { delete m_pURL; } // ----------------------------------------------------------------------- static void Plugin_ImplFillCommandSequence( const String& aCommands, uno::Sequence< beans::PropertyValue >& aCommandSequence ) { sal_uInt16 nEaten; SvCommandList aLst; aLst.AppendCommands( aCommands, &nEaten ); const size_t nCount = aLst.size(); aCommandSequence.realloc( nCount ); for( size_t nIndex = 0; nIndex < nCount; nIndex++ ) { aCommandSequence[nIndex].Name = aLst[ nIndex ].GetCommand(); aCommandSequence[nIndex].Handle = -1; aCommandSequence[nIndex].Value = makeAny( OUString( aLst[ nIndex ].GetArgument() ) ); aCommandSequence[nIndex].State = beans::PropertyState_DIRECT_VALUE; } } short SvInsertPlugInDialog::Execute() { short nRet = RET_OK; m_aCommands.Erase(); DBG_ASSERT( m_xStorage.is(), "No storage!"); if ( m_xStorage.is() && ( nRet = Dialog::Execute() ) == RET_OK ) { if ( !m_pURL ) m_pURL = new INetURLObject(); else *m_pURL = INetURLObject(); m_aCommands = GetPlugInOptions(); String aURL = GetPlugInFile(); // URL can be a valid and absolute URL or a system file name m_pURL->SetSmartProtocol( INET_PROT_FILE ); if ( !aURL.Len() || m_pURL->SetSmartURL( aURL ) ) { // create a plugin object ::rtl::OUString aName; SvGlobalName aClassId( SO3_PLUGIN_CLASSID ); m_xObj = aCnt.CreateEmbeddedObject( aClassId.GetByteSequence(), aName ); } if ( m_xObj.is() ) { // set properties from dialog if ( m_xObj->getCurrentState() == embed::EmbedStates::LOADED ) m_xObj->changeState( embed::EmbedStates::RUNNING ); uno::Reference < beans::XPropertySet > xSet( m_xObj->getComponent(), uno::UNO_QUERY ); if ( xSet.is() ) { xSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PluginURL") ), makeAny( ::rtl::OUString( m_pURL->GetMainURL( INetURLObject::NO_DECODE ) ) ) ); uno::Sequence< beans::PropertyValue > aCommandSequence; Plugin_ImplFillCommandSequence( m_aCommands, aCommandSequence ); xSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PluginCommands") ), makeAny( aCommandSequence ) ); } } else { // PlugIn konnte nicht erzeugt werden // global Resource from svtools (former so3 resource) String aErr( impl_getSvtResString( STR_ERROR_OBJNOCREATE_PLUGIN ) ); aErr.SearchAndReplace( String( '%' ), aURL ); ErrorBox( this, WB_3DLOOK | WB_OK, aErr ).Execute(); } } return nRet; } // class SvInsertAppletDlg ----------------------------------------------- IMPL_LINK( SvInsertAppletDialog, BrowseHdl, PushButton *, EMPTYARG ) { Reference< XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() ); if( xFactory.is() ) { Reference< XFilePicker > xFilePicker( xFactory->createInstance( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.ui.dialogs.FilePicker" ) ) ), UNO_QUERY ); DBG_ASSERT( xFilePicker.is(), "could not get FilePicker service" ); Reference< XInitialization > xInit( xFilePicker, UNO_QUERY ); Reference< XFilterManager > xFilterMgr( xFilePicker, UNO_QUERY ); if( xInit.is() && xFilePicker.is() && xFilterMgr.is() ) { Sequence< Any > aServiceType( 1 ); aServiceType[0] <<= TemplateDescription::FILEOPEN_SIMPLE; xInit->initialize( aServiceType ); // add filter try { xFilterMgr->appendFilter( OUString( RTL_CONSTASCII_USTRINGPARAM( "Applet" ) ), OUString( RTL_CONSTASCII_USTRINGPARAM( "*.class" ) ) ); } catch( IllegalArgumentException& ) { DBG_ASSERT( 0, "caught IllegalArgumentException when registering filter\n" ); } if( xFilePicker->execute() == ExecutableDialogResults::OK ) { Sequence< OUString > aPathSeq( xFilePicker->getFiles() ); INetURLObject aObj( aPathSeq[0] ); aEdClassfile.SetText( aObj.getName() ); aObj.removeSegment(); aEdClasslocation.SetText( aObj.PathToFileName() ); } } } return 0; } // ----------------------------------------------------------------------- SvInsertAppletDialog::SvInsertAppletDialog( Window* pParent, const uno::Reference < embed::XStorage >& xStorage ) : InsertObjectDialog_Impl( pParent, CUI_RES( MD_INSERT_OBJECT_APPLET ), xStorage ), aFtClassfile( this, CUI_RES( FT_CLASSFILE ) ), aEdClassfile( this, CUI_RES( ED_CLASSFILE ) ), aFtClasslocation( this, CUI_RES( FT_CLASSLOCATION ) ), aEdClasslocation( this, CUI_RES( ED_CLASSLOCATION ) ), aBtnClass( this, CUI_RES( BTN_CLASS ) ), aGbClass( this, CUI_RES( GB_CLASS ) ), aEdAppletOptions( this, CUI_RES( ED_APPLET_OPTIONS ) ), aGbAppletOptions( this, CUI_RES( GB_APPLET_OPTIONS ) ), aOKButton1( this, CUI_RES( 1 ) ), aCancelButton1( this, CUI_RES( 1 ) ), aHelpButton1( this, CUI_RES( 1 ) ), m_pURL(0) { FreeResource(); aBtnClass.SetClickHdl( LINK( this, SvInsertAppletDialog, BrowseHdl ) ); } SvInsertAppletDialog::SvInsertAppletDialog( Window* pParent, const uno::Reference < embed::XEmbeddedObject >& xObj ) : InsertObjectDialog_Impl( pParent, CUI_RES( MD_INSERT_OBJECT_APPLET ), uno::Reference < embed::XStorage >() ), aFtClassfile( this, CUI_RES( FT_CLASSFILE ) ), aEdClassfile( this, CUI_RES( ED_CLASSFILE ) ), aFtClasslocation( this, CUI_RES( FT_CLASSLOCATION ) ), aEdClasslocation( this, CUI_RES( ED_CLASSLOCATION ) ), aBtnClass( this, CUI_RES( BTN_CLASS ) ), aGbClass( this, CUI_RES( GB_CLASS ) ), aEdAppletOptions( this, CUI_RES( ED_APPLET_OPTIONS ) ), aGbAppletOptions( this, CUI_RES( GB_APPLET_OPTIONS ) ), aOKButton1( this, CUI_RES( 1 ) ), aCancelButton1( this, CUI_RES( 1 ) ), aHelpButton1( this, CUI_RES( 1 ) ), m_pURL(0) { m_xObj = xObj; FreeResource(); aBtnClass.SetClickHdl( LINK( this, SvInsertAppletDialog, BrowseHdl ) ); } SvInsertAppletDialog::~SvInsertAppletDialog() { delete m_pURL; } short SvInsertAppletDialog::Execute() { short nRet = RET_OK; m_aClass.Erase(); m_aCommands.Erase(); sal_Bool bOK = sal_False; uno::Reference < beans::XPropertySet > xSet; if ( m_xObj.is() ) { try { if ( m_xObj->getCurrentState() == embed::EmbedStates::LOADED ) m_xObj->changeState( embed::EmbedStates::RUNNING ); xSet = uno::Reference < beans::XPropertySet >( m_xObj->getComponent(), uno::UNO_QUERY ); ::rtl::OUString aStr; uno::Any aAny = xSet->getPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AppletCode") ) ); if ( aAny >>= aStr ) SetClass( aStr ); aAny = xSet->getPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AppletCodeBase") ) ); if ( aAny >>= aStr ) SetClassLocation( aStr ); uno::Sequence< beans::PropertyValue > aCommands; aAny = xSet->getPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AppletCommands") ) ); if ( aAny >>= aCommands ) { SvCommandList aList; aList.FillFromSequence( aCommands ); SetAppletOptions( aList.GetCommands() ); } String aText( CUI_RES( STR_EDIT_APPLET ) ); SetText( aText ); bOK = sal_True; } catch ( uno::Exception& ) { OSL_FAIL( "No Applet!" ); } } else { DBG_ASSERT( m_xStorage.is(), "No storage!"); bOK = m_xStorage.is(); } if ( bOK && ( nRet = Dialog::Execute() ) == RET_OK ) { if ( !m_xObj.is() ) { ::rtl::OUString aName; SvGlobalName aClassId( SO3_APPLET_CLASSID ); m_xObj = aCnt.CreateEmbeddedObject( aClassId.GetByteSequence(), aName ); if ( m_xObj->getCurrentState() == embed::EmbedStates::LOADED ) m_xObj->changeState( embed::EmbedStates::RUNNING ); xSet = uno::Reference < beans::XPropertySet >( m_xObj->getComponent(), uno::UNO_QUERY ); } if ( m_xObj.is() ) { try { sal_Bool bIPActive = m_xObj->getCurrentState() == embed::EmbedStates::INPLACE_ACTIVE; if ( bIPActive ) m_xObj->changeState( embed::EmbedStates::RUNNING ); String aClassLocation = GetClassLocation(); // Hack, aFileName wird auch fuer Class benutzt m_aClass = GetClass(); xSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AppletCode") ), makeAny( ::rtl::OUString( m_aClass ) ) ); ::rtl::OUString tmp = aClassLocation; ::osl::File::getFileURLFromSystemPath(tmp, tmp); aClassLocation = tmp; xSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AppletCodeBase") ), makeAny( tmp ) ); m_aCommands = GetAppletOptions(); uno::Sequence< beans::PropertyValue > aCommandSequence; Plugin_ImplFillCommandSequence( m_aCommands, aCommandSequence ); xSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AppletCommands") ), makeAny( aCommandSequence ) ); if ( bIPActive ) m_xObj->changeState( embed::EmbedStates::INPLACE_ACTIVE ); } catch ( uno::Exception& ) { OSL_FAIL( "No Applet!" ); } } } return nRet; } SfxInsertFloatingFrameDialog::SfxInsertFloatingFrameDialog( Window *pParent, const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >& xStorage ) : InsertObjectDialog_Impl( pParent, CUI_RES( MD_INSERT_OBJECT_IFRAME ), xStorage ) , aFTName ( this, CUI_RES( FT_FRAMENAME ) ) , aEDName ( this, CUI_RES( ED_FRAMENAME ) ) , aFTURL ( this, CUI_RES( FT_URL ) ) , aEDURL ( this, CUI_RES( ED_URL ) ) , aBTOpen ( this, CUI_RES(BT_FILEOPEN ) ) , aFLScrolling ( this, CUI_RES( GB_SCROLLING ) ) , aRBScrollingOn ( this, CUI_RES( RB_SCROLLINGON ) ) , aRBScrollingOff ( this, CUI_RES( RB_SCROLLINGOFF ) ) , aRBScrollingAuto ( this, CUI_RES( RB_SCROLLINGAUTO ) ) , aFLSepLeft( this, CUI_RES( FL_SEP_LEFT ) ) , aFLFrameBorder( this, CUI_RES( GB_BORDER ) ) , aRBFrameBorderOn ( this, CUI_RES( RB_FRMBORDER_ON ) ) , aRBFrameBorderOff ( this, CUI_RES( RB_FRMBORDER_OFF ) ) , aFLSepRight( this, CUI_RES( FL_SEP_RIGHT ) ) , aFLMargin( this, CUI_RES( GB_MARGIN ) ) , aFTMarginWidth ( this, CUI_RES( FT_MARGINWIDTH ) ) , aNMMarginWidth ( this, CUI_RES( NM_MARGINWIDTH ) ) , aCBMarginWidthDefault( this, CUI_RES( CB_MARGINHEIGHTDEFAULT ) ) , aFTMarginHeight ( this, CUI_RES( FT_MARGINHEIGHT ) ) , aNMMarginHeight ( this, CUI_RES( NM_MARGINHEIGHT ) ) , aCBMarginHeightDefault( this, CUI_RES( CB_MARGINHEIGHTDEFAULT ) ) , aOKButton1( this, CUI_RES( 1 ) ) , aCancelButton1( this, CUI_RES( 1 ) ) , aHelpButton1( this, CUI_RES( 1 ) ) { FreeResource(); aFLSepLeft.SetStyle(aFLSepLeft.GetStyle()|WB_VERT); aFLSepRight.SetStyle(aFLSepRight.GetStyle()|WB_VERT); Link aLink( STATIC_LINK( this, SfxInsertFloatingFrameDialog, CheckHdl ) ); aCBMarginWidthDefault.SetClickHdl( aLink ); aCBMarginHeightDefault.SetClickHdl( aLink ); aCBMarginWidthDefault.Check(); aCBMarginHeightDefault.Check(); aRBScrollingAuto.Check(); aRBFrameBorderOn.Check(); aBTOpen.SetClickHdl( STATIC_LINK( this, SfxInsertFloatingFrameDialog, OpenHdl ) ); } SfxInsertFloatingFrameDialog::SfxInsertFloatingFrameDialog( Window *pParent, const uno::Reference < embed::XEmbeddedObject >& xObj ) : InsertObjectDialog_Impl( pParent, CUI_RES( MD_INSERT_OBJECT_IFRAME ), uno::Reference < embed::XStorage >() ) , aFTName ( this, CUI_RES( FT_FRAMENAME ) ) , aEDName ( this, CUI_RES( ED_FRAMENAME ) ) , aFTURL ( this, CUI_RES( FT_URL ) ) , aEDURL ( this, CUI_RES( ED_URL ) ) , aBTOpen ( this, CUI_RES(BT_FILEOPEN ) ) , aFLScrolling ( this, CUI_RES( GB_SCROLLING ) ) , aRBScrollingOn ( this, CUI_RES( RB_SCROLLINGON ) ) , aRBScrollingOff ( this, CUI_RES( RB_SCROLLINGOFF ) ) , aRBScrollingAuto ( this, CUI_RES( RB_SCROLLINGAUTO ) ) , aFLSepLeft( this, CUI_RES( FL_SEP_LEFT ) ) , aFLFrameBorder( this, CUI_RES( GB_BORDER ) ) , aRBFrameBorderOn ( this, CUI_RES( RB_FRMBORDER_ON ) ) , aRBFrameBorderOff ( this, CUI_RES( RB_FRMBORDER_OFF ) ) , aFLSepRight( this, CUI_RES( FL_SEP_RIGHT ) ) , aFLMargin( this, CUI_RES( GB_MARGIN ) ) , aFTMarginWidth ( this, CUI_RES( FT_MARGINWIDTH ) ) , aNMMarginWidth ( this, CUI_RES( NM_MARGINWIDTH ) ) , aCBMarginWidthDefault( this, CUI_RES( CB_MARGINHEIGHTDEFAULT ) ) , aFTMarginHeight ( this, CUI_RES( FT_MARGINHEIGHT ) ) , aNMMarginHeight ( this, CUI_RES( NM_MARGINHEIGHT ) ) , aCBMarginHeightDefault( this, CUI_RES( CB_MARGINHEIGHTDEFAULT ) ) , aOKButton1( this, CUI_RES( 1 ) ) , aCancelButton1( this, CUI_RES( 1 ) ) , aHelpButton1( this, CUI_RES( 1 ) ) { FreeResource(); m_xObj = xObj; aFLSepLeft.SetStyle(aFLSepLeft.GetStyle()|WB_VERT); aFLSepRight.SetStyle(aFLSepRight.GetStyle()|WB_VERT); Link aLink( STATIC_LINK( this, SfxInsertFloatingFrameDialog, CheckHdl ) ); aCBMarginWidthDefault.SetClickHdl( aLink ); aCBMarginHeightDefault.SetClickHdl( aLink ); aCBMarginWidthDefault.Check(); aCBMarginHeightDefault.Check(); aRBScrollingAuto.Check(); aRBFrameBorderOn.Check(); aBTOpen.SetClickHdl( STATIC_LINK( this, SfxInsertFloatingFrameDialog, OpenHdl ) ); } short SfxInsertFloatingFrameDialog::Execute() { short nRet = RET_OK; sal_Bool bOK = sal_False; uno::Reference < beans::XPropertySet > xSet; if ( m_xObj.is() ) { try { if ( m_xObj->getCurrentState() == embed::EmbedStates::LOADED ) m_xObj->changeState( embed::EmbedStates::RUNNING ); xSet = uno::Reference < beans::XPropertySet >( m_xObj->getComponent(), uno::UNO_QUERY ); ::rtl::OUString aStr; uno::Any aAny = xSet->getPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FrameURL") ) ); if ( aAny >>= aStr ) aEDURL.SetText( aStr ); aAny = xSet->getPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FrameName") ) ); if ( aAny >>= aStr ) aEDName.SetText( aStr ); sal_Int32 nSize = SIZE_NOT_SET; aAny = xSet->getPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FrameMarginWidth") ) ); aAny >>= nSize; if ( nSize == SIZE_NOT_SET ) { aCBMarginWidthDefault.Check( sal_True ); aNMMarginWidth.SetText( String::CreateFromInt32( DEFAULT_MARGIN_WIDTH ) ); aFTMarginWidth.Enable( sal_False ); aNMMarginWidth.Enable( sal_False ); } else aNMMarginWidth.SetText( String::CreateFromInt32( nSize ) ); aAny = xSet->getPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FrameMarginHeight") ) ); aAny >>= nSize; if ( nSize == SIZE_NOT_SET ) { aCBMarginHeightDefault.Check( sal_True ); aNMMarginHeight.SetText( String::CreateFromInt32( DEFAULT_MARGIN_HEIGHT ) ); aFTMarginHeight.Enable( sal_False ); aNMMarginHeight.Enable( sal_False ); } else aNMMarginHeight.SetText( String::CreateFromInt32( nSize ) ); sal_Bool bScrollOn = sal_False; sal_Bool bScrollOff = sal_False; sal_Bool bScrollAuto = sal_False; sal_Bool bSet = sal_False; aAny = xSet->getPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FrameIsAutoScroll") ) ); aAny >>= bSet; if ( !bSet ) { aAny = xSet->getPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FrameIsScrollingMode") ) ); aAny >>= bSet; bScrollOn = bSet; bScrollOff = !bSet; } else bScrollAuto = sal_True; aRBScrollingOn.Check( bScrollOn ); aRBScrollingOff.Check( bScrollOff ); aRBScrollingAuto.Check( bScrollAuto ); bSet = sal_False; aAny = xSet->getPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FrameIsAutoBorder") ) ); aAny >>= bSet; if ( !bSet ) { aAny = xSet->getPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FrameIsBorder") ) ); aAny >>= bSet; aRBFrameBorderOn.Check( bSet ); aRBFrameBorderOff.Check( !bSet ); } SetUpdateMode( sal_True ); bOK = sal_True; } catch ( uno::Exception& ) { OSL_FAIL( "No IFrame!" ); } } else { DBG_ASSERT( m_xStorage.is(), "No storage!"); bOK = m_xStorage.is(); } if ( bOK && ( nRet = Dialog::Execute() ) == RET_OK ) { ::rtl::OUString aURL; if ( aEDURL.GetText().Len() ) { // URL can be a valid and absolute URL or a system file name INetURLObject aObj; aObj.SetSmartProtocol( INET_PROT_FILE ); if ( aObj.SetSmartURL( aEDURL.GetText() ) ) aURL = aObj.GetMainURL( INetURLObject::NO_DECODE ); } if ( !m_xObj.is() && aURL.getLength() ) { // create the object ::rtl::OUString aName; SvGlobalName aClassId( SO3_IFRAME_CLASSID ); m_xObj = aCnt.CreateEmbeddedObject( aClassId.GetByteSequence(), aName ); if ( m_xObj->getCurrentState() == embed::EmbedStates::LOADED ) m_xObj->changeState( embed::EmbedStates::RUNNING ); xSet = uno::Reference < beans::XPropertySet >( m_xObj->getComponent(), uno::UNO_QUERY ); } if ( m_xObj.is() ) { try { sal_Bool bIPActive = m_xObj->getCurrentState() == embed::EmbedStates::INPLACE_ACTIVE; if ( bIPActive ) m_xObj->changeState( embed::EmbedStates::RUNNING ); ::rtl::OUString aName = aEDName.GetText(); ScrollingMode eScroll = ScrollingNo; if ( aRBScrollingOn.IsChecked() ) eScroll = ScrollingYes; if ( aRBScrollingOff.IsChecked() ) eScroll = ScrollingNo; if ( aRBScrollingAuto.IsChecked() ) eScroll = ScrollingAuto; sal_Bool bHasBorder = aRBFrameBorderOn.IsChecked(); long lMarginWidth; if ( !aCBMarginWidthDefault.IsChecked() ) lMarginWidth = (long) aNMMarginWidth.GetText().ToInt32(); else lMarginWidth = SIZE_NOT_SET; long lMarginHeight; if ( !aCBMarginHeightDefault.IsChecked() ) lMarginHeight = (long) aNMMarginHeight.GetText().ToInt32(); else lMarginHeight = SIZE_NOT_SET; xSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FrameURL") ), makeAny( aURL ) ); xSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FrameName") ), makeAny( aName ) ); if ( eScroll == ScrollingAuto ) xSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FrameIsAutoScroll") ), makeAny( sal_True ) ); else xSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FrameIsScrollingMode") ), makeAny( (sal_Bool) ( eScroll == ScrollingYes) ) ); xSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FrameIsBorder") ), makeAny( bHasBorder ) ); xSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FrameMarginWidth") ), makeAny( sal_Int32( lMarginWidth ) ) ); xSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FrameMarginHeight") ), makeAny( sal_Int32( lMarginHeight ) ) ); if ( bIPActive ) m_xObj->changeState( embed::EmbedStates::INPLACE_ACTIVE ); } catch ( uno::Exception& ) { OSL_FAIL( "No IFrame!" ); } } } return nRet; } //------------------------------------------------------------------------------ IMPL_STATIC_LINK( SfxInsertFloatingFrameDialog, CheckHdl, CheckBox*, pCB ) { if ( pCB == &pThis->aCBMarginWidthDefault ) { if ( pCB->IsChecked() ) pThis->aNMMarginWidth.SetText( String::CreateFromInt32( DEFAULT_MARGIN_WIDTH ) ); pThis->aFTMarginWidth.Enable( !pCB->IsChecked() ); pThis->aNMMarginWidth.Enable( !pCB->IsChecked() ); } if ( pCB == &pThis->aCBMarginHeightDefault ) { if ( pCB->IsChecked() ) pThis->aNMMarginHeight.SetText( String::CreateFromInt32( DEFAULT_MARGIN_HEIGHT ) ); pThis->aFTMarginHeight.Enable( !pCB->IsChecked() ); pThis->aNMMarginHeight.Enable( !pCB->IsChecked() ); } return 0L; } //------------------------------------------------------------------------------ IMPL_STATIC_LINK( SfxInsertFloatingFrameDialog, OpenHdl, PushButton*, EMPTYARG ) { Window* pOldParent = Application::GetDefDialogParent(); Application::SetDefDialogParent( pThis ); // create the file dialog sfx2::FileDialogHelper aFileDlg( WB_OPEN | SFXWB_PASSWORD, String() ); // set the title aFileDlg.SetTitle( OUString( String( CUI_RES( MD_INSERT_OBJECT_IFRAME ) ) ) ); // show the dialog if ( aFileDlg.Execute() == ERRCODE_NONE ) pThis->aEDURL.SetText( INetURLObject( aFileDlg.GetPath() ).GetMainURL( INetURLObject::DECODE_WITH_CHARSET ) ); Application::SetDefDialogParent( pOldParent ); return 0L; } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */