summaryrefslogtreecommitdiff
path: root/cui/source/dialogs/plfilter.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'cui/source/dialogs/plfilter.cxx')
-rw-r--r--cui/source/dialogs/plfilter.cxx129
1 files changed, 129 insertions, 0 deletions
diff --git a/cui/source/dialogs/plfilter.cxx b/cui/source/dialogs/plfilter.cxx
new file mode 100644
index 000000000000..d09cc00d2a34
--- /dev/null
+++ b/cui/source/dialogs/plfilter.cxx
@@ -0,0 +1,129 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: plfilter.cxx,v $
+ * $Revision: 1.7 $
+ *
+ * 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
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_cui.hxx"
+
+#include <set>
+#include <map>
+#include <unotools/processfactory.hxx>
+
+#include <tools/debug.hxx>
+#include <vcl/stdtext.hxx>
+
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/plugin/PluginDescription.hpp>
+#include <com/sun/star/plugin/XPluginManager.hpp>
+
+using namespace std;
+using namespace com::sun::star::uno;
+using namespace com::sun::star::lang;
+using namespace com::sun::star::plugin;
+
+struct ltstr
+{
+ bool operator()( const String& s1, const String& s2 ) const
+ {
+ return ( s1.CompareTo( s2 ) == COMPARE_LESS );
+ }
+};
+
+typedef set< String, ltstr > StrSet;
+typedef map< String, StrSet, ltstr > FilterMap;
+
+
+//==================================================================================================
+void fillNetscapePluginFilters( Sequence< rtl::OUString >& rPluginNames, Sequence< rtl::OUString >& rPluginTypes )
+{
+ Reference< XMultiServiceFactory > xMan( ::utl::getProcessServiceFactory() );
+ Reference< XPluginManager > xPMgr( xMan->createInstance(
+ rtl::OUString::createFromAscii("com.sun.star.plugin.PluginManager") ), UNO_QUERY );
+
+ if ( xPMgr.is() )
+ {
+ FilterMap aMap;
+
+ // mimetypes zusammenfassen: eine description, mehrere extensions
+
+ Sequence<PluginDescription > aDescriptions( xPMgr->getPluginDescriptions() );
+ const PluginDescription * pDescriptions = aDescriptions.getConstArray();
+ for ( UINT32 nPos = aDescriptions.getLength(); nPos--; )
+ {
+ const PluginDescription & rDescr = pDescriptions[nPos];
+
+ StrSet& rTypes = aMap[ rDescr.Description ];
+ String aExtension( rDescr.Extension );
+
+ for ( USHORT nCnt = aExtension.GetTokenCount( ';' ); 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() )
+ {
+ aType += (*i);
+ ++i;
+ if ( i != rTypes.end() )
+ aType += ';';
+ }
+
+ if ( aType.Len() )
+ {
+ 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" ) ), TRUE );
+}
+