xref: /AOO41X/main/cui/source/dialogs/plfilter.cxx (revision 2ee96f1cdb99d49425d866b1ec4c5567f37285e6)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_cui.hxx"
26 
27 #include <set>
28 #include <map>
29 #include <unotools/processfactory.hxx>
30 
31 #include <tools/debug.hxx>
32 #include <vcl/stdtext.hxx>
33 
34 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
35 #include <com/sun/star/plugin/PluginDescription.hpp>
36 #include <com/sun/star/plugin/XPluginManager.hpp>
37 
38 using namespace std;
39 using namespace com::sun::star::uno;
40 using namespace com::sun::star::lang;
41 using namespace com::sun::star::plugin;
42 
43 struct ltstr
44 {
operator ()ltstr45     bool operator()( const String& s1, const String& s2 ) const
46     {
47         return ( s1.CompareTo( s2 ) == COMPARE_LESS );
48     }
49 };
50 
51 typedef set< String, ltstr > StrSet;
52 typedef map< String, StrSet, ltstr > FilterMap;
53 
54 
55 //==================================================================================================
fillNetscapePluginFilters(Sequence<rtl::OUString> & rPluginNames,Sequence<rtl::OUString> & rPluginTypes)56 void fillNetscapePluginFilters( Sequence< rtl::OUString >& rPluginNames, Sequence< rtl::OUString >& rPluginTypes )
57 {
58     Reference< XMultiServiceFactory > xMan( ::utl::getProcessServiceFactory() );
59     Reference< XPluginManager > xPMgr( xMan->createInstance(
60         rtl::OUString::createFromAscii("com.sun.star.plugin.PluginManager") ), UNO_QUERY );
61 
62     if ( xPMgr.is() )
63     {
64         FilterMap aMap;
65 
66         // mimetypes zusammenfassen: eine description, mehrere extensions
67 
68         Sequence<PluginDescription > aDescriptions( xPMgr->getPluginDescriptions() );
69         const PluginDescription * pDescriptions = aDescriptions.getConstArray();
70         for ( sal_uInt32 nPos = aDescriptions.getLength(); nPos--; )
71         {
72             const PluginDescription & rDescr = pDescriptions[nPos];
73 
74             StrSet& rTypes = aMap[ rDescr.Description ];
75             String aExtension( rDescr.Extension );
76 
77             for ( sal_uInt16 nCnt = aExtension.GetTokenCount( ';' ); nCnt--; )
78             {
79                 // no default plugins anymore
80                 String aExt( aExtension.GetToken( nCnt, ';' ) );
81                 if ( aExt.CompareToAscii( "*.*" ) != COMPARE_EQUAL )
82                     rTypes.insert( aExt );
83             }
84         }
85 
86         rPluginNames = Sequence< rtl::OUString >( aMap.size() );
87         rPluginTypes = Sequence< rtl::OUString >( aMap.size() );
88         rtl::OUString* pPluginNames = rPluginNames.getArray();
89         rtl::OUString* pPluginTypes = rPluginTypes.getArray();
90         int nIndex = 0;
91         for ( FilterMap::iterator iPos = aMap.begin(); iPos != aMap.end(); ++iPos )
92         {
93             String aText( (*iPos).first );
94             String aType;
95             StrSet& rTypes = (*iPos).second;
96             StrSet::iterator i = rTypes.begin();
97             while ( i != rTypes.end() )
98             {
99                 aType += (*i);
100                 ++i;
101                 if ( i != rTypes.end() )
102                     aType += ';';
103             }
104 
105             if ( aType.Len() )
106             {
107                 aText += String::CreateFromAscii( " (" );
108                 aText += aType;
109                 aText += ')';
110                 pPluginNames[nIndex] = aText;
111                 pPluginTypes[nIndex] = aType;
112                 nIndex++;
113             }
114         }
115         rPluginNames.realloc( nIndex );
116         rPluginTypes.realloc( nIndex );
117     }
118     else
119         ShowServiceNotAvailableError( NULL,
120             String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "com.sun.star.plugin.PluginManager" ) ), sal_True );
121 }
122 
123