File: | home/maarten/src/libreoffice/core/svtools/source/misc/imagemgr.cxx |
Warning: | line 401, column 20 Potential leak of memory pointed to by 'aStorage.pObj' |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
1 | /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | |||
2 | /* | |||
3 | * This file is part of the LibreOffice project. | |||
4 | * | |||
5 | * This Source Code Form is subject to the terms of the Mozilla Public | |||
6 | * License, v. 2.0. If a copy of the MPL was not distributed with this | |||
7 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. | |||
8 | * | |||
9 | * This file incorporates work covered by the following license notice: | |||
10 | * | |||
11 | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
12 | * contributor license agreements. See the NOTICE file distributed | |||
13 | * with this work for additional information regarding copyright | |||
14 | * ownership. The ASF licenses this file to you under the Apache | |||
15 | * License, Version 2.0 (the "License"); you may not use this file | |||
16 | * except in compliance with the License. You may obtain a copy of | |||
17 | * the License at http://www.apache.org/licenses/LICENSE-2.0 . | |||
18 | */ | |||
19 | ||||
20 | #include <svtools/imagemgr.hxx> | |||
21 | #include <tools/diagnose_ex.h> | |||
22 | #include <tools/urlobj.hxx> | |||
23 | #include <tools/debug.hxx> | |||
24 | #include <vcl/image.hxx> | |||
25 | #include <sot/storage.hxx> | |||
26 | #include <comphelper/classids.hxx> | |||
27 | #include <unotools/ucbhelper.hxx> | |||
28 | #include <comphelper/processfactory.hxx> | |||
29 | #include <com/sun/star/beans/PropertyValue.hpp> | |||
30 | #include <com/sun/star/container/XNameAccess.hpp> | |||
31 | #include <com/sun/star/document/XTypeDetection.hpp> | |||
32 | #include <com/sun/star/ucb/ContentCreationException.hpp> | |||
33 | #include <com/sun/star/ucb/XCommandEnvironment.hpp> | |||
34 | #include <com/sun/star/uno/XComponentContext.hpp> | |||
35 | #include <ucbhelper/content.hxx> | |||
36 | #include <svtools/strings.hrc> | |||
37 | #include <svtools/svtresid.hxx> | |||
38 | #include <bitmaps.hlst> | |||
39 | #include <strings.hxx> | |||
40 | ||||
41 | // globals ******************************************************************* | |||
42 | ||||
43 | #define NO_INDEX(-1) (-1) | |||
44 | #define CONTENT_HELPER::utl::UCBContentHelper ::utl::UCBContentHelper | |||
45 | ||||
46 | namespace { | |||
47 | ||||
48 | struct SvtExtensionResIdMapping_Impl | |||
49 | { | |||
50 | const char* _pExt; | |||
51 | bool _bExt; | |||
52 | const char* pStrId; | |||
53 | SvImageId _nImgId; | |||
54 | }; | |||
55 | ||||
56 | } | |||
57 | ||||
58 | SvtExtensionResIdMapping_Impl const ExtensionMap_Impl[] = | |||
59 | { | |||
60 | { "awk", true, STR_DESCRIPTION_SOURCEFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SOURCEFILE" "\004" u8"Source code"), SvImageId::NONE }, | |||
61 | { "bas", true, STR_DESCRIPTION_SOURCEFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SOURCEFILE" "\004" u8"Source code"), SvImageId::NONE }, | |||
62 | { "bat", true, STR_DESCRIPTION_BATCHFILEreinterpret_cast<char const *>("STR_DESCRIPTION_BATCHFILE" "\004" u8"Batch file"), SvImageId::NONE }, | |||
63 | { "bmk", false, STR_DESCRIPTION_BOOKMARKFILEreinterpret_cast<char const *>("STR_DESCRIPTION_BOOKMARKFILE" "\004" u8"Bookmark file"), SvImageId::NONE }, | |||
64 | { "bmp", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC" "\004" u8"Graphics"), SvImageId::Bitmap }, | |||
65 | { "c", true, STR_DESCRIPTION_SOURCEFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SOURCEFILE" "\004" u8"Source code"), SvImageId::NONE }, | |||
66 | { "cfg", false, STR_DESCRIPTION_CFGFILEreinterpret_cast<char const *>("STR_DESCRIPTION_CFGFILE" "\004" u8"Configuration file"), SvImageId::NONE }, | |||
67 | { "cmd", true, STR_DESCRIPTION_BATCHFILEreinterpret_cast<char const *>("STR_DESCRIPTION_BATCHFILE" "\004" u8"Batch file"), SvImageId::NONE }, | |||
68 | { "cob", true, STR_DESCRIPTION_SOURCEFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SOURCEFILE" "\004" u8"Source code"), SvImageId::NONE }, | |||
69 | { "com", true, STR_DESCRIPTION_APPLICATIONreinterpret_cast<char const *>("STR_DESCRIPTION_APPLICATION" "\004" u8"Application"), SvImageId::NONE }, | |||
70 | { "cxx", true, STR_DESCRIPTION_SOURCEFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SOURCEFILE" "\004" u8"Source code"), SvImageId::NONE }, | |||
71 | { "dbf", true, STR_DESCRIPTION_DATABASE_TABLEreinterpret_cast<char const *>("STR_DESCRIPTION_DATABASE_TABLE" "\004" u8"Database table"), SvImageId::Table }, | |||
72 | { "def", true, STR_DESCRIPTION_SOURCEFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SOURCEFILE" "\004" u8"Source code"), SvImageId::NONE }, | |||
73 | { "dll", true, STR_DESCRIPTION_SYSFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SYSFILE" "\004" u8"System file"), SvImageId::NONE }, | |||
74 | { "doc", false, STR_DESCRIPTION_WORD_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_WORD_DOC" "\004" u8"MS Word document"), SvImageId::Writer }, | |||
75 | { "dot", false, STR_DESCRIPTION_WORD_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_WORD_DOC" "\004" u8"MS Word document"), SvImageId::WriterTemplate }, | |||
76 | { "docx", false, STR_DESCRIPTION_WORD_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_WORD_DOC" "\004" u8"MS Word document"), SvImageId::Writer }, | |||
77 | { "dxf", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC" "\004" u8"Graphics"), SvImageId::DXF }, | |||
78 | { "exe", true, STR_DESCRIPTION_APPLICATIONreinterpret_cast<char const *>("STR_DESCRIPTION_APPLICATION" "\004" u8"Application"), SvImageId::NONE }, | |||
79 | { "gif", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC" "\004" u8"Graphics"), SvImageId::GIF }, | |||
80 | { "h", true, STR_DESCRIPTION_SOURCEFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SOURCEFILE" "\004" u8"Source code"), SvImageId::NONE }, | |||
81 | { "hlp", false, STR_DESCRIPTION_HELP_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_HELP_DOC" "\004" u8"Help file"), SvImageId::NONE }, | |||
82 | { "hrc", true, STR_DESCRIPTION_SOURCEFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SOURCEFILE" "\004" u8"Source code"), SvImageId::NONE }, | |||
83 | { "htm", false, STR_DESCRIPTION_HTMLFILEreinterpret_cast<char const *>("STR_DESCRIPTION_HTMLFILE" "\004" u8"HTML document"), SvImageId::HTML }, | |||
84 | { "html", false, STR_DESCRIPTION_HTMLFILEreinterpret_cast<char const *>("STR_DESCRIPTION_HTMLFILE" "\004" u8"HTML document"), SvImageId::HTML }, | |||
85 | { "asp", false, STR_DESCRIPTION_HTMLFILEreinterpret_cast<char const *>("STR_DESCRIPTION_HTMLFILE" "\004" u8"HTML document"), SvImageId::HTML }, | |||
86 | { "hxx", true, STR_DESCRIPTION_SOURCEFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SOURCEFILE" "\004" u8"Source code"), SvImageId::NONE }, | |||
87 | { "ini", false, STR_DESCRIPTION_CFGFILEreinterpret_cast<char const *>("STR_DESCRIPTION_CFGFILE" "\004" u8"Configuration file"), SvImageId::NONE }, | |||
88 | { "java", true, STR_DESCRIPTION_SOURCEFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SOURCEFILE" "\004" u8"Source code"), SvImageId::NONE }, | |||
89 | { "jpeg", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC" "\004" u8"Graphics"), SvImageId::JPG }, | |||
90 | { "jpg", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC" "\004" u8"Graphics"), SvImageId::JPG }, | |||
91 | { "lha", true, STR_DESCRIPTION_ARCHIVFILEreinterpret_cast<char const *>("STR_DESCRIPTION_ARCHIVFILE" "\004" u8"Archive file"), SvImageId::NONE }, | |||
92 | #ifdef _WIN32 | |||
93 | { "lnk", false, nullptr, SvImageId::NONE }, | |||
94 | #endif | |||
95 | { "log", true, STR_DESCRIPTION_LOGFILEreinterpret_cast<char const *>("STR_DESCRIPTION_LOGFILE" "\004" u8"Log file"), SvImageId::NONE }, | |||
96 | { "lst", true, STR_DESCRIPTION_LOGFILEreinterpret_cast<char const *>("STR_DESCRIPTION_LOGFILE" "\004" u8"Log file"), SvImageId::NONE }, | |||
97 | { "met", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC" "\004" u8"Graphics"), SvImageId::MET }, | |||
98 | { "mml", false, STR_DESCRIPTION_MATHML_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_MATHML_DOC" "\004" u8"MathML Document"), SvImageId::Math }, | |||
99 | { "mod", true, STR_DESCRIPTION_SOURCEFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SOURCEFILE" "\004" u8"Source code"), SvImageId::NONE }, | |||
100 | { "odb", false, STR_DESCRIPTION_OO_DATABASE_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_OO_DATABASE_DOC" "\004" u8"OpenDocument Database"), SvImageId::OO_DatabaseDoc }, | |||
101 | { "odg", false, STR_DESCRIPTION_OO_DRAW_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_OO_DRAW_DOC" "\004" u8"OpenDocument Drawing"), SvImageId::OO_DrawDoc }, | |||
102 | { "odf", false, STR_DESCRIPTION_OO_MATH_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_OO_MATH_DOC" "\004" u8"OpenDocument Formula"), SvImageId::OO_MathDoc }, | |||
103 | { "odm", false, STR_DESCRIPTION_OO_GLOBAL_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_OO_GLOBAL_DOC" "\004" u8"OpenDocument Master Document"), SvImageId::OO_GlobalDoc }, | |||
104 | { "odp", false, STR_DESCRIPTION_OO_IMPRESS_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_OO_IMPRESS_DOC" "\004" u8"OpenDocument Presentation"), SvImageId::OO_ImpressDoc }, | |||
105 | { "ods", false, STR_DESCRIPTION_OO_CALC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_OO_CALC_DOC" "\004" u8"OpenDocument Spreadsheet"), SvImageId::OO_CalcDoc }, | |||
106 | { "odt", false, STR_DESCRIPTION_OO_WRITER_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_OO_WRITER_DOC" "\004" u8"OpenDocument Text"), SvImageId::OO_WriterDoc }, | |||
107 | { "otg", false, STR_DESCRIPTION_OO_DRAW_TEMPLATEreinterpret_cast<char const *>("STR_DESCRIPTION_OO_DRAW_TEMPLATE" "\004" u8"OpenDocument Drawing Template"), SvImageId::OO_DrawTemplate }, | |||
108 | { "otp", false, STR_DESCRIPTION_OO_IMPRESS_TEMPLATEreinterpret_cast<char const *>("STR_DESCRIPTION_OO_IMPRESS_TEMPLATE" "\004" u8"OpenDocument Presentation Template"), SvImageId::OO_ImpressTemplate }, | |||
109 | { "ots", false, STR_DESCRIPTION_OO_CALC_TEMPLATEreinterpret_cast<char const *>("STR_DESCRIPTION_OO_CALC_TEMPLATE" "\004" u8"OpenDocument Spreadsheet Template"), SvImageId::OO_CalcTemplate }, | |||
110 | { "ott", false, STR_DESCRIPTION_OO_WRITER_TEMPLATEreinterpret_cast<char const *>("STR_DESCRIPTION_OO_WRITER_TEMPLATE" "\004" u8"OpenDocument Text Template"), SvImageId::OO_WriterTemplate }, | |||
111 | { "pas", true, STR_DESCRIPTION_SOURCEFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SOURCEFILE" "\004" u8"Source code"), SvImageId::NONE }, | |||
112 | { "pcd", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC" "\004" u8"Graphics"), SvImageId::PCD }, | |||
113 | { "pct", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC" "\004" u8"Graphics"), SvImageId::PCT }, | |||
114 | { "pict", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC" "\004" u8"Graphics"), SvImageId::PCT }, | |||
115 | { "pcx", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC" "\004" u8"Graphics"), SvImageId::PCX }, | |||
116 | { "pl", true, STR_DESCRIPTION_SOURCEFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SOURCEFILE" "\004" u8"Source code"), SvImageId::NONE }, | |||
117 | { "png", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC" "\004" u8"Graphics"), SvImageId::PNG }, | |||
118 | { "rar", true, STR_DESCRIPTION_ARCHIVFILEreinterpret_cast<char const *>("STR_DESCRIPTION_ARCHIVFILE" "\004" u8"Archive file"), SvImageId::NONE }, | |||
119 | { "rtf", false, STR_DESCRIPTION_WORD_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_WORD_DOC" "\004" u8"MS Word document"), SvImageId::Writer }, | |||
120 | { "sbl", false, nullptr, SvImageId::NONE }, | |||
121 | { "sch", false, nullptr, SvImageId::NONE }, | |||
122 | { "sda", false, STR_DESCRIPTION_SDRAW_DOC"StarDraw 3.0 / 5.0 (StarImpress)", SvImageId::Draw }, | |||
123 | { "sdb", false, STR_DESCRIPTION_SDATABASE_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_SDATABASE_DOC" "\004" u8"StarOffice Database"), SvImageId::Database }, | |||
124 | { "sdc", false, STR_DESCRIPTION_SCALC_DOC"StarCalc 3.0 - 5.0", SvImageId::Calc }, | |||
125 | { "sdd", false, STR_DESCRIPTION_SIMPRESS_DOC"StarImpress 4.0 / 5.0", SvImageId::Impress }, | |||
126 | { "sdp", false, STR_DESCRIPTION_SIMPRESS_DOC"StarImpress 4.0 / 5.0", SvImageId::NONE }, | |||
127 | { "sds", false, STR_DESCRIPTION_SCHART_DOC"StarChart 3.0 - 5.0", SvImageId::NONE }, | |||
128 | { "sdw", false, STR_DESCRIPTION_SWRITER_DOC"StarWriter 3.0 - 5.0", SvImageId::Writer }, | |||
129 | { "sga", false, nullptr, SvImageId::NONE }, | |||
130 | { "sgl", false, STR_DESCRIPTION_GLOBALDOCreinterpret_cast<char const *>("STR_DESCRIPTION_GLOBALDOC" "\004" u8"StarWriter 4.0 / 5.0 Master Document"), SvImageId::GlobalDoc }, | |||
131 | { "shtml", false, STR_DESCRIPTION_HTMLFILEreinterpret_cast<char const *>("STR_DESCRIPTION_HTMLFILE" "\004" u8"HTML document"), SvImageId::HTML }, | |||
132 | { "sim", false, STR_DESCRIPTION_SIMAGE_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_SIMAGE_DOC" "\004" u8"StarOffice Image"), SvImageId::SIM }, | |||
133 | { "smf", false, STR_DESCRIPTION_SMATH_DOC"StarMath 2.0 - 5.0", SvImageId::Math }, | |||
134 | { "src", true, STR_DESCRIPTION_SOURCEFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SOURCEFILE" "\004" u8"Source code"), SvImageId::NONE }, | |||
135 | { "svh", false, STR_DESCRIPTION_HELP_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_HELP_DOC" "\004" u8"Help file"), SvImageId::NONE }, | |||
136 | { "svm", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC" "\004" u8"Graphics"), SvImageId::SVM }, | |||
137 | { "stc", false, STR_DESCRIPTION_CALC_TEMPLATEreinterpret_cast<char const *>("STR_DESCRIPTION_CALC_TEMPLATE" "\004" u8"OpenOffice.org 1.0 Spreadsheet Template"), SvImageId::CalcTemplate }, | |||
138 | { "std", false, STR_DESCRIPTION_DRAW_TEMPLATEreinterpret_cast<char const *>("STR_DESCRIPTION_DRAW_TEMPLATE" "\004" u8"OpenOffice.org 1.0 Drawing Template"), SvImageId::DrawTemplate }, | |||
139 | { "sti", false, STR_DESCRIPTION_IMPRESS_TEMPLATEreinterpret_cast<char const *>("STR_DESCRIPTION_IMPRESS_TEMPLATE" "\004" u8"OpenOffice.org 1.0 Presentation Template"), SvImageId::ImpressTemplate }, | |||
140 | { "stw", false, STR_DESCRIPTION_WRITER_TEMPLATEreinterpret_cast<char const *>("STR_DESCRIPTION_WRITER_TEMPLATE" "\004" u8"OpenOffice.org 1.0 Text Document Template"), SvImageId::WriterTemplate }, | |||
141 | { "sxc", false, STR_DESCRIPTION_SXCALC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_SXCALC_DOC" "\004" u8"OpenOffice.org 1.0 Spreadsheet"), SvImageId::Calc }, | |||
142 | { "sxd", false, STR_DESCRIPTION_SXDRAW_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_SXDRAW_DOC" "\004" u8"OpenOffice.org 1.0 Drawing"), SvImageId::Draw }, | |||
143 | { "sxg", false, STR_DESCRIPTION_SXGLOBAL_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_SXGLOBAL_DOC" "\004" u8"OpenOffice.org 1.0 Master Document"), SvImageId::GlobalDoc }, | |||
144 | { "sxi", false, STR_DESCRIPTION_SXIMPRESS_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_SXIMPRESS_DOC" "\004" u8"OpenOffice.org 1.0 Presentation"), SvImageId::Impress }, | |||
145 | { "sxm", false, STR_DESCRIPTION_SXMATH_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_SXMATH_DOC" "\004" u8"OpenOffice.org 1.0 Formula"), SvImageId::Math }, | |||
146 | { "sxs", false, STR_DESCRIPTION_SXCHART_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_SXCHART_DOC" "\004" u8"OpenOffice.org 1.0 Chart"), SvImageId::NONE }, | |||
147 | { "sxw", false, STR_DESCRIPTION_SXWRITER_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_SXWRITER_DOC" "\004" u8"OpenOffice.org 1.0 Text Document"), SvImageId::Writer }, | |||
148 | { "sys", true, STR_DESCRIPTION_SYSFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SYSFILE" "\004" u8"System file"), SvImageId::NONE }, | |||
149 | { "tif", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC" "\004" u8"Graphics"), SvImageId::TIFF }, | |||
150 | { "tiff", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC" "\004" u8"Graphics"), SvImageId::TIFF }, | |||
151 | { "txt", false, STR_DESCRIPTION_TEXTFILEreinterpret_cast<char const *>("STR_DESCRIPTION_TEXTFILE" "\004" u8"Text file"), SvImageId::TextFile }, | |||
152 | { "url", false, STR_DESCRIPTION_LINKreinterpret_cast<char const *>("STR_DESCRIPTION_LINK" "\004" u8"Link"), SvImageId::NONE }, | |||
153 | { "vor", false, STR_DESCRIPTION_SOFFICE_TEMPLATE_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_SOFFICE_TEMPLATE_DOC" "\004" u8"StarOffice 3.0 - 5.0 Template"), SvImageId::WriterTemplate }, | |||
154 | { "vxd", true, STR_DESCRIPTION_SYSFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SYSFILE" "\004" u8"System file"), SvImageId::NONE }, | |||
155 | { "wmf", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC" "\004" u8"Graphics"), SvImageId::WMF }, | |||
156 | { "xls", false, STR_DESCRIPTION_EXCEL_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_EXCEL_DOC" "\004" u8"MS Excel document"), SvImageId::Calc }, | |||
157 | { "xlt", false, STR_DESCRIPTION_EXCEL_TEMPLATE_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_EXCEL_TEMPLATE_DOC" "\004" u8"MS Excel template"), SvImageId::CalcTemplate }, | |||
158 | { "xlsx", false, STR_DESCRIPTION_EXCEL_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_EXCEL_DOC" "\004" u8"MS Excel document"), SvImageId::Calc }, | |||
159 | { "uu", true, STR_DESCRIPTION_ARCHIVFILEreinterpret_cast<char const *>("STR_DESCRIPTION_ARCHIVFILE" "\004" u8"Archive file"), SvImageId::NONE }, | |||
160 | { "uue", true, STR_DESCRIPTION_ARCHIVFILEreinterpret_cast<char const *>("STR_DESCRIPTION_ARCHIVFILE" "\004" u8"Archive file"), SvImageId::NONE }, | |||
161 | { "z", true, STR_DESCRIPTION_ARCHIVFILEreinterpret_cast<char const *>("STR_DESCRIPTION_ARCHIVFILE" "\004" u8"Archive file"), SvImageId::NONE }, | |||
162 | { "zip", true, STR_DESCRIPTION_ARCHIVFILEreinterpret_cast<char const *>("STR_DESCRIPTION_ARCHIVFILE" "\004" u8"Archive file"), SvImageId::NONE }, | |||
163 | { "zoo", true, STR_DESCRIPTION_ARCHIVFILEreinterpret_cast<char const *>("STR_DESCRIPTION_ARCHIVFILE" "\004" u8"Archive file"), SvImageId::NONE }, | |||
164 | { "gz", true, STR_DESCRIPTION_ARCHIVFILEreinterpret_cast<char const *>("STR_DESCRIPTION_ARCHIVFILE" "\004" u8"Archive file"), SvImageId::NONE }, | |||
165 | { "ppt", false, STR_DESCRIPTION_POWERPOINTreinterpret_cast<char const *>("STR_DESCRIPTION_POWERPOINT" "\004" u8"MS PowerPoint Document"), SvImageId::Impress }, | |||
166 | { "pot", false, STR_DESCRIPTION_POWERPOINT_TEMPLATEreinterpret_cast<char const *>("STR_DESCRIPTION_POWERPOINT_TEMPLATE" "\004" u8"MS PowerPoint Template"), SvImageId::ImpressTemplate }, | |||
167 | { "pps", false, STR_DESCRIPTION_POWERPOINT_SHOWreinterpret_cast<char const *>("STR_DESCRIPTION_POWERPOINT_SHOW" "\004" u8"MS PowerPoint Show"), SvImageId::Impress }, | |||
168 | { "pptx", false, STR_DESCRIPTION_POWERPOINTreinterpret_cast<char const *>("STR_DESCRIPTION_POWERPOINT" "\004" u8"MS PowerPoint Document"), SvImageId::Impress }, | |||
169 | { "oxt", false, STR_DESCRIPTION_EXTENSIONreinterpret_cast<char const *>("STR_DESCRIPTION_EXTENSION" "\004" u8"%PRODUCTNAME Extension"), SvImageId::Extension }, | |||
170 | { nullptr, false, nullptr, SvImageId::NONE } | |||
171 | }; | |||
172 | ||||
173 | namespace { | |||
174 | ||||
175 | struct SvtFactory2ExtensionMapping_Impl | |||
176 | { | |||
177 | const char* _pFactory; | |||
178 | const char* _pExtension; | |||
179 | }; | |||
180 | ||||
181 | } | |||
182 | ||||
183 | // mapping from "private:factory" url to extension | |||
184 | ||||
185 | SvtFactory2ExtensionMapping_Impl const Fac2ExtMap_Impl[] = | |||
186 | { | |||
187 | { "swriter", "odt" }, | |||
188 | { "swriter/web", "html" }, | |||
189 | { "swriter/GlobalDocument", "odm" }, | |||
190 | { "scalc", "ods" }, | |||
191 | { "simpress", "odp" }, | |||
192 | { "sdraw", "odg" }, | |||
193 | { "smath", "odf" }, | |||
194 | { "sdatabase", "odb" }, | |||
195 | { nullptr, nullptr } | |||
196 | }; | |||
197 | ||||
198 | ||||
199 | static OUString GetImageExtensionByFactory_Impl( const OUString& rURL ) | |||
200 | { | |||
201 | INetURLObject aObj( rURL ); | |||
202 | OUString aPath = aObj.GetURLPath( INetURLObject::DecodeMechanism::NONE ); | |||
203 | OUString aExtension; | |||
204 | ||||
205 | if ( !aPath.isEmpty() ) | |||
206 | { | |||
207 | sal_uInt16 nIndex = 0; | |||
208 | while ( Fac2ExtMap_Impl[ nIndex ]._pFactory ) | |||
209 | { | |||
210 | if ( aPath.equalsAscii( Fac2ExtMap_Impl[ nIndex ]._pFactory ) ) | |||
211 | { | |||
212 | // extension found | |||
213 | aExtension = OUString::createFromAscii(Fac2ExtMap_Impl[ nIndex ]._pExtension); | |||
214 | // and return it | |||
215 | return aExtension; | |||
216 | } | |||
217 | ++nIndex; | |||
218 | } | |||
219 | } | |||
220 | ||||
221 | // no extension found, so use the type detection (performance brake) | |||
222 | ||||
223 | try | |||
224 | { | |||
225 | // get the TypeDetection service to access all registered types | |||
226 | css::uno::Reference < css::uno::XComponentContext > xContext = ::comphelper::getProcessComponentContext(); | |||
227 | css::uno::Reference < css::document::XTypeDetection > xTypeDetector( | |||
228 | xContext->getServiceManager()->createInstanceWithContext("com.sun.star.document.TypeDetection", xContext), | |||
229 | css::uno::UNO_QUERY ); | |||
230 | ||||
231 | OUString aInternalType = xTypeDetector->queryTypeByURL( rURL ); | |||
232 | css::uno::Reference < css::container::XNameAccess > xAccess( xTypeDetector, css::uno::UNO_QUERY ); | |||
233 | css::uno::Sequence < css::beans::PropertyValue > aTypeProps; | |||
234 | if ( !aInternalType.isEmpty() && xAccess->hasByName( aInternalType ) ) | |||
235 | { | |||
236 | xAccess->getByName( aInternalType ) >>= aTypeProps; | |||
237 | for ( const css::beans::PropertyValue& rProp : std::as_const(aTypeProps) ) | |||
238 | { | |||
239 | if (rProp.Name == "Extensions") | |||
240 | { | |||
241 | css::uno::Sequence < OUString > aExtensions; | |||
242 | if ( ( rProp.Value >>= aExtensions ) && aExtensions.hasElements() ) | |||
243 | { | |||
244 | const OUString* pExtensions = aExtensions.getConstArray(); | |||
245 | aExtension = pExtensions[0]; | |||
246 | break; | |||
247 | } | |||
248 | } | |||
249 | } | |||
250 | } | |||
251 | } | |||
252 | catch( const css::uno::RuntimeException& ) | |||
253 | { | |||
254 | throw; // don't hide it! | |||
255 | } | |||
256 | catch( const css::uno::Exception& ) | |||
257 | { | |||
258 | // type detection failed -> no extension | |||
259 | } | |||
260 | ||||
261 | return aExtension; | |||
262 | } | |||
263 | ||||
264 | static sal_Int32 GetIndexOfExtension_Impl( const OUString& rExtension ) | |||
265 | { | |||
266 | sal_Int32 nRet = NO_INDEX(-1); | |||
267 | if ( !rExtension.isEmpty() ) | |||
268 | { | |||
269 | sal_Int32 nIndex = 0; | |||
270 | OUString aExt = rExtension.toAsciiLowerCase(); | |||
271 | while ( ExtensionMap_Impl[ nIndex ]._pExt ) | |||
272 | { | |||
273 | if ( aExt.equalsAscii( ExtensionMap_Impl[ nIndex ]._pExt ) ) | |||
274 | { | |||
275 | nRet = nIndex; | |||
276 | break; | |||
277 | } | |||
278 | ++nIndex; | |||
279 | } | |||
280 | } | |||
281 | ||||
282 | return nRet; | |||
283 | } | |||
284 | ||||
285 | static SvImageId GetImageId_Impl( const OUString& rExtension ) | |||
286 | { | |||
287 | SvImageId nImage = SvImageId::File; | |||
288 | sal_Int32 nIndex = GetIndexOfExtension_Impl( rExtension ); | |||
289 | if ( nIndex != NO_INDEX(-1) ) | |||
290 | { | |||
291 | nImage = ExtensionMap_Impl[ nIndex ]._nImgId; | |||
292 | if ( nImage == SvImageId::NONE ) | |||
293 | nImage = SvImageId::File; | |||
294 | } | |||
295 | ||||
296 | return nImage; | |||
297 | } | |||
298 | ||||
299 | static bool GetVolumeProperties_Impl( ::ucbhelper::Content& rContent, svtools::VolumeInfo& rVolumeInfo ) | |||
300 | { | |||
301 | bool bRet = false; | |||
302 | ||||
303 | try | |||
304 | { | |||
305 | bRet = ( ( rContent.getPropertyValue( "IsVolume" ) >>= rVolumeInfo.m_bIsVolume ) && | |||
306 | ( rContent.getPropertyValue( "IsRemote" ) >>= rVolumeInfo.m_bIsRemote ) && | |||
307 | ( rContent.getPropertyValue( "IsRemoveable" ) >>= rVolumeInfo.m_bIsRemoveable ) && | |||
308 | ( rContent.getPropertyValue( "IsFloppy" ) >>= rVolumeInfo.m_bIsFloppy ) && | |||
309 | ( rContent.getPropertyValue( "IsCompactDisc" ) >>= rVolumeInfo.m_bIsCompactDisc ) ); | |||
310 | } | |||
311 | catch( const css::uno::RuntimeException& ) | |||
312 | { | |||
313 | throw; // don't hide it! | |||
314 | } | |||
315 | catch( const css::uno::Exception& ) | |||
316 | { | |||
317 | // type detection failed -> no extension | |||
318 | } | |||
319 | ||||
320 | return bRet; | |||
321 | } | |||
322 | ||||
323 | static SvImageId GetFolderImageId_Impl( const OUString& rURL ) | |||
324 | { | |||
325 | SvImageId nRet = SvImageId::Folder; | |||
326 | try | |||
327 | { | |||
328 | ::svtools::VolumeInfo aVolumeInfo; | |||
329 | ::ucbhelper::Content aCnt( rURL, css::uno::Reference< css::ucb::XCommandEnvironment >(), comphelper::getProcessComponentContext() ); | |||
330 | if ( GetVolumeProperties_Impl( aCnt, aVolumeInfo ) ) | |||
331 | { | |||
332 | if ( aVolumeInfo.m_bIsRemote ) | |||
333 | nRet = SvImageId::NetworkDevice; | |||
334 | else if ( aVolumeInfo.m_bIsCompactDisc ) | |||
335 | nRet = SvImageId::CDRomDevice; | |||
336 | else if ( aVolumeInfo.m_bIsRemoveable ) | |||
337 | nRet = SvImageId::RemoveableDevice; | |||
338 | else if ( aVolumeInfo.m_bIsVolume ) | |||
339 | nRet = SvImageId::FixedDevice; | |||
340 | } | |||
341 | } | |||
342 | catch( const css::uno::RuntimeException& ) | |||
343 | { | |||
344 | throw; // don't hide it! | |||
345 | } | |||
346 | catch( const css::uno::Exception& ) | |||
347 | { | |||
348 | ||||
349 | } | |||
350 | return nRet; | |||
351 | } | |||
352 | ||||
353 | static SvImageId GetImageId_Impl( const INetURLObject& rObject, bool bDetectFolder ) | |||
354 | { | |||
355 | OUString aExt, sURL = rObject.GetMainURL( INetURLObject::DecodeMechanism::NONE ); | |||
356 | SvImageId nImage = SvImageId::File; | |||
357 | ||||
358 | if ( rObject.GetProtocol() == INetProtocol::PrivSoffice ) | |||
359 | { | |||
360 | OUString aURLPath = sURL.copy( strlen(URL_PREFIX_PRIV_SOFFICE"private:") ); | |||
361 | OUString aType = aURLPath.getToken( 0, '/' ); | |||
362 | if ( aType == "factory" ) | |||
363 | { | |||
364 | // detect an image id for our "private:factory" urls | |||
365 | aExt = GetImageExtensionByFactory_Impl( sURL ); | |||
366 | if ( !aExt.isEmpty() ) | |||
367 | nImage = GetImageId_Impl( aExt ); | |||
368 | return nImage; | |||
369 | } | |||
370 | else if ( aType == "image" ) | |||
371 | nImage = static_cast<SvImageId>(aURLPath.getToken( 1, '/' ).toInt32()); | |||
372 | } | |||
373 | else | |||
374 | { | |||
375 | aExt = rObject.getExtension(); | |||
376 | if ( aExt == "vor" ) | |||
377 | { | |||
378 | SvImageId nId = SvImageId::WriterTemplate; | |||
379 | try | |||
380 | { | |||
381 | tools::SvRef<SotStorage> aStorage = new SotStorage( sURL, StreamMode::STD_READ ); | |||
382 | if ( !aStorage->GetError() ) | |||
383 | { | |||
384 | SvGlobalName aGlobalName = aStorage->GetClassName(); | |||
385 | if ( aGlobalName == SvGlobalName(SO3_SC_CLASSID_500xc6a5b861L, 0x85d6, 0x11d1, 0x89, 0xcb, 0x00, 0x80, 0x29, 0xe4 , 0xb0, 0xb1) || aGlobalName == SvGlobalName(SO3_SC_CLASSID_400x6361d441L, 0x4235, 0x11d0, 0x89, 0xcb, 0x00, 0x80, 0x29, 0xe4 , 0xb0, 0xb1) || aGlobalName == SvGlobalName(SO3_SC_CLASSID_300x3F543FA0L, 0xB6A6, 0x101B, 0x99, 0x61, 0x04, 0x02, 0x1C, 0x00 , 0x70, 0x02) ) | |||
386 | nId = SvImageId::CalcTemplate; | |||
387 | else if ( aGlobalName == SvGlobalName(SO3_SDRAW_CLASSID_500x2e8905a0L, 0x85bd, 0x11d1, 0x89, 0xd0, 0x0, 0x80, 0x29, 0xe4 , 0xb0, 0xb1) ) | |||
388 | nId = SvImageId::DrawTemplate; | |||
389 | else if ( aGlobalName == SvGlobalName(SO3_SIMPRESS_CLASSID_500x565c7221L, 0x85bc, 0x11d1, 0x89, 0xd0, 0x0, 0x80, 0x29, 0xe4 , 0xb0, 0xb1) || | |||
390 | aGlobalName == SvGlobalName(SO3_SIMPRESS_CLASSID_400x12d3cc0L, 0x4216, 0x11d0, 0x89, 0xcb, 0x0, 0x80, 0x29, 0xe4 , 0xb0, 0xb1) || aGlobalName == SvGlobalName(SO3_SIMPRESS_CLASSID_300xAF10AAE0L, 0xB36D, 0x101B, 0x99, 0x61, 0x04, 0x02, 0x1C, 0x00 , 0x70, 0x02) ) | |||
391 | nId = SvImageId::ImpressTemplate; | |||
392 | else if ( aGlobalName == SvGlobalName(SO3_SM_CLASSID_500xffb5e640L, 0x85de, 0x11d1, 0x89, 0xd0, 0x00, 0x80, 0x29, 0xe4 , 0xb0, 0xb1) || aGlobalName == SvGlobalName(SO3_SM_CLASSID_400x2b3b7e1L, 0x4225, 0x11d0, 0x89, 0xca, 0x00, 0x80, 0x29, 0xe4 , 0xb0, 0xb1) || aGlobalName == SvGlobalName(SO3_SM_CLASSID_300xD4590460L, 0x35FD, 0x101C, 0xB1, 0x2A, 0x04, 0x02, 0x1C, 0x00 , 0x70, 0x02) ) | |||
393 | nId = SvImageId::MathTemplate; | |||
394 | } | |||
395 | } | |||
396 | catch (const css::ucb::ContentCreationException&) | |||
397 | { | |||
398 | TOOLS_WARN_EXCEPTION("svtools.misc", "GetImageId_Impl")do { css::uno::Any tools_warn_exception( DbgGetCaughtException () ); do { if (true) { switch (sal_detail_log_report(::SAL_DETAIL_LOG_LEVEL_WARN , "svtools.misc")) { case SAL_DETAIL_LOG_ACTION_IGNORE: break ; case SAL_DETAIL_LOG_ACTION_LOG: if (sizeof ::sal::detail::getResult ( ::sal::detail::StreamStart() << "GetImageId_Impl" << " " << exceptionToString(tools_warn_exception)) == 1) { ::sal_detail_log( (::SAL_DETAIL_LOG_LEVEL_WARN), ("svtools.misc" ), ("/home/maarten/src/libreoffice/core/svtools/source/misc/imagemgr.cxx" ":" "398" ": "), ::sal::detail::unwrapStream( ::sal::detail:: StreamStart() << "GetImageId_Impl" << " " << exceptionToString(tools_warn_exception)), 0); } else { ::std ::ostringstream sal_detail_stream; sal_detail_stream << "GetImageId_Impl" << " " << exceptionToString(tools_warn_exception ); ::sal::detail::log( (::SAL_DETAIL_LOG_LEVEL_WARN), ("svtools.misc" ), ("/home/maarten/src/libreoffice/core/svtools/source/misc/imagemgr.cxx" ":" "398" ": "), sal_detail_stream, 0); }; break; case SAL_DETAIL_LOG_ACTION_FATAL : if (sizeof ::sal::detail::getResult( ::sal::detail::StreamStart () << "GetImageId_Impl" << " " << exceptionToString (tools_warn_exception)) == 1) { ::sal_detail_log( (::SAL_DETAIL_LOG_LEVEL_WARN ), ("svtools.misc"), ("/home/maarten/src/libreoffice/core/svtools/source/misc/imagemgr.cxx" ":" "398" ": "), ::sal::detail::unwrapStream( ::sal::detail:: StreamStart() << "GetImageId_Impl" << " " << exceptionToString(tools_warn_exception)), 0); } else { ::std ::ostringstream sal_detail_stream; sal_detail_stream << "GetImageId_Impl" << " " << exceptionToString(tools_warn_exception ); ::sal::detail::log( (::SAL_DETAIL_LOG_LEVEL_WARN), ("svtools.misc" ), ("/home/maarten/src/libreoffice/core/svtools/source/misc/imagemgr.cxx" ":" "398" ": "), sal_detail_stream, 0); }; std::abort(); break ; } } } while (false); } while (false); | |||
399 | } | |||
400 | ||||
401 | return nId; | |||
| ||||
402 | } | |||
403 | } | |||
404 | ||||
405 | if ( nImage == SvImageId::File && !sURL.isEmpty() ) | |||
406 | { | |||
407 | if ( bDetectFolder && CONTENT_HELPER::utl::UCBContentHelper::IsFolder( sURL ) ) | |||
408 | nImage = GetFolderImageId_Impl( sURL ); | |||
409 | else if ( !aExt.isEmpty() ) | |||
410 | nImage = GetImageId_Impl( aExt ); | |||
411 | } | |||
412 | return nImage; | |||
413 | } | |||
414 | ||||
415 | static const char* GetDescriptionId_Impl( const OUString& rExtension, bool& rbShowExt ) | |||
416 | { | |||
417 | const char* pId = nullptr; | |||
418 | sal_Int32 nIndex = GetIndexOfExtension_Impl( rExtension ); | |||
419 | if ( nIndex != NO_INDEX(-1) ) | |||
420 | { | |||
421 | pId = ExtensionMap_Impl[ nIndex ].pStrId; | |||
422 | rbShowExt = ExtensionMap_Impl[ nIndex ]._bExt; | |||
423 | } | |||
424 | ||||
425 | return pId; | |||
426 | } | |||
427 | ||||
428 | static OUString GetDescriptionByFactory_Impl( const OUString& rFactory ) | |||
429 | { | |||
430 | const char* pResId = nullptr; | |||
431 | if ( rFactory.startsWithIgnoreAsciiCase( "swriter" ) ) | |||
432 | pResId = STR_DESCRIPTION_FACTORY_WRITERreinterpret_cast<char const *>("STR_DESCRIPTION_FACTORY_WRITER" "\004" u8"Text Document"); | |||
433 | else if ( rFactory.startsWithIgnoreAsciiCase( "scalc" ) ) | |||
434 | pResId = STR_DESCRIPTION_FACTORY_CALCreinterpret_cast<char const *>("STR_DESCRIPTION_FACTORY_CALC" "\004" u8"Spreadsheet"); | |||
435 | else if ( rFactory.startsWithIgnoreAsciiCase( "simpress" ) ) | |||
436 | pResId = STR_DESCRIPTION_FACTORY_IMPRESSreinterpret_cast<char const *>("STR_DESCRIPTION_FACTORY_IMPRESS" "\004" u8"Presentation"); | |||
437 | else if ( rFactory.startsWithIgnoreAsciiCase( "sdraw" ) ) | |||
438 | pResId = STR_DESCRIPTION_FACTORY_DRAWreinterpret_cast<char const *>("STR_DESCRIPTION_FACTORY_DRAW" "\004" u8"Drawing"); | |||
439 | else if ( rFactory.startsWithIgnoreAsciiCase( "swriter/web" ) ) | |||
440 | pResId = STR_DESCRIPTION_FACTORY_WRITERWEBreinterpret_cast<char const *>("STR_DESCRIPTION_FACTORY_WRITERWEB" "\004" u8"HTML document"); | |||
441 | else if ( rFactory.startsWithIgnoreAsciiCase( "swriter/globaldocument" ) ) | |||
442 | pResId = STR_DESCRIPTION_FACTORY_GLOBALDOCreinterpret_cast<char const *>("STR_DESCRIPTION_FACTORY_GLOBALDOC" "\004" u8"Master document"); | |||
443 | else if ( rFactory.startsWithIgnoreAsciiCase( "smath" ) ) | |||
444 | pResId = STR_DESCRIPTION_FACTORY_MATHreinterpret_cast<char const *>("STR_DESCRIPTION_FACTORY_MATH" "\004" u8"Formula"); | |||
445 | else if ( rFactory.startsWithIgnoreAsciiCase( "sdatabase" ) ) | |||
446 | pResId = STR_DESCRIPTION_FACTORY_DATABASEreinterpret_cast<char const *>("STR_DESCRIPTION_FACTORY_DATABASE" "\004" u8"Database"); | |||
447 | ||||
448 | if (pResId) | |||
449 | { | |||
450 | return SvtResId(pResId); | |||
451 | } | |||
452 | return OUString(); | |||
453 | } | |||
454 | ||||
455 | static const char* GetFolderDescriptionId_Impl( const OUString& rURL ) | |||
456 | { | |||
457 | const char* pRet = STR_DESCRIPTION_FOLDERreinterpret_cast<char const *>("STR_DESCRIPTION_FOLDER" "\004" u8"Folder"); | |||
458 | try | |||
459 | { | |||
460 | ::ucbhelper::Content aCnt( rURL, css::uno::Reference< css::ucb::XCommandEnvironment >(), comphelper::getProcessComponentContext() ); | |||
461 | svtools::VolumeInfo aVolumeInfo; | |||
462 | if ( GetVolumeProperties_Impl( aCnt, aVolumeInfo ) ) | |||
463 | { | |||
464 | if ( aVolumeInfo.m_bIsRemote ) | |||
465 | pRet = STR_DESCRIPTION_REMOTE_VOLUMEreinterpret_cast<char const *>("STR_DESCRIPTION_REMOTE_VOLUME" "\004" u8"Network connection"); | |||
466 | else if ( aVolumeInfo.m_bIsFloppy ) | |||
467 | pRet = STR_DESCRIPTION_FLOPPY_VOLUMEreinterpret_cast<char const *>("STR_DESCRIPTION_FLOPPY_VOLUME" "\004" u8"Disk drive"); | |||
468 | else if ( aVolumeInfo.m_bIsCompactDisc ) | |||
469 | pRet = STR_DESCRIPTION_CDROM_VOLUMEreinterpret_cast<char const *>("STR_DESCRIPTION_CDROM_VOLUME" "\004" u8"CD-ROM drive"); | |||
470 | else if ( aVolumeInfo.m_bIsRemoveable || aVolumeInfo.m_bIsVolume ) | |||
471 | pRet = STR_DESCRIPTION_LOCALE_VOLUMEreinterpret_cast<char const *>("STR_DESCRIPTION_LOCALE_VOLUME" "\004" u8"Local drive"); | |||
472 | } | |||
473 | } | |||
474 | catch( const css::uno::RuntimeException& ) | |||
475 | { | |||
476 | throw; // don't hide it! | |||
477 | } | |||
478 | catch( const css::uno::Exception& ) | |||
479 | { | |||
480 | ||||
481 | } | |||
482 | return pRet; | |||
483 | } | |||
484 | ||||
485 | static OUString GetImageNameFromList_Impl( SvImageId nImageId, vcl::ImageType eImageType ) | |||
486 | { | |||
487 | if (eImageType == vcl::ImageType::Size32) | |||
488 | { | |||
489 | switch (nImageId) | |||
490 | { | |||
491 | case SvImageId::HTML: | |||
492 | return BMP_HTML_32"res/lx03139_32.png"; | |||
493 | case SvImageId::OO_DatabaseDoc: | |||
494 | return BMP_OO_DATABASE_DOC_32"res/lx03245_32.png"; | |||
495 | case SvImageId::OO_DrawDoc: | |||
496 | return BMP_OO_DRAW_DOC_32"res/lx03246_32.png"; | |||
497 | case SvImageId::OO_MathDoc: | |||
498 | return BMP_OO_MATH_DOC_32"res/lx03247_32.png"; | |||
499 | case SvImageId::OO_GlobalDoc: | |||
500 | return BMP_OO_GLOBAL_DOC_32"res/lx03248_32.png"; | |||
501 | case SvImageId::OO_ImpressDoc: | |||
502 | return BMP_OO_IMPRESS_DOC_32"res/lx03249_32.png"; | |||
503 | case SvImageId::OO_CalcDoc: | |||
504 | return BMP_OO_CALC_DOC_32"res/lx03250_32.png"; | |||
505 | case SvImageId::OO_WriterDoc: | |||
506 | return BMP_OO_WRITER_DOC_32"res/lx03251_32.png"; | |||
507 | case SvImageId::OO_WriterTemplate: | |||
508 | return BMP_OO_WRITER_TEMPLATE_32"res/lx03255_32.png"; | |||
509 | default: break; | |||
510 | } | |||
511 | } | |||
512 | else if (eImageType == vcl::ImageType::Size26) | |||
513 | { | |||
514 | switch (nImageId) | |||
515 | { | |||
516 | case SvImageId::Impress: | |||
517 | return BMP_IMPRESS_LC"res/lx03123.png"; | |||
518 | case SvImageId::Bitmap: | |||
519 | return BMP_BITMAP_LC"res/lx03125.png"; | |||
520 | case SvImageId::Calc: | |||
521 | return BMP_CALC_LC"res/lx03126.png"; | |||
522 | case SvImageId::CalcTemplate: | |||
523 | return BMP_CALCTEMPLATE_LC"res/lx03127.png"; | |||
524 | case SvImageId::Database: | |||
525 | return BMP_DATABASE_LC"res/lx03129.png"; | |||
526 | case SvImageId::ImpressTemplate: | |||
527 | return BMP_IMPRESSTEMPLATE_LC"res/lx03130.png"; | |||
528 | case SvImageId::GIF: | |||
529 | return BMP_GIF_LC"res/lx03137.png"; | |||
530 | case SvImageId::HTML: | |||
531 | return BMP_HTML_LC"res/lx03139.png"; | |||
532 | case SvImageId::JPG: | |||
533 | return BMP_JPG_LC"res/lx03140.png"; | |||
534 | case SvImageId::Math: | |||
535 | return BMP_MATH_LC"res/lx03144.png"; | |||
536 | case SvImageId::MathTemplate: | |||
537 | return BMP_MATHTEMPLATE_LC"res/lx03145.png"; | |||
538 | case SvImageId::File: | |||
539 | return BMP_FILE_LC"res/lx03150.png"; | |||
540 | case SvImageId::PCD: | |||
541 | return BMP_PCD_LC"res/lx03152.png"; | |||
542 | case SvImageId::PCT: | |||
543 | return BMP_PCT_LC"res/lx03153.png"; | |||
544 | case SvImageId::PCX: | |||
545 | return BMP_PCX_LC"res/lx03154.png"; | |||
546 | case SvImageId::SIM: | |||
547 | return BMP_SIM_LC"res/lx03155.png"; | |||
548 | case SvImageId::TextFile: | |||
549 | return BMP_TEXTFILE_LC"res/lx03156.png"; | |||
550 | case SvImageId::TIFF: | |||
551 | return BMP_TIFF_LC"res/lx03158.png"; | |||
552 | case SvImageId::WMF: | |||
553 | return BMP_WMF_LC"res/lx03160.png"; | |||
554 | case SvImageId::Writer: | |||
555 | return BMP_WRITER_LC"res/lx03162.png"; | |||
556 | case SvImageId::WriterTemplate: | |||
557 | return BMP_WRITERTEMPLATE_LC"res/lx03163.png"; | |||
558 | case SvImageId::FixedDevice: | |||
559 | return BMP_FIXEDDEV_LC"res/lx03164.png"; | |||
560 | case SvImageId::RemoveableDevice: | |||
561 | return BMP_REMOVABLEDEV_LC"res/lx03165.png"; | |||
562 | case SvImageId::CDRomDevice: | |||
563 | return BMP_CDROMDEV_LC"res/lx03166.png"; | |||
564 | case SvImageId::NetworkDevice: | |||
565 | return BMP_NETWORKDEV_LC"res/lx03167.png"; | |||
566 | case SvImageId::Table: | |||
567 | return BMP_TABLE_LC"res/lx03188.png"; | |||
568 | case SvImageId::Folder: | |||
569 | return BMP_FOLDER_LC"res/lx03189.png"; | |||
570 | case SvImageId::DXF: | |||
571 | return BMP_DXF_LC"res/lx03217.png"; | |||
572 | case SvImageId::MET: | |||
573 | return BMP_MET_LC"res/lx03218.png"; | |||
574 | case SvImageId::PNG: | |||
575 | return BMP_PNG_LC"res/lx03219.png"; | |||
576 | case SvImageId::SVM: | |||
577 | return BMP_SVM_LC"res/lx03222.png"; | |||
578 | case SvImageId::GlobalDoc: | |||
579 | return BMP_GLOBAL_DOC_LC"res/lx03226.png"; | |||
580 | case SvImageId::Draw: | |||
581 | return BMP_DRAW_LC"res/lx03227.png"; | |||
582 | case SvImageId::DrawTemplate: | |||
583 | return BMP_DRAWTEMPLATE_LC"res/lx03228.png"; | |||
584 | case SvImageId::OO_DatabaseDoc: | |||
585 | return BMP_OO_DATABASE_DOC_LC"res/lx03245.png"; | |||
586 | case SvImageId::OO_DrawDoc: | |||
587 | return BMP_OO_DRAW_DOC_LC"res/lx03246.png"; | |||
588 | case SvImageId::OO_MathDoc: | |||
589 | return BMP_OO_MATH_DOC_LC"res/lx03247.png"; | |||
590 | case SvImageId::OO_GlobalDoc: | |||
591 | return BMP_OO_GLOBAL_DOC_LC"res/lx03248.png"; | |||
592 | case SvImageId::OO_ImpressDoc: | |||
593 | return BMP_OO_IMPRESS_DOC_LC"res/lx03249.png"; | |||
594 | case SvImageId::OO_CalcDoc: | |||
595 | return BMP_OO_CALC_DOC_LC"res/lx03250.png"; | |||
596 | case SvImageId::OO_WriterDoc: | |||
597 | return BMP_OO_WRITER_DOC_LC"res/lx03251.png"; | |||
598 | case SvImageId::OO_DrawTemplate: | |||
599 | return BMP_OO_DRAW_TEMPLATE_LC"res/lx03252.png"; | |||
600 | case SvImageId::OO_ImpressTemplate: | |||
601 | return BMP_OO_IMPRESS_TEMPLATE_LC"res/lx03253.png"; | |||
602 | case SvImageId::OO_CalcTemplate: | |||
603 | return BMP_OO_CALC_TEMPLATE_LC"res/lx03254.png"; | |||
604 | case SvImageId::OO_WriterTemplate: | |||
605 | return BMP_OO_WRITER_TEMPLATE_LC"res/lx03255.png"; | |||
606 | case SvImageId::Extension: | |||
607 | return BMP_EXTENSION_LC"res/lx03256.png"; | |||
608 | default: break; | |||
609 | } | |||
610 | } | |||
611 | else | |||
612 | { | |||
613 | switch (nImageId) | |||
614 | { | |||
615 | case SvImageId::Impress: | |||
616 | return BMP_IMPRESS_SC"res/sx03123.png"; | |||
617 | case SvImageId::Bitmap: | |||
618 | return BMP_BITMAP_SC"res/sx03125.png"; | |||
619 | case SvImageId::Calc: | |||
620 | return BMP_CALC_SC"res/sx03126.png"; | |||
621 | case SvImageId::CalcTemplate: | |||
622 | return BMP_CALCTEMPLATE_SC"res/sx03127.png"; | |||
623 | case SvImageId::Database: | |||
624 | return BMP_DATABASE_SC"res/sx03129.png"; | |||
625 | case SvImageId::ImpressTemplate: | |||
626 | return BMP_IMPRESSTEMPLATE_SC"res/sx03130.png"; | |||
627 | case SvImageId::GIF: | |||
628 | return BMP_GIF_SC"res/sx03137.png"; | |||
629 | case SvImageId::HTML: | |||
630 | return BMP_HTML_SC"res/sx03139.png"; | |||
631 | case SvImageId::JPG: | |||
632 | return BMP_JPG_SC"res/sx03140.png"; | |||
633 | case SvImageId::Math: | |||
634 | return BMP_MATH_SC"res/sx03144.png"; | |||
635 | case SvImageId::MathTemplate: | |||
636 | return BMP_MATHTEMPLATE_SC"res/sx03145.png"; | |||
637 | case SvImageId::File: | |||
638 | return BMP_FILE_SC"res/sx03150.png"; | |||
639 | case SvImageId::PCD: | |||
640 | return BMP_PCD_SC"res/sx03152.png"; | |||
641 | case SvImageId::PCT: | |||
642 | return BMP_PCT_SC"res/sx03153.png"; | |||
643 | case SvImageId::PCX: | |||
644 | return BMP_PCX_SC"res/sx03154.png"; | |||
645 | case SvImageId::SIM: | |||
646 | return BMP_SIM_SC"res/sx03155.png"; | |||
647 | case SvImageId::TextFile: | |||
648 | return BMP_TEXTFILE_SC"res/sx03156.png"; | |||
649 | case SvImageId::TIFF: | |||
650 | return BMP_TIFF_SC"res/sx03158.png"; | |||
651 | case SvImageId::WMF: | |||
652 | return BMP_WMF_SC"res/sx03160.png"; | |||
653 | case SvImageId::Writer: | |||
654 | return BMP_WRITER_SC"res/sx03162.png"; | |||
655 | case SvImageId::WriterTemplate: | |||
656 | return BMP_WRITERTEMPLATE_SC"res/sx03163.png"; | |||
657 | case SvImageId::FixedDevice: | |||
658 | return BMP_FIXEDDEV_SC"res/sx03164.png"; | |||
659 | case SvImageId::RemoveableDevice: | |||
660 | return BMP_REMOVABLEDEV_SC"res/sx03165.png"; | |||
661 | case SvImageId::CDRomDevice: | |||
662 | return BMP_CDROMDEV_SC"res/sx03166.png"; | |||
663 | case SvImageId::NetworkDevice: | |||
664 | return BMP_NETWORKDEV_SC"res/sx03167.png"; | |||
665 | case SvImageId::Table: | |||
666 | return BMP_TABLE_SC"res/sx03188.png"; | |||
667 | case SvImageId::Folder: | |||
668 | return RID_BMP_FOLDER"svtools/res/folder.png"; | |||
669 | case SvImageId::DXF: | |||
670 | return BMP_DXF_SC"res/sx03217.png"; | |||
671 | case SvImageId::MET: | |||
672 | return BMP_MET_SC"res/sx03218.png"; | |||
673 | case SvImageId::PNG: | |||
674 | return BMP_PNG_SC"res/sx03219.png"; | |||
675 | case SvImageId::SVM: | |||
676 | return BMP_SVM_SC"res/sx03222.png"; | |||
677 | case SvImageId::GlobalDoc: | |||
678 | return BMP_GLOBAL_DOC_SC"res/sx03226.png"; | |||
679 | case SvImageId::Draw: | |||
680 | return BMP_DRAW_SC"res/sx03227.png"; | |||
681 | case SvImageId::DrawTemplate: | |||
682 | return BMP_DRAWTEMPLATE_SC"res/sx03228.png"; | |||
683 | case SvImageId::OO_DatabaseDoc: | |||
684 | return BMP_OO_DATABASE_DOC_SC"res/sx03245.png"; | |||
685 | case SvImageId::OO_DrawDoc: | |||
686 | return BMP_OO_DRAW_DOC_SC"res/sx03246.png"; | |||
687 | case SvImageId::OO_MathDoc: | |||
688 | return BMP_OO_MATH_DOC_SC"res/sx03247.png"; | |||
689 | case SvImageId::OO_GlobalDoc: | |||
690 | return BMP_OO_GLOBAL_DOC_SC"res/sx03248.png"; | |||
691 | case SvImageId::OO_ImpressDoc: | |||
692 | return BMP_OO_IMPRESS_DOC_SC"res/sx03249.png"; | |||
693 | case SvImageId::OO_CalcDoc: | |||
694 | return BMP_OO_CALC_DOC_SC"res/sx03250.png"; | |||
695 | case SvImageId::OO_WriterDoc: | |||
696 | return BMP_OO_WRITER_DOC_SC"res/sx03251.png"; | |||
697 | case SvImageId::OO_DrawTemplate: | |||
698 | return BMP_OO_DRAW_TEMPLATE_SC"res/sx03252.png"; | |||
699 | case SvImageId::OO_ImpressTemplate: | |||
700 | return BMP_OO_IMPRESS_TEMPLATE_SC"res/sx03253.png"; | |||
701 | case SvImageId::OO_CalcTemplate: | |||
702 | return BMP_OO_CALC_TEMPLATE_SC"res/sx03254.png"; | |||
703 | case SvImageId::OO_WriterTemplate: | |||
704 | return BMP_OO_WRITER_TEMPLATE_SC"res/sx03255.png"; | |||
705 | case SvImageId::Extension: | |||
706 | return BMP_EXTENSION_SC"res/sx03256.png"; | |||
707 | default: break; | |||
708 | } | |||
709 | } | |||
710 | ||||
711 | return OUString(); | |||
712 | } | |||
713 | ||||
714 | static Image GetImageFromList_Impl( SvImageId nImageId, vcl::ImageType eImageType) | |||
715 | { | |||
716 | OUString sImageName(GetImageNameFromList_Impl(nImageId, eImageType)); | |||
717 | if (!sImageName.isEmpty()) | |||
718 | return Image(StockImage::Yes, sImageName); | |||
719 | return Image(); | |||
720 | } | |||
721 | ||||
722 | OUString SvFileInformationManager::GetDescription_Impl( const INetURLObject& rObject, bool bDetectFolder ) | |||
723 | { | |||
724 | OUString sExtension(rObject.getExtension()); | |||
725 | OUString sDescription, sURL( rObject.GetMainURL( INetURLObject::DecodeMechanism::NONE ) ); | |||
726 | const char* pResId = nullptr; | |||
727 | bool bShowExt = false, bOnlyFile = false; | |||
728 | bool bFolder = bDetectFolder && CONTENT_HELPER::utl::UCBContentHelper::IsFolder( sURL ); | |||
729 | if ( !bFolder ) | |||
730 | { | |||
731 | bool bDetected = false; | |||
732 | ||||
733 | if ( rObject.GetProtocol() == INetProtocol::PrivSoffice ) | |||
734 | { | |||
735 | OUString aURLPath = sURL.copy( strlen(URL_PREFIX_PRIV_SOFFICE"private:") ); | |||
736 | OUString aType = aURLPath.getToken( 0, '/' ); | |||
737 | if ( aType == "factory" ) | |||
738 | { | |||
739 | sDescription = GetDescriptionByFactory_Impl( aURLPath.copy( aURLPath.indexOf( '/' ) + 1 ) ); | |||
740 | bDetected = true; | |||
741 | } | |||
742 | } | |||
743 | ||||
744 | if (!bDetected) | |||
745 | { | |||
746 | // search a description by extension | |||
747 | bool bExt = !sExtension.isEmpty(); | |||
748 | if ( bExt ) | |||
749 | { | |||
750 | sExtension = sExtension.toAsciiLowerCase(); | |||
751 | pResId = GetDescriptionId_Impl( sExtension, bShowExt ); | |||
752 | } | |||
753 | if (!pResId) | |||
754 | { | |||
755 | pResId = STR_DESCRIPTION_FILEreinterpret_cast<char const *>("STR_DESCRIPTION_FILE" "\004" u8"File"); | |||
756 | bOnlyFile = bExt; | |||
757 | } | |||
758 | } | |||
759 | } | |||
760 | else | |||
761 | pResId = GetFolderDescriptionId_Impl( sURL ); | |||
762 | ||||
763 | if (pResId) | |||
764 | { | |||
765 | if ( bOnlyFile ) | |||
766 | { | |||
767 | bShowExt = false; | |||
768 | sExtension = sExtension.toAsciiUpperCase(); | |||
769 | sDescription = sExtension + "-"; | |||
770 | } | |||
771 | sDescription += SvtResId(pResId); | |||
772 | } | |||
773 | ||||
774 | DBG_ASSERT( !sDescription.isEmpty(), "file without description" )do { if (true && (!(!sDescription.isEmpty()))) { sal_detail_logFormat ((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.tools"), ("/home/maarten/src/libreoffice/core/svtools/source/misc/imagemgr.cxx" ":" "774" ": "), "%s", "file without description"); } } while (false); | |||
775 | ||||
776 | if ( bShowExt ) | |||
777 | { | |||
778 | sDescription += " (" + sExtension + ")"; | |||
779 | } | |||
780 | ||||
781 | return sDescription; | |||
782 | } | |||
783 | ||||
784 | OUString SvFileInformationManager::GetImageId(const INetURLObject& rObject, bool bBig) | |||
785 | { | |||
786 | SvImageId nImage = GetImageId_Impl( rObject, true ); | |||
787 | DBG_ASSERT( nImage != SvImageId::NONE, "invalid ImageId" )do { if (true && (!(nImage != SvImageId::NONE))) { sal_detail_logFormat ((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.tools"), ("/home/maarten/src/libreoffice/core/svtools/source/misc/imagemgr.cxx" ":" "787" ": "), "%s", "invalid ImageId"); } } while (false); | |||
788 | return GetImageNameFromList_Impl(nImage, bBig ? vcl::ImageType::Size26 : vcl::ImageType::Size16); | |||
789 | } | |||
790 | ||||
791 | Image SvFileInformationManager::GetImage(const INetURLObject& rObject, bool bBig) | |||
792 | { | |||
793 | SvImageId nImage = GetImageId_Impl( rObject, true ); | |||
794 | DBG_ASSERT( nImage != SvImageId::NONE, "invalid ImageId" )do { if (true && (!(nImage != SvImageId::NONE))) { sal_detail_logFormat ((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.tools"), ("/home/maarten/src/libreoffice/core/svtools/source/misc/imagemgr.cxx" ":" "794" ": "), "%s", "invalid ImageId"); } } while (false); | |||
795 | return GetImageFromList_Impl(nImage, bBig ? vcl::ImageType::Size26 : vcl::ImageType::Size16); | |||
796 | } | |||
797 | ||||
798 | OUString SvFileInformationManager::GetFileImageId(const INetURLObject& rObject) | |||
799 | { | |||
800 | SvImageId nImage = GetImageId_Impl( rObject, false ); | |||
801 | DBG_ASSERT( nImage != SvImageId::NONE, "invalid ImageId" )do { if (true && (!(nImage != SvImageId::NONE))) { sal_detail_logFormat ((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.tools"), ("/home/maarten/src/libreoffice/core/svtools/source/misc/imagemgr.cxx" ":" "801" ": "), "%s", "invalid ImageId"); } } while (false); | |||
802 | return GetImageNameFromList_Impl(nImage, vcl::ImageType::Size16); | |||
803 | } | |||
804 | ||||
805 | Image SvFileInformationManager::GetImageNoDefault(const INetURLObject& rObject, vcl::ImageType eImageType) | |||
806 | { | |||
807 | SvImageId nImage = GetImageId_Impl(rObject, true); | |||
| ||||
808 | DBG_ASSERT( nImage != SvImageId::NONE, "invalid ImageId" )do { if (true && (!(nImage != SvImageId::NONE))) { sal_detail_logFormat ((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.tools"), ("/home/maarten/src/libreoffice/core/svtools/source/misc/imagemgr.cxx" ":" "808" ": "), "%s", "invalid ImageId"); } } while (false); | |||
809 | ||||
810 | if ( nImage == SvImageId::File ) | |||
811 | return Image(); | |||
812 | ||||
813 | return GetImageFromList_Impl(nImage, eImageType); | |||
814 | } | |||
815 | ||||
816 | OUString SvFileInformationManager::GetFolderImageId( const svtools::VolumeInfo& rInfo ) | |||
817 | { | |||
818 | SvImageId nImage = SvImageId::Folder; | |||
819 | DBG_ASSERT( nImage != SvImageId::NONE, "invalid ImageId" )do { if (true && (!(nImage != SvImageId::NONE))) { sal_detail_logFormat ((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.tools"), ("/home/maarten/src/libreoffice/core/svtools/source/misc/imagemgr.cxx" ":" "819" ": "), "%s", "invalid ImageId"); } } while (false); | |||
820 | ||||
821 | if ( rInfo.m_bIsRemote ) | |||
822 | nImage = SvImageId::NetworkDevice; | |||
823 | else if ( rInfo.m_bIsCompactDisc ) | |||
824 | nImage = SvImageId::CDRomDevice; | |||
825 | else if ( rInfo.m_bIsRemoveable || rInfo.m_bIsFloppy ) | |||
826 | nImage = SvImageId::RemoveableDevice; | |||
827 | else if ( rInfo.m_bIsVolume ) | |||
828 | nImage = SvImageId::FixedDevice; | |||
829 | ||||
830 | return GetImageNameFromList_Impl(nImage, vcl::ImageType::Size16); | |||
831 | } | |||
832 | ||||
833 | OUString SvFileInformationManager::GetDescription( const INetURLObject& rObject ) | |||
834 | { | |||
835 | return SvFileInformationManager::GetDescription_Impl( rObject, true ); | |||
836 | } | |||
837 | ||||
838 | OUString SvFileInformationManager::GetFileDescription( const INetURLObject& rObject ) | |||
839 | { | |||
840 | return SvFileInformationManager::GetDescription_Impl( rObject, false ); | |||
841 | } | |||
842 | ||||
843 | OUString SvFileInformationManager::GetFolderDescription( const svtools::VolumeInfo& rInfo ) | |||
844 | { | |||
845 | const char* pResId = STR_DESCRIPTION_FOLDERreinterpret_cast<char const *>("STR_DESCRIPTION_FOLDER" "\004" u8"Folder"); | |||
846 | if ( rInfo.m_bIsRemote ) | |||
847 | pResId = STR_DESCRIPTION_REMOTE_VOLUMEreinterpret_cast<char const *>("STR_DESCRIPTION_REMOTE_VOLUME" "\004" u8"Network connection"); | |||
848 | else if ( rInfo.m_bIsFloppy ) | |||
849 | pResId = STR_DESCRIPTION_FLOPPY_VOLUMEreinterpret_cast<char const *>("STR_DESCRIPTION_FLOPPY_VOLUME" "\004" u8"Disk drive"); | |||
850 | else if ( rInfo.m_bIsCompactDisc ) | |||
851 | pResId = STR_DESCRIPTION_CDROM_VOLUMEreinterpret_cast<char const *>("STR_DESCRIPTION_CDROM_VOLUME" "\004" u8"CD-ROM drive"); | |||
852 | else if ( rInfo.m_bIsRemoveable || rInfo.m_bIsVolume ) | |||
853 | pResId = STR_DESCRIPTION_LOCALE_VOLUMEreinterpret_cast<char const *>("STR_DESCRIPTION_LOCALE_VOLUME" "\004" u8"Local drive"); | |||
854 | ||||
855 | return SvtResId(pResId); | |||
856 | } | |||
857 | ||||
858 | /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |