diff options
Diffstat (limited to 'cui/source/dialogs/plfilter.cxx')
-rw-r--r-- | cui/source/dialogs/plfilter.cxx | 100 |
1 files changed, 47 insertions, 53 deletions
diff --git a/cui/source/dialogs/plfilter.cxx b/cui/source/dialogs/plfilter.cxx index 678db753ad3b..ff6816026c4e 100644 --- a/cui/source/dialogs/plfilter.cxx +++ b/cui/source/dialogs/plfilter.cxx @@ -35,6 +35,7 @@ #include <com/sun/star/lang/XMultiServiceFactory.hpp> #include <com/sun/star/plugin/PluginDescription.hpp> +#include <com/sun/star/plugin/PluginManager.hpp> #include <com/sun/star/plugin/XPluginManager.hpp> using namespace std; @@ -57,69 +58,62 @@ typedef map< String, StrSet, ltstr > FilterMap; //================================================================================================== void fillNetscapePluginFilters( Sequence< rtl::OUString >& rPluginNames, Sequence< rtl::OUString >& rPluginTypes ) { - Reference< XMultiServiceFactory > xMan( ::comphelper::getProcessServiceFactory() ); - Reference< XPluginManager > xPMgr( xMan->createInstance( - rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.plugin.PluginManager") ) ), UNO_QUERY ); + Reference< XComponentContext > xContext = comphelper::getProcessComponentContext(); + Reference< XPluginManager > xPMgr( PluginManager::create(xContext) ); - if ( xPMgr.is() ) + FilterMap aMap; + + // sum up the mimetypes: one description, multiple extensions + + Sequence<PluginDescription > aDescriptions( xPMgr->getPluginDescriptions() ); + const PluginDescription * pDescriptions = aDescriptions.getConstArray(); + for ( sal_uInt32 nPos = aDescriptions.getLength(); nPos--; ) { - FilterMap aMap; + const PluginDescription & rDescr = pDescriptions[nPos]; - // sum up the mimetypes: one description, multiple extensions + StrSet& rTypes = aMap[ rDescr.Description ]; + String aExtension( rDescr.Extension ); - Sequence<PluginDescription > aDescriptions( xPMgr->getPluginDescriptions() ); - const PluginDescription * pDescriptions = aDescriptions.getConstArray(); - for ( sal_uInt32 nPos = aDescriptions.getLength(); nPos--; ) + for ( sal_uInt16 nCnt = comphelper::string::getTokenCount(aExtension, ';'); nCnt--; ) + { + // no default plugins anymore + String aExt( aExtension.GetToken( nCnt, ';' ) ); + if ( aExt.CompareToAscii( "*.*" ) != COMPARE_EQUAL ) + rTypes.insert( aExt ); + } + } + + rPluginNames = Sequence< rtl::OUString >( aMap.size() ); + rPluginTypes = Sequence< rtl::OUString >( aMap.size() ); + rtl::OUString* pPluginNames = rPluginNames.getArray(); + rtl::OUString* pPluginTypes = rPluginTypes.getArray(); + int nIndex = 0; + for ( FilterMap::iterator iPos = aMap.begin(); iPos != aMap.end(); ++iPos ) + { + String aText( (*iPos).first ); + String aType; + StrSet& rTypes = (*iPos).second; + StrSet::iterator i = rTypes.begin(); + while ( i != rTypes.end() ) { - const PluginDescription & rDescr = pDescriptions[nPos]; - - StrSet& rTypes = aMap[ rDescr.Description ]; - String aExtension( rDescr.Extension ); - - for ( sal_uInt16 nCnt = comphelper::string::getTokenCount(aExtension, ';'); nCnt--; ) - { - // no default plugins anymore - String aExt( aExtension.GetToken( nCnt, ';' ) ); - if ( aExt.CompareToAscii( "*.*" ) != COMPARE_EQUAL ) - rTypes.insert( aExt ); - } + aType += (*i); + ++i; + if ( i != rTypes.end() ) + aType += ';'; } - rPluginNames = Sequence< rtl::OUString >( aMap.size() ); - rPluginTypes = Sequence< rtl::OUString >( aMap.size() ); - rtl::OUString* pPluginNames = rPluginNames.getArray(); - rtl::OUString* pPluginTypes = rPluginTypes.getArray(); - int nIndex = 0; - for ( FilterMap::iterator iPos = aMap.begin(); iPos != aMap.end(); ++iPos ) + if ( aType.Len() ) { - String aText( (*iPos).first ); - String aType; - StrSet& rTypes = (*iPos).second; - StrSet::iterator i = rTypes.begin(); - while ( i != rTypes.end() ) - { - aType += (*i); - ++i; - if ( i != rTypes.end() ) - aType += ';'; - } - - if ( aType.Len() ) - { - aText += String::CreateFromAscii( " (" ); - aText += aType; - aText += ')'; - pPluginNames[nIndex] = aText; - pPluginTypes[nIndex] = aType; - nIndex++; - } + aText += String::CreateFromAscii( " (" ); + aText += aType; + aText += ')'; + pPluginNames[nIndex] = aText; + pPluginTypes[nIndex] = aType; + nIndex++; } - rPluginNames.realloc( nIndex ); - rPluginTypes.realloc( nIndex ); } - else - ShowServiceNotAvailableError( NULL, - String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "com.sun.star.plugin.PluginManager" ) ), sal_True ); + rPluginNames.realloc( nIndex ); + rPluginTypes.realloc( nIndex ); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |