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

Generated by: LCOV version 1.11