LCOV - code coverage report
Current view: top level - libreoffice/sw/source/ui/fldui - fldvar.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 658 0.0 %
Date: 2012-12-27 Functions: 0 26 0.0 %
Legend: Lines: hit not hit

          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 <swtypes.hxx>
      21             : #include <sfx2/linkmgr.hxx>
      22             : #include <usrfld.hxx>
      23             : #include <docufld.hxx>
      24             : #include <expfld.hxx>
      25             : #include <ddefld.hxx>
      26             : #include <view.hxx>
      27             : #include <wrtsh.hxx>
      28             : #include <doc.hxx>
      29             : #include <docary.hxx>
      30             : #include <swmodule.hxx>
      31             : #include <fldvar.hxx>
      32             : #include <calc.hxx>
      33             : #include <svl/zformat.hxx>
      34             : #include <globals.hrc>
      35             : #include <fldui.hrc>
      36             : #include <fldtdlg.hrc>
      37             : 
      38             : #define USER_DATA_VERSION_1 "1"
      39             : #define USER_DATA_VERSION USER_DATA_VERSION_1
      40             : 
      41           0 : SwFldVarPage::SwFldVarPage(Window* pParent, const SfxItemSet& rCoreSet ) :
      42             :     SwFldPage       ( pParent, SW_RES( TP_FLD_VAR ), rCoreSet ),
      43             :     aTypeFT         (this, SW_RES(FT_VARTYPE)),
      44             :     aTypeLB         (this, SW_RES(LB_VARTYPE)),
      45             :     aSelectionFT    (this, SW_RES(FT_VARSELECTION)),
      46             :     aSelectionLB    (this, SW_RES(LB_VARSELECTION)),
      47             :     aNameFT         (this, SW_RES(FT_VARNAME)),
      48             :     aNameED         (this, SW_RES(ED_VARNAME)),
      49             :     aValueFT        (this, SW_RES(FT_VARVALUE)),
      50             :     aValueED        (this, SW_RES(ED_VARVALUE)),
      51             :     aFormatFT       (this, SW_RES(FT_VARFORMAT)),
      52             :     aNumFormatLB    (this, SW_RES(LB_VARNUMFORMAT)),
      53             :     aFormatLB       (this, SW_RES(LB_VARFORMAT)),
      54             :     aChapterHeaderFT(this, SW_RES(FT_VARCHAPTERHEADER)),
      55             :     aChapterLevelFT (this, SW_RES(FT_VARCHAPTERLEVEL)),
      56             :     aChapterLevelLB (this, SW_RES(LB_VARCHAPTERLEVEL)),
      57             :     aInvisibleCB    (this, SW_RES(CB_VARINVISIBLE)),
      58             :     aSeparatorFT    (this, SW_RES(FT_VARSEPARATOR)),
      59             :     aSeparatorED    (this, SW_RES(ED_VARSEPARATOR)),
      60             :     aNewDelTBX      (this, SW_RES(TBX_VARNEWDEL)),
      61           0 :     bInit           (sal_True)
      62             : {
      63           0 :     FreeResource();
      64             : 
      65           0 :     aNewDelTBX.SetSizePixel( aNewDelTBX.CalcWindowSizePixel() );
      66             : 
      67           0 :     long nDelta = ( aValueED.GetSizePixel().Height() -
      68           0 :                     aNewDelTBX.GetSizePixel().Height() ) / 2;
      69           0 :     Point aNewPnt = aNewDelTBX.GetPosPixel();
      70           0 :     aNewPnt.Y() += nDelta;
      71           0 :     aNewDelTBX.SetPosPixel( aNewPnt );
      72             : 
      73           0 :     sOldValueFT = aValueFT.GetText();
      74           0 :     sOldNameFT = aNameFT.GetText();
      75             : 
      76           0 :     for (sal_uInt16 i = 1; i <= MAXLEVEL; i++)
      77           0 :         aChapterLevelLB.InsertEntry(String::CreateFromInt32(i));
      78             : 
      79           0 :     aChapterLevelLB.SelectEntryPos(0);
      80             :     //enable 'active' language selection
      81           0 :     aNumFormatLB.SetShowLanguageControl(sal_True);
      82           0 : }
      83             : 
      84           0 : SwFldVarPage::~SwFldVarPage()
      85             : {
      86           0 : }
      87             : 
      88           0 : void SwFldVarPage::Reset(const SfxItemSet& )
      89             : {
      90           0 :     SavePos(&aTypeLB);
      91             : 
      92           0 :     Init(); // general initialisation
      93             : 
      94           0 :     aTypeLB.SetUpdateMode(sal_False);
      95           0 :     aTypeLB.Clear();
      96             : 
      97             :     sal_uInt16 nPos, nTypeId;
      98             : 
      99           0 :     if (!IsFldEdit())
     100             :     {
     101             :         // initialise TypeListBox
     102           0 :         const SwFldGroupRgn& rRg = GetFldMgr().GetGroupRange(IsFldDlgHtmlMode(), GetGroup());
     103             : 
     104           0 :         for (short i = rRg.nStart; i < rRg.nEnd; ++i)
     105             :         {
     106           0 :             nTypeId = GetFldMgr().GetTypeId(i);
     107           0 :             nPos = aTypeLB.InsertEntry(GetFldMgr().GetTypeStr(i));
     108           0 :             aTypeLB.SetEntryData(nPos, reinterpret_cast<void*>(nTypeId));
     109             :         }
     110             :     }
     111             :     else
     112             :     {
     113           0 :         SwField* pCurField = GetCurField();
     114           0 :         nTypeId = pCurField->GetTypeId();
     115           0 :         if (nTypeId == TYP_SETINPFLD)
     116           0 :             nTypeId = TYP_INPUTFLD;
     117           0 :         nPos = aTypeLB.InsertEntry(GetFldMgr().GetTypeStr(GetFldMgr().GetPos(nTypeId)));
     118           0 :         aTypeLB.SetEntryData(nPos, reinterpret_cast<void*>(nTypeId));
     119           0 :         aNumFormatLB.SetAutomaticLanguage(pCurField->IsAutomaticLanguage());
     120           0 :         SwWrtShell *pSh = GetWrtShell();
     121           0 :         if(!pSh)
     122           0 :             pSh = ::GetActiveWrtShell();
     123           0 :         if(pSh)
     124             :         {
     125           0 :             const SvNumberformat* pFormat = pSh->GetNumberFormatter()->GetEntry(pCurField->GetFormat());
     126           0 :             if(pFormat)
     127           0 :                 aNumFormatLB.SetLanguage(pFormat->GetLanguage());
     128             :         }
     129             :     }
     130             : 
     131             :     // select old Pos
     132           0 :     RestorePos(&aTypeLB);
     133             : 
     134           0 :     aTypeLB.SetDoubleClickHdl       (LINK(this, SwFldVarPage, InsertHdl));
     135           0 :     aTypeLB.SetSelectHdl            (LINK(this, SwFldVarPage, TypeHdl));
     136           0 :     aSelectionLB.SetSelectHdl       (LINK(this, SwFldVarPage, SubTypeHdl));
     137           0 :     aSelectionLB.SetDoubleClickHdl  (LINK(this, SwFldVarPage, InsertHdl));
     138           0 :     aFormatLB.SetDoubleClickHdl     (LINK(this, SwFldVarPage, InsertHdl));
     139           0 :     aNumFormatLB.SetDoubleClickHdl  (LINK(this, SwFldVarPage, InsertHdl));
     140           0 :     aNameED.SetModifyHdl            (LINK(this, SwFldVarPage, ModifyHdl));
     141           0 :     aValueED.SetModifyHdl           (LINK(this, SwFldVarPage, ModifyHdl));
     142           0 :     aNewDelTBX.SetClickHdl          (LINK(this, SwFldVarPage, TBClickHdl));
     143           0 :     aChapterLevelLB.SetSelectHdl    (LINK(this, SwFldVarPage, ChapterHdl));
     144           0 :     aSeparatorED.SetModifyHdl       (LINK(this, SwFldVarPage, SeparatorHdl));
     145             : 
     146           0 :     if( !IsRefresh() )
     147             :     {
     148           0 :         String sUserData = GetUserData();
     149           0 :         if(!IsRefresh() && sUserData.GetToken(0, ';').EqualsIgnoreCaseAscii(USER_DATA_VERSION_1))
     150             :         {
     151           0 :             String sVal = sUserData.GetToken(1, ';');
     152           0 :             sal_uInt16 nVal = (sal_uInt16)sVal.ToInt32();
     153           0 :             if( USHRT_MAX != nVal )
     154             :             {
     155           0 :                 for(sal_uInt16 i = 0; i < aTypeLB.GetEntryCount(); i++)
     156           0 :                     if(nVal == (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(i))
     157             :                     {
     158           0 :                         aTypeLB.SelectEntryPos(i);
     159           0 :                         break;
     160             :                     }
     161           0 :             }
     162           0 :         }
     163             :     }
     164           0 :     TypeHdl(0);
     165             : 
     166           0 :     aTypeLB.SetUpdateMode(sal_True);
     167             : 
     168           0 :     if (IsFldEdit())
     169             :     {
     170           0 :         aSelectionLB.SaveValue();
     171           0 :         aFormatLB.SaveValue();
     172           0 :         nOldFormat = aNumFormatLB.GetFormat();
     173           0 :         aNameED.SaveValue();
     174           0 :         aValueED.SaveValue();
     175           0 :         aInvisibleCB.SaveValue();
     176           0 :         aChapterLevelLB.SaveValue();
     177           0 :         aSeparatorED.SaveValue();
     178             :     }
     179           0 : }
     180             : 
     181           0 : IMPL_LINK_NOARG(SwFldVarPage, TypeHdl)
     182             : {
     183             :     // save old ListBoxPos
     184           0 :     const sal_uInt16 nOld = GetTypeSel();
     185             : 
     186             :     // current ListBoxPos
     187           0 :     SetTypeSel(aTypeLB.GetSelectEntryPos());
     188             : 
     189           0 :     if(GetTypeSel() == LISTBOX_ENTRY_NOTFOUND)
     190             :     {
     191           0 :         SetTypeSel(0);
     192           0 :         aTypeLB.SelectEntryPos(0);
     193             :     }
     194             : 
     195           0 :     if (nOld != GetTypeSel() || nOld == LISTBOX_ENTRY_NOTFOUND)
     196             :     {
     197           0 :         bInit = sal_True;
     198           0 :         if (nOld != LISTBOX_ENTRY_NOTFOUND)
     199             :         {
     200           0 :             aNameED.SetText(aEmptyStr);
     201           0 :             aValueED.SetText(aEmptyStr);
     202             :         }
     203             : 
     204           0 :         aValueED.SetDropEnable(sal_False);
     205           0 :         UpdateSubType();    // initialise selection-listboxes
     206             :     }
     207             : 
     208           0 :     bInit = sal_False;
     209             : 
     210           0 :     return 0;
     211             : }
     212             : 
     213           0 : IMPL_LINK( SwFldVarPage, SubTypeHdl, ListBox *, pBox )
     214             : {
     215           0 :     sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(GetTypeSel());
     216           0 :     sal_uInt16 nSelPos = aSelectionLB.GetSelectEntryPos();
     217             : 
     218           0 :     if (nSelPos != LISTBOX_ENTRY_NOTFOUND)
     219           0 :         nSelPos = (sal_uInt16)(sal_uLong)aSelectionLB.GetEntryData(nSelPos);
     220             : 
     221           0 :     if (IsFldEdit() && (!pBox || bInit))
     222             :     {
     223           0 :         if (nTypeId != TYP_FORMELFLD)
     224           0 :             aNameED.SetText(GetFldMgr().GetCurFldPar1());
     225             : 
     226           0 :         aValueED.SetText(GetFldMgr().GetCurFldPar2());
     227             :     }
     228             : 
     229           0 :     if (aNameFT.GetText() != sOldNameFT)
     230           0 :         aNameFT.SetText(sOldNameFT);
     231           0 :     if (aValueFT.GetText() != sOldValueFT)
     232           0 :         aValueFT.SetText(sOldValueFT);
     233             : 
     234           0 :     aNumFormatLB.SetUpdateMode(sal_False);
     235           0 :     aFormatLB.SetUpdateMode(sal_False);
     236           0 :     FillFormatLB(nTypeId);
     237             : 
     238           0 :     sal_uInt16 nSize = aFormatLB.GetEntryCount();
     239             : 
     240           0 :     sal_Bool bValue = sal_False, bName = sal_False, bNumFmt = sal_False,
     241           0 :             bInvisible = sal_False, bSeparator = sal_False, bChapterLevel = sal_False;
     242           0 :     sal_Bool bFormat = nSize != 0;
     243             : 
     244           0 :     switch (nTypeId)
     245             :     {
     246             :         case TYP_USERFLD:
     247             :         {
     248             :             // change or create user type
     249             :             SwUserFieldType* pType = (SwUserFieldType*)
     250           0 :                 GetFldMgr().GetFldType(RES_USERFLD, nSelPos);
     251             : 
     252           0 :             if (pType)
     253             :             {
     254           0 :                 if (!IsFldEdit())
     255             :                 {
     256           0 :                     if (pBox || (bInit && !IsRefresh()))    // only when interacting via mouse
     257             :                     {
     258           0 :                         aNameED.SetText(pType->GetName());
     259             : 
     260           0 :                         if (pType->GetType() == UF_STRING)
     261             :                         {
     262           0 :                             aValueED.SetText(pType->GetContent());
     263           0 :                             aNumFormatLB.SelectEntryPos(0);
     264             :                         }
     265             :                         else
     266           0 :                             aValueED.SetText(pType->GetContent());
     267             :                     }
     268             :                 }
     269             :                 else
     270           0 :                     aValueED.SetText(pType->GetContent());
     271             :             }
     272             :             else
     273             :             {
     274           0 :                 if (pBox)   // only when interacting via mouse
     275             :                 {
     276           0 :                     aNameED.SetText(aEmptyStr);
     277           0 :                     aValueED.SetText(aEmptyStr);
     278             :                 }
     279             :             }
     280           0 :             bValue = bName = bNumFmt = bInvisible = sal_True;
     281             : 
     282           0 :             aValueED.SetDropEnable(sal_True);
     283           0 :             break;
     284             :         }
     285             : 
     286             :         case TYP_SETFLD:
     287           0 :             bValue = sal_True;
     288             : 
     289           0 :             bNumFmt = bInvisible = sal_True;
     290             : 
     291           0 :             if (!IsFldDlgHtmlMode())
     292           0 :                 bName = sal_True;
     293             :             else
     294             :             {
     295           0 :                 aNumFormatLB.Clear();
     296           0 :                 sal_uInt16 nPos = aNumFormatLB.InsertEntry(SW_RESSTR(FMT_SETVAR_TEXT), 0);
     297           0 :                 aNumFormatLB.SetEntryData(nPos, (void *)ULONG_MAX);
     298           0 :                 aNumFormatLB.SelectEntryPos(0);
     299             :             }
     300             :             // is there a corresponding SetField
     301           0 :             if (IsFldEdit() || pBox)    // only when interacting via mouse
     302             :             {
     303           0 :                 if (nSelPos != LISTBOX_ENTRY_NOTFOUND)
     304             :                 {
     305           0 :                     String sName(aSelectionLB.GetSelectEntry());
     306           0 :                     aNameED.SetText(sName);
     307             : 
     308           0 :                     if (!IsFldDlgHtmlMode())
     309             :                     {
     310           0 :                         SwWrtShell *pSh = GetWrtShell();
     311           0 :                         if(!pSh)
     312           0 :                             pSh = ::GetActiveWrtShell();
     313           0 :                         if(pSh)
     314             :                         {
     315             :                             SwSetExpFieldType* pSetTyp = (SwSetExpFieldType*)
     316           0 :                                     pSh->GetFldType(RES_SETEXPFLD, sName);
     317             : 
     318           0 :                             if (pSetTyp && pSetTyp->GetType() == nsSwGetSetExpType::GSE_STRING)
     319           0 :                                 aNumFormatLB.SelectEntryPos(0); // textual
     320             :                         }
     321           0 :                     }
     322             :                 }
     323             :             }
     324           0 :             if (IsFldEdit())
     325             :             {
     326             :                 // GetFormula leads to problems with date formats because
     327             :                 // only the numeric value without formating is returned.
     328             :                 // It must be used though because otherwise in GetPar2 only
     329             :                 // the value calculated by Kalkulator would be displayed
     330             :                 // (instead of test2 = test + 1)
     331           0 :                 aValueED.SetText(((SwSetExpField*)GetCurField())->GetFormula());
     332             :             }
     333           0 :             aValueED.SetDropEnable(sal_True);
     334           0 :             break;
     335             : 
     336             :         case TYP_FORMELFLD:
     337             :             {
     338           0 :                 bValue = sal_True;
     339           0 :                 bNumFmt = sal_True;
     340           0 :                 aValueFT.SetText(SW_RESSTR(STR_FORMULA));
     341           0 :                 aValueED.SetDropEnable(sal_True);
     342             :             }
     343           0 :             break;
     344             : 
     345             :         case TYP_GETFLD:
     346             :             {
     347           0 :                 if (!IsFldEdit())
     348             :                 {
     349           0 :                     aNameED.SetText(aEmptyStr);
     350           0 :                     aValueED.SetText(aEmptyStr);
     351             :                 }
     352             : 
     353           0 :                 if (nSelPos != LISTBOX_ENTRY_NOTFOUND)
     354             :                 {
     355           0 :                     String sName(aSelectionLB.GetSelectEntry());
     356           0 :                     if (!IsFldEdit())
     357           0 :                         aNameED.SetText(sName);
     358             : 
     359             :                     // is there a corresponding SetField
     360           0 :                     SwWrtShell *pSh = GetWrtShell();
     361           0 :                     if(!pSh)
     362           0 :                         pSh = ::GetActiveWrtShell();
     363           0 :                     if(pSh)
     364             :                     {
     365             :                         SwSetExpFieldType* pSetTyp = (SwSetExpFieldType*)
     366           0 :                                 pSh->GetFldType(RES_SETEXPFLD, sName);
     367             : 
     368           0 :                         if(pSetTyp)
     369             :                         {
     370           0 :                             if (pSetTyp->GetType() & nsSwGetSetExpType::GSE_STRING)    // textual?
     371           0 :                                 bFormat = sal_True;
     372             :                             else                    // numeric
     373           0 :                                 bNumFmt = sal_True;
     374             :                         }
     375           0 :                     }
     376             :                 }
     377             :                 else
     378           0 :                     bFormat = sal_False;
     379             : 
     380           0 :                 EnableInsert(bFormat|bNumFmt);
     381             :             }
     382           0 :             break;
     383             : 
     384             :         case TYP_INPUTFLD:
     385           0 :             aValueFT.SetText(SW_RESSTR(STR_PROMPT));
     386             : 
     387           0 :             if (nSelPos != LISTBOX_ENTRY_NOTFOUND)
     388             :             {
     389           0 :                 bValue = bNumFmt = sal_True;
     390             : 
     391           0 :                 String sName;
     392             : 
     393           0 :                 sName = aSelectionLB.GetSelectEntry();
     394           0 :                 aNameED.SetText( sName );
     395             : 
     396             :                 // User- or SetField ?
     397           0 :                 sal_uInt16 nInpType = 0;
     398           0 :                 nInpType = static_cast< sal_uInt16 >(GetFldMgr().GetFldType(RES_USERFLD, sName) ? 0 : TYP_SETINPFLD);
     399             : 
     400           0 :                 if (nInpType)   // SETEXPFLD
     401             :                 {
     402             :                     // is there a corresponding SetField
     403             :                     SwSetExpFieldType* pSetTyp = (SwSetExpFieldType*)
     404           0 :                                 GetFldMgr().GetFldType(RES_SETEXPFLD, sName);
     405             : 
     406           0 :                     if(pSetTyp)
     407             :                     {
     408           0 :                         if (pSetTyp->GetType() == nsSwGetSetExpType::GSE_STRING)    // textual?
     409             :                         {
     410           0 :                             aNumFormatLB.Clear();
     411             : 
     412           0 :                             sal_uInt16 nPos = aNumFormatLB.InsertEntry(SW_RESSTR(FMT_USERVAR_TEXT), 0);
     413           0 :                             aNumFormatLB.SetEntryData(nPos, (void *)ULONG_MAX);
     414           0 :                             aNumFormatLB.SelectEntryPos(0);
     415             :                         }
     416             :                     }
     417           0 :                     if (IsFldEdit() && (!pBox || bInit) )
     418           0 :                         aValueED.SetText(((SwSetExpField*)GetCurField())->GetPromptText());
     419             :                 }
     420             :                 else    // USERFLD
     421           0 :                     bFormat = bNumFmt = sal_False;
     422             :             }
     423           0 :             break;
     424             : 
     425             :         case TYP_DDEFLD:
     426           0 :             aValueFT.SetText(SW_RESSTR(STR_DDE_CMD));
     427             : 
     428           0 :             if (IsFldEdit() || pBox)    // only when interacting via mouse
     429             :             {
     430           0 :                 if (nSelPos != LISTBOX_ENTRY_NOTFOUND)
     431             :                 {
     432             :                     SwDDEFieldType* pType =
     433           0 :                         (SwDDEFieldType*) GetFldMgr().GetFldType(RES_DDEFLD, nSelPos);
     434             : 
     435           0 :                     if(pType)
     436             :                     {
     437           0 :                         aNameED.SetText(pType->GetName());
     438             : 
     439             :                         //JP 28.08.95: DDE-Topics/-Items can have blanks in their names!
     440             :                         //              That's not considered here yet
     441           0 :                         String sCmd( pType->GetCmd() );
     442           0 :                         sal_uInt16 nTmpPos = sCmd.SearchAndReplace( sfx2::cTokenSeperator, ' ' );
     443           0 :                         sCmd.SearchAndReplace( sfx2::cTokenSeperator, ' ', nTmpPos );
     444             : 
     445           0 :                         aValueED.SetText( sCmd );
     446           0 :                         aFormatLB.SelectEntryPos(pType->GetType());
     447             :                     }
     448             :                 }
     449             :             }
     450           0 :             bName = bValue = sal_True;
     451           0 :             break;
     452             : 
     453             :         case TYP_SEQFLD:
     454             :             {
     455           0 :                 bName = bValue = bSeparator = bChapterLevel = sal_True;
     456             : 
     457             :                 SwFieldType* pFldTyp;
     458           0 :                 if( IsFldEdit() )
     459           0 :                     pFldTyp = GetCurField()->GetTyp();
     460             :                 else
     461             :                 {
     462           0 :                     String sFldTypeName( aSelectionLB.GetEntry( nSelPos ));
     463           0 :                     if( sFldTypeName.Len() )
     464           0 :                         pFldTyp = GetFldMgr().GetFldType( RES_SETEXPFLD,
     465           0 :                                                           sFldTypeName );
     466             :                     else
     467           0 :                         pFldTyp = 0;
     468             :                 }
     469             : 
     470           0 :                 if( IsFldEdit() )
     471           0 :                     aValueED.SetText( ((SwSetExpField*)GetCurField())->
     472           0 :                                         GetFormula() );
     473             : 
     474           0 :                 if( IsFldEdit() || pBox )   // only when interacting via mouse
     475           0 :                     aNameED.SetText( aSelectionLB.GetSelectEntry() );
     476             : 
     477           0 :                 if( pFldTyp )
     478             :                 {
     479           0 :                     sal_uInt8 nLevel = ((SwSetExpFieldType*)pFldTyp)->GetOutlineLvl();
     480           0 :                     if( 0x7f == nLevel )
     481           0 :                         aChapterLevelLB.SelectEntryPos( 0 );
     482             :                     else
     483           0 :                         aChapterLevelLB.SelectEntryPos( nLevel + 1 );
     484           0 :                     String sDelim = ((SwSetExpFieldType*)pFldTyp)->GetDelimiter();
     485           0 :                     aSeparatorED.SetText( sDelim );
     486           0 :                     ChapterHdl();
     487             :                 }
     488             :             }
     489           0 :             break;
     490             : 
     491             :         case TYP_SETREFPAGEFLD:
     492             :             {
     493           0 :                 bValue = sal_False;
     494           0 :                 aValueFT.SetText( SW_RESSTR( STR_OFFSET ));
     495             : 
     496           0 :                 if (IsFldEdit() || pBox)    // only when interacting via mouse
     497           0 :                     aNameED.SetText(aEmptyStr);
     498             : 
     499           0 :                 if (nSelPos != 0 && nSelPos != LISTBOX_ENTRY_NOTFOUND)
     500             :                 {
     501           0 :                     bValue = sal_True;      // SubType OFF - knows no Offset
     502           0 :                     if (IsFldEdit())
     503           0 :                         aValueED.SetText(String::CreateFromInt32(((SwRefPageSetField*)GetCurField())->GetOffset()));
     504             :                 }
     505             :             }
     506           0 :             break;
     507             : 
     508             :         case TYP_GETREFPAGEFLD:
     509           0 :             aNameED.SetText(aEmptyStr);
     510           0 :             aValueED.SetText(aEmptyStr);
     511           0 :             break;
     512             :     }
     513             : 
     514           0 :     aNumFormatLB.Show(bNumFmt);
     515           0 :     aFormatLB.Show(!bNumFmt);
     516             : 
     517           0 :     if (IsFldEdit())
     518           0 :         bName = sal_False;
     519             : 
     520           0 :     aFormatLB.Enable(bFormat);
     521           0 :     aFormatFT.Enable(bFormat|bNumFmt);
     522           0 :     aNameFT.Enable(bName);
     523           0 :     aNameED.Enable(bName);
     524           0 :     aValueFT.Enable(bValue);
     525           0 :     aValueED.Enable(bValue);
     526             : 
     527           0 :     Size aSz(aFormatLB.GetSizePixel());
     528             : 
     529           0 :     if (bChapterLevel)
     530           0 :         aSz.Height() = aFormatLB.LogicToPixel(Size(1, 94), MAP_APPFONT).Height();
     531             :     else
     532           0 :         aSz.Height() = aFormatLB.LogicToPixel(Size(1, 123), MAP_APPFONT).Height();
     533             : 
     534           0 :     aFormatLB.SetSizePixel(aSz);
     535             : 
     536           0 :     aInvisibleCB.Show(!bSeparator);
     537           0 :     aSeparatorFT.Show(bSeparator);
     538           0 :     aSeparatorED.Show(bSeparator);
     539           0 :     aChapterHeaderFT.Show(bChapterLevel);
     540           0 :     aChapterLevelFT.Show(bChapterLevel);
     541           0 :     aChapterLevelLB.Show(bChapterLevel);
     542           0 :     aInvisibleCB.Enable(bInvisible);
     543             : 
     544           0 :     ModifyHdl();    // apply/insert/delete status update
     545             : 
     546           0 :     aNumFormatLB.SetUpdateMode(sal_True);
     547           0 :     aFormatLB.SetUpdateMode(sal_True);
     548             : 
     549           0 :     if(aSelectionLB.IsCallAddSelection())
     550             :     {
     551           0 :         nTypeId = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(GetTypeSel());
     552             : 
     553           0 :         switch (nTypeId)
     554             :         {
     555             :             case TYP_FORMELFLD:
     556             :                 {
     557           0 :                     nSelPos = aSelectionLB.GetSelectEntryPos();
     558             : 
     559           0 :                     if (nSelPos != LISTBOX_ENTRY_NOTFOUND)
     560           0 :                         nSelPos = (sal_uInt16)(sal_uLong)aSelectionLB.GetEntryData(nSelPos);
     561             : 
     562           0 :                     if (nSelPos != LISTBOX_ENTRY_NOTFOUND && pBox && !bInit)
     563             :                     {
     564           0 :                         aValueED.ReplaceSelected(aSelectionLB.GetSelectEntry());
     565           0 :                         ModifyHdl();
     566             :                     }
     567             :                 }
     568           0 :                 break;
     569             :         }
     570           0 :         aSelectionLB.ResetCallAddSelection();
     571             :     }
     572           0 :     return 0;
     573             : }
     574             : 
     575             : /*--------------------------------------------------------------------
     576             :      Description: renew types in SelectionBox
     577             :  --------------------------------------------------------------------*/
     578           0 : void SwFldVarPage::UpdateSubType()
     579             : {
     580           0 :     String sOldSel;
     581           0 :     sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(GetTypeSel());
     582             : 
     583           0 :     SetSelectionSel(aSelectionLB.GetSelectEntryPos());
     584           0 :     if(GetSelectionSel() != LISTBOX_ENTRY_NOTFOUND)
     585           0 :         sOldSel = aSelectionLB.GetEntry(GetSelectionSel());
     586             : 
     587             :     // fill Selection-Listbox
     588           0 :     aSelectionLB.SetUpdateMode(sal_False);
     589           0 :     aSelectionLB.Clear();
     590             : 
     591           0 :     std::vector<rtl::OUString> aList;
     592           0 :     GetFldMgr().GetSubTypes(nTypeId, aList);
     593           0 :     size_t nCount = aList.size();
     594             :     size_t nPos;
     595             : 
     596           0 :     for(size_t i = 0; i < nCount; ++i)
     597             :     {
     598           0 :         if (nTypeId != TYP_INPUTFLD || i)
     599             :         {
     600           0 :             if (!IsFldEdit())
     601             :             {
     602           0 :                 nPos = aSelectionLB.InsertEntry(aList[i]);
     603           0 :                 aSelectionLB.SetEntryData(nPos, reinterpret_cast<void*>(i));
     604             :             }
     605             :             else
     606             :             {
     607           0 :                 sal_Bool bInsert = sal_False;
     608             : 
     609           0 :                 switch (nTypeId)
     610             :                 {
     611             :                     case TYP_INPUTFLD:
     612           0 :                         if (aList[i] == GetCurField()->GetPar1())
     613           0 :                             bInsert = sal_True;
     614           0 :                         break;
     615             : 
     616             :                     case TYP_FORMELFLD:
     617           0 :                         bInsert = sal_True;
     618           0 :                         break;
     619             : 
     620             :                     case TYP_GETFLD:
     621           0 :                         if (aList[i].equals(((const SwFormulaField*)GetCurField())->GetFormula()))
     622           0 :                             bInsert = sal_True;
     623           0 :                         break;
     624             : 
     625             :                     case TYP_SETFLD:
     626             :                     case TYP_USERFLD:
     627           0 :                         if (aList[i] == GetCurField()->GetTyp()->GetName())
     628             :                         {
     629           0 :                             bInsert = sal_True;
     630           0 :                             if (GetCurField()->GetSubType() & nsSwExtendedSubType::SUB_INVISIBLE)
     631           0 :                                 aInvisibleCB.Check();
     632             :                         }
     633           0 :                         break;
     634             : 
     635             :                     case TYP_SETREFPAGEFLD:
     636           0 :                         if ((((SwRefPageSetField*)GetCurField())->IsOn() && i) ||
     637           0 :                             (!((SwRefPageSetField*)GetCurField())->IsOn() && !i))
     638           0 :                             sOldSel = aList[i];
     639             : 
     640             :                         // allow all entries for selection:
     641           0 :                         nPos = aSelectionLB.InsertEntry(aList[i]);
     642           0 :                         aSelectionLB.SetEntryData(nPos, reinterpret_cast<void*>(i));
     643           0 :                         break;
     644             : 
     645             :                     default:
     646           0 :                         if (aList[i] == GetCurField()->GetPar1())
     647           0 :                             bInsert = sal_True;
     648           0 :                         break;
     649             :                 }
     650           0 :                 if (bInsert)
     651             :                 {
     652           0 :                     nPos = aSelectionLB.InsertEntry(aList[i]);
     653           0 :                     aSelectionLB.SetEntryData(nPos, reinterpret_cast<void*>(i));
     654           0 :                     if (nTypeId != TYP_FORMELFLD)
     655           0 :                         break;
     656             :                 }
     657             :             }
     658             :         }
     659             :     }
     660             : 
     661           0 :     sal_Bool bEnable = aSelectionLB.GetEntryCount() != 0;
     662           0 :     ListBox *pLB = 0;
     663             : 
     664           0 :     if (bEnable)
     665             :     {
     666           0 :         aSelectionLB.SelectEntry(sOldSel);
     667           0 :         if (!aSelectionLB.GetSelectEntryCount())
     668             :         {
     669           0 :             aSelectionLB.SelectEntryPos(0);
     670           0 :             pLB = &aSelectionLB;    // newly initialise all controls
     671             :         }
     672             :     }
     673             : 
     674           0 :     aSelectionLB.Enable( bEnable );
     675           0 :     aSelectionFT.Enable( bEnable );
     676             : 
     677           0 :     SubTypeHdl(pLB);
     678           0 :     aSelectionLB.SetUpdateMode(sal_True);
     679           0 : }
     680             : 
     681           0 : sal_uInt16 SwFldVarPage::FillFormatLB(sal_uInt16 nTypeId)
     682             : {
     683           0 :     String sOldSel, sOldNumSel;
     684           0 :     sal_uLong nOldNumFormat = 0;
     685             : 
     686           0 :     sal_uInt16 nFormatSel = aFormatLB.GetSelectEntryPos();
     687           0 :     if (nFormatSel != LISTBOX_ENTRY_NOTFOUND)
     688           0 :         sOldSel = aFormatLB.GetEntry(nFormatSel);
     689             : 
     690           0 :     sal_uInt16 nNumFormatSel = aNumFormatLB.GetSelectEntryPos();
     691           0 :     if (nNumFormatSel != LISTBOX_ENTRY_NOTFOUND)
     692             :     {
     693           0 :         sOldNumSel = aNumFormatLB.GetEntry(nNumFormatSel);
     694           0 :         nOldNumFormat = aNumFormatLB.GetFormat();
     695             :     }
     696             : 
     697             :     // fill Format-Listbox
     698           0 :     aFormatLB.Clear();
     699           0 :     aNumFormatLB.Clear();
     700           0 :     sal_Bool bSpecialFmt = sal_False;
     701             : 
     702           0 :     if( TYP_GETREFPAGEFLD != nTypeId )
     703             :     {
     704           0 :         if (IsFldEdit())
     705             :         {
     706           0 :             bSpecialFmt = GetCurField()->GetFormat() == SAL_MAX_UINT32;
     707             : 
     708           0 :             if (!bSpecialFmt)
     709             :             {
     710           0 :                 aNumFormatLB.SetDefFormat(GetCurField()->GetFormat());
     711           0 :                 sOldNumSel = aEmptyStr;
     712             :             }
     713             :             else
     714           0 :                 if (nTypeId == TYP_GETFLD || nTypeId == TYP_FORMELFLD)
     715           0 :                     aNumFormatLB.SetFormatType(NUMBERFORMAT_NUMBER);
     716             :         }
     717             :         else
     718             :         {
     719           0 :             if (nOldNumFormat && nOldNumFormat != ULONG_MAX)
     720           0 :                 aNumFormatLB.SetDefFormat(nOldNumFormat);
     721             :             else
     722           0 :                 aNumFormatLB.SetFormatType(NUMBERFORMAT_NUMBER);
     723             :         }
     724             :     }
     725             : 
     726           0 :     switch (nTypeId)
     727             :     {
     728             :         case TYP_USERFLD:
     729             :         {
     730           0 :             if (!IsFldEdit() || bSpecialFmt)
     731             :             {
     732           0 :                 sal_uInt16 nPos = aNumFormatLB.InsertEntry(SW_RESSTR(FMT_MARK_TEXT), 0);
     733           0 :                 aNumFormatLB.SetEntryData(nPos, (void *)ULONG_MAX);
     734           0 :                 nPos = aNumFormatLB.InsertEntry(SW_RESSTR(FMT_USERVAR_CMD), 1);
     735           0 :                 aNumFormatLB.SetEntryData(nPos, (void *)ULONG_MAX);
     736             :             }
     737             :         }
     738           0 :         break;
     739             : 
     740             :         case TYP_SETFLD:
     741             :         {
     742           0 :             if (!IsFldEdit() || bSpecialFmt)
     743             :             {
     744           0 :                 sal_uInt16 nPos = aNumFormatLB.InsertEntry(SW_RESSTR(FMT_SETVAR_TEXT), 0);
     745           0 :                 aNumFormatLB.SetEntryData(nPos, (void *)ULONG_MAX);
     746             :             }
     747             :         }
     748           0 :         break;
     749             : 
     750             :         case TYP_FORMELFLD:
     751             :         {
     752           0 :             sal_uInt16 nPos = aNumFormatLB.InsertEntry(SW_RESSTR(FMT_GETVAR_NAME), 0);
     753           0 :             aNumFormatLB.SetEntryData(nPos, (void *)ULONG_MAX);
     754             :         }
     755           0 :         break;
     756             : 
     757             :         case TYP_GETFLD:
     758             :         {
     759           0 :             sal_uInt16 nPos = aNumFormatLB.InsertEntry(SW_RESSTR(FMT_GETVAR_NAME), 0);
     760           0 :             aNumFormatLB.SetEntryData(nPos, (void *)ULONG_MAX);
     761             :         }
     762           0 :         break;
     763             :     }
     764             : 
     765           0 :     if (IsFldEdit() && bSpecialFmt)
     766             :     {
     767           0 :         if (nTypeId == TYP_USERFLD && (GetCurField()->GetSubType() & nsSwExtendedSubType::SUB_CMD))
     768           0 :             aNumFormatLB.SelectEntryPos(1);
     769             :         else
     770           0 :             aNumFormatLB.SelectEntryPos(0);
     771             :     }
     772             :     else
     773             :     {
     774           0 :         if (!nOldNumFormat && (nNumFormatSel = aNumFormatLB.GetEntryPos(sOldNumSel)) != LISTBOX_ENTRY_NOTFOUND)
     775           0 :             aNumFormatLB.SelectEntryPos(nNumFormatSel);
     776           0 :         else if (nOldNumFormat && nOldNumFormat == ULONG_MAX)
     777           0 :             aNumFormatLB.SelectEntry(sOldSel);
     778             :     }
     779             : 
     780           0 :     sal_uInt16 nSize = GetFldMgr().GetFormatCount(nTypeId, sal_False, IsFldDlgHtmlMode());
     781             : 
     782           0 :     for (sal_uInt16 i = 0; i < nSize; i++)
     783             :     {
     784           0 :         sal_uInt16 nPos = aFormatLB.InsertEntry(GetFldMgr().GetFormatStr(nTypeId, i));
     785           0 :         sal_uInt16 nFldId = GetFldMgr().GetFormatId( nTypeId, i );
     786           0 :         aFormatLB.SetEntryData( nPos, reinterpret_cast<void*>(nFldId) );
     787           0 :         if (IsFldEdit() && nFldId == GetCurField()->GetFormat())
     788           0 :             aFormatLB.SelectEntryPos( nPos );
     789             :     }
     790             : 
     791           0 :     if (nSize && (!IsFldEdit() || !aFormatLB.GetSelectEntryCount()))
     792             :     {
     793           0 :         aFormatLB.SelectEntry(sOldSel);
     794             : 
     795           0 :         if (!aFormatLB.GetSelectEntryCount())
     796             :         {
     797           0 :             aFormatLB.SelectEntry(SW_RESSTR(FMT_NUM_PAGEDESC));
     798           0 :             if (!aFormatLB.GetSelectEntryCount())
     799             :             {
     800           0 :                 aFormatLB.SelectEntry(SW_RESSTR(FMT_NUM_ARABIC));
     801           0 :                 if (!aFormatLB.GetSelectEntryCount())
     802           0 :                     aFormatLB.SelectEntryPos(0);
     803             :             }
     804             :         }
     805             :     }
     806             : 
     807           0 :     return nSize;
     808             : }
     809             : 
     810             : /*--------------------------------------------------------------------
     811             :     Description: Modify
     812             :  --------------------------------------------------------------------*/
     813           0 : IMPL_LINK_NOARG(SwFldVarPage, ModifyHdl)
     814             : {
     815           0 :     String sValue(aValueED.GetText());
     816           0 :     sal_Bool bHasValue = sValue.Len() != 0;
     817           0 :     sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(GetTypeSel());
     818           0 :     bool bInsert = false, bApply = false, bDelete = false;
     819             : 
     820           0 :     String sName( aNameED.GetText() );
     821           0 :     xub_StrLen nLen = sName.Len();
     822             : 
     823           0 :     switch( nTypeId )
     824             :     {
     825             :     case TYP_DDEFLD:
     826             :     case TYP_USERFLD:
     827             :     case TYP_SETFLD:
     828             :     case TYP_SEQFLD:
     829           0 :         SwCalc::IsValidVarName( sName, &sName );
     830           0 :         if( sName.Len() != nLen )
     831             :         {
     832           0 :             nLen = sName.Len();
     833           0 :             Selection aSel(aNameED.GetSelection());
     834           0 :             aNameED.SetText( sName );
     835           0 :             aNameED.SetSelection( aSel );   // restore Cursorpos
     836             :         }
     837           0 :         break;
     838             :     }
     839             : 
     840             : 
     841             :     // check buttons
     842           0 :     switch (nTypeId)
     843             :     {
     844             :     case TYP_DDEFLD:
     845           0 :         if( nLen )
     846             :         {
     847             :             // is there already a corrensponding type
     848           0 :             bInsert = bApply = true;
     849             : 
     850           0 :             SwFieldType* pType = GetFldMgr().GetFldType(RES_DDEFLD, sName);
     851             : 
     852           0 :             SwWrtShell *pSh = GetWrtShell();
     853           0 :             if(!pSh)
     854           0 :                 pSh = ::GetActiveWrtShell();
     855           0 :             if(pSh && pType)
     856           0 :                 bDelete = !pSh->IsUsed( *pType );
     857             :         }
     858           0 :         break;
     859             : 
     860             :     case TYP_USERFLD:
     861           0 :         if( nLen )
     862             :         {
     863             :             // is there already a corresponding type
     864           0 :             SwFieldType* pType = GetFldMgr().GetFldType(RES_USERFLD, sName);
     865             : 
     866           0 :             SwWrtShell *pSh = GetWrtShell();
     867           0 :             if(!pSh)
     868           0 :                 pSh = ::GetActiveWrtShell();
     869           0 :             if(pSh && pType)
     870           0 :                 bDelete = !pSh->IsUsed( *pType );
     871             : 
     872           0 :             pType = GetFldMgr().GetFldType(RES_SETEXPFLD, sName);
     873           0 :             if (!pType) // no name conflict with variables
     874             :             {
     875             :                 // user fields can also be inserted without content!
     876             :                 // Bug #56845
     877           0 :                 bInsert = bApply = true;
     878             :             }
     879             :         }
     880           0 :         break;
     881             : 
     882             :     default:
     883           0 :         bInsert = true;
     884             : 
     885           0 :         if (nTypeId == TYP_SETFLD || nTypeId == TYP_SEQFLD)
     886             :         {
     887             :             SwSetExpFieldType* pFldType = (SwSetExpFieldType*)
     888           0 :                 GetFldMgr().GetFldType(RES_SETEXPFLD, sName);
     889             : 
     890           0 :             if (pFldType)
     891             :             {
     892             : 
     893           0 :                 SwWrtShell *pSh = GetWrtShell();
     894           0 :                 if(!pSh)
     895           0 :                     pSh = ::GetActiveWrtShell();
     896           0 :                 if(pSh)
     897             :                 {
     898           0 :                     const SwFldTypes* p = pSh->GetDoc()->GetFldTypes();
     899             :                     sal_uInt16 i;
     900             : 
     901           0 :                     for (i = 0; i < INIT_FLDTYPES; i++)
     902             :                     {
     903           0 :                         SwFieldType* pType = (*p)[ i ];
     904           0 :                         if (pType == pFldType)
     905           0 :                             break;
     906             :                     }
     907             : 
     908           0 :                     if (i >= INIT_FLDTYPES && !pSh->IsUsed(*pFldType))
     909           0 :                         bDelete = true;
     910             : 
     911           0 :                     if (nTypeId == TYP_SEQFLD && !(pFldType->GetType() & nsSwGetSetExpType::GSE_SEQ))
     912           0 :                         bInsert = false;
     913             : 
     914           0 :                     if (nTypeId == TYP_SETFLD && (pFldType->GetType() & nsSwGetSetExpType::GSE_SEQ))
     915           0 :                         bInsert = false;
     916             :                 }
     917             :             }
     918           0 :             if (GetFldMgr().GetFldType(RES_USERFLD, sName))
     919           0 :                 bInsert = false;
     920             :         }
     921             : 
     922           0 :         if( !nLen && ( nTypeId == TYP_SETFLD ||
     923           0 :                         (!IsFldEdit() && nTypeId == TYP_GETFLD ) ) )
     924           0 :             bInsert = false;
     925             : 
     926           0 :         if( (nTypeId == TYP_SETFLD || nTypeId == TYP_FORMELFLD) &&
     927             :             !bHasValue )
     928           0 :             bInsert = false;
     929           0 :         break;
     930             :     }
     931             : 
     932           0 :     aNewDelTBX.EnableItem(BT_VARAPPLY, bApply);
     933           0 :     aNewDelTBX.EnableItem(BT_VARDELETE, bDelete);
     934           0 :     EnableInsert(bInsert);
     935             : 
     936           0 :     return 0;
     937             : }
     938             : 
     939           0 : IMPL_LINK( SwFldVarPage, TBClickHdl, ToolBox *, pBox )
     940             : {
     941           0 :     sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(GetTypeSel());
     942             : 
     943           0 :     switch (pBox->GetCurItemId())
     944             :     {
     945             :         case BT_VARDELETE:
     946             :         {
     947           0 :             if( nTypeId == TYP_USERFLD )
     948           0 :                 GetFldMgr().RemoveFldType(RES_USERFLD, aSelectionLB.GetSelectEntry());
     949             :             else
     950             :             {
     951             :                 sal_uInt16 nWhich;
     952             : 
     953           0 :                 switch(nTypeId)
     954             :                 {
     955             :                     case TYP_SETFLD:
     956             :                     case TYP_SEQFLD:
     957           0 :                         nWhich = RES_SETEXPFLD;
     958           0 :                         break;
     959             :                     default:
     960           0 :                         nWhich = RES_DDEFLD;
     961           0 :                         break;
     962             :                 }
     963             : 
     964           0 :                 GetFldMgr().RemoveFldType(nWhich, aSelectionLB.GetSelectEntry());
     965             :             }
     966             : 
     967           0 :             UpdateSubType();
     968           0 :             SwWrtShell *pSh = GetWrtShell();
     969           0 :             if(!pSh)
     970           0 :                 pSh = ::GetActiveWrtShell();
     971           0 :             if(pSh)
     972             :             {
     973           0 :                 pSh->SetModified();
     974             :             }
     975             :         }
     976           0 :         break;
     977             : 
     978             :         case BT_VARAPPLY:
     979             :         {
     980           0 :             String sName(aNameED.GetText()), sValue(aValueED.GetText());
     981           0 :             SwFieldType* pType = 0;
     982           0 :             sal_uInt16 nId = 0;
     983           0 :             sal_uInt16 nNumFormatPos = aNumFormatLB.GetSelectEntryPos();
     984             : 
     985           0 :             switch (nTypeId)
     986             :             {
     987           0 :                 case TYP_USERFLD:   nId = RES_USERFLD;  break;
     988           0 :                 case TYP_DDEFLD:    nId = RES_DDEFLD;   break;
     989           0 :                 case TYP_SETFLD:    nId = RES_SETEXPFLD;break;
     990             :             }
     991           0 :             pType = GetFldMgr().GetFldType(nId, sName);
     992             : 
     993           0 :             sal_uLong nFormat = aFormatLB.GetSelectEntryPos();
     994           0 :             if (nFormat != LISTBOX_ENTRY_NOTFOUND)
     995           0 :                 nFormat = (sal_uLong)aFormatLB.GetEntryData((sal_uInt16)nFormat);
     996             : 
     997           0 :             if (pType)  // change
     998             :             {
     999           0 :                 SwWrtShell *pSh = GetWrtShell();
    1000           0 :                 if(!pSh)
    1001           0 :                     pSh = ::GetActiveWrtShell();
    1002           0 :                 if(pSh)
    1003             :                 {
    1004           0 :                     pSh->StartAllAction();
    1005             : 
    1006           0 :                     if (nTypeId == TYP_USERFLD)
    1007             :                     {
    1008           0 :                         if (nNumFormatPos != LISTBOX_ENTRY_NOTFOUND)
    1009             :                         {
    1010           0 :                             sal_uLong nFmt = nNumFormatPos == 0 ? 0 : aNumFormatLB.GetFormat();
    1011           0 :                             if (nFmt)
    1012             :                             {   // Switch language to office-language because Kalkulator expects
    1013             :                                 // String in office format and it should be fed into dialog like
    1014             :                                 // that
    1015           0 :                                 nFmt = SwValueField::GetSystemFormat(pSh->GetNumberFormatter(), nFmt);
    1016             :                             }
    1017           0 :                             ((SwUserFieldType*)pType)->SetContent(aValueED.GetText(), nFmt);
    1018             :                             ((SwUserFieldType*)pType)->SetType(
    1019           0 :                                 nNumFormatPos == 0 ? nsSwGetSetExpType::GSE_STRING : nsSwGetSetExpType::GSE_EXPR );
    1020             :                         }
    1021             :                     }
    1022             :                     else
    1023             :                     {
    1024           0 :                         if (nFormat != LISTBOX_ENTRY_NOTFOUND)
    1025             :                         {
    1026             :                             // DDE-Topics/-Items can have blanks in their names!
    1027             :                             //  That's not being considered here yet.
    1028           0 :                             sal_uInt16 nTmpPos = sValue.SearchAndReplace( ' ', sfx2::cTokenSeperator );
    1029           0 :                             sValue.SearchAndReplace( ' ', sfx2::cTokenSeperator, nTmpPos );
    1030           0 :                             ((SwDDEFieldType*)pType)->SetCmd(sValue);
    1031           0 :                             ((SwDDEFieldType*)pType)->SetType((sal_uInt16)nFormat);
    1032             :                         }
    1033             :                     }
    1034           0 :                     pType->UpdateFlds();
    1035             : 
    1036           0 :                     pSh->EndAllAction();
    1037             :                 }
    1038             :             }
    1039             :             else        // new
    1040             :             {
    1041           0 :                 if(nTypeId == TYP_USERFLD)
    1042             :                 {
    1043           0 :                     SwWrtShell *pSh = GetWrtShell();
    1044           0 :                     if(!pSh)
    1045           0 :                         pSh = ::GetActiveWrtShell();
    1046           0 :                     if(pSh)
    1047             :                     {
    1048           0 :                         SwUserFieldType aType( pSh->GetDoc(), sName );
    1049             : 
    1050           0 :                         if (nNumFormatPos != LISTBOX_ENTRY_NOTFOUND)
    1051             :                         {
    1052           0 :                             aType.SetType(nNumFormatPos == 0 ? nsSwGetSetExpType::GSE_STRING : nsSwGetSetExpType::GSE_EXPR);
    1053           0 :                             aType.SetContent( sValue, nNumFormatPos == 0 ? 0 : aNumFormatLB.GetFormat() );
    1054           0 :                             aSelectionLB.InsertEntry(sName);
    1055           0 :                             aSelectionLB.SelectEntry(sName);
    1056           0 :                             GetFldMgr().InsertFldType( aType ); // Userfld new
    1057           0 :                         }
    1058             :                     }
    1059             :                 }
    1060             :                 else
    1061             :                 {
    1062           0 :                     if (nFormat != LISTBOX_ENTRY_NOTFOUND)
    1063             :                     {
    1064             :                         // DDE-Topics/-Items can have blanks in their names!
    1065             :                         //  That's not being considered here yet.
    1066           0 :                         sal_uInt16 nTmpPos = sValue.SearchAndReplace( ' ', sfx2::cTokenSeperator );
    1067           0 :                         sValue.SearchAndReplace( ' ', sfx2::cTokenSeperator, nTmpPos );
    1068             : 
    1069           0 :                         SwDDEFieldType aType(sName, sValue, (sal_uInt16)nFormat);
    1070           0 :                         aSelectionLB.InsertEntry(sName);
    1071           0 :                         aSelectionLB.SelectEntry(sName);
    1072           0 :                         GetFldMgr().InsertFldType(aType);   // DDE-Field new
    1073             :                     }
    1074             :                 }
    1075             :             }
    1076           0 :             if (IsFldEdit())
    1077           0 :                 GetFldMgr().GetCurFld();    // update FieldManager
    1078             : 
    1079           0 :             UpdateSubType();
    1080             :         }
    1081           0 :         break;
    1082             :     }
    1083             : 
    1084           0 :     return sal_True;
    1085             : }
    1086             : 
    1087           0 : IMPL_LINK_NOARG(SwFldVarPage, ChapterHdl)
    1088             : {
    1089           0 :     sal_Bool bEnable = aChapterLevelLB.GetSelectEntryPos() != 0;
    1090             : 
    1091           0 :     aSeparatorED.Enable(bEnable);
    1092           0 :     aSeparatorFT.Enable(bEnable);
    1093           0 :     SeparatorHdl();
    1094             : 
    1095           0 :     return 0;
    1096             : }
    1097             : 
    1098           0 : IMPL_LINK_NOARG(SwFldVarPage, SeparatorHdl)
    1099             : {
    1100           0 :     sal_Bool bEnable = aSeparatorED.GetText().Len() != 0 ||
    1101           0 :                     aChapterLevelLB.GetSelectEntryPos() == 0;
    1102           0 :     EnableInsert(bEnable);
    1103             : 
    1104           0 :     return 0;
    1105             : }
    1106             : 
    1107           0 : sal_Bool SwFldVarPage::FillItemSet(SfxItemSet& )
    1108             : {
    1109           0 :     sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(GetTypeSel());
    1110             : 
    1111           0 :     String aVal(aValueED.GetText());
    1112           0 :     String aName(aNameED.GetText());
    1113             : 
    1114           0 :     sal_uInt16 nSubType = aSelectionLB.GetSelectEntryPos();
    1115           0 :     if(nSubType == LISTBOX_ENTRY_NOTFOUND)
    1116           0 :         nSubType = 0;
    1117             :     else
    1118           0 :         nSubType = (sal_uInt16)(sal_uLong)aSelectionLB.GetEntryData(nSubType);
    1119             : 
    1120             :     sal_uLong nFormat;
    1121             : 
    1122           0 :     if (!aNumFormatLB.IsVisible())
    1123             :     {
    1124           0 :         nFormat = aFormatLB.GetSelectEntryPos();
    1125             : 
    1126           0 :         if(nFormat == LISTBOX_ENTRY_NOTFOUND)
    1127           0 :             nFormat = 0;
    1128             :         else
    1129           0 :             nFormat = (sal_uLong)aFormatLB.GetEntryData((sal_uInt16)nFormat);
    1130             :     }
    1131             :     else
    1132             :     {
    1133           0 :         nFormat = aNumFormatLB.GetFormat();
    1134             : 
    1135           0 :         if (nFormat && nFormat != ULONG_MAX && aNumFormatLB.IsAutomaticLanguage())
    1136             :         {
    1137             :             // Switch language to office language because Kalkulator expects
    1138             :             // String in office format and it should be fed into the dialog
    1139             :             // like that
    1140           0 :             SwWrtShell *pSh = GetWrtShell();
    1141           0 :             if(!pSh)
    1142           0 :                 pSh = ::GetActiveWrtShell();
    1143           0 :             if(pSh)
    1144             :             {
    1145           0 :                 nFormat = SwValueField::GetSystemFormat(pSh->GetNumberFormatter(), nFormat);
    1146             :             }
    1147             :         }
    1148             :     }
    1149           0 :     sal_Unicode cSeparator = ' ';
    1150           0 :     switch (nTypeId)
    1151             :     {
    1152             :         case TYP_USERFLD:
    1153             :         {
    1154           0 :             nSubType = (nFormat == ULONG_MAX) ? nsSwGetSetExpType::GSE_STRING : nsSwGetSetExpType::GSE_EXPR;
    1155             : 
    1156           0 :             if (nFormat == ULONG_MAX && aNumFormatLB.GetSelectEntry().Equals(SW_RESSTR(FMT_USERVAR_CMD)))
    1157           0 :                 nSubType |= nsSwExtendedSubType::SUB_CMD;
    1158             : 
    1159           0 :             if (aInvisibleCB.IsChecked())
    1160           0 :                 nSubType |= nsSwExtendedSubType::SUB_INVISIBLE;
    1161           0 :             break;
    1162             :         }
    1163             :         case TYP_FORMELFLD:
    1164             :         {
    1165           0 :             nSubType = nsSwGetSetExpType::GSE_FORMULA;
    1166           0 :             if (aNumFormatLB.IsVisible() && nFormat == ULONG_MAX)
    1167           0 :                 nSubType |= nsSwExtendedSubType::SUB_CMD;
    1168           0 :             break;
    1169             :         }
    1170             :         case TYP_GETFLD:
    1171             :         {
    1172           0 :             nSubType &= 0xff00;
    1173           0 :             if (aNumFormatLB.IsVisible() && nFormat == ULONG_MAX)
    1174           0 :                 nSubType |= nsSwExtendedSubType::SUB_CMD;
    1175           0 :             break;
    1176             :         }
    1177             :         case TYP_INPUTFLD:
    1178             :         {
    1179           0 :             SwFieldType* pType = GetFldMgr().GetFldType(RES_USERFLD, aName);
    1180           0 :             nSubType = static_cast< sal_uInt16 >((nSubType & 0xff00) | ((pType) ? INP_USR : INP_VAR));
    1181           0 :             break;
    1182             :         }
    1183             : 
    1184             :         case TYP_SETFLD:
    1185             :         {
    1186           0 :             if (IsFldDlgHtmlMode())
    1187             :             {
    1188           0 :                 nSubType = 0x0100;
    1189           0 :                 nSubType = (nSubType & 0xff00) | nsSwGetSetExpType::GSE_STRING;
    1190             :             }
    1191             :             else
    1192           0 :                 nSubType = (nSubType & 0xff00) | ((nFormat == ULONG_MAX) ? nsSwGetSetExpType::GSE_STRING : nsSwGetSetExpType::GSE_EXPR);
    1193             : 
    1194           0 :             if (aInvisibleCB.IsChecked())
    1195           0 :                 nSubType |= nsSwExtendedSubType::SUB_INVISIBLE;
    1196           0 :             break;
    1197             :         }
    1198             :         case TYP_SEQFLD:
    1199             :         {
    1200           0 :             nSubType = aChapterLevelLB.GetSelectEntryPos();
    1201           0 :             if (nSubType == 0)
    1202           0 :                 nSubType = 0x7f;
    1203             :             else
    1204             :             {
    1205           0 :                 nSubType--;
    1206           0 :                 String sSeparator = rtl::OUString(aSeparatorED.GetText().GetChar(0));
    1207           0 :                 cSeparator = sSeparator.Len() ? sSeparator.GetChar(0) : ' ';
    1208             :             }
    1209           0 :             break;
    1210             :         }
    1211             :         case TYP_GETREFPAGEFLD:
    1212           0 :             if( SVX_NUM_CHAR_SPECIAL == nFormat )
    1213           0 :                 aVal = aValueED.GetText();
    1214           0 :             break;
    1215             :     }
    1216             : 
    1217           0 :     if (!IsFldEdit() ||
    1218           0 :         aNameED.GetSavedValue() != aNameED.GetText() ||
    1219           0 :         aValueED.GetSavedValue() != aValueED.GetText() ||
    1220           0 :         aSelectionLB.GetSavedValue() != aSelectionLB.GetSelectEntryPos() ||
    1221           0 :         aFormatLB.GetSavedValue() != aFormatLB.GetSelectEntryPos() ||
    1222           0 :         nOldFormat != aNumFormatLB.GetFormat() ||
    1223           0 :         aInvisibleCB.GetState() != aInvisibleCB.GetSavedValue() ||
    1224           0 :         aChapterLevelLB.GetSavedValue() != aChapterLevelLB.GetSelectEntryPos() ||
    1225           0 :         aSeparatorED.GetSavedValue() != aSeparatorED.GetText())
    1226             :     {
    1227             :         InsertFld( nTypeId, nSubType, aName, aVal, nFormat,
    1228           0 :                     cSeparator, aNumFormatLB.IsAutomaticLanguage() );
    1229             :     }
    1230             : 
    1231           0 :     UpdateSubType();
    1232             : 
    1233           0 :     return sal_False;
    1234             : }
    1235             : 
    1236           0 : SfxTabPage* SwFldVarPage::Create(   Window* pParent,
    1237             :                         const SfxItemSet& rAttrSet )
    1238             : {
    1239           0 :     return ( new SwFldVarPage( pParent, rAttrSet ) );
    1240             : }
    1241             : 
    1242           0 : sal_uInt16 SwFldVarPage::GetGroup()
    1243             : {
    1244           0 :     return GRP_VAR;
    1245             : }
    1246             : 
    1247           0 : SelectionListBox::SelectionListBox( SwFldVarPage* pDialog, const ResId& rResId ) :
    1248             :     ListBox (pDialog, rResId),
    1249           0 :     bCallAddSelection(sal_False)
    1250             : {
    1251           0 : }
    1252             : 
    1253           0 : long SelectionListBox::PreNotify( NotifyEvent& rNEvt )
    1254             : {
    1255           0 :     long nHandled = ListBox::PreNotify( rNEvt );
    1256           0 :     if ( rNEvt.GetType() == EVENT_KEYUP )
    1257             :     {
    1258           0 :         const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
    1259           0 :         const KeyCode aKeyCode = pKEvt->GetKeyCode();
    1260           0 :         const sal_uInt16 nModifier = aKeyCode.GetModifier();
    1261           0 :         if( aKeyCode.GetCode() == KEY_SPACE && !nModifier)
    1262           0 :             bCallAddSelection = sal_True;
    1263             :     }
    1264           0 :     if ( rNEvt.GetType() == EVENT_MOUSEBUTTONDOWN )
    1265             :     {
    1266           0 :         const MouseEvent* pMEvt = rNEvt.GetMouseEvent();
    1267             : 
    1268           0 :         if (pMEvt && (pMEvt->IsMod1() || pMEvt->IsMod2()))  // Alt or Ctrl
    1269           0 :             bCallAddSelection = sal_True;
    1270             :     }
    1271             : 
    1272           0 :     return nHandled;
    1273             : }
    1274             : 
    1275           0 : void SwFldVarPage::FillUserData()
    1276             : {
    1277           0 :     String sData(rtl::OUString(USER_DATA_VERSION));
    1278           0 :     sData += ';';
    1279           0 :     sal_uInt16 nTypeSel = aTypeLB.GetSelectEntryPos();
    1280           0 :     if( LISTBOX_ENTRY_NOTFOUND == nTypeSel )
    1281           0 :         nTypeSel = USHRT_MAX;
    1282             :     else
    1283           0 :         nTypeSel = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData( nTypeSel );
    1284           0 :     sData += String::CreateFromInt32( nTypeSel );
    1285           0 :     SetUserData(sData);
    1286           0 : }
    1287             : 
    1288             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10