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 <vcl/svapp.hxx>
21 : #include <flddat.hxx>
22 : #include <docufld.hxx>
23 : #include <globals.hrc>
24 : #include <chpfld.hxx>
25 : #include <fldui.hrc>
26 : #include <flddok.hxx>
27 : #include <swmodule.hxx>
28 : #include <view.hxx>
29 : #include <wrtsh.hxx>
30 : #include <svl/zformat.hxx>
31 :
32 : #include <index.hrc>
33 :
34 : #define USER_DATA_VERSION_1 "1"
35 : #define USER_DATA_VERSION USER_DATA_VERSION_1
36 :
37 0 : SwFldDokPage::SwFldDokPage(vcl::Window* pParent, const SfxItemSet& rCoreSet )
38 : : SwFldPage(pParent, "FldDocumentPage",
39 : "modules/swriter/ui/flddocumentpage.ui", rCoreSet)
40 : , nOldSel(0)
41 0 : , nOldFormat(0)
42 : {
43 0 : get(m_pSelection, "selectframe");
44 0 : get(m_pFormat, "formatframe");
45 0 : get(m_pTypeLB, "type");
46 0 : m_pTypeLB->SetStyle(m_pTypeLB->GetStyle() | WB_SORT);
47 0 : get(m_pSelectionLB, "select");
48 0 : get(m_pValueFT, "valueft");
49 0 : get(m_pValueED, "value");
50 0 : get(m_pLevelFT, "levelft");
51 0 : get(m_pLevelED, "level");
52 0 : get(m_pDateFT, "daysft");
53 0 : get(m_pTimeFT, "minutesft");
54 0 : get(m_pDateOffsetED, "offset");
55 0 : get(m_pFormatLB, "format");
56 0 : m_pFormatLB->SetStyle(m_pFormatLB->GetStyle() | WB_SORT);
57 0 : get(m_pNumFormatLB, "numformat");
58 0 : get(m_pFixedCB, "fixed");
59 :
60 0 : long nHeight = m_pTypeLB->GetTextHeight() * 20;
61 0 : m_pTypeLB->set_height_request(nHeight);
62 0 : m_pSelectionLB->set_height_request(nHeight);
63 0 : m_pFormatLB->set_height_request(nHeight);
64 :
65 0 : long nWidth = m_pTypeLB->LogicToPixel(Size(FIELD_COLUMN_WIDTH, 0), MapMode(MAP_APPFONT)).Width();
66 0 : m_pTypeLB->set_width_request(nWidth);
67 0 : m_pSelectionLB->set_width_request(nWidth);
68 0 : m_pFormatLB->set_width_request(nWidth);
69 :
70 0 : m_pSelectionLB->SetDoubleClickHdl(LINK(this, SwFldDokPage, InsertHdl));
71 0 : m_pFormatLB->SetDoubleClickHdl(LINK(this, SwFldDokPage, InsertHdl));
72 0 : m_pNumFormatLB->SetDoubleClickHdl(LINK(this, SwFldDokPage, NumFormatHdl));
73 :
74 0 : m_pLevelED->SetMax(MAXLEVEL);
75 0 : m_pDateOffsetED->SetMin(LONG_MIN);
76 0 : m_pDateOffsetED->SetMax(LONG_MAX);
77 : //enable 'active' language selection
78 0 : m_pNumFormatLB->SetShowLanguageControl(true);
79 0 : }
80 :
81 0 : SwFldDokPage::~SwFldDokPage()
82 : {
83 0 : }
84 :
85 0 : void SwFldDokPage::Reset(const SfxItemSet* )
86 : {
87 0 : SavePos(m_pTypeLB);
88 0 : Init(); // general initialisation
89 :
90 : // initialise TypeListBox
91 0 : const SwFldGroupRgn& rRg = GetFldMgr().GetGroupRange(IsFldDlgHtmlMode(), GetGroup());
92 :
93 0 : m_pTypeLB->SetUpdateMode(false);
94 0 : m_pTypeLB->Clear();
95 :
96 : sal_Int32 nPos;
97 :
98 0 : if (!IsFldEdit())
99 : {
100 0 : bool bPage = false;
101 : // fill Type-Listbox
102 0 : for(sal_uInt16 i = rRg.nStart; i < rRg.nEnd; ++i)
103 : {
104 0 : const sal_uInt16 nTypeId = SwFldMgr::GetTypeId(i);
105 :
106 0 : switch (nTypeId)
107 : {
108 : case TYP_PREVPAGEFLD:
109 : case TYP_NEXTPAGEFLD:
110 : case TYP_PAGENUMBERFLD:
111 0 : if (!bPage)
112 : {
113 0 : nPos = m_pTypeLB->InsertEntry(SW_RESSTR(FMT_REF_PAGE));
114 0 : m_pTypeLB->SetEntryData(nPos, (void*)USHRT_MAX);
115 0 : bPage = true;
116 : }
117 0 : break;
118 :
119 : default:
120 0 : nPos = m_pTypeLB->InsertEntry(SwFldMgr::GetTypeStr(i));
121 0 : m_pTypeLB->SetEntryData(nPos, reinterpret_cast<void*>(nTypeId));
122 0 : break;
123 : }
124 : }
125 : }
126 : else
127 : {
128 0 : const SwField* pCurField = GetCurField();
129 0 : sal_uInt16 nTypeId = pCurField->GetTypeId();
130 0 : if (nTypeId == TYP_FIXDATEFLD)
131 0 : nTypeId = TYP_DATEFLD;
132 0 : if (nTypeId == TYP_FIXTIMEFLD)
133 0 : nTypeId = TYP_TIMEFLD;
134 0 : nPos = m_pTypeLB->InsertEntry(SwFldMgr::GetTypeStr(SwFldMgr::GetPos(nTypeId)));
135 0 : m_pTypeLB->SetEntryData(nPos, reinterpret_cast<void*>(nTypeId));
136 0 : m_pNumFormatLB->SetAutomaticLanguage(pCurField->IsAutomaticLanguage());
137 0 : SwWrtShell *pSh = GetWrtShell();
138 0 : if(!pSh)
139 0 : pSh = ::GetActiveWrtShell();
140 0 : if(pSh)
141 : {
142 0 : const SvNumberformat* pFormat = pSh->GetNumberFormatter()->GetEntry(pCurField->GetFormat());
143 0 : if(pFormat)
144 0 : m_pNumFormatLB->SetLanguage(pFormat->GetLanguage());
145 : }
146 : }
147 :
148 : // select old Pos
149 0 : RestorePos(m_pTypeLB);
150 :
151 0 : m_pTypeLB->SetUpdateMode(true);
152 0 : m_pTypeLB->SetDoubleClickHdl(LINK(this, SwFldDokPage, InsertHdl));
153 0 : m_pTypeLB->SetSelectHdl(LINK(this, SwFldDokPage, TypeHdl));
154 0 : m_pFormatLB->SetSelectHdl(LINK(this, SwFldDokPage, FormatHdl));
155 :
156 0 : if( !IsRefresh() )
157 : {
158 0 : const OUString sUserData = GetUserData();
159 0 : if (sUserData.getToken(0, ';').equalsIgnoreAsciiCase(USER_DATA_VERSION_1))
160 : {
161 0 : const OUString sVal = sUserData.getToken(1, ';');
162 0 : const sal_uInt16 nVal = static_cast< sal_uInt16 >(sVal.toInt32());
163 0 : if(nVal != USHRT_MAX)
164 : {
165 0 : for(sal_Int32 i = 0; i < m_pTypeLB->GetEntryCount(); i++)
166 0 : if(nVal == (sal_uInt16)(sal_uLong)m_pTypeLB->GetEntryData(i))
167 : {
168 0 : m_pTypeLB->SelectEntryPos(i);
169 0 : break;
170 : }
171 0 : }
172 0 : }
173 : }
174 0 : TypeHdl(0);
175 :
176 0 : if (IsFldEdit())
177 : {
178 0 : nOldSel = m_pSelectionLB->GetSelectEntryPos();
179 0 : nOldFormat = GetCurField()->GetFormat();
180 0 : m_pFixedCB->SaveValue();
181 0 : m_pValueED->SaveValue();
182 0 : m_pLevelED->SaveValue();
183 0 : m_pDateOffsetED->SaveValue();
184 : }
185 0 : }
186 :
187 0 : IMPL_LINK_NOARG(SwFldDokPage, TypeHdl)
188 : {
189 : // save old ListBoxPos
190 0 : const sal_Int32 nOld = GetTypeSel();
191 :
192 : // current ListBoxPos
193 0 : SetTypeSel(m_pTypeLB->GetSelectEntryPos());
194 :
195 0 : if(GetTypeSel() == LISTBOX_ENTRY_NOTFOUND)
196 : {
197 0 : SetTypeSel(0);
198 0 : m_pTypeLB->SelectEntryPos(0);
199 : }
200 :
201 : size_t nCount;
202 :
203 0 : if (nOld != GetTypeSel())
204 : {
205 0 : m_pDateFT->Hide();
206 0 : m_pTimeFT->Hide();
207 :
208 0 : sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)m_pTypeLB->GetEntryData(GetTypeSel());
209 :
210 : // fill Selection-Listbox
211 0 : m_pSelectionLB->Clear();
212 :
213 0 : if (nTypeId != USHRT_MAX)
214 : {
215 0 : std::vector<OUString> aLst;
216 0 : GetFldMgr().GetSubTypes(nTypeId, aLst);
217 :
218 0 : if (nTypeId != TYP_AUTHORFLD)
219 0 : nCount = aLst.size();
220 : else
221 0 : nCount = GetFldMgr().GetFormatCount(nTypeId, false, IsFldDlgHtmlMode());
222 :
223 : size_t nPos;
224 :
225 0 : for(size_t i = 0; i < nCount; ++i)
226 : {
227 0 : if (!IsFldEdit())
228 : {
229 0 : if (nTypeId != TYP_AUTHORFLD)
230 0 : nPos = m_pSelectionLB->InsertEntry(aLst[i]);
231 : else
232 0 : nPos = m_pSelectionLB->InsertEntry(GetFldMgr().GetFormatStr(nTypeId, i));
233 :
234 0 : m_pSelectionLB->SetEntryData(nPos, reinterpret_cast<void*>(i));
235 : }
236 : else
237 : {
238 0 : bool bInsert = false;
239 :
240 0 : switch (nTypeId)
241 : {
242 : case TYP_DATEFLD:
243 : case TYP_TIMEFLD:
244 0 : nPos = m_pSelectionLB->InsertEntry(aLst[i]);
245 0 : m_pSelectionLB->SetEntryData(nPos, reinterpret_cast<void*>(i));
246 0 : if (((SwDateTimeField*)GetCurField())->IsFixed() && !i)
247 0 : m_pSelectionLB->SelectEntryPos(nPos);
248 0 : if (!((SwDateTimeField*)GetCurField())->IsFixed() && i)
249 0 : m_pSelectionLB->SelectEntryPos(nPos);
250 0 : break;
251 :
252 : case TYP_EXTUSERFLD:
253 : case TYP_DOCSTATFLD:
254 0 : nPos = m_pSelectionLB->InsertEntry(aLst[i]);
255 0 : m_pSelectionLB->SetEntryData(nPos, reinterpret_cast<void*>(i));
256 0 : if (GetCurField()->GetSubType() == i)
257 0 : m_pSelectionLB->SelectEntryPos(nPos);
258 0 : break;
259 :
260 : case TYP_AUTHORFLD:
261 : {
262 0 : const OUString sFmt(GetFldMgr().GetFormatStr(nTypeId, i));
263 0 : nPos = m_pSelectionLB->InsertEntry(sFmt);
264 0 : m_pSelectionLB->SetEntryData(nPos, reinterpret_cast<void*>(i));
265 0 : m_pSelectionLB->SelectEntry(GetFldMgr().GetFormatStr(nTypeId, GetCurField()->GetFormat()));
266 0 : break;
267 : }
268 :
269 : default:
270 0 : if (aLst[i] == GetCurField()->GetPar1())
271 0 : bInsert = true;
272 0 : break;
273 : }
274 0 : if (bInsert)
275 : {
276 0 : nPos = m_pSelectionLB->InsertEntry(aLst[i]);
277 0 : m_pSelectionLB->SetEntryData(nPos, reinterpret_cast<void*>(i));
278 0 : break;
279 : }
280 : }
281 : }
282 0 : m_pSelectionLB->SetSelectHdl(Link());
283 : }
284 : else
285 : {
286 0 : AddSubType(TYP_PAGENUMBERFLD);
287 0 : AddSubType(TYP_PREVPAGEFLD);
288 0 : AddSubType(TYP_NEXTPAGEFLD);
289 0 : nTypeId = (sal_uInt16)(sal_uLong)m_pSelectionLB->GetEntryData(0);
290 0 : nCount = 3;
291 0 : m_pSelectionLB->SetSelectHdl(LINK(this, SwFldDokPage, SubTypeHdl));
292 : }
293 :
294 0 : bool bEnable = nCount != 0;
295 :
296 0 : if (bEnable && !m_pSelectionLB->GetSelectEntryCount())
297 0 : m_pSelectionLB->SelectEntryPos(0);
298 :
299 0 : m_pSelection->Enable( bEnable );
300 :
301 : // fill Format-Listbox
302 0 : sal_Int32 nSize = FillFormatLB(nTypeId);
303 :
304 0 : bool bValue = false, bLevel = false, bNumFmt = false, bOffset = false;
305 0 : bool bFormat = nSize != 0;
306 0 : bool bOneArea = false;
307 0 : bool bFixed = false;
308 0 : sal_uInt16 nFmtType = 0;
309 :
310 0 : switch (nTypeId)
311 : {
312 : case TYP_DATEFLD:
313 0 : bFormat = bNumFmt = bOneArea = bOffset = true;
314 :
315 0 : nFmtType = NUMBERFORMAT_DATE;
316 :
317 0 : m_pDateFT->Show();
318 :
319 0 : m_pDateOffsetED->SetFirst(-31); // one month
320 0 : m_pDateOffsetED->SetLast(31);
321 :
322 0 : if (IsFldEdit())
323 0 : m_pDateOffsetED->SetValue( ((SwDateTimeField*)GetCurField())->GetOffset() / 24 / 60);
324 0 : break;
325 :
326 : case TYP_TIMEFLD:
327 0 : bFormat = bNumFmt = bOneArea = bOffset = true;
328 :
329 0 : nFmtType = NUMBERFORMAT_TIME;
330 :
331 0 : m_pTimeFT->Show();
332 :
333 0 : m_pDateOffsetED->SetFirst(-1440); // one day
334 0 : m_pDateOffsetED->SetLast(1440);
335 :
336 0 : if (IsFldEdit())
337 0 : m_pDateOffsetED->SetValue( ((SwDateTimeField*)GetCurField())->GetOffset() );
338 0 : break;
339 :
340 : case TYP_PREVPAGEFLD:
341 : case TYP_NEXTPAGEFLD:
342 0 : if (IsFldEdit())
343 : {
344 : const sal_uInt16 nTmp = (sal_uInt16)(sal_uLong)m_pFormatLB->GetEntryData(
345 0 : m_pFormatLB->GetSelectEntryPos() );
346 :
347 0 : if(SVX_NUM_CHAR_SPECIAL != nTmp)
348 : {
349 0 : sal_Int32 nOff = GetCurField()->GetPar2().toInt32();
350 0 : if( TYP_NEXTPAGEFLD == nTypeId && 1 != nOff )
351 : m_pValueED->SetText(
352 0 : OUString::number(nOff - 1) );
353 0 : else if( TYP_PREVPAGEFLD == nTypeId && -1 != nOff )
354 : m_pValueED->SetText(
355 0 : OUString::number(nOff + 1) );
356 : else
357 0 : m_pValueED->SetText(aEmptyOUStr);
358 : }
359 : else
360 0 : m_pValueED->SetText(((SwPageNumberField*)GetCurField())->GetUserString());
361 : }
362 0 : bValue = true;
363 0 : break;
364 :
365 : case TYP_CHAPTERFLD:
366 0 : m_pValueFT->SetText(SW_RESSTR(STR_LEVEL));
367 0 : if (IsFldEdit())
368 0 : m_pLevelED->SetText(OUString::number(((SwChapterField*)GetCurField())->GetLevel() + 1));
369 0 : bLevel = true;
370 0 : break;
371 :
372 : case TYP_PAGENUMBERFLD:
373 0 : m_pValueFT->SetText( SW_RESSTR( STR_OFFSET ));
374 0 : if (IsFldEdit())
375 0 : m_pValueED->SetText(GetCurField()->GetPar2());
376 0 : bValue = true;
377 0 : break;
378 :
379 : case TYP_EXTUSERFLD:
380 : case TYP_AUTHORFLD:
381 : case TYP_FILENAMEFLD:
382 0 : bFixed = true;
383 0 : break;
384 :
385 : default:
386 0 : break;
387 : }
388 :
389 0 : if (bNumFmt)
390 : {
391 0 : if (IsFldEdit())
392 : {
393 0 : m_pNumFormatLB->SetDefFormat(GetCurField()->GetFormat());
394 :
395 0 : if (m_pNumFormatLB->GetFormatType() == (NUMBERFORMAT_DATE|NUMBERFORMAT_TIME))
396 : {
397 : // always set Format-Type because otherwise when date/time formats are combined,
398 : // both formats would be displayed at the same time
399 0 : m_pNumFormatLB->SetFormatType(0);
400 0 : m_pNumFormatLB->SetFormatType(nFmtType);
401 : // set correct format once again
402 0 : m_pNumFormatLB->SetDefFormat(GetCurField()->GetFormat());
403 : }
404 : }
405 : else
406 0 : m_pNumFormatLB->SetFormatType(nFmtType);
407 :
408 0 : m_pNumFormatLB->SetOneArea(bOneArea);
409 : }
410 :
411 0 : m_pFormatLB->Show(!bNumFmt);
412 0 : m_pNumFormatLB->Show(bNumFmt);
413 :
414 0 : m_pValueFT->Show(bValue);
415 0 : m_pValueED->Show(bValue);
416 0 : m_pLevelFT->Show(bLevel);
417 0 : m_pLevelED->Show(bLevel);
418 0 : m_pDateOffsetED->Show(bOffset);
419 0 : m_pFixedCB->Show(!bValue && !bLevel && !bOffset);
420 :
421 0 : m_pFormat->Enable(bFormat);
422 0 : m_pFixedCB->Enable(bFixed);
423 :
424 0 : if (IsFldEdit())
425 0 : m_pFixedCB->Check( (GetCurField()->GetFormat() & AF_FIXED) != 0 && bFixed );
426 :
427 0 : if (m_pNumFormatLB->GetSelectEntryPos() == LISTBOX_ENTRY_NOTFOUND)
428 0 : m_pNumFormatLB->SelectEntryPos(0);
429 0 : m_pValueFT->Enable(bValue || bLevel || bOffset);
430 0 : m_pValueED->Enable(bValue);
431 : }
432 :
433 0 : return 0;
434 : }
435 :
436 0 : void SwFldDokPage::AddSubType(sal_uInt16 nTypeId)
437 : {
438 0 : const sal_Int32 nPos = m_pSelectionLB->InsertEntry(SwFieldType::GetTypeStr(nTypeId));
439 0 : m_pSelectionLB->SetEntryData(nPos, reinterpret_cast<void*>(nTypeId));
440 0 : }
441 :
442 0 : IMPL_LINK_NOARG(SwFldDokPage, SubTypeHdl)
443 : {
444 0 : sal_Int32 nPos = m_pSelectionLB->GetSelectEntryPos();
445 0 : if(nPos == LISTBOX_ENTRY_NOTFOUND)
446 0 : nPos = 0;
447 :
448 0 : const sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)m_pSelectionLB->GetEntryData(nPos);
449 0 : FillFormatLB(nTypeId);
450 :
451 0 : sal_uInt32 nTextRes = 0;
452 0 : switch (nTypeId)
453 : {
454 : case TYP_CHAPTERFLD:
455 0 : nTextRes = STR_LEVEL;
456 0 : break;
457 :
458 : case TYP_PREVPAGEFLD:
459 : case TYP_NEXTPAGEFLD:
460 0 : nTextRes = SVX_NUM_CHAR_SPECIAL == (sal_uInt16)(sal_uLong)m_pFormatLB->GetEntryData(
461 0 : m_pFormatLB->GetSelectEntryPos() )
462 0 : ? STR_VALUE : STR_OFFSET;
463 0 : break;
464 :
465 : case TYP_PAGENUMBERFLD:
466 0 : nTextRes = STR_OFFSET;
467 0 : break;
468 : }
469 :
470 0 : if( nTextRes )
471 0 : m_pValueFT->SetText( SW_RESSTR( nTextRes ));
472 :
473 0 : return 0;
474 : }
475 :
476 0 : sal_Int32 SwFldDokPage::FillFormatLB(sal_uInt16 nTypeId)
477 : {
478 : // fill Format-Listbox
479 0 : m_pFormatLB->Clear();
480 :
481 0 : if (nTypeId == TYP_AUTHORFLD)
482 0 : return m_pFormatLB->GetEntryCount();
483 :
484 0 : const sal_uInt16 nSize = GetFldMgr().GetFormatCount(nTypeId, false, IsFldDlgHtmlMode());
485 :
486 0 : for( sal_uInt16 i = 0; i < nSize; ++i )
487 : {
488 0 : const sal_Int32 nPos = m_pFormatLB->InsertEntry(GetFldMgr().GetFormatStr(nTypeId, i));
489 0 : const sal_uInt16 nFmtId = GetFldMgr().GetFormatId( nTypeId, i );
490 0 : m_pFormatLB->SetEntryData( nPos, reinterpret_cast<void*>( nFmtId ));
491 0 : if (IsFldEdit() && nFmtId == (GetCurField()->GetFormat() & ~AF_FIXED))
492 0 : m_pFormatLB->SelectEntryPos( nPos );
493 : }
494 :
495 0 : if( nSize && !m_pFormatLB->GetSelectEntryCount() )
496 : {
497 0 : m_pFormatLB->SelectEntry( SW_RESSTR(FMT_NUM_PAGEDESC) );
498 0 : if( !m_pFormatLB->GetSelectEntryCount() )
499 : {
500 0 : m_pFormatLB->SelectEntry( SW_RESSTR(FMT_NUM_ARABIC) );
501 0 : if( !m_pFormatLB->GetSelectEntryCount() )
502 0 : m_pFormatLB->SelectEntryPos( 0 );
503 : }
504 : }
505 :
506 0 : FormatHdl();
507 :
508 0 : return nSize;
509 : }
510 :
511 0 : IMPL_LINK_NOARG(SwFldDokPage, FormatHdl)
512 : {
513 0 : sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)m_pTypeLB->GetEntryData(GetTypeSel());
514 :
515 0 : if (nTypeId == USHRT_MAX)
516 : {
517 0 : sal_Int32 nPos = m_pSelectionLB->GetSelectEntryPos();
518 0 : if(nPos == LISTBOX_ENTRY_NOTFOUND)
519 0 : nPos = 0;
520 :
521 0 : nTypeId = (sal_uInt16)(sal_uLong)m_pSelectionLB->GetEntryData(nPos);
522 : }
523 :
524 0 : if (nTypeId == TYP_NEXTPAGEFLD || nTypeId == TYP_PREVPAGEFLD)
525 : {
526 : // Prev/Next - PageNumFields special treatment:
527 : sal_uInt16 nTmp = (sal_uInt16)(sal_uLong)m_pFormatLB->GetEntryData(
528 0 : m_pFormatLB->GetSelectEntryPos() );
529 0 : const OUString sOldTxt( m_pValueFT->GetText() );
530 : const OUString sNewTxt( SW_RES( SVX_NUM_CHAR_SPECIAL == nTmp ? STR_VALUE
531 0 : : STR_OFFSET ));
532 :
533 0 : if( sOldTxt != sNewTxt )
534 0 : m_pValueFT->SetText( sNewTxt );
535 :
536 0 : if (sOldTxt != m_pValueFT->GetText())
537 0 : m_pValueED->SetText( aEmptyOUStr );
538 : }
539 :
540 0 : return 0;
541 : }
542 :
543 0 : bool SwFldDokPage::FillItemSet(SfxItemSet* )
544 : {
545 0 : sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)m_pTypeLB->GetEntryData(GetTypeSel());
546 :
547 0 : if (nTypeId == USHRT_MAX)
548 : {
549 0 : sal_Int32 nPos = m_pSelectionLB->GetSelectEntryPos();
550 0 : if(nPos == LISTBOX_ENTRY_NOTFOUND)
551 0 : nPos = 0;
552 0 : nTypeId = (sal_uInt16)(sal_uLong)m_pSelectionLB->GetEntryData(nPos);
553 : }
554 :
555 0 : OUString aVal(m_pValueED->GetText());
556 0 : sal_uLong nFormat = 0;
557 0 : sal_uInt16 nSubType = 0;
558 :
559 0 : if (m_pFormatLB->IsEnabled())
560 : {
561 0 : sal_Int32 nPos = m_pFormatLB->GetSelectEntryPos();
562 0 : if(nPos != LISTBOX_ENTRY_NOTFOUND)
563 0 : nFormat = (sal_uLong)m_pFormatLB->GetEntryData(nPos);
564 : }
565 :
566 0 : if (m_pSelectionLB->IsEnabled())
567 : {
568 0 : sal_Int32 nPos = m_pSelectionLB->GetSelectEntryPos();
569 0 : if(nPos != LISTBOX_ENTRY_NOTFOUND)
570 0 : nSubType = (sal_uInt16)(sal_uLong)m_pSelectionLB->GetEntryData(nPos);
571 : }
572 :
573 0 : switch (nTypeId)
574 : {
575 : case TYP_AUTHORFLD:
576 0 : nFormat = nSubType;
577 0 : nSubType = 0;
578 : // no break!
579 : case TYP_EXTUSERFLD:
580 0 : nFormat |= m_pFixedCB->IsChecked() ? AF_FIXED : 0;
581 0 : break;
582 :
583 : case TYP_FILENAMEFLD:
584 0 : nFormat |= m_pFixedCB->IsChecked() ? FF_FIXED : 0;
585 0 : break;
586 :
587 : case TYP_DATEFLD:
588 : case TYP_TIMEFLD:
589 : {
590 0 : nFormat = m_pNumFormatLB->GetFormat();
591 0 : long nVal = static_cast< long >(m_pDateOffsetED->GetValue());
592 0 : if (nTypeId == TYP_DATEFLD)
593 0 : aVal = OUString::number(nVal * 60 * 24);
594 : else
595 0 : aVal = OUString::number(nVal);
596 0 : break;
597 : }
598 :
599 : case TYP_NEXTPAGEFLD:
600 : case TYP_PREVPAGEFLD:
601 : case TYP_PAGENUMBERFLD:
602 : case TYP_GETREFPAGEFLD:
603 : {
604 0 : if( SVX_NUM_CHAR_SPECIAL != nFormat &&
605 0 : (TYP_PREVPAGEFLD == nTypeId || TYP_NEXTPAGEFLD == nTypeId))
606 : {
607 0 : sal_Int32 nVal = m_pValueED->GetText().toInt32();
608 0 : aVal = OUString::number(nVal);
609 : }
610 0 : break;
611 : }
612 :
613 : case TYP_CHAPTERFLD:
614 0 : aVal = m_pLevelED->GetText();
615 0 : break;
616 :
617 : default:
618 0 : break;
619 : }
620 :
621 0 : if (!IsFldEdit() ||
622 0 : nOldSel != m_pSelectionLB->GetSelectEntryPos() ||
623 0 : nOldFormat != nFormat ||
624 0 : m_pFixedCB->IsValueChangedFromSaved() ||
625 0 : m_pValueED->IsValueChangedFromSaved() ||
626 0 : m_pLevelED->IsValueChangedFromSaved() ||
627 0 : m_pDateOffsetED->IsValueChangedFromSaved())
628 : {
629 0 : InsertFld( nTypeId, nSubType, aEmptyOUStr, aVal, nFormat, ' ', m_pNumFormatLB->IsAutomaticLanguage() );
630 : }
631 :
632 0 : return false;
633 : }
634 :
635 0 : SfxTabPage* SwFldDokPage::Create( vcl::Window* pParent,
636 : const SfxItemSet* rAttrSet )
637 : {
638 0 : return ( new SwFldDokPage( pParent, *rAttrSet ) );
639 : }
640 :
641 0 : sal_uInt16 SwFldDokPage::GetGroup()
642 : {
643 0 : return GRP_DOC;
644 : }
645 :
646 0 : void SwFldDokPage::FillUserData()
647 : {
648 0 : const sal_Int32 nEntryPos = m_pTypeLB->GetSelectEntryPos();
649 : const sal_uInt16 nTypeSel = ( LISTBOX_ENTRY_NOTFOUND == nEntryPos )
650 : ? USHRT_MAX : sal::static_int_cast< sal_uInt16 >
651 0 : (reinterpret_cast< sal_uIntPtr >(m_pTypeLB->GetEntryData( nEntryPos )));
652 0 : SetUserData(USER_DATA_VERSION ";" + OUString::number( nTypeSel ));
653 0 : }
654 :
655 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|