summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sd/source/core/TransitionPreset.cxx140
1 files changed, 103 insertions, 37 deletions
diff --git a/sd/source/core/TransitionPreset.cxx b/sd/source/core/TransitionPreset.cxx
index eae37b0cc0fd..cef484599c9c 100644
--- a/sd/source/core/TransitionPreset.cxx
+++ b/sd/source/core/TransitionPreset.cxx
@@ -4,9 +4,9 @@
*
* $RCSfile: TransitionPreset.cxx,v $
*
- * $Revision: 1.5 $
+ * $Revision: 1.6 $
*
- * last change: $Author: vg $ $Date: 2006-11-23 12:12:54 $
+ * last change: $Author: vg $ $Date: 2008-01-29 08:34:01 $
*
* The Contents of this file are made available subject to
* the terms of GNU Lesser General Public License Version 2.1.
@@ -45,9 +45,18 @@
#ifndef _COM_SUN_STAR_CONTAINER_XENUMERATIONACCESS_HPP_
#include <com/sun/star/container/XEnumerationAccess.hpp>
#endif
+#ifndef _COM_SUN_STAR_CONTAINER_XNAMEACCESS_HPP_
+#include <com/sun/star/container/XNameAccess.hpp>
+#endif
#ifndef _COM_SUN_STAR_BEANS_NAMEDVALUE_HPP_
#include <com/sun/star/beans/NamedValue.hpp>
#endif
+#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_
+#include <com/sun/star/beans/XPropertySet.hpp>
+#endif
+#ifndef _COM_SUN_STAR_UTIL_XMACROEXPANDER_HPP_
+#include <com/sun/star/util/XMacroExpander.hpp>
+#endif
#ifndef _COM_SUN_STAR_ANIMATIONS_ANIMATIONNODETYPE_HPP_
#include <com/sun/star/animations/AnimationNodeType.hpp>
#endif
@@ -79,6 +88,7 @@
#include <tools/stream.hxx>
#endif
+#include <rtl/uri.hxx>
#include <tools/debug.hxx>
#ifndef _SD_CUSTOMANIMATIONPRESET_HXX
@@ -92,7 +102,6 @@
#include <algorithm>
#include "sdpage.hxx"
-#include <hash_map>
using namespace ::vos;
using namespace ::com::sun::star;
@@ -112,7 +121,6 @@ using ::com::sun::star::beans::NamedValue;
namespace sd {
-typedef std::hash_map<rtl::OUString, rtl::OUString, comphelper::UStringHash, comphelper::UStringEqual> UStringMap;
extern Reference< XAnimationNode > implImportEffects( const Reference< XMultiServiceFactory >& xConfigProvider, const OUString& rPath );
extern void implImportLabels( const Reference< XMultiServiceFactory >& xConfigProvider, const OUString& rNodePath, UStringMap& rStringMap );
@@ -142,34 +150,19 @@ TransitionPreset::TransitionPreset( const ::com::sun::star::uno::Reference< ::co
mnFadeColor = xTransition->getFadeColor();
}
-bool TransitionPreset::importTransitionPresetList( TransitionPresetList& rList )
+bool TransitionPreset::importTransitionsFile( TransitionPresetList& rList,
+ Reference< XMultiServiceFactory >& xServiceFactory,
+ UStringMap& rTransitionNameMape,
+ String aURL )
{
- try
- {
- // Get service factory
- Reference< XMultiServiceFactory > xServiceFactory( comphelper::getProcessServiceFactory() );
- DBG_ASSERT( xServiceFactory.is(), "sd::CustomAnimationPresets::import(), got no service manager" );
- if( !xServiceFactory.is() )
- return false;
+ // import transition presets
+ Reference< XAnimationNode > xAnimationNode;
- // import ui strings
- Reference< XMultiServiceFactory > xConfigProvider(
- xServiceFactory->createInstance(
- OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationProvider" ))),
- UNO_QUERY_THROW );
-
- UStringMap aTransitionNameMape;
- const OUString aTransitionPath( RTL_CONSTASCII_USTRINGPARAM( "/org.openoffice.Office.UI.Effects/UserInterface/Transitions" ) );
- implImportLabels( xConfigProvider, aTransitionPath, aTransitionNameMape );
-
- // import transition presets
- INetURLObject aURL( SvtPathOptions().GetConfigPath() );
- aURL.Append( String( RTL_CONSTASCII_USTRINGPARAM("soffice.cfg") ) );
- aURL.Append( String( RTL_CONSTASCII_USTRINGPARAM("simpress" ) ) );
- aURL.Append( String( RTL_CONSTASCII_USTRINGPARAM("transitions.xml" ) ) );
-
- Reference< XEnumerationAccess > xEnumerationAccess( implImportEffects( xServiceFactory, aURL.GetMainURL( INetURLObject::NO_DECODE ) ), UNO_QUERY_THROW );
+ try {
+ xAnimationNode = implImportEffects( xServiceFactory, aURL );
+ Reference< XEnumerationAccess > xEnumerationAccess( xAnimationNode, UNO_QUERY_THROW );
Reference< XEnumeration > xEnumeration( xEnumerationAccess->createEnumeration(), UNO_QUERY_THROW );
+
while( xEnumeration->hasMoreElements() )
{
Reference< XAnimationNode > xChildNode( xEnumeration->nextElement(), UNO_QUERY_THROW );
@@ -182,22 +175,96 @@ bool TransitionPreset::importTransitionPresetList( TransitionPresetList& rList )
OUString aPresetId( pPreset->getPresetId() );
if( aPresetId.getLength() )
{
- UStringMap::const_iterator aIter( aTransitionNameMape.find( aPresetId ) );
- if( aIter != aTransitionNameMape.end() )
+ UStringMap::const_iterator aIter( rTransitionNameMape.find( aPresetId ) );
+ if( aIter != rTransitionNameMape.end() )
pPreset->maUIName = (*aIter).second;
- // add it
+ // add it
rList.push_back( pPreset );
}
}
else
+ {
+ DBG_ERROR( "sd::TransitionPreset::importTransitionPresetList(), missformed xml configuration file, giving up!" );
+ break;
+ }
+ }
+ } catch( Exception& ) {
+ return false;
+ }
+
+ return true;
+}
+
+#define EXPAND_PROTOCOL "vnd.sun.star.expand:"
+
+bool TransitionPreset::importTransitionPresetList( TransitionPresetList& rList )
+{
+ bool bRet = false;
+
+ try
+ {
+ // Get service factory
+ Reference< XMultiServiceFactory > xServiceFactory( comphelper::getProcessServiceFactory() );
+ DBG_ASSERT( xServiceFactory.is(), "sd::CustomAnimationPresets::import(), got no service manager" );
+ if( !xServiceFactory.is() )
+ return false;
+
+ uno::Reference< beans::XPropertySet > xProps( xServiceFactory, UNO_QUERY );
+ uno::Reference< uno::XComponentContext > xContext;
+ xProps->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ))) >>= xContext;
+
+ uno::Reference< util::XMacroExpander > xMacroExpander;
+ if( xContext.is() )
+ xMacroExpander.set( xContext->getValueByName(
+ rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "/singletons/com.sun.star.util.theMacroExpander"))),
+ UNO_QUERY );
+
+ // import ui strings
+ Reference< XMultiServiceFactory > xConfigProvider(
+ xServiceFactory->createInstance(
+ OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationProvider" ))),
+ UNO_QUERY_THROW );
+
+ UStringMap aTransitionNameMape;
+ const OUString aTransitionPath( RTL_CONSTASCII_USTRINGPARAM( "/org.openoffice.Office.UI.Effects/UserInterface/Transitions" ) );
+ implImportLabels( xConfigProvider, aTransitionPath, aTransitionNameMape );
+
+ // read path to transition effects files from config
+ Any propValue = uno::makeAny(
+ beans::PropertyValue(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("nodepath")), -1,
+ uno::makeAny( OUString( RTL_CONSTASCII_USTRINGPARAM("/org.openoffice.Office.Impress/Misc"))),
+ beans::PropertyState_DIRECT_VALUE ) );
+
+ Reference<container::XNameAccess> xNameAccess(
+ xConfigProvider->createInstanceWithArguments(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.ConfigurationAccess")),
+ Sequence<Any>( &propValue, 1 ) ), UNO_QUERY_THROW );
+ uno::Sequence< rtl::OUString > aFiles;
+ xNameAccess->getByName(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("TransitionFiles"))) >>= aFiles;
+
+ for( sal_Int32 i=0; i<aFiles.getLength(); ++i )
+ {
+ rtl::OUString aURL = aFiles[i];
+ if( aURL.compareToAscii( RTL_CONSTASCII_STRINGPARAM( EXPAND_PROTOCOL )) == 0 )
{
- DBG_ERROR( "sd::TransitionPreset::importTransitionPresetList(), missformed xml configuration file, giving up!" );
- break;
+ // cut protocol
+ rtl::OUString aMacro( aURL.copy( sizeof ( EXPAND_PROTOCOL ) -1 ) );
+ // decode uric class chars
+ aMacro = rtl::Uri::decode( aMacro, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8 );
+ // expand macro string
+ aURL = xMacroExpander->expandMacros( aMacro );
}
+
+ bRet |= importTransitionsFile( rList,
+ xServiceFactory,
+ aTransitionNameMape,
+ aURL );
}
- return true;
+ return bRet;
}
catch( Exception& e )
{
@@ -205,7 +272,7 @@ bool TransitionPreset::importTransitionPresetList( TransitionPresetList& rList )
DBG_ERROR( "sd::TransitionPreset::importResources(), Exception cought!" );
}
- return false;
+ return bRet;
}
TransitionPresetList* TransitionPreset::mpTransitionPresetList = 0;
@@ -237,4 +304,3 @@ void TransitionPreset::apply( SdPage* pSlide ) const
}
}
-