diff options
author | Noel Power <noel.power@novell.com> | 2010-11-02 16:22:07 +0000 |
---|---|---|
committer | Noel Power <noel.power@novell.com> | 2010-11-02 19:52:04 +0000 |
commit | c2e08dbfff7aca6af33a1ac32be15c97c648a73e (patch) | |
tree | bb0497cd2150806759e95f1861e742729a150828 /basic | |
parent | 20710c28abe5b2908ca444f4b14865f82d975248 (diff) |
initial import of latest cws container_controls
Diffstat (limited to 'basic')
-rw-r--r-- | basic/source/classes/sbxmod.cxx | 11 | ||||
-rw-r--r-- | basic/source/inc/namecont.hxx | 3 | ||||
-rw-r--r-- | basic/source/uno/dlgcont.cxx | 80 | ||||
-rw-r--r-- | basic/source/uno/namecont.cxx | 26 |
4 files changed, 111 insertions, 9 deletions
diff --git a/basic/source/classes/sbxmod.cxx b/basic/source/classes/sbxmod.cxx index 52bdddfef5..6adcf00b90 100644 --- a/basic/source/classes/sbxmod.cxx +++ b/basic/source/classes/sbxmod.cxx @@ -2505,8 +2505,15 @@ void SbUserFormModule::InitObject() aArgs[ 0 ] <<= m_xModel; rtl::OUString sDialogUrl( RTL_CONSTASCII_USTRINGPARAM("vnd.sun.star.script:" ) ); rtl::OUString sProjectName( RTL_CONSTASCII_USTRINGPARAM("Standard") ); - if ( this->GetParent()->GetName().Len() ) - sProjectName = this->GetParent()->GetName(); + + try + { + Reference< beans::XPropertySet > xProps( m_xModel, UNO_QUERY_THROW ); + uno::Reference< script::vba::XVBACompatibility > xVBAMode( xProps->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("BasicLibraries") ) ), uno::UNO_QUERY_THROW ); + sProjectName = xVBAMode->getProjectName(); + } + catch( Exception& /*e*/) {} + sDialogUrl = sDialogUrl.concat( sProjectName ).concat( rtl::OUString( '.') ).concat( GetName() ).concat( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("?location=document") ) ); uno::Reference< awt::XDialogProvider > xProvider( xFactory->createInstanceWithArguments( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.DialogProvider")), aArgs ), uno::UNO_QUERY_THROW ); diff --git a/basic/source/inc/namecont.hxx b/basic/source/inc/namecont.hxx index d86ca14a93..14ac05eba4 100644 --- a/basic/source/inc/namecont.hxx +++ b/basic/source/inc/namecont.hxx @@ -225,6 +225,7 @@ class SfxLibraryContainer :public LibraryContainerHelper ,public ::utl::OEventListenerAdapter { sal_Bool mbVBACompat; + rtl::OUString msProjectName; protected: ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > mxMSF; ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XSimpleFileAccess > mxSFI; @@ -514,6 +515,8 @@ public: // Methods XVBACompatibility virtual ::sal_Bool SAL_CALL getVBACompatibilityMode() throw (::com::sun::star::uno::RuntimeException); virtual void SAL_CALL setVBACompatibilityMode( ::sal_Bool _vbacompatmodeon ) throw (::com::sun::star::uno::RuntimeException); + virtual ::rtl::OUString SAL_CALL getProjectName() throw (::com::sun::star::uno::RuntimeException) { return msProjectName; } + virtual void SAL_CALL setProjectName( const ::rtl::OUString& _projectname ) throw (::com::sun::star::uno::RuntimeException); }; class LibraryContainerMethodGuard diff --git a/basic/source/uno/dlgcont.cxx b/basic/source/uno/dlgcont.cxx index b4172dd2df..105f1803ab 100644 --- a/basic/source/uno/dlgcont.cxx +++ b/basic/source/uno/dlgcont.cxx @@ -41,6 +41,7 @@ #include <com/sun/star/xml/sax/XExtendedDocumentHandler.hpp> #include "com/sun/star/resource/XStringResourceWithStorage.hpp" #include "com/sun/star/resource/XStringResourceWithLocation.hpp" +#include "com/sun/star/document/XGraphicObjectResolver.hpp" #include "dlgcont.hxx" #include "sbmodule.hxx" #include <comphelper/processfactory.hxx> @@ -74,6 +75,8 @@ using namespace osl; using com::sun::star::uno::Reference; +#define GRAPHOBJ_URLPREFIX "vnd.sun.star.GraphicObject:" + //============================================================================ // Implementation class SfxDialogLibraryContainer @@ -225,6 +228,35 @@ void SAL_CALL SfxDialogLibraryContainer::writeLibraryElement xInput->closeInput(); } +void lcl_deepInspectForEmbeddedImages( const Reference< XInterface >& xIf, std::vector< rtl::OUString >& rvEmbedImgUrls ) +{ + static rtl::OUString sImageURL= OUString(RTL_CONSTASCII_USTRINGPARAM( "ImageURL" ) ); + Reference< beans::XPropertySet > xProps( xIf, UNO_QUERY ); + if ( xProps.is() ) + { + + if ( xProps->getPropertySetInfo()->hasPropertyByName( sImageURL ) ) + { + rtl::OUString sURL; + xProps->getPropertyValue( sImageURL ) >>= sURL; + if ( sURL.getLength() && sURL.compareToAscii( GRAPHOBJ_URLPREFIX, RTL_CONSTASCII_LENGTH( GRAPHOBJ_URLPREFIX ) ) == 0 ) + rvEmbedImgUrls.push_back( sURL ); + } + } + Reference< XNameContainer > xContainer( xIf, UNO_QUERY ); + if ( xContainer.is() ) + { + Sequence< rtl::OUString > sNames = xContainer->getElementNames(); + sal_Int32 nContainees = sNames.getLength(); + for ( sal_Int32 index = 0; index < nContainees; ++index ) + { + Reference< XInterface > xCtrl; + xContainer->getByName( sNames[ index ] ) >>= xCtrl; + lcl_deepInspectForEmbeddedImages( xCtrl, rvEmbedImgUrls ); + } + } +} + void SfxDialogLibraryContainer::storeLibrariesToStorage( const uno::Reference< embed::XStorage >& xStorage ) throw ( RuntimeException ) { LibraryContainerMethodGuard aGuard( *this ); @@ -253,6 +285,54 @@ void SfxDialogLibraryContainer::storeLibrariesToStorage( const uno::Reference< e SfxLibraryContainer::storeLibrariesToStorage( xStorage ); + // we need to export out any embedded image object(s) + // associated with any Dialogs. First, we need to actually gather any such urls + // for each dialog in this container + Sequence< OUString > sLibraries = getElementNames(); + for ( sal_Int32 i=0; i < sLibraries.getLength(); ++i ) + { + // libraries will already be loaded from above + Reference< XNameContainer > xLib; + getByName( sLibraries[ i ] ) >>= xLib; + if ( xLib.is() ) + { + Sequence< OUString > sDialogs = xLib->getElementNames(); + sal_Int32 nDialogs( sDialogs.getLength() ); + for ( sal_Int32 j=0; j < nDialogs; ++j ) + { + // Each Dialog has an associated xISP + Reference< io::XInputStreamProvider > xISP; + xLib->getByName( sDialogs[ j ] ) >>= xISP; + if ( xISP.is() ) + { + Reference< io::XInputStream > xInput( xISP->createInputStream() ); + Reference< XNameContainer > xDialogModel( mxMSF->createInstance + ( OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlDialogModel" ) ) ), UNO_QUERY ); + Reference< XComponentContext > xContext; + Reference< beans::XPropertySet > xProps( mxMSF, UNO_QUERY ); + OSL_ASSERT( xProps.is() ); + OSL_VERIFY( xProps->getPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("DefaultContext")) ) >>= xContext ); + ::xmlscript::importDialogModel( xInput, xDialogModel, xContext, mxOwnerDocument ); + std::vector< rtl::OUString > vEmbeddedImageURLs; + lcl_deepInspectForEmbeddedImages( Reference< XInterface >( xDialogModel, UNO_QUERY ), vEmbeddedImageURLs ); + if ( vEmbeddedImageURLs.size() ) + { + // Export the images to the storage + Sequence< Any > aArgs( 1 ); + aArgs[ 0 ] <<= xStorage; + Reference< document::XGraphicObjectResolver > xGraphicResolver( mxMSF->createInstanceWithArguments( OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.Svx.GraphicExportHelper" ) ), aArgs ), UNO_QUERY ); + std::vector< rtl::OUString >::iterator it = vEmbeddedImageURLs.begin(); + std::vector< rtl::OUString >::iterator it_end = vEmbeddedImageURLs.end(); + if ( xGraphicResolver.is() ) + { + for ( sal_Int32 count = 0; it != it_end; ++it, ++count ) + xGraphicResolver->resolveGraphicObjectURL( *it ); + } + } + } + } + } + } mbOasis2OOoFormat = sal_False; } diff --git a/basic/source/uno/namecont.cxx b/basic/source/uno/namecont.cxx index 9efa92eec6..0feee80ff6 100644 --- a/basic/source/uno/namecont.cxx +++ b/basic/source/uno/namecont.cxx @@ -2,7 +2,7 @@ /************************************************************************* * * 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 @@ -323,7 +323,7 @@ DBG_NAME( SfxLibraryContainer ) // Ctor SfxLibraryContainer::SfxLibraryContainer( void ) : LibraryContainerHelper( maMutex ) - , mbVBACompat( sal_False ) + , mbVBACompat( sal_False ) , maModifiable( *this, maMutex ) , maNameContainer( getCppuType( (Reference< XNameAccess >*) NULL ) ) , mbOldInfoFormat( sal_False ) @@ -2381,7 +2381,7 @@ void SAL_CALL SfxLibraryContainer::loadLibrary( const OUString& Name ) } Reference< XNameContainer > xLib( pImplLib ); - Any aAny = importLibraryElement( xLib, aElementName, + Any aAny = importLibraryElement( xLib, aElementName, aFile, xInStream ); if( pImplLib->hasByName( aElementName ) ) { @@ -2799,7 +2799,7 @@ OUString SAL_CALL SfxLibraryContainer::getOriginalLibraryLinkURL( const OUString OUString aRetStr = pImplLib->maOrignialStorageURL; return aRetStr; } - + // XVBACompatibility ::sal_Bool SAL_CALL SfxLibraryContainer::getVBACompatibilityMode() throw (RuntimeException) @@ -2824,6 +2824,18 @@ void SAL_CALL SfxLibraryContainer::setVBACompatibilityMode( ::sal_Bool _vbacompa mbVBACompat = _vbacompatmodeon; } +void SAL_CALL SfxLibraryContainer::setProjectName( const ::rtl::OUString& _projectname ) throw (RuntimeException) +{ + msProjectName = _projectname; + BasicManager* pBasMgr = getBasicManager(); + // Temporary HACK + // Some parts of the VBA handling ( e.g. in core basic ) + // code expect the name of the VBA project to be set as the name of + // the basic manager. Provide fail back here. + if( pBasMgr ) + pBasMgr->SetName( msProjectName ); +} + // Methods XServiceInfo ::sal_Bool SAL_CALL SfxLibraryContainer::supportsService( const ::rtl::OUString& _rServiceName ) throw (RuntimeException) @@ -3168,7 +3180,7 @@ rtl::OUString ScriptExtensionIterator::nextBasicOrDialogLibrary( bool& rbPureDia } case BUNDLED_EXTENSIONS: { - Reference< deployment::XPackage > xScriptPackage = + Reference< deployment::XPackage > xScriptPackage = implGetNextBundledScriptPackage( rbPureDialogLib ); if( !xScriptPackage.is() ) break; @@ -3401,7 +3413,7 @@ Reference< deployment::XPackage > ScriptExtensionIterator::implGetNextSharedScri try { Reference< XExtensionManager > xSharedManager = - ExtensionManager::get( m_xContext ); + ExtensionManager::get( m_xContext ); m_aSharedPackagesSeq = xSharedManager->getDeployedExtensions (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("shared")), Reference< task::XAbortChannel >(), Reference< ucb::XCommandEnvironment >() ); @@ -3454,7 +3466,7 @@ Reference< deployment::XPackage > ScriptExtensionIterator::implGetNextBundledScr try { Reference< XExtensionManager > xManager = - ExtensionManager::get( m_xContext ); + ExtensionManager::get( m_xContext ); m_aBundledPackagesSeq = xManager->getDeployedExtensions (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("bundled")), Reference< task::XAbortChannel >(), Reference< ucb::XCommandEnvironment >() ); |