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 59 : void ClearStringCache()
80 : {
81 354 : for (int i=0; i<CachedStrings; ++i)
82 : {
83 295 : delete StringCache[i];
84 : }
85 59 : }
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 59 : void _FinitUI()
150 : {
151 59 : delete SwViewShell::GetShellRes();
152 59 : SwViewShell::SetShellRes( 0 );
153 :
154 59 : SwEditWin::_FinitStaticData();
155 :
156 59 : DELETEZ(pGlossaries);
157 :
158 59 : delete SwFieldType::s_pFieldNames;
159 :
160 59 : ClearStringCache();
161 59 : delete pGlossaryList;
162 59 : delete pAuthFieldNameList;
163 59 : delete pAuthFieldTypeList;
164 :
165 59 : }
166 :
167 : // Initialise
168 :
169 59 : void _InitUI()
170 : {
171 : // ShellResource gives the CORE the possibility to work with resources.
172 59 : SwViewShell::SetShellRes( new ShellResource );
173 59 : SwEditWin::_InitStaticData();
174 59 : }
175 :
176 60 : ShellResource::ShellResource()
177 : : Resource( SW_RES(RID_SW_SHELLRES) ),
178 : aPostItAuthor( SW_RES( STR_POSTIT_AUTHOR ) ),
179 : aPostItPage( SW_RES( STR_POSTIT_PAGE ) ),
180 : aPostItLine( SW_RES( STR_POSTIT_LINE ) ),
181 :
182 : aCalc_Syntax( SW_RES( STR_CALC_SYNTAX ) ),
183 : aCalc_ZeroDiv( SW_RES( STR_CALC_ZERODIV ) ),
184 : aCalc_Brack( SW_RES( STR_CALC_BRACK ) ),
185 : aCalc_Pow( SW_RES( STR_CALC_POW ) ),
186 : aCalc_VarNFnd( SW_RES( STR_CALC_VARNFND ) ),
187 : aCalc_Overflow( SW_RES( STR_CALC_OVERFLOW ) ),
188 : aCalc_WrongTime( SW_RES( STR_CALC_WRONGTIME ) ),
189 : aCalc_Default( SW_RES( STR_CALC_DEFAULT ) ),
190 : aCalc_Error( SW_RES( STR_CALC_ERROR ) ),
191 :
192 : aGetRefField_Up( SW_RES( STR_GETREFFLD_UP ) ),
193 : aGetRefField_Down( SW_RES( STR_GETREFFLD_DOWN ) ),
194 : // #i81002#
195 : aGetRefField_RefItemNotFound( SW_RES( STR_GETREFFLD_REFITEMNOTFOUND ) ),
196 : aStrAllPageHeadFoot( SW_RES( STR_ALLPAGE_HEADFOOT ) ),
197 : aStrNone( SW_RES( STR_TEMPLATE_NONE )),
198 : aFixedStr( SW_RES( STR_FIELD_FIXED )),
199 : sDurationFormat( SW_RES( STR_DURATION_FORMAT )),
200 :
201 : aTOXIndexName( SW_RES(STR_TOI)),
202 : aTOXUserName( SW_RES(STR_TOU)),
203 : aTOXContentName( SW_RES(STR_TOC)),
204 : aTOXIllustrationsName( SW_RES(STR_TOX_ILL)),
205 : aTOXObjectsName( SW_RES(STR_TOX_OBJ)),
206 : aTOXTablesName( SW_RES(STR_TOX_TBL)),
207 : aTOXAuthoritiesName( SW_RES(STR_TOX_AUTH)),
208 : aTOXCitationName( SW_RES(STR_TOX_CITATION)),
209 : aLinkCtrlClick(SW_RESSTR(STR_LINK_CTRL_CLICK)),
210 : aLinkClick(SW_RESSTR(STR_LINK_CLICK)),
211 : pAutoFormatNameLst(0),
212 : sPageDescFirstName( SW_RES(STR_PAGEDESC_FIRSTNAME)),
213 : sPageDescFollowName( SW_RES(STR_PAGEDESC_FOLLOWNAME)),
214 60 : sPageDescName( SW_RES(STR_PAGEDESC_NAME))
215 : {
216 60 : const sal_uInt16 nCount = FLD_DOCINFO_END - FLD_DOCINFO_BEGIN;
217 :
218 60 : vcl::KeyCode aCode( KEY_SPACE );
219 60 : vcl::KeyCode aModifiedCode( KEY_SPACE, KEY_MOD1 );
220 60 : OUString aModStr( aModifiedCode.GetName() );
221 60 : aModStr = aModStr.replaceFirst(aCode.GetName(), OUString());
222 60 : aModStr = aModStr.replaceAll("+", OUString());
223 60 : aLinkCtrlClick = aLinkCtrlClick.replaceAll("%s", aModStr);
224 :
225 600 : for(sal_uInt16 i = 0; i < nCount; ++i)
226 540 : aDocInfoLst.push_back(OUString(SW_RESSTR(FLD_DOCINFO_BEGIN + i)));
227 :
228 60 : FreeResource();
229 60 : }
230 :
231 120 : ShellResource::~ShellResource()
232 : {
233 60 : delete pAutoFormatNameLst;
234 60 : }
235 :
236 21 : OUString ShellResource::GetPageDescName(sal_uInt16 nNo, PageNameMode eMode)
237 : {
238 21 : OUString sRet;
239 :
240 21 : switch (eMode)
241 : {
242 : case NORMAL_PAGE:
243 19 : sRet = sPageDescName;
244 19 : break;
245 : case FIRST_PAGE:
246 1 : sRet = sPageDescFirstName;
247 1 : break;
248 : case FOLLOW_PAGE:
249 1 : sRet = sPageDescFollowName;
250 1 : break;
251 : }
252 :
253 21 : return sRet.replaceFirst( "$(ARG1)", OUString::number( nNo ));
254 : }
255 :
256 7 : SwGlossaries* GetGlossaries()
257 : {
258 7 : if (!pGlossaries)
259 2 : pGlossaries = new SwGlossaries;
260 7 : return pGlossaries;
261 : }
262 :
263 0 : bool HasGlossaryList()
264 : {
265 0 : return pGlossaryList != 0;
266 : }
267 :
268 0 : SwGlossaryList* GetGlossaryList()
269 : {
270 0 : if(!pGlossaryList)
271 0 : pGlossaryList = new SwGlossaryList();
272 :
273 0 : return pGlossaryList;
274 : }
275 :
276 0 : struct ImpAutoFormatNameListLoader : public Resource
277 : {
278 : explicit ImpAutoFormatNameListLoader( std::vector<OUString>& rLst );
279 : };
280 :
281 0 : void ShellResource::_GetAutoFormatNameLst() const
282 : {
283 : assert(!pAutoFormatNameLst);
284 0 : pAutoFormatNameLst = new std::vector<OUString>;
285 0 : pAutoFormatNameLst->reserve(STR_AUTOFMTREDL_END);
286 0 : ImpAutoFormatNameListLoader aTmp(*pAutoFormatNameLst);
287 0 : }
288 :
289 0 : ImpAutoFormatNameListLoader::ImpAutoFormatNameListLoader( std::vector<OUString>& rLst )
290 0 : : Resource( ResId(RID_SHELLRES_AUTOFMTSTRS, *pSwResMgr) )
291 : {
292 0 : for( sal_uInt16 n = 0; n < STR_AUTOFMTREDL_END; ++n )
293 : {
294 0 : OUString p(ResId(n + 1, *pSwResMgr));
295 0 : if(STR_AUTOFMTREDL_TYPO == n)
296 : {
297 : #ifdef WNT
298 : // For Windows, a special treatment is necessary because MS has
299 : // forgotten some characters in the dialog font here.
300 : p = p.replaceFirst("%1", ",,");
301 : p = p.replaceFirst("%2", "''");
302 : #else
303 0 : const SvtSysLocale aSysLocale;
304 0 : const LocaleDataWrapper& rLclD = aSysLocale.GetLocaleData();
305 : // With real operating systems it also works without special handling.
306 0 : p = p.replaceFirst("%1", rLclD.getDoubleQuotationMarkStart());
307 0 : p = p.replaceFirst("%2", rLclD.getDoubleQuotationMarkEnd());
308 : #endif
309 : }
310 0 : rLst.insert(rLst.begin() + n, p);
311 0 : }
312 0 : FreeResource();
313 0 : }
314 :
315 0 : OUString SwAuthorityFieldType::GetAuthFieldName(ToxAuthorityField eType)
316 : {
317 0 : if(!pAuthFieldNameList)
318 : {
319 0 : pAuthFieldNameList = new std::vector<OUString>;
320 0 : pAuthFieldNameList->reserve(AUTH_FIELD_END);
321 0 : for(sal_uInt16 i = 0; i < AUTH_FIELD_END; ++i)
322 0 : pAuthFieldNameList->push_back(SW_RES(STR_AUTH_FIELD_START + i));
323 : }
324 0 : return (*pAuthFieldNameList)[static_cast< sal_uInt16 >(eType)];
325 : }
326 :
327 0 : OUString SwAuthorityFieldType::GetAuthTypeName(ToxAuthorityType eType)
328 : {
329 0 : if(!pAuthFieldTypeList)
330 : {
331 0 : pAuthFieldTypeList = new std::vector<OUString>;
332 0 : pAuthFieldTypeList->reserve(AUTH_TYPE_END);
333 0 : for(sal_uInt16 i = 0; i < AUTH_TYPE_END; ++i)
334 0 : pAuthFieldTypeList->push_back(SW_RES(STR_AUTH_TYPE_START + i));
335 : }
336 0 : return (*pAuthFieldTypeList)[static_cast< sal_uInt16 >(eType)];
337 : }
338 :
339 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|