xref: /AOO41X/main/sw/source/ui/fldui/flddok.cxx (revision efeef26f81c84063fb0a91bde3856d4a51172d90)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sw.hxx"
26 #ifdef SW_DLLIMPLEMENTATION
27 #undef SW_DLLIMPLEMENTATION
28 #endif
29 
30 
31 #include <vcl/svapp.hxx>
32 #include <flddat.hxx>
33 #include <docufld.hxx>
34 #ifndef _GLOBALS_HRC
35 #include <globals.hrc>
36 #endif
37 #include <chpfld.hxx>
38 #ifndef _FLDTDLG_HRC
39 #include <fldtdlg.hrc>
40 #endif
41 #ifndef _FLDUI_HRC
42 #include <fldui.hrc>
43 #endif
44 #ifndef _FLDDOK_HXX
45 #include <flddok.hxx>
46 #endif
47 #include <swmodule.hxx>
48 #ifndef _VIEW_HXX
49 #include <view.hxx>
50 #endif
51 #include <wrtsh.hxx>
52 #include <svl/zformat.hxx>
53 
54 #include <index.hrc>
55 
56 #define USER_DATA_VERSION_1 "1"
57 #define USER_DATA_VERSION USER_DATA_VERSION_1
58 
59 /*--------------------------------------------------------------------
60     Beschreibung:
61  --------------------------------------------------------------------*/
62 
SwFldDokPage(Window * pWindow,const SfxItemSet & rCoreSet)63 SwFldDokPage::SwFldDokPage(Window* pWindow, const SfxItemSet& rCoreSet ) :
64     SwFldPage( pWindow, SW_RES( TP_FLD_DOK ), rCoreSet ),
65 
66     aTypeFT         (this, SW_RES(FT_DOKTYPE)),
67     aTypeLB         (this, SW_RES(LB_DOKTYPE)),
68     aSelectionFT    (this, SW_RES(FT_DOKSELECTION)),
69     aSelectionLB    (this, SW_RES(LB_DOKSELECTION)),
70     aValueFT        (this, SW_RES(FT_DOKVALUE)),
71     aValueED        (this, SW_RES(ED_DOKVALUE)),
72     aLevelED        (this, SW_RES(ED_DOKLEVEL)),
73     aDateOffsetED   (this, SW_RES(ED_DOKDATEOFF)),
74 
75     aFormatFT       (this, SW_RES(FT_DOKFORMAT)),
76     aFormatLB       (this, SW_RES(LB_DOKFORMAT)),
77     aNumFormatLB    (this, SW_RES(LB_DOKNUMFORMAT)),
78     aFixedCB        (this, SW_RES(CB_DOKFIXEDCONTENT)),
79 
80     sDateOffset     (SW_RES(STR_DOKDATEOFF)),
81     sTimeOffset     (SW_RES(STR_DOKTIMEOFF)),
82     aRootOpened     (SW_RES(BMP_DOKROOT_OPENED)),
83     aRootClosed     (SW_RES(BMP_DOKROOT_CLOSED))
84 {
85     FreeResource();
86 
87     aSelectionLB.SetDoubleClickHdl(LINK(this, SwFldDokPage, InsertHdl));
88     aFormatLB.SetDoubleClickHdl(LINK(this, SwFldDokPage, InsertHdl));
89     aNumFormatLB.SetDoubleClickHdl(LINK(this, SwFldDokPage, NumFormatHdl));
90 
91     aLevelED.SetMax(MAXLEVEL);
92     aDateOffsetED.SetMin(LONG_MIN);
93     aDateOffsetED.SetMax(LONG_MAX);
94     //enable 'active' language selection
95     aNumFormatLB.SetShowLanguageControl(sal_True);
96 }
97 
98 /*--------------------------------------------------------------------
99     Beschreibung:
100  --------------------------------------------------------------------*/
101 
~SwFldDokPage()102 __EXPORT SwFldDokPage::~SwFldDokPage()
103 {
104 }
105 
106 /*--------------------------------------------------------------------
107     Beschreibung:
108  --------------------------------------------------------------------*/
109 
Reset(const SfxItemSet &)110 void __EXPORT SwFldDokPage::Reset(const SfxItemSet& )
111 {
112     SavePos(&aTypeLB);
113     Init(); // Allgemeine initialisierung
114 
115     // TypeListBox initialisieren
116     const SwFldGroupRgn& rRg = GetFldMgr().GetGroupRange(IsFldDlgHtmlMode(), GetGroup());
117 
118     aTypeLB.SetUpdateMode(sal_False);
119     aTypeLB.Clear();
120 
121     sal_uInt16 nPos, nTypeId;
122     sal_Bool bPage = sal_False;
123 
124     if (!IsFldEdit())
125     {
126         // Typ-Listbox fuellen
127         for(short i = rRg.nStart; i < rRg.nEnd; ++i)
128         {
129             nTypeId = GetFldMgr().GetTypeId(i);
130 
131             switch (nTypeId)
132             {
133                 case TYP_PREVPAGEFLD:
134                 case TYP_NEXTPAGEFLD:
135                 case TYP_PAGENUMBERFLD:
136                     if (!bPage)
137                     {
138                         nPos = aTypeLB.InsertEntry(SW_RESSTR(FMT_REF_PAGE));
139                         aTypeLB.SetEntryData(nPos, (void*)USHRT_MAX);
140                         bPage = sal_True;
141                     }
142                     break;
143 
144                 default:
145                     nPos = aTypeLB.InsertEntry(GetFldMgr().GetTypeStr(i));
146                     aTypeLB.SetEntryData(nPos, reinterpret_cast<void*>(nTypeId));
147                     break;
148             }
149         }
150     }
151     else
152     {
153         const SwField* pCurField = GetCurField();
154         nTypeId = pCurField->GetTypeId();
155         if (nTypeId == TYP_FIXDATEFLD)
156             nTypeId = TYP_DATEFLD;
157         if (nTypeId == TYP_FIXTIMEFLD)
158             nTypeId = TYP_TIMEFLD;
159         nPos = aTypeLB.InsertEntry(GetFldMgr().GetTypeStr(GetFldMgr().GetPos(nTypeId)));
160         aTypeLB.SetEntryData(nPos, reinterpret_cast<void*>(nTypeId));
161         aNumFormatLB.SetAutomaticLanguage(pCurField->IsAutomaticLanguage());
162         SwWrtShell *pSh = GetWrtShell();
163         if(!pSh)
164             pSh = ::GetActiveWrtShell();
165         if(pSh)
166         {
167             const SvNumberformat* pFormat = pSh->GetNumberFormatter()->GetEntry(pCurField->GetFormat());
168             if(pFormat)
169                 aNumFormatLB.SetLanguage(pFormat->GetLanguage());
170         }
171     }
172 
173     // alte Pos selektieren
174     RestorePos(&aTypeLB);
175 
176     aTypeLB.SetUpdateMode(sal_True);
177     aTypeLB.SetDoubleClickHdl(LINK(this, SwFldDokPage, InsertHdl));
178     aTypeLB.SetSelectHdl(LINK(this, SwFldDokPage, TypeHdl));
179     aFormatLB.SetSelectHdl(LINK(this, SwFldDokPage, FormatHdl));
180 
181     if( !IsRefresh() )
182     {
183         String sUserData = GetUserData();
184         if( sUserData.GetToken(0, ';').EqualsIgnoreCaseAscii(USER_DATA_VERSION_1 ))
185         {
186             String sVal = sUserData.GetToken(1, ';');
187             sal_uInt16 nVal = static_cast< sal_uInt16 >(sVal.ToInt32());
188             if(nVal != USHRT_MAX)
189             {
190                 for(sal_uInt16 i = 0; i < aTypeLB.GetEntryCount(); i++)
191                     if(nVal == (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(i))
192                     {
193                         aTypeLB.SelectEntryPos(i);
194                         break;
195                     }
196             }
197         }
198     }
199     TypeHdl(0);
200 
201     if (IsFldEdit())
202     {
203         nOldSel = aSelectionLB.GetSelectEntryPos();
204         nOldFormat = GetCurField()->GetFormat();
205         aFixedCB.SaveValue();
206         aValueED.SaveValue();
207         aLevelED.SaveValue();
208         aDateOffsetED.SaveValue();
209     }
210 }
211 
212 /*--------------------------------------------------------------------
213     Beschreibung:
214  --------------------------------------------------------------------*/
215 
IMPL_LINK(SwFldDokPage,TypeHdl,ListBox *,EMPTYARG)216 IMPL_LINK( SwFldDokPage, TypeHdl, ListBox *, EMPTYARG )
217 {
218     // Alte ListBoxPos sichern
219     const sal_uInt16 nOld = GetTypeSel();
220 
221     // Aktuelle ListBoxPos
222     SetTypeSel(aTypeLB.GetSelectEntryPos());
223 
224     if(GetTypeSel() == LISTBOX_ENTRY_NOTFOUND)
225     {
226         SetTypeSel(0);
227         aTypeLB.SelectEntryPos(0);
228     }
229 
230     sal_uInt16 nCount;
231 
232     if (nOld != GetTypeSel())
233     {
234         sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(GetTypeSel());
235 
236         // Auswahl-Listbox fuellen
237         aSelectionLB.Clear();
238 
239         if (nTypeId != USHRT_MAX)
240         {
241             SvStringsDtor aLst;
242             GetFldMgr().GetSubTypes(nTypeId, aLst);
243 
244             if (nTypeId != TYP_AUTHORFLD)
245                 nCount = aLst.Count();
246             else
247                 nCount = GetFldMgr().GetFormatCount(nTypeId, sal_False, IsFldDlgHtmlMode());
248 
249             sal_uInt16 nPos;
250 
251             for (sal_uInt16 i = 0; i < nCount; ++i)
252             {
253                 if (!IsFldEdit())
254                 {
255                     if (nTypeId != TYP_AUTHORFLD)
256                         nPos = aSelectionLB.InsertEntry(*aLst[i]);
257                     else
258                         nPos = aSelectionLB.InsertEntry(GetFldMgr().GetFormatStr(nTypeId, i));
259 
260                     aSelectionLB.SetEntryData(nPos, reinterpret_cast<void*>(i));
261                 }
262                 else
263                 {
264                     sal_Bool bInsert = sal_False;
265 
266                     switch (nTypeId)
267                     {
268                         case TYP_DATEFLD:
269                         case TYP_TIMEFLD:
270                             nPos = aSelectionLB.InsertEntry(*aLst[i]);
271                             aSelectionLB.SetEntryData(nPos, reinterpret_cast<void*>(i));
272                             if (((SwDateTimeField*)GetCurField())->IsFixed() && !i)
273                                 aSelectionLB.SelectEntryPos(nPos);
274                             if (!((SwDateTimeField*)GetCurField())->IsFixed() && i)
275                                 aSelectionLB.SelectEntryPos(nPos);
276                             break;
277 
278                         case TYP_EXTUSERFLD:
279                         case TYP_DOCSTATFLD:
280                             nPos = aSelectionLB.InsertEntry(*aLst[i]);
281                             aSelectionLB.SetEntryData(nPos, reinterpret_cast<void*>(i));
282                             if (GetCurField()->GetSubType() == i)
283                                 aSelectionLB.SelectEntryPos(nPos);
284                             break;
285 
286                         case TYP_AUTHORFLD:
287                         {
288                             String sFmt(GetFldMgr().GetFormatStr(nTypeId, i));
289                             nPos = aSelectionLB.InsertEntry(sFmt);
290                             aSelectionLB.SetEntryData(nPos, reinterpret_cast<void*>(i));
291                             aSelectionLB.SelectEntry(GetFldMgr().GetFormatStr(nTypeId, GetCurField()->GetFormat()));
292                             break;
293                         }
294 
295                         default:
296                             if (*aLst[i] == GetCurField()->GetPar1())
297                                 bInsert = sal_True;
298                             break;
299                     }
300                     if (bInsert)
301                     {
302                         nPos = aSelectionLB.InsertEntry(*aLst[i]);
303                         aSelectionLB.SetEntryData(nPos, reinterpret_cast<void*>(i));
304                         break;
305                     }
306                 }
307             }
308             aSelectionLB.SetSelectHdl(Link());
309         }
310         else
311         {
312             AddSubType(TYP_PAGENUMBERFLD);
313             AddSubType(TYP_PREVPAGEFLD);
314             AddSubType(TYP_NEXTPAGEFLD);
315             nTypeId = (sal_uInt16)(sal_uLong)aSelectionLB.GetEntryData(0);
316             nCount = 3;
317             aSelectionLB.SetSelectHdl(LINK(this, SwFldDokPage, SubTypeHdl));
318         }
319 
320         sal_Bool bEnable = nCount != 0;
321 
322         if (bEnable && !aSelectionLB.GetSelectEntryCount())
323             aSelectionLB.SelectEntryPos(0);
324 
325         aSelectionLB.Enable( bEnable );
326         aSelectionFT.Enable( bEnable );
327 
328         // Format-Listbox fuellen
329         sal_uInt16 nSize = FillFormatLB(nTypeId);
330 
331         sal_Bool bValue = sal_False, bLevel = sal_False, bNumFmt = sal_False, bOffset = sal_False;
332         sal_Bool bFormat = nSize != 0;
333         sal_Bool bOneArea = sal_False;
334         sal_Bool bFixed = sal_False;
335         sal_uInt16 nFmtType = 0;
336 
337         switch (nTypeId)
338         {
339             case TYP_DATEFLD:
340                 bFormat = bNumFmt = bOneArea = bOffset = sal_True;
341 
342                 nFmtType = NUMBERFORMAT_DATE;
343                 aValueFT.SetText(sDateOffset);
344                 aDateOffsetED.SetFirst(-31);    // Ein Monat
345                 aDateOffsetED.SetLast(31);
346 
347                 if (IsFldEdit())
348                     aDateOffsetED.SetValue( ((SwDateTimeField*)GetCurField())->GetOffset() / 24 / 60);
349                 break;
350 
351             case TYP_TIMEFLD:
352                 bFormat = bNumFmt = bOneArea = bOffset = sal_True;
353 
354                 nFmtType = NUMBERFORMAT_TIME;
355                 aValueFT.SetText(sTimeOffset);
356                 aDateOffsetED.SetFirst(-1440);  // Ein Tag
357                 aDateOffsetED.SetLast(1440);
358 
359                 if (IsFldEdit())
360                     aDateOffsetED.SetValue( ((SwDateTimeField*)GetCurField())->GetOffset() );
361                 break;
362 
363             case TYP_PREVPAGEFLD:
364             case TYP_NEXTPAGEFLD:
365                 if (IsFldEdit())
366                 {
367                     sal_uInt16 nTmp = (sal_uInt16)(sal_uLong)aFormatLB.GetEntryData(
368                                             aFormatLB.GetSelectEntryPos() );
369                     String sOldTxt(aValueFT.GetText());
370 
371                     if(SVX_NUM_CHAR_SPECIAL != nTmp)
372                     {
373                         sal_Int32 nOff = GetCurField()->GetPar2().ToInt32();
374                         if( TYP_NEXTPAGEFLD == nTypeId && 1 != nOff )
375                             aValueED.SetText(
376                                 String::CreateFromInt32(nOff - 1) );
377                         else if( TYP_PREVPAGEFLD == nTypeId && -1 != nOff )
378                             aValueED.SetText(
379                                 String::CreateFromInt32(nOff + 1) );
380                         else
381                             aValueED.SetText(aEmptyStr);
382                     }
383                     else
384                         aValueED.SetText(((SwPageNumberField*)GetCurField())->GetUserString());
385                 }
386                 bValue = sal_True;
387                 break;
388 
389             case TYP_CHAPTERFLD:
390                 aValueFT.SetText(SW_RESSTR(STR_LEVEL));
391                 if (IsFldEdit())
392                     aLevelED.SetText(String::CreateFromInt32(((SwChapterField*)GetCurField())->GetLevel() + 1));
393                 bLevel = sal_True;
394                 break;
395 
396             case TYP_PAGENUMBERFLD:
397                 aValueFT.SetText( SW_RESSTR( STR_OFFSET ));
398                 if (IsFldEdit())
399                     aValueED.SetText(GetCurField()->GetPar2());
400                 bValue = sal_True;
401                 break;
402 
403             case TYP_EXTUSERFLD:
404             case TYP_AUTHORFLD:
405             case TYP_FILENAMEFLD:
406                 bFixed = sal_True;
407                 break;
408 
409             default:
410                 break;
411         }
412 
413         if (bNumFmt)
414         {
415             if (IsFldEdit())
416             {
417                 aNumFormatLB.SetDefFormat(GetCurField()->GetFormat());
418 
419                 if (aNumFormatLB.GetFormatType() == (NUMBERFORMAT_DATE|NUMBERFORMAT_TIME))
420                 {
421                     // Format-Typ immer einstellen, da sonst bei kombinierten Datum/Zeitformaten
422                     // beide Formate gleichzeitig angezeigt werden wuerden
423                     aNumFormatLB.SetFormatType(0);
424                     aNumFormatLB.SetFormatType(nFmtType);
425                     // Nochmal richtiges Format einstellen
426                     aNumFormatLB.SetDefFormat(GetCurField()->GetFormat());
427                 }
428             }
429             else
430                 aNumFormatLB.SetFormatType(nFmtType);
431 
432             aNumFormatLB.SetOneArea(bOneArea);
433         }
434 
435         aFormatLB.Show(!bNumFmt);
436         aNumFormatLB.Show(bNumFmt);
437 
438         Size aSz(aFormatLB.GetSizePixel());
439 
440         if (bValue | bLevel | bOffset)
441             aSz.Height() = aFormatLB.LogicToPixel(Size(1, 137), MAP_APPFONT).Height();
442         else
443             aSz.Height() = aFormatLB.LogicToPixel(Size(1, 152), MAP_APPFONT).Height();
444 
445         aValueFT.Show(bValue | bLevel | bOffset);
446         aValueED.Show(bValue);
447         aLevelED.Show(bLevel);
448         aDateOffsetED.Show(bOffset);
449         aFixedCB.Show(!bValue && !bLevel && !bOffset);
450 
451         aFormatLB.SetSizePixel(aSz);
452         aNumFormatLB.SetSizePixel(aSz);
453 
454         aFormatLB.Enable(bFormat);
455         aFormatFT.Enable(bFormat);
456         aFixedCB.Enable(bFixed);
457 
458         if (IsFldEdit())
459             aFixedCB.Check( static_cast< sal_Bool >(((GetCurField()->GetFormat() & AF_FIXED) != 0) & bFixed));
460 
461         if (aNumFormatLB.GetSelectEntryPos() == LISTBOX_ENTRY_NOTFOUND)
462             aNumFormatLB.SelectEntryPos(0);
463         aValueFT.Enable(bValue | bLevel | bOffset);
464         aValueED.Enable(bValue);
465     }
466 
467     return 0;
468 }
469 
470 /*--------------------------------------------------------------------
471     Beschreibung:
472  --------------------------------------------------------------------*/
473 
AddSubType(sal_uInt16 nTypeId)474 void SwFldDokPage::AddSubType(sal_uInt16 nTypeId)
475 {
476     sal_uInt16 nPos = aSelectionLB.InsertEntry(SwFieldType::GetTypeStr(nTypeId));
477     aSelectionLB.SetEntryData(nPos, reinterpret_cast<void*>(nTypeId));
478 }
479 
480 /*--------------------------------------------------------------------
481     Beschreibung:
482  --------------------------------------------------------------------*/
483 
IMPL_LINK(SwFldDokPage,SubTypeHdl,ListBox *,EMPTYARG)484 IMPL_LINK( SwFldDokPage, SubTypeHdl, ListBox *, EMPTYARG )
485 {
486     sal_uInt16 nPos = aSelectionLB.GetSelectEntryPos();
487     if(nPos == LISTBOX_ENTRY_NOTFOUND)
488         nPos = 0;
489 
490     sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)aSelectionLB.GetEntryData(nPos);
491     FillFormatLB(nTypeId);
492 
493     sal_uInt16 nTextRes = 0;
494     switch (nTypeId)
495     {
496     case TYP_CHAPTERFLD:
497         nTextRes = STR_LEVEL;
498         break;
499 
500     case TYP_PREVPAGEFLD:
501     case TYP_NEXTPAGEFLD:
502         nTextRes = SVX_NUM_CHAR_SPECIAL == (sal_uInt16)(sal_uLong)aFormatLB.GetEntryData(
503                                         aFormatLB.GetSelectEntryPos() )
504                         ? STR_VALUE : STR_OFFSET;
505         break;
506 
507     case TYP_PAGENUMBERFLD:
508         nTextRes = STR_OFFSET;
509         break;
510     }
511 
512     if( nTextRes )
513         aValueFT.SetText( SW_RESSTR( nTextRes ));
514 
515     return 0;
516 }
517 
518 /*--------------------------------------------------------------------
519     Beschreibung:
520  --------------------------------------------------------------------*/
521 
FillFormatLB(sal_uInt16 nTypeId)522 sal_uInt16 SwFldDokPage::FillFormatLB(sal_uInt16 nTypeId)
523 {
524     // Format-Listbox fuellen
525     aFormatLB.Clear();
526 
527     if (nTypeId == TYP_AUTHORFLD)
528         return aFormatLB.GetEntryCount();
529 
530     sal_uInt16 nSize = GetFldMgr().GetFormatCount(nTypeId, sal_False, IsFldDlgHtmlMode());
531 
532     for( sal_uInt16 i = 0; i < nSize; ++i )
533     {
534         sal_uInt16 nPos = aFormatLB.InsertEntry(GetFldMgr().GetFormatStr(nTypeId, i));
535         sal_uInt16 nFmtId = GetFldMgr().GetFormatId( nTypeId, i );
536         aFormatLB.SetEntryData( nPos, reinterpret_cast<void*>( nFmtId ));
537         if (IsFldEdit() && nFmtId == (GetCurField()->GetFormat() & ~AF_FIXED))
538             aFormatLB.SelectEntryPos( nPos );
539     }
540 
541     if( nSize && !aFormatLB.GetSelectEntryCount() )
542     {
543         aFormatLB.SelectEntry( SW_RESSTR(FMT_NUM_PAGEDESC) );
544         if( !aFormatLB.GetSelectEntryCount() )
545         {
546             aFormatLB.SelectEntry( SW_RESSTR(FMT_NUM_ARABIC) );
547             if( !aFormatLB.GetSelectEntryCount() )
548                 aFormatLB.SelectEntryPos( 0 );
549         }
550     }
551 
552     FormatHdl();
553 
554     return nSize;
555 }
556 
557 /*--------------------------------------------------------------------
558     Beschreibung:
559  --------------------------------------------------------------------*/
560 
IMPL_LINK(SwFldDokPage,FormatHdl,ListBox *,EMPTYARG)561 IMPL_LINK( SwFldDokPage, FormatHdl, ListBox *, EMPTYARG )
562 {
563     sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(GetTypeSel());
564 
565     if (nTypeId == USHRT_MAX)
566     {
567         sal_uInt16 nPos = aSelectionLB.GetSelectEntryPos();
568         if(nPos == LISTBOX_ENTRY_NOTFOUND)
569             nPos = 0;
570 
571         nTypeId = (sal_uInt16)(sal_uLong)aSelectionLB.GetEntryData(nPos);
572     }
573 
574     if (nTypeId == TYP_NEXTPAGEFLD || nTypeId == TYP_PREVPAGEFLD)
575     {
576         // Prev/Next - PageNumFelder Sonderbehandlung:
577         sal_uInt16 nTmp = (sal_uInt16)(sal_uLong)aFormatLB.GetEntryData(
578                                         aFormatLB.GetSelectEntryPos() );
579         String sOldTxt( aValueFT.GetText() );
580         String sNewTxt( SW_RES( SVX_NUM_CHAR_SPECIAL == nTmp  ? STR_VALUE
581                                                          : STR_OFFSET ));
582 
583         if( sOldTxt != sNewTxt )
584             aValueFT.SetText( sNewTxt );
585 
586         if (sOldTxt != aValueFT.GetText())
587             aValueED.SetText( aEmptyStr );
588     }
589 
590     return 0;
591 }
592 
593 /*--------------------------------------------------------------------
594     Beschreibung:
595  --------------------------------------------------------------------*/
596 
FillItemSet(SfxItemSet &)597 sal_Bool __EXPORT SwFldDokPage::FillItemSet(SfxItemSet& )
598 {
599     sal_Bool bPage = sal_False;
600     sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(GetTypeSel());
601 
602     if (nTypeId == USHRT_MAX)
603     {
604         sal_uInt16 nPos = aSelectionLB.GetSelectEntryPos();
605         if(nPos == LISTBOX_ENTRY_NOTFOUND)
606             nPos = 0;
607         nTypeId = (sal_uInt16)(sal_uLong)aSelectionLB.GetEntryData(nPos);
608         bPage = sal_True;
609     }
610 
611     String aVal(aValueED.GetText());
612     sal_uLong nFormat = 0;
613     sal_uInt16 nSubType = 0;
614 
615     if (aFormatLB.IsEnabled())
616     {
617         sal_uInt16 nPos = aFormatLB.GetSelectEntryPos();
618         if(nPos != LISTBOX_ENTRY_NOTFOUND)
619             nFormat = (sal_uInt16)(sal_uLong)aFormatLB.GetEntryData(nPos);
620     }
621 
622     if (aSelectionLB.IsEnabled())
623     {
624         sal_uInt16 nPos = aSelectionLB.GetSelectEntryPos();
625         if(nPos != LISTBOX_ENTRY_NOTFOUND)
626             nSubType = (sal_uInt16)(sal_uLong)aSelectionLB.GetEntryData(nPos);
627     }
628 
629     switch (nTypeId)
630     {
631         case TYP_AUTHORFLD:
632             nFormat = nSubType;
633             nSubType = 0;
634             // kein break!
635         case TYP_EXTUSERFLD:
636             nFormat |= aFixedCB.IsChecked() ? AF_FIXED : 0;
637             break;
638 
639         case TYP_FILENAMEFLD:
640             nFormat |= aFixedCB.IsChecked() ? FF_FIXED : 0;
641             break;
642 
643         case TYP_DATEFLD:
644         case TYP_TIMEFLD:
645         {
646             nFormat = aNumFormatLB.GetFormat();
647             long nVal = static_cast< long >(aDateOffsetED.GetValue());
648             if (nTypeId == TYP_DATEFLD)
649                 aVal = String::CreateFromInt32(nVal * 60 * 24);
650             else
651                 aVal = String::CreateFromInt32(nVal);
652             break;
653         }
654 
655         case TYP_NEXTPAGEFLD:
656         case TYP_PREVPAGEFLD:
657         case TYP_PAGENUMBERFLD:
658         case TYP_GETREFPAGEFLD:
659         {
660             if( SVX_NUM_CHAR_SPECIAL != nFormat &&
661                 (TYP_PREVPAGEFLD == nTypeId || TYP_NEXTPAGEFLD == nTypeId))
662             {
663                 sal_Int32 nVal = aValueED.GetText().ToInt32();
664                 aVal = String::CreateFromInt32(nVal);
665             }
666             break;
667         }
668 
669         case TYP_CHAPTERFLD:
670             aVal = aLevelED.GetText();
671             break;
672 
673         default:
674             break;
675     }
676 
677     if (!IsFldEdit() ||
678         nOldSel != aSelectionLB.GetSelectEntryPos() ||
679         nOldFormat != nFormat ||
680         aFixedCB.GetState() != aFixedCB.GetSavedValue() ||
681         aValueED.GetText() != aValueED.GetSavedValue() ||
682         aLevelED.GetText() != aLevelED.GetSavedValue() ||
683         aDateOffsetED.GetText() != aDateOffsetED.GetSavedValue())
684     {
685         InsertFld( nTypeId, nSubType, aEmptyStr, aVal, nFormat, ' ', aNumFormatLB.IsAutomaticLanguage() );
686     }
687 
688     return sal_False;
689 }
690 
691 /*--------------------------------------------------------------------
692     Beschreibung:
693  --------------------------------------------------------------------*/
694 
Create(Window * pParent,const SfxItemSet & rAttrSet)695 SfxTabPage* __EXPORT SwFldDokPage::Create(  Window* pParent,
696                         const SfxItemSet& rAttrSet )
697 {
698     return ( new SwFldDokPage( pParent, rAttrSet ) );
699 }
700 
701 /*--------------------------------------------------------------------
702     Beschreibung:
703  --------------------------------------------------------------------*/
704 
GetGroup()705 sal_uInt16 SwFldDokPage::GetGroup()
706 {
707     return GRP_DOC;
708 }
709 
710 /* -----------------12.01.99 10:09-------------------
711  *
712  * --------------------------------------------------*/
FillUserData()713 void    SwFldDokPage::FillUserData()
714 {
715     String sData( String::CreateFromAscii(
716                         RTL_CONSTASCII_STRINGPARAM( USER_DATA_VERSION )));
717     sData += ';';
718     sal_uInt16 nTypeSel = aTypeLB.GetSelectEntryPos();
719     if( LISTBOX_ENTRY_NOTFOUND == nTypeSel )
720         nTypeSel = USHRT_MAX;
721     else
722         nTypeSel = sal::static_int_cast< sal_uInt16 >(reinterpret_cast< sal_uIntPtr >(aTypeLB.GetEntryData( nTypeSel )));
723     sData += String::CreateFromInt32( nTypeSel );
724     SetUserData(sData);
725 }
726 
727 
728