LCOV - code coverage report
Current view: top level - sw/source/ui/fldui - fldfunc.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 0 360 0.0 %
Date: 2014-11-03 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 <sfx2/app.hxx>
      21             : #include <basic/basmgr.hxx>
      22             : #include <basic/sbmod.hxx>
      23             : #include <docsh.hxx>
      24             : #include <swtypes.hxx>
      25             : #include <globals.hrc>
      26             : #include <fldbas.hxx>
      27             : #include <docufld.hxx>
      28             : #include <view.hxx>
      29             : #include <wrtsh.hxx>
      30             : #include <swmodule.hxx>
      31             : #include <fldfunc.hxx>
      32             : #include <flddropdown.hxx>
      33             : #include <fldui.hrc>
      34             : 
      35             : #define USER_DATA_VERSION_1 "1"
      36             : #define USER_DATA_VERSION USER_DATA_VERSION_1
      37             : 
      38             : using namespace ::com::sun::star;
      39             : 
      40           0 : SwFldFuncPage::SwFldFuncPage(vcl::Window* pParent, const SfxItemSet& rCoreSet)
      41             :     : SwFldPage(pParent, "FldFuncPage",
      42             :         "modules/swriter/ui/fldfuncpage.ui", rCoreSet)
      43             :     , nOldFormat(0)
      44           0 :     , bDropDownLBChanged(false)
      45             : {
      46           0 :     get(m_pTypeLB, "type");
      47           0 :     get(m_pFormat, "formatframe");
      48           0 :     get(m_pSelectionLB, "select");
      49           0 :     get(m_pFormatLB, "format");
      50           0 :     get(m_pNameFT, "nameft");
      51           0 :     get(m_pNameED, "name");
      52           0 :     get(m_pValueGroup, "valuegroup");
      53           0 :     get(m_pValueFT, "valueft");
      54           0 :     get(m_pValueED, "value");
      55           0 :     get(m_pCond1FT, "cond1ft");
      56           0 :     get(m_pCond1ED, "cond1");
      57           0 :     get(m_pCond2FT, "cond2ft");
      58           0 :     get(m_pCond2ED, "cond2");
      59           0 :     get(m_pMacroBT, "macro");
      60             : 
      61           0 :     get(m_pListGroup, "listgroup");
      62           0 :     get(m_pListItemFT, "itemft");
      63           0 :     get(m_pListItemED, "item");
      64           0 :     get(m_pListAddPB, "add");
      65           0 :     get(m_pListItemsFT, "listitemft");
      66           0 :     get(m_pListItemsLB, "listitems");
      67           0 :     m_pListItemsLB->SetDropDownLineCount(5);
      68           0 :     m_pListItemsLB->set_width_request(m_pListItemED->GetOptimalSize().Width());
      69           0 :     get(m_pListRemovePB, "remove");
      70           0 :     get(m_pListUpPB, "up");
      71           0 :     get(m_pListDownPB, "down");
      72           0 :     get(m_pListNameFT, "listnameft");
      73           0 :     get(m_pListNameED, "listname");
      74             : 
      75           0 :     long nHeight = m_pTypeLB->GetTextHeight() * 20;
      76           0 :     m_pTypeLB->set_height_request(nHeight);
      77           0 :     m_pFormatLB->set_height_request(nHeight);
      78             : 
      79           0 :     long nWidth = m_pTypeLB->LogicToPixel(Size(FIELD_COLUMN_WIDTH, 0), MapMode(MAP_APPFONT)).Width();
      80           0 :     m_pTypeLB->set_width_request(nWidth);
      81           0 :     m_pFormatLB->set_width_request(nWidth);
      82             : 
      83           0 :     m_pNameED->SetModifyHdl(LINK(this, SwFldFuncPage, ModifyHdl));
      84             : 
      85           0 :     m_sOldValueFT = m_pValueFT->GetText();
      86           0 :     m_sOldNameFT = m_pNameFT->GetText();
      87             : 
      88           0 :     m_pCond1ED->ShowBrackets(false);
      89           0 :     m_pCond2ED->ShowBrackets(false);
      90           0 : }
      91             : 
      92           0 : SwFldFuncPage::~SwFldFuncPage()
      93             : {
      94           0 : }
      95             : 
      96           0 : void SwFldFuncPage::Reset(const SfxItemSet* )
      97             : {
      98           0 :     SavePos(m_pTypeLB);
      99           0 :     Init(); // general initialisation
     100             : 
     101           0 :     m_pTypeLB->SetUpdateMode(false);
     102           0 :     m_pTypeLB->Clear();
     103             : 
     104             :     sal_Int32 nPos;
     105             : 
     106           0 :     if (!IsFldEdit())
     107             :     {
     108             :         // initialise TypeListBox
     109           0 :         const SwFldGroupRgn& rRg = GetFldMgr().GetGroupRange(IsFldDlgHtmlMode(), GetGroup());
     110             : 
     111             :         // fill Typ-Listbox
     112           0 :         for(sal_uInt16 i = rRg.nStart; i < rRg.nEnd; ++i)
     113             :         {
     114           0 :             const sal_uInt16 nTypeId = SwFldMgr::GetTypeId(i);
     115           0 :             nPos = m_pTypeLB->InsertEntry(SwFldMgr::GetTypeStr(i));
     116           0 :             m_pTypeLB->SetEntryData(nPos, reinterpret_cast<void*>(nTypeId));
     117             :         }
     118             :     }
     119             :     else
     120             :     {
     121           0 :         const sal_uInt16 nTypeId = GetCurField()->GetTypeId();
     122           0 :         nPos = m_pTypeLB->InsertEntry(SwFldMgr::GetTypeStr(SwFldMgr::GetPos(nTypeId)));
     123           0 :         m_pTypeLB->SetEntryData(nPos, reinterpret_cast<void*>(nTypeId));
     124             : 
     125           0 :         if (nTypeId == TYP_MACROFLD)
     126             :         {
     127           0 :             GetFldMgr().SetMacroPath(GetCurField()->GetPar1());
     128             :         }
     129             :     }
     130             : 
     131             :     // select old Pos
     132           0 :     RestorePos(m_pTypeLB);
     133             : 
     134           0 :     m_pTypeLB->SetDoubleClickHdl       (LINK(this, SwFldFuncPage, InsertHdl));
     135           0 :     m_pTypeLB->SetSelectHdl            (LINK(this, SwFldFuncPage, TypeHdl));
     136           0 :     m_pSelectionLB->SetSelectHdl       (LINK(this, SwFldFuncPage, SelectHdl));
     137           0 :     m_pSelectionLB->SetDoubleClickHdl  (LINK(this, SwFldFuncPage, InsertMacroHdl));
     138           0 :     m_pFormatLB->SetDoubleClickHdl     (LINK(this, SwFldFuncPage, InsertHdl));
     139           0 :     m_pMacroBT->SetClickHdl            (LINK(this, SwFldFuncPage, MacroHdl));
     140           0 :     Link aListModifyLk( LINK(this, SwFldFuncPage, ListModifyHdl));
     141           0 :     m_pListAddPB->SetClickHdl(aListModifyLk);
     142           0 :     m_pListRemovePB->SetClickHdl(aListModifyLk);
     143           0 :     m_pListUpPB->SetClickHdl(aListModifyLk);
     144           0 :     m_pListDownPB->SetClickHdl(aListModifyLk);
     145           0 :     m_pListItemED->SetReturnActionLink(aListModifyLk);
     146           0 :     Link aListEnableLk = LINK(this, SwFldFuncPage, ListEnableHdl);
     147           0 :     m_pListItemED->SetModifyHdl(aListEnableLk);
     148           0 :     m_pListItemsLB->SetSelectHdl(aListEnableLk);
     149             : 
     150           0 :     if( !IsRefresh() )
     151             :     {
     152           0 :         OUString sUserData = GetUserData();
     153           0 :         if(sUserData.getToken(0, ';').equalsIgnoreAsciiCase(USER_DATA_VERSION_1))
     154             :         {
     155           0 :             OUString sVal = sUserData.getToken(1, ';');
     156           0 :             const sal_uInt16 nVal = static_cast< sal_uInt16 >(sVal.toInt32());
     157           0 :             if(nVal != USHRT_MAX)
     158             :             {
     159           0 :                 for(sal_Int32 i = 0; i < m_pTypeLB->GetEntryCount(); i++)
     160           0 :                     if(nVal == (sal_uInt16)(sal_uLong)m_pTypeLB->GetEntryData(i))
     161             :                     {
     162           0 :                         m_pTypeLB->SelectEntryPos(i);
     163           0 :                         break;
     164             :                     }
     165           0 :             }
     166           0 :         }
     167             :     }
     168           0 :     TypeHdl(0);
     169             : 
     170           0 :     m_pTypeLB->SetUpdateMode(true);
     171             : 
     172           0 :     if (IsFldEdit())
     173             :     {
     174           0 :         m_pNameED->SaveValue();
     175           0 :         m_pValueED->SaveValue();
     176           0 :         m_pCond1ED->SaveValue();
     177           0 :         m_pCond2ED->SaveValue();
     178           0 :         nOldFormat = GetCurField()->GetFormat();
     179             :     }
     180           0 : }
     181             : 
     182           0 : IMPL_LINK_NOARG(SwFldFuncPage, TypeHdl)
     183             : {
     184             :     // save old ListBoxPos
     185           0 :     const sal_Int32 nOld = GetTypeSel();
     186             : 
     187             :     // current ListBoxPos
     188           0 :     SetTypeSel(m_pTypeLB->GetSelectEntryPos());
     189             : 
     190           0 :     if(GetTypeSel() == LISTBOX_ENTRY_NOTFOUND)
     191             :     {
     192           0 :         SetTypeSel(0);
     193           0 :         m_pTypeLB->SelectEntryPos(0);
     194             :     }
     195             : 
     196           0 :     if (nOld != GetTypeSel())
     197             :     {
     198           0 :         const sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)m_pTypeLB->GetEntryData(GetTypeSel());
     199             : 
     200             :         // fill Selection-Listbox
     201           0 :         UpdateSubType();
     202             : 
     203             :         // fill Format-Listbox
     204           0 :         m_pFormatLB->Clear();
     205             : 
     206           0 :         const sal_uInt16 nSize = GetFldMgr().GetFormatCount(nTypeId, false, IsFldDlgHtmlMode());
     207             : 
     208           0 :         for (sal_uInt16 i = 0; i < nSize; i++)
     209             :         {
     210           0 :             sal_Int32 nPos = m_pFormatLB->InsertEntry(GetFldMgr().GetFormatStr(nTypeId, i));
     211           0 :             m_pFormatLB->SetEntryData( nPos, reinterpret_cast<void*>(GetFldMgr().GetFormatId( nTypeId, i )) );
     212             :         }
     213             : 
     214           0 :         if (nSize)
     215             :         {
     216           0 :             if (IsFldEdit() && nTypeId == TYP_JUMPEDITFLD)
     217           0 :                 m_pFormatLB->SelectEntry(SW_RESSTR(FMT_MARK_BEGIN + GetCurField()->GetFormat()));
     218             : 
     219           0 :             if (!m_pFormatLB->GetSelectEntryCount())
     220           0 :                 m_pFormatLB->SelectEntryPos(0);
     221             :         }
     222             : 
     223           0 :         bool bValue = false, bName = false, bMacro = false, bInsert = true;
     224           0 :         bool bFormat = nSize != 0;
     225             : 
     226             :         // two controls for conditional text
     227           0 :         bool bDropDown = TYP_DROPDOWN == nTypeId;
     228           0 :         bool bCondTxtFld = TYP_CONDTXTFLD == nTypeId;
     229             : 
     230           0 :         m_pCond1FT->Show(!bDropDown && bCondTxtFld);
     231           0 :         m_pCond1ED->Show(!bDropDown && bCondTxtFld);
     232           0 :         m_pCond2FT->Show(!bDropDown && bCondTxtFld);
     233           0 :         m_pCond2ED->Show(!bDropDown && bCondTxtFld);
     234           0 :         m_pValueGroup->Show(!bDropDown && !bCondTxtFld);
     235           0 :         m_pMacroBT->Show(!bDropDown);
     236           0 :         m_pNameED->Show(!bDropDown);
     237           0 :         m_pNameFT->Show(!bDropDown);
     238             : 
     239           0 :         m_pListGroup->Show(bDropDown);
     240             : 
     241           0 :         m_pNameED->SetDropEnable(false);
     242             : 
     243           0 :         if (IsFldEdit())
     244             :         {
     245           0 :             if(bDropDown)
     246             :             {
     247           0 :                 const SwDropDownField* pDrop = (const SwDropDownField*)GetCurField();
     248           0 :                 uno::Sequence<OUString> aItems = pDrop->GetItemSequence();
     249           0 :                 const OUString* pArray = aItems.getConstArray();
     250           0 :                 m_pListItemsLB->Clear();
     251           0 :                 for(sal_Int32 i = 0; i < aItems.getLength(); i++)
     252           0 :                     m_pListItemsLB->InsertEntry(pArray[i]);
     253           0 :                 m_pListItemsLB->SelectEntry(pDrop->GetSelectedItem());
     254           0 :                 m_pListNameED->SetText(pDrop->GetPar2());
     255           0 :                 m_pListNameED->SaveValue();
     256           0 :                 bDropDownLBChanged = false;
     257             :             }
     258             :             else
     259             :             {
     260           0 :                 m_pNameED->SetText(GetCurField()->GetPar1());
     261           0 :                 m_pValueED->SetText(GetCurField()->GetPar2());
     262             :             }
     263             :         }
     264             :         else
     265             :         {
     266           0 :             m_pNameED->SetText(OUString());
     267           0 :             m_pValueED->SetText(OUString());
     268             :         }
     269           0 :         if(bDropDown)
     270           0 :             ListEnableHdl(0);
     271             : 
     272           0 :         if (m_pNameFT->GetText() != m_sOldNameFT)
     273           0 :             m_pNameFT->SetText(m_sOldNameFT);
     274           0 :         if (m_pValueFT->GetText() != m_sOldValueFT)
     275           0 :             m_pValueFT->SetText(m_sOldValueFT);
     276             : 
     277           0 :         switch (nTypeId)
     278             :         {
     279             :             case TYP_MACROFLD:
     280           0 :                 bMacro = true;
     281           0 :                 if (!GetFldMgr().GetMacroPath().isEmpty())
     282           0 :                     bValue = true;
     283             :                 else
     284           0 :                     bInsert = false;
     285             : 
     286           0 :                 m_pNameFT->SetText(SW_RESSTR(STR_MACNAME));
     287           0 :                 m_pValueFT->SetText(SW_RESSTR(STR_PROMPT));
     288           0 :                 m_pNameED->SetText(GetFldMgr().GetMacroName());
     289           0 :                 m_pNameED->SetAccessibleName(m_pNameFT->GetText());
     290           0 :                 m_pValueED->SetAccessibleName(m_pValueFT->GetText());
     291           0 :                 break;
     292             : 
     293             :             case TYP_HIDDENPARAFLD:
     294           0 :                 m_pNameFT->SetText(SW_RESSTR(STR_COND));
     295           0 :                 m_pNameED->SetDropEnable(true);
     296           0 :                 bName = true;
     297           0 :                 m_pNameED->SetAccessibleName(m_pNameFT->GetText());
     298           0 :                 m_pValueED->SetAccessibleName(m_pValueFT->GetText());
     299           0 :                 break;
     300             : 
     301             :             case TYP_HIDDENTXTFLD:
     302             :             {
     303           0 :                 m_pNameFT->SetText(SW_RESSTR(STR_COND));
     304           0 :                 m_pNameED->SetDropEnable(true);
     305           0 :                 m_pValueFT->SetText(SW_RESSTR(STR_INSTEXT));
     306           0 :                 SwWrtShell* pSh = GetActiveWrtShell();
     307           0 :                 if (!IsFldEdit() && pSh )
     308           0 :                     m_pValueED->SetText(pSh->GetSelTxt());
     309           0 :                 bName = bValue = true;
     310           0 :                 m_pNameED->SetAccessibleName(m_pNameFT->GetText());
     311           0 :                 m_pValueED->SetAccessibleName(m_pValueFT->GetText());
     312             :             }
     313           0 :             break;
     314             : 
     315             :             case TYP_CONDTXTFLD:
     316           0 :                 m_pNameFT->SetText(SW_RESSTR(STR_COND));
     317           0 :                 m_pNameED->SetDropEnable(true);
     318           0 :                 if (IsFldEdit())
     319             :                 {
     320           0 :                     m_pCond1ED->SetText(GetCurField()->GetPar2().getToken(0, '|'));
     321           0 :                     m_pCond2ED->SetText(GetCurField()->GetPar2().getToken(1, '|'));
     322             :                 }
     323             : 
     324           0 :                 bName = bValue = true;
     325           0 :                 m_pNameED->SetAccessibleName(m_pNameFT->GetText());
     326           0 :                 m_pValueED->SetAccessibleName(m_pValueFT->GetText());
     327           0 :                 break;
     328             : 
     329             :             case TYP_JUMPEDITFLD:
     330           0 :                 m_pNameFT->SetText(SW_RESSTR(STR_JUMPEDITFLD));
     331           0 :                 m_pValueFT->SetText(SW_RESSTR(STR_PROMPT));
     332           0 :                 bName = bValue = true;
     333           0 :                 m_pNameED->SetAccessibleName(m_pNameFT->GetText());
     334           0 :                 m_pValueED->SetAccessibleName(m_pValueFT->GetText());
     335           0 :                 break;
     336             : 
     337             :             case TYP_INPUTFLD:
     338           0 :                 m_pValueFT->SetText(SW_RESSTR(STR_PROMPT));
     339           0 :                 bValue = true;
     340           0 :                 m_pNameED->SetAccessibleName(m_pNameFT->GetText());
     341           0 :                 m_pValueED->SetAccessibleName(m_pValueFT->GetText());
     342           0 :                 break;
     343             : 
     344             :             case TYP_COMBINED_CHARS:
     345             :                 {
     346           0 :                     m_pNameFT->SetText(SW_RESSTR(STR_COMBCHRS_FT));
     347           0 :                     m_pNameED->SetDropEnable(true);
     348           0 :                     bName = true;
     349             : 
     350           0 :                     const sal_Int32 nLen = m_pNameED->GetText().getLength();
     351           0 :                     if( !nLen || nLen > MAX_COMBINED_CHARACTERS )
     352           0 :                         bInsert = false;
     353           0 :                     m_pNameED->SetAccessibleName(m_pNameFT->GetText());
     354           0 :                     m_pValueED->SetAccessibleName(m_pValueFT->GetText());
     355             :                 }
     356           0 :                 break;
     357             :             case TYP_DROPDOWN :
     358           0 :             break;
     359             :             default:
     360           0 :                 break;
     361             :         }
     362             : 
     363           0 :         m_pSelectionLB->Hide();
     364             : 
     365           0 :         m_pFormat->Enable(bFormat);
     366           0 :         m_pNameFT->Enable(bName);
     367           0 :         m_pNameED->Enable(bName);
     368           0 :         m_pValueGroup->Enable(bValue);
     369           0 :         m_pMacroBT->Enable(bMacro);
     370             : 
     371           0 :         EnableInsert( bInsert );
     372             :     }
     373             : 
     374           0 :     return 0;
     375             : }
     376             : 
     377           0 : IMPL_LINK_NOARG(SwFldFuncPage, SelectHdl)
     378             : {
     379           0 :     const sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)m_pTypeLB->GetEntryData(GetTypeSel());
     380             : 
     381           0 :     if( TYP_MACROFLD == nTypeId )
     382           0 :         m_pNameED->SetText( m_pSelectionLB->GetSelectEntry() );
     383             : 
     384           0 :     return 0;
     385             : }
     386             : 
     387           0 : IMPL_LINK_NOARG(SwFldFuncPage, InsertMacroHdl)
     388             : {
     389           0 :     SelectHdl();
     390           0 :     InsertHdl();
     391             : 
     392           0 :     return 0;
     393             : }
     394             : 
     395           0 : IMPL_LINK( SwFldFuncPage, ListModifyHdl, Control*, pControl)
     396             : {
     397           0 :     m_pListItemsLB->SetUpdateMode(false);
     398           0 :     if(pControl == m_pListAddPB ||
     399           0 :             (pControl == m_pListItemED && m_pListAddPB->IsEnabled()))
     400             :     {
     401           0 :         const OUString sEntry(m_pListItemED->GetText());
     402           0 :         m_pListItemsLB->InsertEntry(sEntry);
     403           0 :         m_pListItemsLB->SelectEntry(sEntry);
     404             :     }
     405           0 :     else if(m_pListItemsLB->GetSelectEntryCount())
     406             :     {
     407           0 :         sal_Int32 nSelPos = m_pListItemsLB->GetSelectEntryPos();
     408           0 :         if(pControl == m_pListRemovePB)
     409             :         {
     410           0 :             m_pListItemsLB->RemoveEntry(nSelPos);
     411           0 :             m_pListItemsLB->SelectEntryPos(nSelPos ? nSelPos - 1 : 0);
     412             :         }
     413           0 :         else if(pControl == m_pListUpPB)
     414             :         {
     415           0 :             if(nSelPos)
     416             :             {
     417           0 :                 const OUString sEntry = m_pListItemsLB->GetSelectEntry();
     418           0 :                 m_pListItemsLB->RemoveEntry(nSelPos);
     419           0 :                 nSelPos--;
     420           0 :                 m_pListItemsLB->InsertEntry(sEntry, nSelPos);
     421           0 :                 m_pListItemsLB->SelectEntryPos(nSelPos);
     422             :             }
     423             :         }
     424           0 :         else if(pControl == m_pListDownPB)
     425             :         {
     426           0 :             if(nSelPos < m_pListItemsLB->GetEntryCount() - 1)
     427             :             {
     428           0 :                 const OUString sEntry = m_pListItemsLB->GetSelectEntry();
     429           0 :                 m_pListItemsLB->RemoveEntry(nSelPos);
     430           0 :                 nSelPos++;
     431           0 :                 m_pListItemsLB->InsertEntry(sEntry, nSelPos);
     432           0 :                 m_pListItemsLB->SelectEntryPos(nSelPos);
     433             :             }
     434             :         }
     435             :     }
     436           0 :     bDropDownLBChanged = true;
     437           0 :     m_pListItemsLB->SetUpdateMode(true);
     438           0 :     ListEnableHdl(0);
     439           0 :     return 0;
     440             : }
     441             : 
     442           0 : IMPL_LINK_NOARG(SwFldFuncPage, ListEnableHdl)
     443             : {
     444             :     //enable "Add" button when text is in the Edit that's not already member of the box
     445           0 :     m_pListAddPB->Enable(!m_pListItemED->GetText().isEmpty() &&
     446           0 :                 LISTBOX_ENTRY_NOTFOUND == m_pListItemsLB->GetEntryPos(m_pListItemED->GetText()));
     447           0 :     bool bEnableButtons = m_pListItemsLB->GetSelectEntryCount() > 0;
     448           0 :     m_pListRemovePB->Enable(bEnableButtons);
     449           0 :     m_pListUpPB->Enable(bEnableButtons && (m_pListItemsLB->GetSelectEntryPos() > 0));
     450           0 :     m_pListDownPB->Enable(bEnableButtons &&
     451           0 :                 (m_pListItemsLB->GetSelectEntryPos() < (m_pListItemsLB->GetEntryCount() - 1)));
     452             : 
     453           0 :     return 0;
     454             : }
     455             : 
     456             : // renew types in SelectionBox
     457           0 : void SwFldFuncPage::UpdateSubType()
     458             : {
     459           0 :     const sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)m_pTypeLB->GetEntryData(GetTypeSel());
     460             : 
     461             :     // fill Selction-Listbox
     462           0 :     m_pSelectionLB->SetUpdateMode(false);
     463           0 :     m_pSelectionLB->Clear();
     464             : 
     465           0 :     std::vector<OUString> aLst;
     466           0 :     GetFldMgr().GetSubTypes(nTypeId, aLst);
     467           0 :     const size_t nCount = aLst.size();
     468             : 
     469           0 :     for(size_t i = 0; i < nCount; ++i)
     470             :     {
     471           0 :         size_t nPos = m_pSelectionLB->InsertEntry(aLst[i]);
     472           0 :         m_pSelectionLB->SetEntryData(nPos, reinterpret_cast<void*>(i));
     473             :     }
     474             : 
     475           0 :     bool bEnable = nCount != 0;
     476             : 
     477           0 :     m_pSelectionLB->Enable( bEnable );
     478             : 
     479           0 :     if (bEnable)
     480             :     {
     481           0 :             m_pSelectionLB->SelectEntryPos(0);
     482             :     }
     483             : 
     484           0 :     if (nTypeId == TYP_MACROFLD)
     485             :     {
     486           0 :         const bool bHasMacro = !GetFldMgr().GetMacroPath().isEmpty();
     487             : 
     488           0 :         if (bHasMacro)
     489             :         {
     490           0 :             m_pNameED->SetText(GetFldMgr().GetMacroName());
     491           0 :             m_pValueGroup->Enable();
     492             :         }
     493           0 :         EnableInsert(bHasMacro);
     494             :     }
     495             : 
     496           0 :     m_pSelectionLB->SetUpdateMode(true);
     497           0 : }
     498             : 
     499             : // call MacroBrowser, fill Listbox with Macros
     500           0 : IMPL_LINK( SwFldFuncPage, MacroHdl, Button *, pBtn )
     501             : {
     502           0 :     vcl::Window* pDefModalDlgParent = Application::GetDefDialogParent();
     503           0 :     Application::SetDefDialogParent( pBtn );
     504           0 :     const OUString sMacro(TurnMacroString(m_pNameED->GetText()).replaceAll(".", ";"));
     505           0 :     if (GetFldMgr().ChooseMacro(sMacro))
     506           0 :         UpdateSubType();
     507             : 
     508           0 :     Application::SetDefDialogParent( pDefModalDlgParent );
     509             : 
     510           0 :     return 0;
     511             : }
     512             : 
     513           0 : bool SwFldFuncPage::FillItemSet(SfxItemSet* )
     514             : {
     515           0 :     const sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)m_pTypeLB->GetEntryData(GetTypeSel());
     516             : 
     517           0 :     sal_uInt16 nSubType = 0;
     518             : 
     519           0 :     const sal_Int32 nEntryPos = m_pFormatLB->GetSelectEntryPos();
     520             :     const sal_uLong nFormat = (nEntryPos == LISTBOX_ENTRY_NOTFOUND)
     521           0 :         ? 0 : (sal_uLong)m_pFormatLB->GetEntryData(nEntryPos);
     522             : 
     523           0 :     OUString aVal(m_pValueED->GetText());
     524           0 :     OUString aName(m_pNameED->GetText());
     525             : 
     526           0 :     switch(nTypeId)
     527             :     {
     528             :         case TYP_INPUTFLD:
     529           0 :             nSubType = INP_TXT;
     530             :             // to prevent removal of CR/LF restore old content
     531           0 :             if(!m_pNameED->IsModified() && IsFldEdit())
     532           0 :                 aName = GetCurField()->GetPar1();
     533             : 
     534           0 :             break;
     535             : 
     536             :         case TYP_MACROFLD:
     537             :             // use the full script URL, not the name in the Edit control
     538           0 :             aName = GetFldMgr().GetMacroPath();
     539           0 :             break;
     540             : 
     541             :         case TYP_CONDTXTFLD:
     542           0 :             aVal = m_pCond1ED->GetText() + "|" + m_pCond2ED->GetText();
     543           0 :             break;
     544             :         case TYP_DROPDOWN :
     545             :         {
     546           0 :             aName = m_pListNameED->GetText();
     547           0 :             for(sal_Int32 i = 0; i < m_pListItemsLB->GetEntryCount(); i++)
     548             :             {
     549           0 :                 if(i)
     550           0 :                     aVal += OUString(DB_DELIM);
     551           0 :                 aVal += m_pListItemsLB->GetEntry(i);
     552             :             }
     553             :         }
     554           0 :         break;
     555             :         default:
     556           0 :             break;
     557             :     }
     558             : 
     559           0 :     if (!IsFldEdit() ||
     560           0 :         m_pNameED->IsValueChangedFromSaved() ||
     561           0 :         m_pValueED->IsValueChangedFromSaved() ||
     562           0 :         m_pCond1ED->IsValueChangedFromSaved() ||
     563           0 :         m_pCond2ED->IsValueChangedFromSaved() ||
     564           0 :         m_pListNameED->IsValueChangedFromSaved() ||
     565           0 :         bDropDownLBChanged ||
     566           0 :         nOldFormat != nFormat)
     567             :     {
     568           0 :         InsertFld( nTypeId, nSubType, aName, aVal, nFormat );
     569             :     }
     570             : 
     571           0 :     ModifyHdl();    // enable/disable Insert if applicable
     572             : 
     573           0 :     return false;
     574             : }
     575             : 
     576           0 : OUString SwFldFuncPage::TurnMacroString(const OUString &rMacro)
     577             : {
     578           0 :     if (!rMacro.isEmpty())
     579             :     {
     580             :         // reverse content of aName
     581           0 :         OUString sMacro;
     582           0 :         sal_Int32 nPos = 0;
     583             : 
     584           0 :         for (int i = 0; i < 4 && nPos != -1; i++)
     585             :         {
     586             :             OUString sTmp = (i == 3)
     587             :                 ? rMacro.copy(nPos)
     588           0 :                 : rMacro.getToken(0, '.', nPos);
     589             : 
     590           0 :             sMacro = !sMacro.isEmpty()
     591           0 :                 ? sTmp + "." + sMacro
     592           0 :                 : sTmp;
     593           0 :         }
     594           0 :         return sMacro;
     595             :     }
     596             : 
     597           0 :     return rMacro;
     598             : }
     599             : 
     600           0 : SfxTabPage* SwFldFuncPage::Create(  vcl::Window* pParent,
     601             :                         const SfxItemSet* rAttrSet )
     602             : {
     603           0 :     return ( new SwFldFuncPage( pParent, *rAttrSet ) );
     604             : }
     605             : 
     606           0 : sal_uInt16 SwFldFuncPage::GetGroup()
     607             : {
     608           0 :     return GRP_FKT;
     609             : }
     610             : 
     611           0 : void    SwFldFuncPage::FillUserData()
     612             : {
     613           0 :     const sal_Int32 nEntryPos = m_pTypeLB->GetSelectEntryPos();
     614             :     const sal_uInt16 nTypeSel = ( LISTBOX_ENTRY_NOTFOUND == nEntryPos )
     615             :         ? USHRT_MAX
     616             :         : sal::static_int_cast< sal_uInt16 >
     617           0 :             (reinterpret_cast< sal_uIntPtr >(m_pTypeLB->GetEntryData( nEntryPos )));
     618           0 :     SetUserData(USER_DATA_VERSION ";" + OUString::number( nTypeSel ));
     619           0 : }
     620             : 
     621           0 : IMPL_LINK_NOARG(SwFldFuncPage, ModifyHdl)
     622             : {
     623           0 :     const sal_Int32 nLen = m_pNameED->GetText().getLength();
     624             : 
     625           0 :     bool bEnable = true;
     626           0 :     sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)m_pTypeLB->GetEntryData(GetTypeSel());
     627             : 
     628           0 :     if( TYP_COMBINED_CHARS == nTypeId &&
     629           0 :         (!nLen || nLen > MAX_COMBINED_CHARACTERS ))
     630           0 :         bEnable = false;
     631             : 
     632           0 :     EnableInsert( bEnable );
     633             : 
     634           0 :     return 0;
     635           0 : }
     636             : 
     637             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10