1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_svtools.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir // includes -------------------------------------------------------------- 32*cdf0e10cSrcweir 33*cdf0e10cSrcweir #include <svtools/imagemgr.hxx> 34*cdf0e10cSrcweir #include <tools/urlobj.hxx> 35*cdf0e10cSrcweir #include <tools/debug.hxx> 36*cdf0e10cSrcweir #include <vcl/svapp.hxx> 37*cdf0e10cSrcweir #include <vcl/wrkwin.hxx> 38*cdf0e10cSrcweir #include "vcl/image.hxx" 39*cdf0e10cSrcweir #include <sot/storage.hxx> 40*cdf0e10cSrcweir #include <sot/clsids.hxx> 41*cdf0e10cSrcweir #include <unotools/ucbhelper.hxx> 42*cdf0e10cSrcweir #include <comphelper/processfactory.hxx> 43*cdf0e10cSrcweir #include <com/sun/star/beans/PropertyValue.hpp> 44*cdf0e10cSrcweir #include <com/sun/star/container/XNameContainer.hpp> 45*cdf0e10cSrcweir #include <com/sun/star/document/XTypeDetection.hpp> 46*cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp> 47*cdf0e10cSrcweir #include <com/sun/star/ucb/XCommandEnvironment.hpp> 48*cdf0e10cSrcweir #include <ucbhelper/content.hxx> 49*cdf0e10cSrcweir #include <tools/rcid.h> 50*cdf0e10cSrcweir #include <rtl/logfile.hxx> 51*cdf0e10cSrcweir #include <unotools/configmgr.hxx> 52*cdf0e10cSrcweir #include <svtools/svtools.hrc> 53*cdf0e10cSrcweir #include <svtools/imagemgr.hrc> 54*cdf0e10cSrcweir #include <svtools/svtdata.hxx> 55*cdf0e10cSrcweir #include <vos/mutex.hxx> 56*cdf0e10cSrcweir 57*cdf0e10cSrcweir // globals ******************************************************************* 58*cdf0e10cSrcweir 59*cdf0e10cSrcweir #define NO_INDEX ((sal_uInt16)0xFFFF) 60*cdf0e10cSrcweir #define CONTENT_HELPER ::utl::UCBContentHelper 61*cdf0e10cSrcweir #define ASCII_STRING(s) ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(s) ) 62*cdf0e10cSrcweir 63*cdf0e10cSrcweir struct SvtExtensionResIdMapping_Impl 64*cdf0e10cSrcweir { 65*cdf0e10cSrcweir const char* _pExt; 66*cdf0e10cSrcweir sal_Bool _bExt; 67*cdf0e10cSrcweir sal_uInt16 _nStrId; 68*cdf0e10cSrcweir sal_uInt16 _nImgId; 69*cdf0e10cSrcweir }; 70*cdf0e10cSrcweir 71*cdf0e10cSrcweir static SvtExtensionResIdMapping_Impl __READONLY_DATA ExtensionMap_Impl[] = 72*cdf0e10cSrcweir { 73*cdf0e10cSrcweir { "awk", sal_True, STR_DESCRIPTION_SOURCEFILE, 0 }, 74*cdf0e10cSrcweir { "bas", sal_True, STR_DESCRIPTION_SOURCEFILE, 0 }, 75*cdf0e10cSrcweir { "bat", sal_True, STR_DESCRIPTION_BATCHFILE, 0 }, 76*cdf0e10cSrcweir { "bmk", sal_False, STR_DESCRIPTION_BOOKMARKFILE, 0 }, 77*cdf0e10cSrcweir { "bmp", sal_True, STR_DESCRIPTION_GRAPHIC_DOC, IMG_BITMAP }, 78*cdf0e10cSrcweir { "c", sal_True, STR_DESCRIPTION_SOURCEFILE, 0 }, 79*cdf0e10cSrcweir { "cfg", sal_False, STR_DESCRIPTION_CFGFILE, 0 }, 80*cdf0e10cSrcweir { "cmd", sal_True, STR_DESCRIPTION_BATCHFILE, 0 }, 81*cdf0e10cSrcweir { "cob", sal_True, STR_DESCRIPTION_SOURCEFILE, 0 }, 82*cdf0e10cSrcweir { "com", sal_True, STR_DESCRIPTION_APPLICATION, 0 }, 83*cdf0e10cSrcweir { "cxx", sal_True, STR_DESCRIPTION_SOURCEFILE, 0 }, 84*cdf0e10cSrcweir { "dbf", sal_True, STR_DESCRIPTION_DATABASE_TABLE, IMG_TABLE }, 85*cdf0e10cSrcweir { "def", sal_True, STR_DESCRIPTION_SOURCEFILE, 0 }, 86*cdf0e10cSrcweir { "dll", sal_True, STR_DESCRIPTION_SYSFILE, 0 }, 87*cdf0e10cSrcweir { "doc", sal_False, STR_DESCRIPTION_WORD_DOC, IMG_WRITER }, 88*cdf0e10cSrcweir { "dot", sal_False, STR_DESCRIPTION_WORD_DOC, IMG_WRITERTEMPLATE }, 89*cdf0e10cSrcweir { "docx", sal_False, STR_DESCRIPTION_WORD_DOC, IMG_WRITER }, 90*cdf0e10cSrcweir { "dxf", sal_True, STR_DESCRIPTION_GRAPHIC_DOC, IMG_DXF }, 91*cdf0e10cSrcweir { "exe", sal_True, STR_DESCRIPTION_APPLICATION, 0 }, 92*cdf0e10cSrcweir { "gif", sal_True, STR_DESCRIPTION_GRAPHIC_DOC, IMG_GIF }, 93*cdf0e10cSrcweir { "h", sal_True, STR_DESCRIPTION_SOURCEFILE, 0 }, 94*cdf0e10cSrcweir { "hlp", sal_False, STR_DESCRIPTION_HELP_DOC, 0 }, 95*cdf0e10cSrcweir { "hrc", sal_True, STR_DESCRIPTION_SOURCEFILE, 0 }, 96*cdf0e10cSrcweir { "htm", sal_False, STR_DESCRIPTION_HTMLFILE, IMG_HTML }, 97*cdf0e10cSrcweir { "html", sal_False, STR_DESCRIPTION_HTMLFILE, IMG_HTML }, 98*cdf0e10cSrcweir { "asp", sal_False, STR_DESCRIPTION_HTMLFILE, IMG_HTML }, 99*cdf0e10cSrcweir { "hxx", sal_True, STR_DESCRIPTION_SOURCEFILE, 0 }, 100*cdf0e10cSrcweir { "ini", sal_False, STR_DESCRIPTION_CFGFILE, 0 }, 101*cdf0e10cSrcweir { "java", sal_True, STR_DESCRIPTION_SOURCEFILE, 0 }, 102*cdf0e10cSrcweir { "jpeg", sal_True, STR_DESCRIPTION_GRAPHIC_DOC, IMG_JPG }, 103*cdf0e10cSrcweir { "jpg", sal_True, STR_DESCRIPTION_GRAPHIC_DOC, IMG_JPG }, 104*cdf0e10cSrcweir { "lha", sal_True, STR_DESCRIPTION_ARCHIVFILE, 0 }, 105*cdf0e10cSrcweir #ifdef WNT 106*cdf0e10cSrcweir { "lnk", sal_False, 0, 0 }, 107*cdf0e10cSrcweir #endif 108*cdf0e10cSrcweir { "log", sal_True, STR_DESCRIPTION_LOGFILE, 0 }, 109*cdf0e10cSrcweir { "lst", sal_True, STR_DESCRIPTION_LOGFILE, 0 }, 110*cdf0e10cSrcweir { "met", sal_True, STR_DESCRIPTION_GRAPHIC_DOC, IMG_MET }, 111*cdf0e10cSrcweir { "mml", sal_False, STR_DESCRIPTION_MATHML_DOC, IMG_MATH }, 112*cdf0e10cSrcweir { "mod", sal_True, STR_DESCRIPTION_SOURCEFILE, 0 }, 113*cdf0e10cSrcweir { "odb", sal_False, STR_DESCRIPTION_OO_DATABASE_DOC, IMG_OO_DATABASE_DOC }, 114*cdf0e10cSrcweir { "odg", sal_False, STR_DESCRIPTION_OO_DRAW_DOC, IMG_OO_DRAW_DOC }, 115*cdf0e10cSrcweir { "odf", sal_False, STR_DESCRIPTION_OO_MATH_DOC, IMG_OO_MATH_DOC }, 116*cdf0e10cSrcweir { "odm", sal_False, STR_DESCRIPTION_OO_GLOBAL_DOC, IMG_OO_GLOBAL_DOC }, 117*cdf0e10cSrcweir { "odp", sal_False, STR_DESCRIPTION_OO_IMPRESS_DOC, IMG_OO_IMPRESS_DOC }, 118*cdf0e10cSrcweir { "ods", sal_False, STR_DESCRIPTION_OO_CALC_DOC, IMG_OO_CALC_DOC }, 119*cdf0e10cSrcweir { "odt", sal_False, STR_DESCRIPTION_OO_WRITER_DOC, IMG_OO_WRITER_DOC }, 120*cdf0e10cSrcweir { "otg", sal_False, STR_DESCRIPTION_OO_DRAW_TEMPLATE, IMG_OO_DRAW_TEMPLATE }, 121*cdf0e10cSrcweir { "otp", sal_False, STR_DESCRIPTION_OO_IMPRESS_TEMPLATE, IMG_OO_IMPRESS_TEMPLATE }, 122*cdf0e10cSrcweir { "ots", sal_False, STR_DESCRIPTION_OO_CALC_TEMPLATE, IMG_OO_CALC_TEMPLATE }, 123*cdf0e10cSrcweir { "ott", sal_False, STR_DESCRIPTION_OO_WRITER_TEMPLATE, IMG_OO_WRITER_TEMPLATE }, 124*cdf0e10cSrcweir { "pas", sal_True, STR_DESCRIPTION_SOURCEFILE, 0 }, 125*cdf0e10cSrcweir { "pcd", sal_True, STR_DESCRIPTION_GRAPHIC_DOC, IMG_PCD }, 126*cdf0e10cSrcweir { "pct", sal_True, STR_DESCRIPTION_GRAPHIC_DOC, IMG_PCT }, 127*cdf0e10cSrcweir { "pcx", sal_True, STR_DESCRIPTION_GRAPHIC_DOC, IMG_PCX }, 128*cdf0e10cSrcweir { "pl", sal_True, STR_DESCRIPTION_SOURCEFILE, 0 }, 129*cdf0e10cSrcweir { "png", sal_True, STR_DESCRIPTION_GRAPHIC_DOC, IMG_PNG }, 130*cdf0e10cSrcweir { "rar", sal_True, STR_DESCRIPTION_ARCHIVFILE, 0 }, 131*cdf0e10cSrcweir { "rtf", sal_False, STR_DESCRIPTION_WORD_DOC, IMG_WRITER }, 132*cdf0e10cSrcweir { "sbl", sal_False, 0, 0 }, 133*cdf0e10cSrcweir { "sch", sal_False, 0, 0 }, 134*cdf0e10cSrcweir { "sda", sal_False, STR_DESCRIPTION_SDRAW_DOC, IMG_DRAW }, 135*cdf0e10cSrcweir { "sdb", sal_False, STR_DESCRIPTION_SDATABASE_DOC, IMG_DATABASE }, 136*cdf0e10cSrcweir { "sdc", sal_False, STR_DESCRIPTION_SCALC_DOC, IMG_CALC }, 137*cdf0e10cSrcweir { "sdd", sal_False, STR_DESCRIPTION_SIMPRESS_DOC, IMG_IMPRESS }, 138*cdf0e10cSrcweir { "sdp", sal_False, STR_DESCRIPTION_SIMPRESS_DOC, 0 }, 139*cdf0e10cSrcweir { "sds", sal_False, STR_DESCRIPTION_SCHART_DOC, 0 }, 140*cdf0e10cSrcweir { "sdw", sal_False, STR_DESCRIPTION_SWRITER_DOC, IMG_WRITER }, 141*cdf0e10cSrcweir { "sga", sal_False, 0, 0 }, 142*cdf0e10cSrcweir { "sgf", sal_True, STR_DESCRIPTION_GRAPHIC_DOC, IMG_SGF }, 143*cdf0e10cSrcweir { "sgl", sal_False, STR_DESCRIPTION_GLOBALDOC, IMG_GLOBAL_DOC }, 144*cdf0e10cSrcweir { "sgv", sal_True, STR_DESCRIPTION_GRAPHIC_DOC, IMG_SGV }, 145*cdf0e10cSrcweir { "shtml", sal_False, STR_DESCRIPTION_HTMLFILE, IMG_HTML }, 146*cdf0e10cSrcweir { "sim", sal_False, STR_DESCRIPTION_SIMAGE_DOC, IMG_SIM }, 147*cdf0e10cSrcweir { "smf", sal_False, STR_DESCRIPTION_SMATH_DOC, IMG_MATH }, 148*cdf0e10cSrcweir { "src", sal_True, STR_DESCRIPTION_SOURCEFILE, 0 }, 149*cdf0e10cSrcweir { "svh", sal_False, STR_DESCRIPTION_HELP_DOC, 0 }, 150*cdf0e10cSrcweir { "svm", sal_True, STR_DESCRIPTION_GRAPHIC_DOC, IMG_SVM }, 151*cdf0e10cSrcweir { "stc", sal_False, STR_DESCRIPTION_CALC_TEMPLATE, IMG_CALCTEMPLATE }, 152*cdf0e10cSrcweir { "std", sal_False, STR_DESCRIPTION_DRAW_TEMPLATE, IMG_DRAWTEMPLATE }, 153*cdf0e10cSrcweir { "sti", sal_False, STR_DESCRIPTION_IMPRESS_TEMPLATE, IMG_IMPRESSTEMPLATE }, 154*cdf0e10cSrcweir { "stw", sal_False, STR_DESCRIPTION_WRITER_TEMPLATE, IMG_WRITERTEMPLATE }, 155*cdf0e10cSrcweir { "sxc", sal_False, STR_DESCRIPTION_SXCALC_DOC, IMG_CALC }, 156*cdf0e10cSrcweir { "sxd", sal_False, STR_DESCRIPTION_SXDRAW_DOC, IMG_DRAW }, 157*cdf0e10cSrcweir { "sxg", sal_False, STR_DESCRIPTION_SXGLOBAL_DOC, IMG_GLOBAL_DOC }, 158*cdf0e10cSrcweir { "sxi", sal_False, STR_DESCRIPTION_SXIMPRESS_DOC, IMG_IMPRESS }, 159*cdf0e10cSrcweir { "sxm", sal_False, STR_DESCRIPTION_SXMATH_DOC, IMG_MATH }, 160*cdf0e10cSrcweir { "sxs", sal_False, STR_DESCRIPTION_SXCHART_DOC, 0 }, 161*cdf0e10cSrcweir { "sxw", sal_False, STR_DESCRIPTION_SXWRITER_DOC, IMG_WRITER }, 162*cdf0e10cSrcweir { "sys", sal_True, STR_DESCRIPTION_SYSFILE, 0 }, 163*cdf0e10cSrcweir { "tif", sal_True, STR_DESCRIPTION_GRAPHIC_DOC, IMG_TIFF }, 164*cdf0e10cSrcweir { "tiff", sal_True, STR_DESCRIPTION_GRAPHIC_DOC, IMG_TIFF }, 165*cdf0e10cSrcweir { "txt", sal_False, STR_DESCRIPTION_TEXTFILE, IMG_TEXTFILE }, 166*cdf0e10cSrcweir { "url", sal_False, STR_DESCRIPTION_LINK, 0 }, 167*cdf0e10cSrcweir { "vor", sal_False, STR_DESCRIPTION_SOFFICE_TEMPLATE_DOC, IMG_WRITERTEMPLATE }, 168*cdf0e10cSrcweir { "vxd", sal_True, STR_DESCRIPTION_SYSFILE, 0 }, 169*cdf0e10cSrcweir { "wmf", sal_True, STR_DESCRIPTION_GRAPHIC_DOC, IMG_WMF }, 170*cdf0e10cSrcweir { "xls", sal_False, STR_DESCRIPTION_EXCEL_DOC, IMG_CALC }, 171*cdf0e10cSrcweir { "xlt", sal_False, STR_DESCRIPTION_EXCEL_TEMPLATE_DOC, IMG_CALCTEMPLATE }, 172*cdf0e10cSrcweir { "xlsx", sal_False, STR_DESCRIPTION_EXCEL_DOC, IMG_CALC }, 173*cdf0e10cSrcweir { "uu", sal_True, STR_DESCRIPTION_ARCHIVFILE, 0 }, 174*cdf0e10cSrcweir { "uue", sal_True, STR_DESCRIPTION_ARCHIVFILE, 0 }, 175*cdf0e10cSrcweir { "z", sal_True, STR_DESCRIPTION_ARCHIVFILE, 0 }, 176*cdf0e10cSrcweir { "zip", sal_True, STR_DESCRIPTION_ARCHIVFILE, 0 }, 177*cdf0e10cSrcweir { "zoo", sal_True, STR_DESCRIPTION_ARCHIVFILE, 0 }, 178*cdf0e10cSrcweir { "gz", sal_True, STR_DESCRIPTION_ARCHIVFILE, 0 }, 179*cdf0e10cSrcweir { "ppt", sal_False, STR_DESCRIPTION_POWERPOINT, IMG_IMPRESS }, 180*cdf0e10cSrcweir { "pot", sal_False, STR_DESCRIPTION_POWERPOINT_TEMPLATE, IMG_IMPRESSTEMPLATE }, 181*cdf0e10cSrcweir { "pps", sal_False, STR_DESCRIPTION_POWERPOINT_SHOW, IMG_IMPRESS }, 182*cdf0e10cSrcweir { "pptx", sal_False, STR_DESCRIPTION_POWERPOINT, IMG_IMPRESS }, 183*cdf0e10cSrcweir { "oxt", sal_False, STR_DESCRIPTION_EXTENSION, IMG_EXTENSION }, 184*cdf0e10cSrcweir { 0, sal_False, 0, 0 } 185*cdf0e10cSrcweir }; 186*cdf0e10cSrcweir 187*cdf0e10cSrcweir #ifdef OS2 188*cdf0e10cSrcweir SvtExtensionResIdMapping_Impl Mappings[] = 189*cdf0e10cSrcweir { 190*cdf0e10cSrcweir {"StarWriter 4.0", sal_False,STR_DESCRIPTION_SWRITER_DOC, IMG_WRITER}, 191*cdf0e10cSrcweir {"StarWriter 3.0", sal_False,STR_DESCRIPTION_SWRITER_DOC, IMG_WRITER}, 192*cdf0e10cSrcweir {"StarCalc 4.0", sal_False,STR_DESCRIPTION_SCALC_DOC, IMG_CALC}, 193*cdf0e10cSrcweir {"StarCalc 3.0", sal_False,STR_DESCRIPTION_SCALC_DOC, IMG_CALC}, 194*cdf0e10cSrcweir {"StarImpress 4.0", sal_False,STR_DESCRIPTION_SIMPRESS_DOC,IMG_IMPRESS}, 195*cdf0e10cSrcweir {"StarDraw 4.0", sal_False,STR_DESCRIPTION_SDRAW_DOC, IMG_DRAW}, 196*cdf0e10cSrcweir {"StarDraw 3.0", sal_False,STR_DESCRIPTION_SDRAW_DOC, IMG_DRAW}, 197*cdf0e10cSrcweir {"StarChart 3.0", sal_False,STR_DESCRIPTION_SCHART_DOC, IMG_CHART}, 198*cdf0e10cSrcweir {"StarChart 4.0", sal_False,STR_DESCRIPTION_SCHART_DOC, IMG_CHART}, 199*cdf0e10cSrcweir {"Bitmap", sal_False,STR_DESCRIPTION_GRAPHIC_DOC, IMG_BITMAP}, 200*cdf0e10cSrcweir {"AutoCAD", sal_False,STR_DESCRIPTION_GRAPHIC_DOC, IMG_SIM}, 201*cdf0e10cSrcweir {"Gif-File", sal_False,STR_DESCRIPTION_GRAPHIC_DOC, IMG_GIF}, 202*cdf0e10cSrcweir {"JPEG-File", sal_False,STR_DESCRIPTION_GRAPHIC_DOC, IMG_JPG}, 203*cdf0e10cSrcweir {"Metafile ", sal_False,STR_DESCRIPTION_GRAPHIC_DOC, IMG_SIM}, 204*cdf0e10cSrcweir {"Photo-CD ", sal_False,STR_DESCRIPTION_GRAPHIC_DOC, IMG_PCD}, 205*cdf0e10cSrcweir {"Mac Pict", sal_False,STR_DESCRIPTION_GRAPHIC_DOC, IMG_PCT}, 206*cdf0e10cSrcweir {"PCX-File ", sal_False,STR_DESCRIPTION_GRAPHIC_DOC, IMG_PCX}, 207*cdf0e10cSrcweir {"PNG-File", sal_False,STR_DESCRIPTION_GRAPHIC_DOC, IMG_SIM}, 208*cdf0e10cSrcweir {"SV-Metafile", sal_False,STR_DESCRIPTION_GRAPHIC_DOC, IMG_SIM}, 209*cdf0e10cSrcweir {"TIFF-File", sal_False,STR_DESCRIPTION_GRAPHIC_DOC, IMG_TIFF}, 210*cdf0e10cSrcweir {"MS-Metafile", sal_False,STR_DESCRIPTION_GRAPHIC_DOC, IMG_WMF}, 211*cdf0e10cSrcweir {"XBM-File", sal_False,STR_DESCRIPTION_GRAPHIC_DOC, IMG_BITMAP}, 212*cdf0e10cSrcweir {"UniformResourceLocator", sal_False,STR_DESCRIPTION_LINK, IMG_URL}, 213*cdf0e10cSrcweir {NULL, 0} 214*cdf0e10cSrcweir }; 215*cdf0e10cSrcweir #endif 216*cdf0e10cSrcweir 217*cdf0e10cSrcweir struct SvtFactory2ExtensionMapping_Impl 218*cdf0e10cSrcweir { 219*cdf0e10cSrcweir const char* _pFactory; 220*cdf0e10cSrcweir const char* _pExtension; 221*cdf0e10cSrcweir }; 222*cdf0e10cSrcweir 223*cdf0e10cSrcweir // mapping from "private:factory" url to extension 224*cdf0e10cSrcweir 225*cdf0e10cSrcweir static SvtFactory2ExtensionMapping_Impl __READONLY_DATA Fac2ExtMap_Impl[] = 226*cdf0e10cSrcweir { 227*cdf0e10cSrcweir { "swriter", "odt" }, 228*cdf0e10cSrcweir { "swriter/web", "html" }, 229*cdf0e10cSrcweir { "swriter/GlobalDocument", "odm" }, 230*cdf0e10cSrcweir { "scalc", "ods" }, 231*cdf0e10cSrcweir { "simpress", "odp" }, 232*cdf0e10cSrcweir { "sdraw", "odg" }, 233*cdf0e10cSrcweir { "smath", "odf" }, 234*cdf0e10cSrcweir { "sdatabase", "odb" }, 235*cdf0e10cSrcweir { NULL, NULL } 236*cdf0e10cSrcweir }; 237*cdf0e10cSrcweir 238*cdf0e10cSrcweir //**************************************************************************** 239*cdf0e10cSrcweir 240*cdf0e10cSrcweir static String GetImageExtensionByFactory_Impl( const String& rURL ) 241*cdf0e10cSrcweir { 242*cdf0e10cSrcweir INetURLObject aObj( rURL ); 243*cdf0e10cSrcweir String aPath = aObj.GetURLPath( INetURLObject::NO_DECODE ); 244*cdf0e10cSrcweir String aExtension; 245*cdf0e10cSrcweir 246*cdf0e10cSrcweir if ( aPath.Len() ) 247*cdf0e10cSrcweir { 248*cdf0e10cSrcweir sal_uInt16 nIndex = 0; 249*cdf0e10cSrcweir while ( Fac2ExtMap_Impl[ nIndex ]._pFactory ) 250*cdf0e10cSrcweir { 251*cdf0e10cSrcweir if ( aPath.EqualsAscii( Fac2ExtMap_Impl[ nIndex ]._pFactory ) ) 252*cdf0e10cSrcweir { 253*cdf0e10cSrcweir // extension found 254*cdf0e10cSrcweir aExtension = String::CreateFromAscii( Fac2ExtMap_Impl[ nIndex ]._pExtension ); 255*cdf0e10cSrcweir // and return it 256*cdf0e10cSrcweir return aExtension; 257*cdf0e10cSrcweir } 258*cdf0e10cSrcweir ++nIndex; 259*cdf0e10cSrcweir } 260*cdf0e10cSrcweir } 261*cdf0e10cSrcweir 262*cdf0e10cSrcweir // no extension found, so use the type detection (performance brake) 263*cdf0e10cSrcweir 264*cdf0e10cSrcweir try 265*cdf0e10cSrcweir { 266*cdf0e10cSrcweir // get the TypeDetection service to access all registered types 267*cdf0e10cSrcweir ::com::sun::star::uno::Reference < ::com::sun::star::lang::XMultiServiceFactory > xFac = ::comphelper::getProcessServiceFactory(); 268*cdf0e10cSrcweir ::com::sun::star::uno::Reference < ::com::sun::star::document::XTypeDetection > xTypeDetector( 269*cdf0e10cSrcweir xFac->createInstance( ASCII_STRING("com.sun.star.document.TypeDetection") ), ::com::sun::star::uno::UNO_QUERY ); 270*cdf0e10cSrcweir 271*cdf0e10cSrcweir ::rtl::OUString aInternalType = xTypeDetector->queryTypeByURL( rURL ); 272*cdf0e10cSrcweir ::com::sun::star::uno::Reference < ::com::sun::star::container::XNameAccess > xAccess( xTypeDetector, ::com::sun::star::uno::UNO_QUERY ); 273*cdf0e10cSrcweir ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue > aTypeProps; 274*cdf0e10cSrcweir if ( aInternalType.getLength() > 0 && xAccess->hasByName( aInternalType ) ) 275*cdf0e10cSrcweir { 276*cdf0e10cSrcweir xAccess->getByName( aInternalType ) >>= aTypeProps; 277*cdf0e10cSrcweir sal_Int32 nProps = aTypeProps.getLength(); 278*cdf0e10cSrcweir for ( sal_Int32 i = 0; i < nProps; ++i ) 279*cdf0e10cSrcweir { 280*cdf0e10cSrcweir const ::com::sun::star::beans::PropertyValue& rProp = aTypeProps[i]; 281*cdf0e10cSrcweir if ( rProp.Name.compareToAscii("Extensions") == COMPARE_EQUAL ) 282*cdf0e10cSrcweir { 283*cdf0e10cSrcweir ::com::sun::star::uno::Sequence < ::rtl::OUString > aExtensions; 284*cdf0e10cSrcweir if ( ( rProp.Value >>= aExtensions ) && aExtensions.getLength() > 0 ) 285*cdf0e10cSrcweir { 286*cdf0e10cSrcweir const ::rtl::OUString* pExtensions = aExtensions.getConstArray(); 287*cdf0e10cSrcweir aExtension = String( pExtensions[0] ); 288*cdf0e10cSrcweir break; 289*cdf0e10cSrcweir } 290*cdf0e10cSrcweir } 291*cdf0e10cSrcweir } 292*cdf0e10cSrcweir } 293*cdf0e10cSrcweir } 294*cdf0e10cSrcweir catch( const ::com::sun::star::uno::RuntimeException& ) 295*cdf0e10cSrcweir { 296*cdf0e10cSrcweir throw; // dont hide it! 297*cdf0e10cSrcweir } 298*cdf0e10cSrcweir catch( const ::com::sun::star::uno::Exception& ) 299*cdf0e10cSrcweir { 300*cdf0e10cSrcweir // type detection failed -> no extension 301*cdf0e10cSrcweir } 302*cdf0e10cSrcweir 303*cdf0e10cSrcweir return aExtension; 304*cdf0e10cSrcweir } 305*cdf0e10cSrcweir 306*cdf0e10cSrcweir static sal_uInt16 GetIndexOfExtension_Impl( const String& rExtension ) 307*cdf0e10cSrcweir { 308*cdf0e10cSrcweir sal_uInt16 nRet = NO_INDEX; 309*cdf0e10cSrcweir if ( rExtension.Len() ) 310*cdf0e10cSrcweir { 311*cdf0e10cSrcweir sal_uInt16 nIndex = 0; 312*cdf0e10cSrcweir String aExt = rExtension; 313*cdf0e10cSrcweir aExt.ToLowerAscii(); 314*cdf0e10cSrcweir while ( ExtensionMap_Impl[ nIndex ]._pExt ) 315*cdf0e10cSrcweir { 316*cdf0e10cSrcweir if ( aExt.EqualsAscii( ExtensionMap_Impl[ nIndex ]._pExt ) ) 317*cdf0e10cSrcweir { 318*cdf0e10cSrcweir nRet = nIndex; 319*cdf0e10cSrcweir break; 320*cdf0e10cSrcweir } 321*cdf0e10cSrcweir ++nIndex; 322*cdf0e10cSrcweir } 323*cdf0e10cSrcweir } 324*cdf0e10cSrcweir 325*cdf0e10cSrcweir return nRet; 326*cdf0e10cSrcweir } 327*cdf0e10cSrcweir 328*cdf0e10cSrcweir static sal_uInt16 GetImageId_Impl( const String& rExtension ) 329*cdf0e10cSrcweir { 330*cdf0e10cSrcweir sal_uInt16 nImage = IMG_FILE; 331*cdf0e10cSrcweir if ( rExtension.Len() != NO_INDEX ) 332*cdf0e10cSrcweir { 333*cdf0e10cSrcweir sal_uInt16 nIndex = GetIndexOfExtension_Impl( rExtension ); 334*cdf0e10cSrcweir if ( nIndex != NO_INDEX ) 335*cdf0e10cSrcweir { 336*cdf0e10cSrcweir nImage = ExtensionMap_Impl[ nIndex ]._nImgId; 337*cdf0e10cSrcweir if ( !nImage ) 338*cdf0e10cSrcweir nImage = IMG_FILE; 339*cdf0e10cSrcweir } 340*cdf0e10cSrcweir } 341*cdf0e10cSrcweir 342*cdf0e10cSrcweir return nImage; 343*cdf0e10cSrcweir } 344*cdf0e10cSrcweir 345*cdf0e10cSrcweir static sal_Bool GetVolumeProperties_Impl( ::ucbhelper::Content& rContent, svtools::VolumeInfo& rVolumeInfo ) 346*cdf0e10cSrcweir { 347*cdf0e10cSrcweir sal_Bool bRet = sal_False; 348*cdf0e10cSrcweir 349*cdf0e10cSrcweir try 350*cdf0e10cSrcweir { 351*cdf0e10cSrcweir bRet = ( ( rContent.getPropertyValue( ASCII_STRING("IsVolume") ) >>= rVolumeInfo.m_bIsVolume ) && 352*cdf0e10cSrcweir ( rContent.getPropertyValue( ASCII_STRING("IsRemote") ) >>= rVolumeInfo.m_bIsRemote ) && 353*cdf0e10cSrcweir ( rContent.getPropertyValue( ASCII_STRING("IsRemoveable") ) >>= rVolumeInfo.m_bIsRemoveable ) && 354*cdf0e10cSrcweir ( rContent.getPropertyValue( ASCII_STRING("IsFloppy") ) >>= rVolumeInfo.m_bIsFloppy ) && 355*cdf0e10cSrcweir ( rContent.getPropertyValue( ASCII_STRING("IsCompactDisc") ) >>= rVolumeInfo.m_bIsCompactDisc ) ); 356*cdf0e10cSrcweir } 357*cdf0e10cSrcweir catch( const ::com::sun::star::uno::RuntimeException& ) 358*cdf0e10cSrcweir { 359*cdf0e10cSrcweir throw; // dont hide it! 360*cdf0e10cSrcweir } 361*cdf0e10cSrcweir catch( const ::com::sun::star::uno::Exception& ) 362*cdf0e10cSrcweir { 363*cdf0e10cSrcweir // type detection failed -> no extension 364*cdf0e10cSrcweir } 365*cdf0e10cSrcweir 366*cdf0e10cSrcweir return bRet; 367*cdf0e10cSrcweir } 368*cdf0e10cSrcweir 369*cdf0e10cSrcweir static sal_uInt16 GetFolderImageId_Impl( const String& rURL ) 370*cdf0e10cSrcweir { 371*cdf0e10cSrcweir sal_uInt16 nRet = IMG_FOLDER; 372*cdf0e10cSrcweir ::svtools::VolumeInfo aVolumeInfo; 373*cdf0e10cSrcweir try 374*cdf0e10cSrcweir { 375*cdf0e10cSrcweir ::ucbhelper::Content aCnt( rURL, ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XCommandEnvironment > () ); 376*cdf0e10cSrcweir if ( GetVolumeProperties_Impl( aCnt, aVolumeInfo ) ) 377*cdf0e10cSrcweir { 378*cdf0e10cSrcweir if ( aVolumeInfo.m_bIsRemote ) 379*cdf0e10cSrcweir nRet = IMG_NETWORKDEV; 380*cdf0e10cSrcweir else if ( aVolumeInfo.m_bIsCompactDisc ) 381*cdf0e10cSrcweir nRet = IMG_CDROMDEV; 382*cdf0e10cSrcweir else if ( aVolumeInfo.m_bIsRemoveable ) 383*cdf0e10cSrcweir nRet = IMG_REMOVEABLEDEV; 384*cdf0e10cSrcweir else if ( aVolumeInfo.m_bIsVolume ) 385*cdf0e10cSrcweir nRet = IMG_FIXEDDEV; 386*cdf0e10cSrcweir } 387*cdf0e10cSrcweir } 388*cdf0e10cSrcweir catch( const ::com::sun::star::uno::RuntimeException& ) 389*cdf0e10cSrcweir { 390*cdf0e10cSrcweir throw; // dont hide it! 391*cdf0e10cSrcweir } 392*cdf0e10cSrcweir catch( const ::com::sun::star::uno::Exception& ) 393*cdf0e10cSrcweir { 394*cdf0e10cSrcweir // ... 395*cdf0e10cSrcweir } 396*cdf0e10cSrcweir return nRet; 397*cdf0e10cSrcweir } 398*cdf0e10cSrcweir 399*cdf0e10cSrcweir static sal_uInt16 GetImageId_Impl( const INetURLObject& rObject, sal_Bool bDetectFolder ) 400*cdf0e10cSrcweir { 401*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aTimeLog, "svtools", "hb93813", "SvFileInformationManager::GetImageId_Impl()" ); 402*cdf0e10cSrcweir 403*cdf0e10cSrcweir String aExt, sURL = rObject.GetMainURL( INetURLObject::NO_DECODE ); 404*cdf0e10cSrcweir sal_uInt16 nImage = IMG_FILE; 405*cdf0e10cSrcweir 406*cdf0e10cSrcweir if ( rObject.GetProtocol() == INET_PROT_PRIVATE ) 407*cdf0e10cSrcweir { 408*cdf0e10cSrcweir String aURLPath = sURL.Copy( URL_PREFIX_PRIV_SOFFICE_LEN ); 409*cdf0e10cSrcweir String aType = aURLPath.GetToken( 0, INET_PATH_TOKEN ); 410*cdf0e10cSrcweir if ( aType == String( RTL_CONSTASCII_STRINGPARAM("factory") ) ) 411*cdf0e10cSrcweir { 412*cdf0e10cSrcweir // detect an image id for our "private:factory" urls 413*cdf0e10cSrcweir aExt = GetImageExtensionByFactory_Impl( sURL ); 414*cdf0e10cSrcweir if ( aExt.Len() > 0 ) 415*cdf0e10cSrcweir nImage = GetImageId_Impl( aExt ); 416*cdf0e10cSrcweir return nImage; 417*cdf0e10cSrcweir } 418*cdf0e10cSrcweir else if ( aType == String( RTL_CONSTASCII_STRINGPARAM("image") ) ) 419*cdf0e10cSrcweir nImage = (sal_uInt16)aURLPath.GetToken( 1, INET_PATH_TOKEN ).ToInt32(); 420*cdf0e10cSrcweir } 421*cdf0e10cSrcweir else 422*cdf0e10cSrcweir { 423*cdf0e10cSrcweir aExt = rObject.getExtension(); 424*cdf0e10cSrcweir if ( aExt.EqualsAscii( "vor" ) ) 425*cdf0e10cSrcweir { 426*cdf0e10cSrcweir SotStorageRef aStorage = new SotStorage( sURL, STREAM_STD_READ ); 427*cdf0e10cSrcweir sal_uInt16 nId = IMG_WRITERTEMPLATE; 428*cdf0e10cSrcweir if ( !aStorage->GetError() ) 429*cdf0e10cSrcweir { 430*cdf0e10cSrcweir SvGlobalName aGlobalName = aStorage->GetClassName(); 431*cdf0e10cSrcweir if ( aGlobalName == SvGlobalName(SO3_SC_CLASSID_50) || aGlobalName == SvGlobalName(SO3_SC_CLASSID_40) || aGlobalName == SvGlobalName(SO3_SC_CLASSID_30) ) 432*cdf0e10cSrcweir nId = IMG_CALCTEMPLATE; 433*cdf0e10cSrcweir else if ( aGlobalName == SvGlobalName(SO3_SDRAW_CLASSID_50) ) 434*cdf0e10cSrcweir nId = IMG_DRAWTEMPLATE; 435*cdf0e10cSrcweir else if ( aGlobalName == SvGlobalName(SO3_SIMPRESS_CLASSID_50) || 436*cdf0e10cSrcweir aGlobalName == SvGlobalName(SO3_SIMPRESS_CLASSID_40) || aGlobalName == SvGlobalName(SO3_SIMPRESS_CLASSID_30) ) 437*cdf0e10cSrcweir nId = IMG_IMPRESSTEMPLATE; 438*cdf0e10cSrcweir else if ( aGlobalName == SvGlobalName(SO3_SM_CLASSID_50) || aGlobalName == SvGlobalName(SO3_SM_CLASSID_40) || aGlobalName == SvGlobalName(SO3_SM_CLASSID_30) ) 439*cdf0e10cSrcweir nId = IMG_MATHTEMPLATE; 440*cdf0e10cSrcweir } 441*cdf0e10cSrcweir 442*cdf0e10cSrcweir return nId; 443*cdf0e10cSrcweir } 444*cdf0e10cSrcweir } 445*cdf0e10cSrcweir 446*cdf0e10cSrcweir if ( nImage == IMG_FILE && sURL.Len() ) 447*cdf0e10cSrcweir { 448*cdf0e10cSrcweir if ( bDetectFolder && CONTENT_HELPER::IsFolder( sURL ) ) 449*cdf0e10cSrcweir nImage = GetFolderImageId_Impl( sURL ); 450*cdf0e10cSrcweir else if ( aExt.Len() > 0 ) 451*cdf0e10cSrcweir nImage = GetImageId_Impl( aExt ); 452*cdf0e10cSrcweir } 453*cdf0e10cSrcweir return nImage; 454*cdf0e10cSrcweir } 455*cdf0e10cSrcweir 456*cdf0e10cSrcweir static sal_uInt16 GetDescriptionId_Impl( const String& rExtension, sal_Bool& rbShowExt ) 457*cdf0e10cSrcweir { 458*cdf0e10cSrcweir sal_uInt16 nId = 0; 459*cdf0e10cSrcweir 460*cdf0e10cSrcweir if ( rExtension.Len() != NO_INDEX ) 461*cdf0e10cSrcweir { 462*cdf0e10cSrcweir sal_uInt16 nIndex = GetIndexOfExtension_Impl( rExtension ); 463*cdf0e10cSrcweir if ( nIndex != NO_INDEX ) 464*cdf0e10cSrcweir { 465*cdf0e10cSrcweir nId = ExtensionMap_Impl[ nIndex ]._nStrId; 466*cdf0e10cSrcweir rbShowExt = ExtensionMap_Impl[ nIndex ]._bExt; 467*cdf0e10cSrcweir } 468*cdf0e10cSrcweir } 469*cdf0e10cSrcweir 470*cdf0e10cSrcweir return nId; 471*cdf0e10cSrcweir } 472*cdf0e10cSrcweir 473*cdf0e10cSrcweir static String GetDescriptionByFactory_Impl( const String& rFactory ) 474*cdf0e10cSrcweir { 475*cdf0e10cSrcweir sal_uInt16 nResId = 0; 476*cdf0e10cSrcweir if ( rFactory.EqualsIgnoreCaseAscii( "swriter", 0, 7 ) ) 477*cdf0e10cSrcweir nResId = STR_DESCRIPTION_FACTORY_WRITER; 478*cdf0e10cSrcweir else if ( rFactory.EqualsIgnoreCaseAscii( "scalc", 0, 5 ) ) 479*cdf0e10cSrcweir nResId = STR_DESCRIPTION_FACTORY_CALC; 480*cdf0e10cSrcweir else if ( rFactory.EqualsIgnoreCaseAscii( "simpress", 0, 8 ) ) 481*cdf0e10cSrcweir nResId = STR_DESCRIPTION_FACTORY_IMPRESS; 482*cdf0e10cSrcweir else if ( rFactory.EqualsIgnoreCaseAscii( "sdraw", 0, 5 ) ) 483*cdf0e10cSrcweir nResId = STR_DESCRIPTION_FACTORY_DRAW; 484*cdf0e10cSrcweir else if ( rFactory.EqualsIgnoreCaseAscii( "swriter/web", 0, 11 ) ) 485*cdf0e10cSrcweir nResId = STR_DESCRIPTION_FACTORY_WRITERWEB; 486*cdf0e10cSrcweir else if ( rFactory.EqualsIgnoreCaseAscii( "swriter/globaldocument", 0, 22 ) ) 487*cdf0e10cSrcweir nResId = STR_DESCRIPTION_FACTORY_GLOBALDOC; 488*cdf0e10cSrcweir else if ( rFactory.EqualsIgnoreCaseAscii( "smath", 0, 5 ) ) 489*cdf0e10cSrcweir nResId = STR_DESCRIPTION_FACTORY_MATH; 490*cdf0e10cSrcweir else if ( rFactory.EqualsIgnoreCaseAscii( "sdatabase", 0, 9 ) ) 491*cdf0e10cSrcweir nResId = STR_DESCRIPTION_FACTORY_DATABASE; 492*cdf0e10cSrcweir 493*cdf0e10cSrcweir String aRet; 494*cdf0e10cSrcweir if ( nResId ) 495*cdf0e10cSrcweir { 496*cdf0e10cSrcweir ::vos::OGuard aGuard( Application::GetSolarMutex() ); 497*cdf0e10cSrcweir aRet = String( SvtResId( nResId ) ); 498*cdf0e10cSrcweir } 499*cdf0e10cSrcweir return aRet; 500*cdf0e10cSrcweir } 501*cdf0e10cSrcweir 502*cdf0e10cSrcweir static sal_uInt16 GetFolderDescriptionId_Impl( const String& rURL ) 503*cdf0e10cSrcweir { 504*cdf0e10cSrcweir sal_uInt16 nRet = STR_DESCRIPTION_FOLDER; 505*cdf0e10cSrcweir svtools::VolumeInfo aVolumeInfo; 506*cdf0e10cSrcweir try 507*cdf0e10cSrcweir { 508*cdf0e10cSrcweir ::ucbhelper::Content aCnt( rURL, ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XCommandEnvironment > () ); 509*cdf0e10cSrcweir if ( GetVolumeProperties_Impl( aCnt, aVolumeInfo ) ) 510*cdf0e10cSrcweir { 511*cdf0e10cSrcweir if ( aVolumeInfo.m_bIsRemote ) 512*cdf0e10cSrcweir nRet = STR_DESCRIPTION_REMOTE_VOLUME; 513*cdf0e10cSrcweir else if ( aVolumeInfo.m_bIsFloppy ) 514*cdf0e10cSrcweir nRet = STR_DESCRIPTION_FLOPPY_VOLUME; 515*cdf0e10cSrcweir else if ( aVolumeInfo.m_bIsCompactDisc ) 516*cdf0e10cSrcweir nRet = STR_DESCRIPTION_CDROM_VOLUME; 517*cdf0e10cSrcweir else if ( aVolumeInfo.m_bIsRemoveable || aVolumeInfo.m_bIsVolume ) 518*cdf0e10cSrcweir nRet = STR_DESCRIPTION_LOCALE_VOLUME; 519*cdf0e10cSrcweir } 520*cdf0e10cSrcweir } 521*cdf0e10cSrcweir catch( const ::com::sun::star::uno::RuntimeException& ) 522*cdf0e10cSrcweir { 523*cdf0e10cSrcweir throw; // dont hide it! 524*cdf0e10cSrcweir } 525*cdf0e10cSrcweir catch( const ::com::sun::star::uno::Exception& ) 526*cdf0e10cSrcweir { 527*cdf0e10cSrcweir // ... 528*cdf0e10cSrcweir } 529*cdf0e10cSrcweir return nRet; 530*cdf0e10cSrcweir } 531*cdf0e10cSrcweir 532*cdf0e10cSrcweir /* 533*cdf0e10cSrcweir static ResMgr* GetIsoResMgr_Impl() 534*cdf0e10cSrcweir { 535*cdf0e10cSrcweir static ResMgr* pIsoResMgr = NULL; 536*cdf0e10cSrcweir 537*cdf0e10cSrcweir if ( !pIsoResMgr ) 538*cdf0e10cSrcweir { 539*cdf0e10cSrcweir ByteString aResMgrName( "iso" ); 540*cdf0e10cSrcweir pIsoResMgr = ResMgr::CreateResMgr( 541*cdf0e10cSrcweir aResMgrName.GetBuffer(), Application::GetSettings().GetUILocale() ); 542*cdf0e10cSrcweir if ( !pIsoResMgr ) 543*cdf0e10cSrcweir { 544*cdf0e10cSrcweir // no "iso" resource -> search for "ooo" resource 545*cdf0e10cSrcweir aResMgrName = ByteString( "ooo" ); 546*cdf0e10cSrcweir pIsoResMgr = ResMgr::CreateResMgr( 547*cdf0e10cSrcweir aResMgrName.GetBuffer(), Application::GetSettings().GetUILocale() ); 548*cdf0e10cSrcweir } 549*cdf0e10cSrcweir } 550*cdf0e10cSrcweir 551*cdf0e10cSrcweir return pIsoResMgr; 552*cdf0e10cSrcweir } 553*cdf0e10cSrcweir 554*cdf0e10cSrcweir static ImageList* CreateImageList_Impl( sal_uInt16 nResId ) 555*cdf0e10cSrcweir { 556*cdf0e10cSrcweir ImageList* pList = NULL; 557*cdf0e10cSrcweir ResMgr* pResMgr = GetIsoResMgr_Impl(); 558*cdf0e10cSrcweir DBG_ASSERT( pResMgr, "SvFileInformationManager::CreateImageList_Impl(): no resmgr" ); 559*cdf0e10cSrcweir ResId aResId( nResId, *pResMgr ); 560*cdf0e10cSrcweir aResId.SetRT( RSC_IMAGELIST ); 561*cdf0e10cSrcweir if ( pResMgr->IsAvailable( aResId ) ) 562*cdf0e10cSrcweir pList = new ImageList( aResId ); 563*cdf0e10cSrcweir else 564*cdf0e10cSrcweir pList = new ImageList(); 565*cdf0e10cSrcweir return pList; 566*cdf0e10cSrcweir } 567*cdf0e10cSrcweir 568*cdf0e10cSrcweir static Image GetOfficeImageFromList_Impl( sal_uInt16 nImageId, sal_Bool bBig, sal_Bool bHighContrast ) 569*cdf0e10cSrcweir { 570*cdf0e10cSrcweir ImageList* pList = NULL; 571*cdf0e10cSrcweir 572*cdf0e10cSrcweir static ImageList* _pSmallOfficeImgList = NULL; 573*cdf0e10cSrcweir static ImageList* _pBigOfficeImgList = NULL; 574*cdf0e10cSrcweir static ImageList* _pSmallHCOfficeImgList = NULL; 575*cdf0e10cSrcweir static ImageList* _pBigHCOfficeImgList = NULL; 576*cdf0e10cSrcweir static sal_uLong nStyle = Application::GetSettings().GetStyleSettings().GetSymbolsStyle(); 577*cdf0e10cSrcweir 578*cdf0e10cSrcweir // If the style has been changed, throw away our cache of the older images 579*cdf0e10cSrcweir if ( nStyle != Application::GetSettings().GetStyleSettings().GetSymbolsStyle() ) 580*cdf0e10cSrcweir { 581*cdf0e10cSrcweir delete _pSmallOfficeImgList, _pSmallOfficeImgList = NULL; 582*cdf0e10cSrcweir delete _pBigOfficeImgList, _pBigOfficeImgList = NULL; 583*cdf0e10cSrcweir delete _pSmallHCOfficeImgList, _pSmallHCOfficeImgList = NULL; 584*cdf0e10cSrcweir delete _pBigHCOfficeImgList, _pBigHCOfficeImgList = NULL; 585*cdf0e10cSrcweir nStyle = Application::GetSettings().GetStyleSettings().GetSymbolsStyle(); 586*cdf0e10cSrcweir } 587*cdf0e10cSrcweir 588*cdf0e10cSrcweir // #i21242# MT: For B&W we need the HC Image and must transform. 589*cdf0e10cSrcweir // bHiContrast is sal_True for all dark backgrounds, but we need HC Images for HC White also, 590*cdf0e10cSrcweir // so we can't rely on bHighContrast. 591*cdf0e10cSrcweir sal_Bool bBlackAndWhite = Application::GetSettings().GetStyleSettings().IsHighContrastBlackAndWhite(); 592*cdf0e10cSrcweir if ( bBlackAndWhite ) 593*cdf0e10cSrcweir bHighContrast = sal_True; 594*cdf0e10cSrcweir 595*cdf0e10cSrcweir 596*cdf0e10cSrcweir if ( bBig ) 597*cdf0e10cSrcweir { 598*cdf0e10cSrcweir if ( bHighContrast ) 599*cdf0e10cSrcweir { 600*cdf0e10cSrcweir if ( !_pBigHCOfficeImgList ) 601*cdf0e10cSrcweir _pBigHCOfficeImgList = CreateImageList_Impl( RID_SVTOOLS_IMAGELIST_BIG_HIGHCONTRAST ); 602*cdf0e10cSrcweir pList = _pBigHCOfficeImgList; 603*cdf0e10cSrcweir } 604*cdf0e10cSrcweir else 605*cdf0e10cSrcweir { 606*cdf0e10cSrcweir if ( !_pBigOfficeImgList ) 607*cdf0e10cSrcweir _pBigOfficeImgList = CreateImageList_Impl( RID_SVTOOLS_IMAGELIST_BIG ); 608*cdf0e10cSrcweir pList = _pBigOfficeImgList; 609*cdf0e10cSrcweir } 610*cdf0e10cSrcweir } 611*cdf0e10cSrcweir else 612*cdf0e10cSrcweir { 613*cdf0e10cSrcweir if ( bHighContrast ) 614*cdf0e10cSrcweir { 615*cdf0e10cSrcweir if ( !_pSmallHCOfficeImgList ) 616*cdf0e10cSrcweir _pSmallHCOfficeImgList = CreateImageList_Impl( RID_SVTOOLS_IMAGELIST_SMALL_HIGHCONTRAST ); 617*cdf0e10cSrcweir pList = _pSmallHCOfficeImgList; 618*cdf0e10cSrcweir } 619*cdf0e10cSrcweir else 620*cdf0e10cSrcweir { 621*cdf0e10cSrcweir if ( !_pSmallOfficeImgList ) 622*cdf0e10cSrcweir _pSmallOfficeImgList = CreateImageList_Impl( RID_SVTOOLS_IMAGELIST_SMALL ); 623*cdf0e10cSrcweir pList = _pSmallOfficeImgList; 624*cdf0e10cSrcweir } 625*cdf0e10cSrcweir } 626*cdf0e10cSrcweir 627*cdf0e10cSrcweir Image aImage = pList->GetImage( nImageId ); 628*cdf0e10cSrcweir 629*cdf0e10cSrcweir if ( bBlackAndWhite ) 630*cdf0e10cSrcweir { 631*cdf0e10cSrcweir // First invert the Image, because it's designed for black background, structures are bright 632*cdf0e10cSrcweir aImage.Invert(); 633*cdf0e10cSrcweir // Now make monochrome... 634*cdf0e10cSrcweir ImageColorTransform eTrans = IMAGECOLORTRANSFORM_MONOCHROME_WHITE; 635*cdf0e10cSrcweir if ( Application::GetSettings().GetStyleSettings().GetFaceColor().GetColor() == COL_WHITE ) 636*cdf0e10cSrcweir eTrans = IMAGECOLORTRANSFORM_MONOCHROME_BLACK; 637*cdf0e10cSrcweir aImage = aImage.GetColorTransformedImage( eTrans ); 638*cdf0e10cSrcweir } 639*cdf0e10cSrcweir 640*cdf0e10cSrcweir return aImage; 641*cdf0e10cSrcweir } 642*cdf0e10cSrcweir */ 643*cdf0e10cSrcweir 644*cdf0e10cSrcweir static Image GetImageFromList_Impl( sal_uInt16 nImageId, sal_Bool bBig, sal_Bool bHighContrast ) 645*cdf0e10cSrcweir { 646*cdf0e10cSrcweir if ( !bBig && IMG_FOLDER == nImageId && !bHighContrast ) 647*cdf0e10cSrcweir // return our new small folder image (256 colors) 648*cdf0e10cSrcweir return Image( SvtResId( IMG_SVT_FOLDER ) ); 649*cdf0e10cSrcweir 650*cdf0e10cSrcweir ImageList* pList = NULL; 651*cdf0e10cSrcweir 652*cdf0e10cSrcweir static ImageList* _pSmallImageList = NULL; 653*cdf0e10cSrcweir static ImageList* _pBigImageList = NULL; 654*cdf0e10cSrcweir static ImageList* _pSmallHCImageList = NULL; 655*cdf0e10cSrcweir static ImageList* _pBigHCImageList = NULL; 656*cdf0e10cSrcweir static sal_uLong nStyle = Application::GetSettings().GetStyleSettings().GetSymbolsStyle(); 657*cdf0e10cSrcweir 658*cdf0e10cSrcweir // If the style has been changed, throw away our cache of the older images 659*cdf0e10cSrcweir if ( nStyle != Application::GetSettings().GetStyleSettings().GetSymbolsStyle() ) 660*cdf0e10cSrcweir { 661*cdf0e10cSrcweir delete _pSmallImageList, _pSmallImageList = NULL; 662*cdf0e10cSrcweir delete _pBigImageList, _pBigImageList = NULL; 663*cdf0e10cSrcweir delete _pSmallHCImageList, _pSmallHCImageList = NULL; 664*cdf0e10cSrcweir delete _pBigHCImageList, _pBigHCImageList = NULL; 665*cdf0e10cSrcweir nStyle = Application::GetSettings().GetStyleSettings().GetSymbolsStyle(); 666*cdf0e10cSrcweir } 667*cdf0e10cSrcweir 668*cdf0e10cSrcweir if ( bBig ) 669*cdf0e10cSrcweir { 670*cdf0e10cSrcweir if ( bHighContrast ) 671*cdf0e10cSrcweir { 672*cdf0e10cSrcweir if ( !_pBigHCImageList ) 673*cdf0e10cSrcweir _pBigHCImageList = new ImageList( SvtResId( RID_SVTOOLS_IMAGELIST_BIG_HIGHCONTRAST ) ); 674*cdf0e10cSrcweir pList = _pBigHCImageList; 675*cdf0e10cSrcweir } 676*cdf0e10cSrcweir else 677*cdf0e10cSrcweir { 678*cdf0e10cSrcweir if ( !_pBigImageList ) 679*cdf0e10cSrcweir _pBigImageList = new ImageList( SvtResId( RID_SVTOOLS_IMAGELIST_BIG ) ); 680*cdf0e10cSrcweir pList = _pBigImageList; 681*cdf0e10cSrcweir } 682*cdf0e10cSrcweir } 683*cdf0e10cSrcweir else 684*cdf0e10cSrcweir { 685*cdf0e10cSrcweir if ( bHighContrast ) 686*cdf0e10cSrcweir { 687*cdf0e10cSrcweir if ( !_pSmallHCImageList ) 688*cdf0e10cSrcweir _pSmallHCImageList = new ImageList( SvtResId( RID_SVTOOLS_IMAGELIST_SMALL_HIGHCONTRAST ) ); 689*cdf0e10cSrcweir pList = _pSmallHCImageList; 690*cdf0e10cSrcweir } 691*cdf0e10cSrcweir else 692*cdf0e10cSrcweir { 693*cdf0e10cSrcweir if ( !_pSmallImageList ) 694*cdf0e10cSrcweir _pSmallImageList = new ImageList( SvtResId( RID_SVTOOLS_IMAGELIST_SMALL ) ); 695*cdf0e10cSrcweir pList = _pSmallImageList; 696*cdf0e10cSrcweir } 697*cdf0e10cSrcweir } 698*cdf0e10cSrcweir 699*cdf0e10cSrcweir if ( pList->HasImageAtPos( nImageId ) ) 700*cdf0e10cSrcweir return pList->GetImage( nImageId ); 701*cdf0e10cSrcweir else 702*cdf0e10cSrcweir return Image(); 703*cdf0e10cSrcweir //return GetOfficeImageFromList_Impl( nImageId, bBig, bHighContrast ); 704*cdf0e10cSrcweir } 705*cdf0e10cSrcweir 706*cdf0e10cSrcweir //**************************************************************************** 707*cdf0e10cSrcweir 708*cdf0e10cSrcweir void ReplaceStarOfficeVar( String& _rDescription ) 709*cdf0e10cSrcweir { 710*cdf0e10cSrcweir static String sVariable( RTL_CONSTASCII_STRINGPARAM( "%STAROFFICE" ) ); 711*cdf0e10cSrcweir static String sProductName; 712*cdf0e10cSrcweir if ( sProductName.Len() == 0 ) 713*cdf0e10cSrcweir { 714*cdf0e10cSrcweir ::rtl::OUString sTemp; 715*cdf0e10cSrcweir ::utl::ConfigManager::GetDirectConfigProperty( ::utl::ConfigManager::PRODUCTNAME ) >>= sTemp; 716*cdf0e10cSrcweir if ( sTemp.equalsAscii( "StarSuite" ) == sal_False ) 717*cdf0e10cSrcweir sProductName = String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "StarOffice" ) ); 718*cdf0e10cSrcweir else 719*cdf0e10cSrcweir sProductName = String( sTemp ); 720*cdf0e10cSrcweir } 721*cdf0e10cSrcweir _rDescription.SearchAndReplace( sVariable, sProductName ); 722*cdf0e10cSrcweir } 723*cdf0e10cSrcweir 724*cdf0e10cSrcweir String SvFileInformationManager::GetDescription_Impl( const INetURLObject& rObject, sal_Bool bDetectFolder ) 725*cdf0e10cSrcweir { 726*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aTimeLog, "svtools", "hb93813", "SvFileInformationManager::GetDescription_Impl()" ); 727*cdf0e10cSrcweir 728*cdf0e10cSrcweir String sDescription; 729*cdf0e10cSrcweir String sExtension( rObject.getExtension() ), sURL( rObject.GetMainURL( INetURLObject::NO_DECODE ) ); 730*cdf0e10cSrcweir sal_uInt16 nResId = 0; 731*cdf0e10cSrcweir sal_Bool bShowExt = sal_False, bDetected = sal_False, bOnlyFile = sal_False; 732*cdf0e10cSrcweir sal_Bool bFolder = bDetectFolder ? CONTENT_HELPER::IsFolder( sURL ) : sal_False; 733*cdf0e10cSrcweir if ( !bFolder ) 734*cdf0e10cSrcweir { 735*cdf0e10cSrcweir if ( !bDetected ) 736*cdf0e10cSrcweir { 737*cdf0e10cSrcweir if ( rObject.GetProtocol() == INET_PROT_PRIVATE ) 738*cdf0e10cSrcweir { 739*cdf0e10cSrcweir String aURLPath = sURL.Copy( URL_PREFIX_PRIV_SOFFICE_LEN ); 740*cdf0e10cSrcweir String aType = aURLPath.GetToken( 0, INET_PATH_TOKEN ); 741*cdf0e10cSrcweir if ( aType == String( RTL_CONSTASCII_STRINGPARAM("factory") ) ) 742*cdf0e10cSrcweir { 743*cdf0e10cSrcweir sDescription = GetDescriptionByFactory_Impl( aURLPath.Copy( aURLPath.Search( INET_PATH_TOKEN ) + 1 ) ); 744*cdf0e10cSrcweir bDetected = sal_True; 745*cdf0e10cSrcweir } 746*cdf0e10cSrcweir } 747*cdf0e10cSrcweir 748*cdf0e10cSrcweir if ( !bDetected ) 749*cdf0e10cSrcweir { 750*cdf0e10cSrcweir // search a description by extension 751*cdf0e10cSrcweir sal_Bool bExt = ( sExtension.Len() > 0 ); 752*cdf0e10cSrcweir if ( bExt ) 753*cdf0e10cSrcweir { 754*cdf0e10cSrcweir sExtension.ToLowerAscii(); 755*cdf0e10cSrcweir nResId = GetDescriptionId_Impl( sExtension, bShowExt ); 756*cdf0e10cSrcweir } 757*cdf0e10cSrcweir if ( !nResId ) 758*cdf0e10cSrcweir { 759*cdf0e10cSrcweir nResId = STR_DESCRIPTION_FILE; 760*cdf0e10cSrcweir bOnlyFile = bExt; 761*cdf0e10cSrcweir } 762*cdf0e10cSrcweir } 763*cdf0e10cSrcweir } 764*cdf0e10cSrcweir } 765*cdf0e10cSrcweir else 766*cdf0e10cSrcweir nResId = GetFolderDescriptionId_Impl( sURL ); 767*cdf0e10cSrcweir 768*cdf0e10cSrcweir if ( nResId > 0 ) 769*cdf0e10cSrcweir { 770*cdf0e10cSrcweir if ( bOnlyFile ) 771*cdf0e10cSrcweir { 772*cdf0e10cSrcweir bShowExt = sal_False; 773*cdf0e10cSrcweir sExtension.ToUpperAscii(); 774*cdf0e10cSrcweir sDescription = sExtension; 775*cdf0e10cSrcweir sDescription += '-'; 776*cdf0e10cSrcweir } 777*cdf0e10cSrcweir ::vos::OGuard aGuard( Application::GetSolarMutex() ); 778*cdf0e10cSrcweir sDescription += String( SvtResId( nResId ) ); 779*cdf0e10cSrcweir } 780*cdf0e10cSrcweir 781*cdf0e10cSrcweir DBG_ASSERT( sDescription.Len() > 0, "file without description" ); 782*cdf0e10cSrcweir 783*cdf0e10cSrcweir if ( bShowExt ) 784*cdf0e10cSrcweir { 785*cdf0e10cSrcweir sDescription += String( RTL_CONSTASCII_STRINGPARAM(" (") ); 786*cdf0e10cSrcweir sDescription += sExtension; 787*cdf0e10cSrcweir sDescription += ')'; 788*cdf0e10cSrcweir } 789*cdf0e10cSrcweir 790*cdf0e10cSrcweir ReplaceStarOfficeVar( sDescription ); 791*cdf0e10cSrcweir return sDescription; 792*cdf0e10cSrcweir } 793*cdf0e10cSrcweir 794*cdf0e10cSrcweir Image SvFileInformationManager::GetImage( const INetURLObject& rObject, sal_Bool bBig ) 795*cdf0e10cSrcweir { 796*cdf0e10cSrcweir return GetImage( rObject, bBig, sal_False ); 797*cdf0e10cSrcweir } 798*cdf0e10cSrcweir 799*cdf0e10cSrcweir Image SvFileInformationManager::GetFileImage( const INetURLObject& rObject, sal_Bool bBig ) 800*cdf0e10cSrcweir { 801*cdf0e10cSrcweir return GetFileImage( rObject, bBig, sal_False ); 802*cdf0e10cSrcweir } 803*cdf0e10cSrcweir 804*cdf0e10cSrcweir Image SvFileInformationManager::GetImageNoDefault( const INetURLObject& rObject, sal_Bool bBig ) 805*cdf0e10cSrcweir { 806*cdf0e10cSrcweir return GetImageNoDefault( rObject, bBig, sal_False ); 807*cdf0e10cSrcweir } 808*cdf0e10cSrcweir 809*cdf0e10cSrcweir Image SvFileInformationManager::GetFolderImage( const svtools::VolumeInfo& rInfo, sal_Bool bBig ) 810*cdf0e10cSrcweir { 811*cdf0e10cSrcweir return GetFolderImage( rInfo, bBig, sal_False ); 812*cdf0e10cSrcweir } 813*cdf0e10cSrcweir 814*cdf0e10cSrcweir Image SvFileInformationManager::GetImage( const INetURLObject& rObject, sal_Bool bBig, sal_Bool bHighContrast ) 815*cdf0e10cSrcweir { 816*cdf0e10cSrcweir sal_uInt16 nImage = GetImageId_Impl( rObject, sal_True ); 817*cdf0e10cSrcweir DBG_ASSERT( nImage, "invalid ImageId" ); 818*cdf0e10cSrcweir return GetImageFromList_Impl( nImage, bBig, bHighContrast ); 819*cdf0e10cSrcweir } 820*cdf0e10cSrcweir 821*cdf0e10cSrcweir Image SvFileInformationManager::GetFileImage( const INetURLObject& rObject, sal_Bool bBig, sal_Bool bHighContrast ) 822*cdf0e10cSrcweir { 823*cdf0e10cSrcweir sal_uInt16 nImage = GetImageId_Impl( rObject, sal_False ); 824*cdf0e10cSrcweir DBG_ASSERT( nImage, "invalid ImageId" ); 825*cdf0e10cSrcweir return GetImageFromList_Impl( nImage, bBig, bHighContrast ); 826*cdf0e10cSrcweir } 827*cdf0e10cSrcweir 828*cdf0e10cSrcweir Image SvFileInformationManager::GetImageNoDefault( const INetURLObject& rObject, sal_Bool bBig, sal_Bool bHighContrast ) 829*cdf0e10cSrcweir { 830*cdf0e10cSrcweir sal_uInt16 nImage = GetImageId_Impl( rObject, sal_True ); 831*cdf0e10cSrcweir DBG_ASSERT( nImage, "invalid ImageId" ); 832*cdf0e10cSrcweir 833*cdf0e10cSrcweir if ( nImage == IMG_FILE ) 834*cdf0e10cSrcweir return Image(); 835*cdf0e10cSrcweir 836*cdf0e10cSrcweir return GetImageFromList_Impl( nImage, bBig, bHighContrast ); 837*cdf0e10cSrcweir } 838*cdf0e10cSrcweir 839*cdf0e10cSrcweir Image SvFileInformationManager::GetFolderImage( const svtools::VolumeInfo& rInfo, sal_Bool bBig, sal_Bool bHighContrast ) 840*cdf0e10cSrcweir { 841*cdf0e10cSrcweir sal_uInt16 nImage = IMG_FOLDER; 842*cdf0e10cSrcweir DBG_ASSERT( nImage, "invalid ImageId" ); 843*cdf0e10cSrcweir 844*cdf0e10cSrcweir if ( rInfo.m_bIsRemote ) 845*cdf0e10cSrcweir nImage = IMG_NETWORKDEV; 846*cdf0e10cSrcweir else if ( rInfo.m_bIsCompactDisc ) 847*cdf0e10cSrcweir nImage = IMG_CDROMDEV; 848*cdf0e10cSrcweir else if ( rInfo.m_bIsRemoveable || rInfo.m_bIsFloppy ) 849*cdf0e10cSrcweir nImage = IMG_REMOVEABLEDEV; 850*cdf0e10cSrcweir else if ( rInfo.m_bIsVolume ) 851*cdf0e10cSrcweir nImage = IMG_FIXEDDEV; 852*cdf0e10cSrcweir 853*cdf0e10cSrcweir return GetImageFromList_Impl( nImage, bBig, bHighContrast ); 854*cdf0e10cSrcweir } 855*cdf0e10cSrcweir 856*cdf0e10cSrcweir String SvFileInformationManager::GetDescription( const INetURLObject& rObject ) 857*cdf0e10cSrcweir { 858*cdf0e10cSrcweir return SvFileInformationManager::GetDescription_Impl( rObject, sal_True ); 859*cdf0e10cSrcweir } 860*cdf0e10cSrcweir 861*cdf0e10cSrcweir String SvFileInformationManager::GetFileDescription( const INetURLObject& rObject ) 862*cdf0e10cSrcweir { 863*cdf0e10cSrcweir return SvFileInformationManager::GetDescription_Impl( rObject, sal_False ); 864*cdf0e10cSrcweir } 865*cdf0e10cSrcweir 866*cdf0e10cSrcweir String SvFileInformationManager::GetFolderDescription( const svtools::VolumeInfo& rInfo ) 867*cdf0e10cSrcweir { 868*cdf0e10cSrcweir sal_uInt16 nResId = STR_DESCRIPTION_FOLDER; 869*cdf0e10cSrcweir if ( rInfo.m_bIsRemote ) 870*cdf0e10cSrcweir nResId = STR_DESCRIPTION_REMOTE_VOLUME; 871*cdf0e10cSrcweir else if ( rInfo.m_bIsFloppy ) 872*cdf0e10cSrcweir nResId = STR_DESCRIPTION_FLOPPY_VOLUME; 873*cdf0e10cSrcweir else if ( rInfo.m_bIsCompactDisc ) 874*cdf0e10cSrcweir nResId = STR_DESCRIPTION_CDROM_VOLUME; 875*cdf0e10cSrcweir else if ( rInfo.m_bIsRemoveable || rInfo.m_bIsVolume ) 876*cdf0e10cSrcweir nResId = STR_DESCRIPTION_LOCALE_VOLUME; 877*cdf0e10cSrcweir 878*cdf0e10cSrcweir String sDescription = String( SvtResId( nResId ) ); 879*cdf0e10cSrcweir return sDescription; 880*cdf0e10cSrcweir } 881*cdf0e10cSrcweir 882