Line data Source code
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 <config_features.h>
21 :
22 : #include <unotools/localedatawrapper.hxx>
23 : #include <viewsh.hxx>
24 : #include <initui.hxx>
25 : #include <edtwin.hxx>
26 : #include <shellres.hxx>
27 : #include <fldbas.hxx>
28 : #include <glosdoc.hxx>
29 : #include <gloslst.hxx>
30 :
31 : #include <utlui.hrc>
32 : #include <initui.hrc>
33 : #include <comcore.hrc>
34 : #include <authfld.hxx>
35 : #include <dbmgr.hxx>
36 : #include <unotools/syslocale.hxx>
37 :
38 : #include <unomid.h>
39 :
40 : // Global Pointer
41 :
42 : SwGlossaries* pGlossaries = 0;
43 :
44 : // Provides all needed paths. Is initialized by UI.
45 : SwGlossaryList* pGlossaryList = 0;
46 :
47 : namespace
48 : {
49 :
50 : enum CachedStringID
51 : {
52 : OldGrfCat,
53 : OldTabCat,
54 : OldFrmCat,
55 : OldDrwCat,
56 : CurrGlosGroup,
57 : CachedStrings
58 : };
59 :
60 : OUString *StringCache[CachedStrings] = {0};
61 :
62 0 : inline OUString GetCachedString(CachedStringID id)
63 : {
64 0 : return StringCache[id] ? *StringCache[id] : OUString();
65 : }
66 :
67 0 : inline void SetCachedString(CachedStringID id, const OUString& sStr)
68 : {
69 0 : if (StringCache[id])
70 : {
71 0 : *StringCache[id] = sStr;
72 : }
73 : else
74 : {
75 0 : StringCache[id] = new OUString(sStr);
76 : }
77 0 : }
78 :
79 90 : void ClearStringCache()
80 : {
81 540 : for (int i=0; i<CachedStrings; ++i)
82 : {
83 450 : delete StringCache[i];
84 : }
85 90 : }
86 :
87 : }
88 :
89 0 : OUString GetOldGrfCat()
90 : {
91 0 : return GetCachedString(OldGrfCat);
92 : }
93 :
94 0 : void SetOldGrfCat(const OUString& sStr)
95 : {
96 0 : SetCachedString(OldGrfCat, sStr);
97 0 : }
98 :
99 0 : OUString GetOldTabCat()
100 : {
101 0 : return GetCachedString(OldTabCat);
102 : }
103 :
104 0 : void SetOldTabCat(const OUString& sStr)
105 : {
106 0 : SetCachedString(OldTabCat, sStr);
107 0 : }
108 :
109 0 : OUString GetOldFrmCat()
110 : {
111 0 : return GetCachedString(OldFrmCat);
112 : }
113 :
114 0 : void SetOldFrmCat(const OUString& sStr)
115 : {
116 0 : SetCachedString(OldFrmCat, sStr);
117 0 : }
118 :
119 0 : OUString GetOldDrwCat()
120 : {
121 0 : return GetCachedString(OldDrwCat);
122 : }
123 :
124 0 : void SetOldDrwCat(const OUString& sStr)
125 : {
126 0 : SetCachedString(OldDrwCat, sStr);
127 0 : }
128 :
129 0 : OUString GetCurrGlosGroup()
130 : {
131 0 : return GetCachedString(CurrGlosGroup);
132 : }
133 :
134 0 : void SetCurrGlosGroup(const OUString& sStr)
135 : {
136 0 : SetCachedString(CurrGlosGroup, sStr);
137 0 : }
138 :
139 : namespace
140 : {
141 :
142 : std::vector<OUString>* pAuthFieldNameList = 0;
143 : std::vector<OUString>* pAuthFieldTypeList = 0;
144 :
145 : }
146 :
147 : // Finish UI
148 :
149 90 : void _FinitUI()
150 : {
151 : #if HAVE_FEATURE_DBCONNECTIVITY
152 90 : SwDBManager::RemoveDbtoolsClient();
153 : #endif
154 90 : delete SwViewShell::GetShellRes();
155 90 : SwViewShell::SetShellRes( 0 );
156 :
157 90 : SwEditWin::_FinitStaticData();
158 :
159 90 : DELETEZ(pGlossaries);
160 :
161 90 : delete SwFieldType::pFldNames;
162 :
163 90 : ClearStringCache();
164 90 : delete pGlossaryList;
165 90 : delete pAuthFieldNameList;
166 90 : delete pAuthFieldTypeList;
167 :
168 90 : }
169 :
170 : // Initialise
171 :
172 90 : void _InitUI()
173 : {
174 : // ShellResource gives the CORE the possibility to work with resources.
175 90 : SwViewShell::SetShellRes( new ShellResource );
176 90 : SwEditWin::_InitStaticData();
177 90 : }
178 :
179 92 : ShellResource::ShellResource()
180 : : Resource( SW_RES(RID_SW_SHELLRES) ),
181 : aPostItAuthor( SW_RES( STR_POSTIT_AUTHOR ) ),
182 : aPostItPage( SW_RES( STR_POSTIT_PAGE ) ),
183 : aPostItLine( SW_RES( STR_POSTIT_LINE ) ),
184 :
185 : aCalc_Syntax( SW_RES( STR_CALC_SYNTAX ) ),
186 : aCalc_ZeroDiv( SW_RES( STR_CALC_ZERODIV ) ),
187 : aCalc_Brack( SW_RES( STR_CALC_BRACK ) ),
188 : aCalc_Pow( SW_RES( STR_CALC_POW ) ),
189 : aCalc_VarNFnd( SW_RES( STR_CALC_VARNFND ) ),
190 : aCalc_Overflow( SW_RES( STR_CALC_OVERFLOW ) ),
191 : aCalc_WrongTime( SW_RES( STR_CALC_WRONGTIME ) ),
192 : aCalc_Default( SW_RES( STR_CALC_DEFAULT ) ),
193 : aCalc_Error( SW_RES( STR_CALC_ERROR ) ),
194 :
195 : aGetRefFld_Up( SW_RES( STR_GETREFFLD_UP ) ),
196 : aGetRefFld_Down( SW_RES( STR_GETREFFLD_DOWN ) ),
197 : // #i81002#
198 : aGetRefFld_RefItemNotFound( SW_RES( STR_GETREFFLD_REFITEMNOTFOUND ) ),
199 : aStrAllPageHeadFoot( SW_RES( STR_ALLPAGE_HEADFOOT ) ),
200 : aStrNone( SW_RES( STR_TEMPLATE_NONE )),
201 : aFixedStr( SW_RES( STR_FIELD_FIXED )),
202 : sDurationFormat( SW_RES( STR_DURATION_FORMAT )),
203 :
204 : aTOXIndexName( SW_RES(STR_TOI)),
205 : aTOXUserName( SW_RES(STR_TOU)),
206 : aTOXContentName( SW_RES(STR_TOC)),
207 : aTOXIllustrationsName( SW_RES(STR_TOX_ILL)),
208 : aTOXObjectsName( SW_RES(STR_TOX_OBJ)),
209 : aTOXTablesName( SW_RES(STR_TOX_TBL)),
210 : aTOXAuthoritiesName( SW_RES(STR_TOX_AUTH)),
211 : aTOXCitationName( SW_RES(STR_TOX_CITATION)),
212 : aLinkCtrlClick(SW_RESSTR(STR_LINK_CTRL_CLICK)),
213 : aLinkClick(SW_RESSTR(STR_LINK_CLICK)),
214 : pAutoFmtNameLst(0),
215 : sPageDescFirstName( SW_RES(STR_PAGEDESC_FIRSTNAME)),
216 : sPageDescFollowName( SW_RES(STR_PAGEDESC_FOLLOWNAME)),
217 92 : sPageDescName( SW_RES(STR_PAGEDESC_NAME))
218 : {
219 92 : const sal_uInt16 nCount = FLD_DOCINFO_END - FLD_DOCINFO_BEGIN;
220 :
221 92 : vcl::KeyCode aCode( KEY_SPACE );
222 92 : vcl::KeyCode aModifiedCode( KEY_SPACE, KEY_MOD1 );
223 92 : OUString aModStr( aModifiedCode.GetName() );
224 92 : aModStr = aModStr.replaceFirst(aCode.GetName(), OUString());
225 92 : aModStr = aModStr.replaceAll("+", OUString());
226 92 : aLinkCtrlClick = aLinkCtrlClick.replaceAll("%s", aModStr);
227 :
228 920 : for(sal_uInt16 i = 0; i < nCount; ++i)
229 828 : aDocInfoLst.push_back(OUString(SW_RESSTR(FLD_DOCINFO_BEGIN + i)));
230 :
231 92 : FreeResource();
232 92 : }
233 :
234 184 : ShellResource::~ShellResource()
235 : {
236 92 : delete pAutoFmtNameLst;
237 92 : }
238 :
239 42 : OUString ShellResource::GetPageDescName(sal_uInt16 nNo, PageNameMode eMode)
240 : {
241 42 : OUString sRet;
242 :
243 42 : switch (eMode)
244 : {
245 : case NORMAL_PAGE:
246 38 : sRet = sPageDescName;
247 38 : break;
248 : case FIRST_PAGE:
249 2 : sRet = sPageDescFirstName;
250 2 : break;
251 : case FOLLOW_PAGE:
252 2 : sRet = sPageDescFollowName;
253 2 : break;
254 : }
255 :
256 42 : return sRet.replaceFirst( "$(ARG1)", OUString::number( nNo ));
257 : }
258 :
259 10 : SwGlossaries* GetGlossaries()
260 : {
261 10 : if (!pGlossaries)
262 4 : pGlossaries = new SwGlossaries;
263 10 : return (pGlossaries);
264 : }
265 :
266 0 : bool HasGlossaryList()
267 : {
268 0 : return pGlossaryList != 0;
269 : }
270 :
271 0 : SwGlossaryList* GetGlossaryList()
272 : {
273 0 : if(!pGlossaryList)
274 0 : pGlossaryList = new SwGlossaryList();
275 :
276 0 : return pGlossaryList;
277 : }
278 :
279 0 : struct ImpAutoFmtNameListLoader : public Resource
280 : {
281 : ImpAutoFmtNameListLoader( std::vector<OUString>& rLst );
282 : };
283 :
284 0 : void ShellResource::_GetAutoFmtNameLst() const
285 : {
286 : assert(!pAutoFmtNameLst);
287 0 : pAutoFmtNameLst = new std::vector<OUString>;
288 0 : pAutoFmtNameLst->reserve(STR_AUTOFMTREDL_END);
289 0 : ImpAutoFmtNameListLoader aTmp(*pAutoFmtNameLst);
290 0 : }
291 :
292 0 : ImpAutoFmtNameListLoader::ImpAutoFmtNameListLoader( std::vector<OUString>& rLst )
293 0 : : Resource( ResId(RID_SHELLRES_AUTOFMTSTRS, *pSwResMgr) )
294 : {
295 0 : for( sal_uInt16 n = 0; n < STR_AUTOFMTREDL_END; ++n )
296 : {
297 0 : OUString p(ResId(n + 1, *pSwResMgr));
298 0 : if(STR_AUTOFMTREDL_TYPO == n)
299 : {
300 : #ifdef WNT
301 : // For Windows, a special treatment is necessary because MS has
302 : // forgotten some characters in the dialog font here.
303 : p = p.replaceFirst("%1", ",,");
304 : p = p.replaceFirst("%2", "''");
305 : #else
306 0 : const SvtSysLocale aSysLocale;
307 0 : const LocaleDataWrapper& rLclD = aSysLocale.GetLocaleData();
308 : // With real operating systems it also works without special handling.
309 0 : p = p.replaceFirst("%1", rLclD.getDoubleQuotationMarkStart());
310 0 : p = p.replaceFirst("%2", rLclD.getDoubleQuotationMarkEnd());
311 : #endif
312 : }
313 0 : rLst.insert(rLst.begin() + n, p);
314 0 : }
315 0 : FreeResource();
316 0 : }
317 :
318 0 : OUString SwAuthorityFieldType::GetAuthFieldName(ToxAuthorityField eType)
319 : {
320 0 : if(!pAuthFieldNameList)
321 : {
322 0 : pAuthFieldNameList = new std::vector<OUString>;
323 0 : pAuthFieldNameList->reserve(AUTH_FIELD_END);
324 0 : for(sal_uInt16 i = 0; i < AUTH_FIELD_END; ++i)
325 0 : pAuthFieldNameList->push_back(SW_RES(STR_AUTH_FIELD_START + i));
326 : }
327 0 : return (*pAuthFieldNameList)[static_cast< sal_uInt16 >(eType)];
328 : }
329 :
330 0 : OUString SwAuthorityFieldType::GetAuthTypeName(ToxAuthorityType eType)
331 : {
332 0 : if(!pAuthFieldTypeList)
333 : {
334 0 : pAuthFieldTypeList = new std::vector<OUString>;
335 0 : pAuthFieldTypeList->reserve(AUTH_TYPE_END);
336 0 : for(sal_uInt16 i = 0; i < AUTH_TYPE_END; ++i)
337 0 : pAuthFieldTypeList->push_back(SW_RES(STR_AUTH_TYPE_START + i));
338 : }
339 0 : return (*pAuthFieldTypeList)[static_cast< sal_uInt16 >(eType)];
340 270 : }
341 :
342 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|