LCOV - code coverage report
Current view: top level - sw/source/ui/index - cnttab.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 0 2264 0.0 %
Date: 2014-11-03 Functions: 0 209 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 <config_folders.h>
      21             : 
      22             : #include <comphelper/string.hxx>
      23             : #include <rsc/rscsfx.hxx>
      24             : #include <vcl/msgbox.hxx>
      25             : #include <vcl/help.hxx>
      26             : #include <svl/stritem.hxx>
      27             : #include <svl/urihelper.hxx>
      28             : #include <unotools/pathoptions.hxx>
      29             : #include <sfx2/request.hxx>
      30             : #include <sfx2/viewfrm.hxx>
      31             : #include <sfx2/dispatch.hxx>
      32             : #include <sfx2/docfile.hxx>
      33             : #include <svtools/simptabl.hxx>
      34             : #include <svtools/treelistentry.hxx>
      35             : #include <svx/dialogs.hrc>
      36             : #include <svx/svxdlg.hxx>
      37             : #include <svx/flagsdef.hxx>
      38             : #include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
      39             : #include <com/sun/star/ui/dialogs/XFilePicker.hpp>
      40             : #include <com/sun/star/ui/dialogs/XFilterManager.hpp>
      41             : #include <svtools/indexentryres.hxx>
      42             : #include <editeng/unolingu.hxx>
      43             : #include <column.hxx>
      44             : #include <fmtfsize.hxx>
      45             : #include <shellio.hxx>
      46             : #include <authfld.hxx>
      47             : #include <swtypes.hxx>
      48             : #include <wrtsh.hxx>
      49             : #include <view.hxx>
      50             : #include <basesh.hxx>
      51             : #include <outline.hxx>
      52             : #include <cnttab.hxx>
      53             : #include <swuicnttab.hxx>
      54             : #include <formedt.hxx>
      55             : #include <poolfmt.hxx>
      56             : #include <poolfmt.hrc>
      57             : #include <uitool.hxx>
      58             : #include <fmtcol.hxx>
      59             : #include <fldbas.hxx>
      60             : #include <expfld.hxx>
      61             : #include <unotools.hxx>
      62             : #include <unotxdoc.hxx>
      63             : #include <docsh.hxx>
      64             : #include <swmodule.hxx>
      65             : #include <modcfg.hxx>
      66             : 
      67             : #include <cmdid.h>
      68             : #include <helpid.h>
      69             : #include <utlui.hrc>
      70             : #include <index.hrc>
      71             : #include <globals.hrc>
      72             : #include <SwStyleNameMapper.hxx>
      73             : #include <sfx2/filedlghelper.hxx>
      74             : #include <toxwrap.hxx>
      75             : #include <chpfld.hxx>
      76             : 
      77             : #include <sfx2/app.hxx>
      78             : 
      79             : #include <unomid.h>
      80             : using namespace ::com::sun::star;
      81             : using namespace ::com::sun::star::lang;
      82             : using namespace ::com::sun::star::uno;
      83             : using namespace com::sun::star::ui::dialogs;
      84             : using namespace ::sfx2;
      85             : #include <svtools/editbrowsebox.hxx>
      86             : #include <boost/scoped_ptr.hpp>
      87             : 
      88             : static const sal_Unicode aDeliStart = '['; // for the form
      89             : static const sal_Unicode aDeliEnd    = ']'; // for the form
      90             : 
      91           0 : static OUString lcl_CreateAutoMarkFileDlg( const OUString& rURL,
      92             :                                 const OUString& rFileString, bool bOpen )
      93             : {
      94           0 :     OUString sRet;
      95             : 
      96             :     FileDialogHelper aDlgHelper( bOpen ?
      97           0 :                 TemplateDescription::FILEOPEN_SIMPLE : TemplateDescription::FILESAVE_AUTOEXTENSION, 0 );
      98           0 :     uno::Reference < XFilePicker > xFP = aDlgHelper.GetFilePicker();
      99             : 
     100           0 :     uno::Reference<XFilterManager> xFltMgr(xFP, UNO_QUERY);
     101           0 :     xFltMgr->appendFilter( rFileString, "*.sdi" );
     102           0 :     xFltMgr->setCurrentFilter( rFileString ) ;
     103             : 
     104           0 :     OUString& rLastSaveDir = (OUString&)SfxGetpApp()->GetLastSaveDirectory();
     105           0 :     OUString sSaveDir = rLastSaveDir;
     106             : 
     107           0 :     if( !rURL.isEmpty() )
     108           0 :         xFP->setDisplayDirectory( rURL );
     109             :     else
     110             :     {
     111           0 :         SvtPathOptions aPathOpt;
     112           0 :         xFP->setDisplayDirectory( aPathOpt.GetUserConfigPath() );
     113             :     }
     114             : 
     115           0 :     if( aDlgHelper.Execute() == ERRCODE_NONE )
     116             :     {
     117           0 :         sRet = xFP->getFiles().getConstArray()[0];
     118             :     }
     119           0 :     rLastSaveDir = sSaveDir;
     120           0 :     return sRet;
     121             : }
     122             : 
     123           0 : struct AutoMarkEntry
     124             : {
     125             :     OUString sSearch;
     126             :     OUString sAlternative;
     127             :     OUString sPrimKey;
     128             :     OUString sSecKey;
     129             :     OUString sComment;
     130             :     bool     bCase;
     131             :     bool     bWord;
     132             : 
     133           0 :     AutoMarkEntry() :
     134             :         bCase(false),
     135           0 :         bWord(false){}
     136             : };
     137             : typedef boost::ptr_vector<AutoMarkEntry> AutoMarkEntryArr;
     138             : 
     139             : typedef ::svt::EditBrowseBox SwEntryBrowseBox_Base;
     140             : 
     141           0 : class SwEntryBrowseBox : public SwEntryBrowseBox_Base
     142             : {
     143             :     Edit                    aCellEdit;
     144             :     ::svt::CheckBoxControl  aCellCheckBox;
     145             : 
     146             :     OUString  sSearch;
     147             :     OUString  sAlternative;
     148             :     OUString  sPrimKey;
     149             :     OUString  sSecKey;
     150             :     OUString  sComment;
     151             :     OUString  sCaseSensitive;
     152             :     OUString  sWordOnly;
     153             :     OUString  sYes;
     154             :     OUString  sNo;
     155             : 
     156             :     AutoMarkEntryArr    aEntryArr;
     157             : 
     158             :     ::svt::CellControllerRef    xController;
     159             :     ::svt::CellControllerRef    xCheckController;
     160             : 
     161             :     long    nCurrentRow;
     162             :     bool    bModified;
     163             : 
     164           0 :     void                            SetModified() {bModified = true;}
     165             : 
     166             : protected:
     167             :     virtual bool                    SeekRow( long nRow ) SAL_OVERRIDE;
     168             :     virtual void                    PaintCell(OutputDevice& rDev, const Rectangle& rRect, sal_uInt16 nColId) const SAL_OVERRIDE;
     169             :     virtual void                    InitController(::svt::CellControllerRef& rController, long nRow, sal_uInt16 nCol) SAL_OVERRIDE;
     170             :     virtual ::svt::CellController*  GetController(long nRow, sal_uInt16 nCol) SAL_OVERRIDE;
     171             :     virtual bool                    SaveModified() SAL_OVERRIDE;
     172             : 
     173             :     std::vector<long>               GetOptimalColWidths() const;
     174             : 
     175             : public:
     176             :     SwEntryBrowseBox(vcl::Window* pParent, VclBuilderContainer* pBuilder);
     177             :     void                            ReadEntries(SvStream& rInStr);
     178             :     void                            WriteEntries(SvStream& rOutStr);
     179             : 
     180             :     bool                            IsModified()const SAL_OVERRIDE;
     181             : 
     182             :     virtual OUString GetCellText( long nRow, sal_uInt16 nColumn ) const SAL_OVERRIDE;
     183             :     virtual void                    Resize() SAL_OVERRIDE;
     184             :     virtual Size                    GetOptimalSize() const SAL_OVERRIDE;
     185             : };
     186             : 
     187             : class SwAutoMarkDlg_Impl : public ModalDialog
     188             : {
     189             :     OKButton*           m_pOKPB;
     190             : 
     191             :     SwEntryBrowseBox*   m_pEntriesBB;
     192             : 
     193             :     OUString            sAutoMarkURL;
     194             : 
     195             :     bool                bCreateMode;
     196             : 
     197             :     DECL_LINK(OkHdl, void *);
     198             : public:
     199             :     SwAutoMarkDlg_Impl(vcl::Window* pParent, const OUString& rAutoMarkURL,
     200             :                        bool bCreate);
     201             :     virtual ~SwAutoMarkDlg_Impl();
     202             : 
     203             : };
     204             : 
     205           0 : sal_uInt16 CurTOXType::GetFlatIndex() const
     206             : {
     207           0 :     return static_cast< sal_uInt16 >( (eType == TOX_USER && nIndex)
     208           0 :         ? TOX_AUTHORITIES + nIndex : eType );
     209             : }
     210             : 
     211             : #define EDIT_MINWIDTH 15
     212             : 
     213           0 : SwMultiTOXTabDialog::SwMultiTOXTabDialog(vcl::Window* pParent, const SfxItemSet& rSet,
     214             :                     SwWrtShell &rShell,
     215             :                     SwTOXBase* pCurTOX,
     216             :                     sal_uInt16 nToxType, bool bGlobal)
     217             :     : SfxTabDialog(pParent, "TocDialog",
     218             :         "modules/swriter/ui/tocdialog.ui", &rSet)
     219           0 :     , pMgr( new SwTOXMgr( &rShell ) )
     220             :     , rSh(rShell)
     221             :     , pExampleFrame(0)
     222             :     , pParamTOXBase(pCurTOX)
     223             :     , sUserDefinedIndex(SW_RESSTR(STR_USER_DEFINED_INDEX))
     224             :     , nInitialTOXType(nToxType)
     225             :     , bEditTOX(false)
     226             :     , bExampleCreated(false)
     227           0 :     , bGlobalFlag(bGlobal)
     228             : {
     229           0 :     get(m_pShowExampleCB, "showexample");
     230           0 :     get(m_pExampleContainerWIN, "example");
     231           0 :     Size aWinSize(LogicToPixel(Size(150, 188), MapMode(MAP_APPFONT)));
     232           0 :     m_pExampleContainerWIN->set_width_request(aWinSize.Width());
     233           0 :     m_pExampleContainerWIN->set_height_request(aWinSize.Height());
     234           0 :     m_pExampleContainerWIN->SetSizePixel(aWinSize);
     235             : 
     236           0 :     eCurrentTOXType.eType = TOX_CONTENT;
     237           0 :     eCurrentTOXType.nIndex = 0;
     238             : 
     239           0 :     const sal_uInt16 nUserTypeCount = rSh.GetTOXTypeCount(TOX_USER);
     240           0 :     nTypeCount = nUserTypeCount + 6;
     241           0 :     pFormArr = new SwForm*[nTypeCount];
     242           0 :     pDescArr = new SwTOXDescription*[nTypeCount];
     243           0 :     pxIndexSectionsArr = new SwIndexSections_Impl*[nTypeCount];
     244             :     //the standard user index is on position TOX_USER
     245             :     //all user user indexes follow after position TOX_AUTHORITIES
     246           0 :     if(pCurTOX)
     247             :     {
     248           0 :         bEditTOX = true;
     249             :     }
     250           0 :     for(int i = nTypeCount - 1; i > -1; i--)
     251             :     {
     252           0 :         pFormArr[i] = 0;
     253           0 :         pDescArr[i] = 0;
     254           0 :         pxIndexSectionsArr[i] = new SwIndexSections_Impl;
     255           0 :         if(pCurTOX)
     256             :         {
     257           0 :             eCurrentTOXType.eType = pCurTOX->GetType();
     258           0 :             sal_uInt16 nArrayIndex = static_cast< sal_uInt16 >(eCurrentTOXType.eType);
     259           0 :             if(eCurrentTOXType.eType == TOX_USER)
     260             :             {
     261             :                 //which user type is it?
     262           0 :                 for(sal_uInt16 nUser = 0; nUser < nUserTypeCount; nUser++)
     263             :                 {
     264           0 :                     const SwTOXType* pTemp = rSh.GetTOXType(TOX_USER, nUser);
     265           0 :                     if(pCurTOX->GetTOXType() == pTemp)
     266             :                     {
     267           0 :                         eCurrentTOXType.nIndex = nUser;
     268           0 :                         nArrayIndex = static_cast< sal_uInt16 >(nUser > 0 ? TOX_AUTHORITIES + nUser : TOX_USER);
     269           0 :                         break;
     270             :                     }
     271             :                 }
     272             :             }
     273           0 :             pFormArr[nArrayIndex] = new SwForm(pCurTOX->GetTOXForm());
     274           0 :             pDescArr[nArrayIndex] = CreateTOXDescFromTOXBase(pCurTOX);
     275           0 :             if(TOX_AUTHORITIES == eCurrentTOXType.eType)
     276             :             {
     277             :                 const SwAuthorityFieldType* pFType = (const SwAuthorityFieldType*)
     278           0 :                                                 rSh.GetFldType(RES_AUTHORITY, aEmptyOUStr);
     279           0 :                 if(pFType)
     280             :                 {
     281           0 :                     OUString sBrackets;
     282           0 :                     if(pFType->GetPrefix())
     283           0 :                         sBrackets += OUString(pFType->GetPrefix());
     284           0 :                     if(pFType->GetSuffix())
     285           0 :                         sBrackets += OUString(pFType->GetSuffix());
     286           0 :                     pDescArr[nArrayIndex]->SetAuthBrackets(sBrackets);
     287           0 :                     pDescArr[nArrayIndex]->SetAuthSequence(pFType->IsSequence());
     288             :                 }
     289             :                 else
     290             :                 {
     291           0 :                     pDescArr[nArrayIndex]->SetAuthBrackets("[]");
     292             :                 }
     293             :             }
     294             :         }
     295             :     }
     296           0 :     SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create();
     297             :     OSL_ENSURE(pFact, "Dialog creation failed!");
     298           0 :     m_nSelectId = AddTabPage("index", SwTOXSelectTabPage::Create, 0);
     299           0 :     m_nStylesId = AddTabPage("styles", SwTOXStylesTabPage::Create, 0);
     300           0 :     m_nColumnId = AddTabPage("columns", SwColumnPage::Create, 0);
     301           0 :     m_nBackGroundId = AddTabPage("background", pFact->GetTabPageCreatorFunc( RID_SVXPAGE_BACKGROUND ), 0);
     302           0 :     m_nEntriesId = AddTabPage("entries", SwTOXEntryTabPage::Create, 0);
     303           0 :     if(!pCurTOX)
     304           0 :         SetCurPageId(m_nSelectId);
     305             : 
     306           0 :     m_pShowExampleCB->SetClickHdl(LINK(this, SwMultiTOXTabDialog, ShowPreviewHdl));
     307             : 
     308           0 :     m_pShowExampleCB->Check( SW_MOD()->GetModuleConfig()->IsShowIndexPreview());
     309             : 
     310           0 :     m_pExampleContainerWIN->SetAccessibleName(m_pShowExampleCB->GetText());
     311           0 :     SetViewAlign( WINDOWALIGN_LEFT );
     312             :     // SetViewWindow does not work if the dialog is visible!
     313             : 
     314           0 :     if(!m_pShowExampleCB->IsChecked())
     315           0 :         SetViewWindow(m_pExampleContainerWIN);
     316             : 
     317           0 :     ShowPreviewHdl(0);
     318           0 : }
     319             : 
     320           0 : SwMultiTOXTabDialog::~SwMultiTOXTabDialog()
     321             : {
     322           0 :     SW_MOD()->GetModuleConfig()->SetShowIndexPreview(m_pShowExampleCB->IsChecked());
     323             : 
     324             :     // fdo#38515 Avoid setting focus on deleted controls in the destructors
     325           0 :     EnableInput( false );
     326             : 
     327           0 :     for(sal_uInt16 i = 0; i < nTypeCount; i++)
     328             :     {
     329           0 :         delete pFormArr[i];
     330           0 :         delete pDescArr[i];
     331           0 :         delete pxIndexSectionsArr[i];
     332             :     }
     333           0 :     delete[] pxIndexSectionsArr;
     334             : 
     335           0 :     delete[] pFormArr;
     336           0 :     delete[] pDescArr;
     337           0 :     delete pMgr;
     338           0 :     delete pExampleFrame;
     339           0 : }
     340             : 
     341           0 : void SwMultiTOXTabDialog::PageCreated( sal_uInt16 nId, SfxTabPage &rPage )
     342             : {
     343           0 :     if (nId == m_nBackGroundId)
     344             :     {
     345           0 :         SfxAllItemSet aSet(*(GetInputSetImpl()->GetPool()));
     346           0 :         aSet.Put (SfxUInt32Item(SID_FLAG_TYPE, SVX_SHOW_SELECTOR));
     347           0 :         rPage.PageCreated(aSet);
     348             :     }
     349           0 :     else if(nId == m_nColumnId)
     350             :     {
     351           0 :         const SwFmtFrmSize& rSize = (const SwFmtFrmSize&)GetInputSetImpl()->Get(RES_FRM_SIZE);
     352             : 
     353           0 :         ((SwColumnPage&)rPage).SetPageWidth(rSize.GetWidth());
     354             :     }
     355           0 :     else if (nId == m_nEntriesId)
     356           0 :         ((SwTOXEntryTabPage&)rPage).SetWrtShell(rSh);
     357           0 :     else if (nId == m_nSelectId)
     358             :     {
     359           0 :         ((SwTOXSelectTabPage&)rPage).SetWrtShell(rSh);
     360           0 :         if(USHRT_MAX != nInitialTOXType)
     361           0 :             ((SwTOXSelectTabPage&)rPage).SelectType((TOXTypes)nInitialTOXType);
     362             :     }
     363           0 : }
     364             : 
     365           0 : short SwMultiTOXTabDialog::Ok()
     366             : {
     367           0 :     short nRet = SfxTabDialog::Ok();
     368           0 :     SwTOXDescription& rDesc = GetTOXDescription(eCurrentTOXType);
     369           0 :     SwTOXBase aNewDef(*rSh.GetDefaultTOXBase( eCurrentTOXType.eType, true ));
     370             : 
     371           0 :     const sal_uInt16 nIndex = eCurrentTOXType.GetFlatIndex();
     372           0 :     if(pFormArr[nIndex])
     373             :     {
     374           0 :         rDesc.SetForm(*pFormArr[nIndex]);
     375           0 :         aNewDef.SetTOXForm(*pFormArr[nIndex]);
     376             :     }
     377           0 :     rDesc.ApplyTo(aNewDef);
     378           0 :     if(!bGlobalFlag)
     379             :         pMgr->UpdateOrInsertTOX(
     380           0 :                 rDesc, 0, GetOutputItemSet());
     381           0 :     else if(bEditTOX)
     382             :         pMgr->UpdateOrInsertTOX(
     383           0 :                 rDesc, &pParamTOXBase, GetOutputItemSet());
     384             : 
     385           0 :     if(!eCurrentTOXType.nIndex)
     386           0 :         rSh.SetDefaultTOXBase(aNewDef);
     387             : 
     388           0 :     return nRet;
     389             : }
     390             : 
     391           0 : SwForm* SwMultiTOXTabDialog::GetForm(CurTOXType eType)
     392             : {
     393           0 :     const sal_uInt16 nIndex = eType.GetFlatIndex();
     394           0 :     if(!pFormArr[nIndex])
     395           0 :         pFormArr[nIndex] = new SwForm(eType.eType);
     396           0 :     return pFormArr[nIndex];
     397             : }
     398             : 
     399           0 : SwTOXDescription& SwMultiTOXTabDialog::GetTOXDescription(CurTOXType eType)
     400             : {
     401           0 :     const sal_uInt16 nIndex = eType.GetFlatIndex();
     402           0 :     if(!pDescArr[nIndex])
     403             :     {
     404           0 :         const SwTOXBase* pDef = rSh.GetDefaultTOXBase( eType.eType );
     405           0 :         if(pDef)
     406           0 :             pDescArr[nIndex] = CreateTOXDescFromTOXBase(pDef);
     407             :         else
     408             :         {
     409           0 :             pDescArr[nIndex] = new SwTOXDescription(eType.eType);
     410           0 :             if(eType.eType == TOX_USER)
     411           0 :                 pDescArr[nIndex]->SetTitle(sUserDefinedIndex);
     412             :             else
     413           0 :                 pDescArr[nIndex]->SetTitle(
     414           0 :                     rSh.GetTOXType(eType.eType, 0)->GetTypeName());
     415             :         }
     416           0 :         if(TOX_AUTHORITIES == eType.eType)
     417             :         {
     418             :             const SwAuthorityFieldType* pFType = (const SwAuthorityFieldType*)
     419           0 :                                             rSh.GetFldType(RES_AUTHORITY, aEmptyOUStr);
     420           0 :             if(pFType)
     421             :             {
     422           0 :                 pDescArr[nIndex]->SetAuthBrackets(OUString(pFType->GetPrefix()) +
     423           0 :                                                   OUString(pFType->GetSuffix()));
     424           0 :                 pDescArr[nIndex]->SetAuthSequence(pFType->IsSequence());
     425             :             }
     426             :             else
     427             :             {
     428           0 :                 pDescArr[nIndex]->SetAuthBrackets("[]");
     429             :             }
     430             :         }
     431           0 :         else if(TOX_INDEX == eType.eType)
     432           0 :             pDescArr[nIndex]->SetMainEntryCharStyle(SW_RESSTR(STR_POOLCHR_IDX_MAIN_ENTRY));
     433             : 
     434             :     }
     435           0 :     return *pDescArr[nIndex];
     436             : }
     437             : 
     438           0 : SwTOXDescription* SwMultiTOXTabDialog::CreateTOXDescFromTOXBase(
     439             :             const SwTOXBase*pCurTOX)
     440             : {
     441           0 :     SwTOXDescription * pDesc = new SwTOXDescription(pCurTOX->GetType());
     442           0 :     for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
     443           0 :         pDesc->SetStyleNames(pCurTOX->GetStyleNames(i), i);
     444           0 :     pDesc->SetAutoMarkURL(rSh.GetTOIAutoMarkURL());
     445           0 :     pDesc->SetTitle(pCurTOX->GetTitle());
     446             : 
     447           0 :     pDesc->SetContentOptions(pCurTOX->GetCreateType());
     448           0 :     if(pDesc->GetTOXType() == TOX_INDEX)
     449           0 :         pDesc->SetIndexOptions(pCurTOX->GetOptions());
     450           0 :     pDesc->SetMainEntryCharStyle(pCurTOX->GetMainEntryCharStyle());
     451           0 :     if(pDesc->GetTOXType() != TOX_INDEX)
     452           0 :         pDesc->SetLevel((sal_uInt8)pCurTOX->GetLevel());
     453           0 :     pDesc->SetCreateFromObjectNames(pCurTOX->IsFromObjectNames());
     454           0 :     pDesc->SetSequenceName(pCurTOX->GetSequenceName());
     455           0 :     pDesc->SetCaptionDisplay(pCurTOX->GetCaptionDisplay());
     456           0 :     pDesc->SetFromChapter(pCurTOX->IsFromChapter());
     457           0 :     pDesc->SetReadonly(pCurTOX->IsProtected());
     458           0 :     pDesc->SetOLEOptions(pCurTOX->GetOLEOptions());
     459           0 :     pDesc->SetLevelFromChapter(pCurTOX->IsLevelFromChapter());
     460           0 :     pDesc->SetLanguage(pCurTOX->GetLanguage());
     461           0 :     pDesc->SetSortAlgorithm(pCurTOX->GetSortAlgorithm());
     462           0 :     return pDesc;
     463             : }
     464             : 
     465           0 : IMPL_LINK_NOARG( SwMultiTOXTabDialog, ShowPreviewHdl )
     466             : {
     467           0 :     if(m_pShowExampleCB->IsChecked())
     468             :     {
     469           0 :         if(!pExampleFrame && !bExampleCreated)
     470             :         {
     471           0 :             bExampleCreated = true;
     472           0 :             OUString sTemplate("internal/idxexample.odt");
     473             : 
     474           0 :             SvtPathOptions aOpt;
     475           0 :             bool bExist = aOpt.SearchFile( sTemplate, SvtPathOptions::PATH_TEMPLATE );
     476             : 
     477           0 :             if(!bExist)
     478             :             {
     479           0 :                 OUString sInfo(SW_RESSTR(STR_FILE_NOT_FOUND));
     480           0 :                 sInfo = sInfo.replaceFirst( "%1", sTemplate );
     481           0 :                 sInfo = sInfo.replaceFirst( "%2", aOpt.GetTemplatePath() );
     482           0 :                 InfoBox aInfo(GetParent(), sInfo);
     483           0 :                 aInfo.Execute();
     484             :             }
     485             :             else
     486             :             {
     487           0 :                 Link aLink(LINK(this, SwMultiTOXTabDialog, CreateExample_Hdl));
     488             :                 pExampleFrame = new SwOneExampleFrame(
     489           0 :                         *m_pExampleContainerWIN, EX_SHOW_ONLINE_LAYOUT, &aLink, &sTemplate);
     490             : 
     491           0 :                 if(!pExampleFrame->IsServiceAvailable())
     492             :                 {
     493           0 :                     SwOneExampleFrame::CreateErrorMessage(0);
     494             :                 }
     495             :             }
     496           0 :             m_pShowExampleCB->Show(pExampleFrame && pExampleFrame->IsServiceAvailable());
     497             :         }
     498             :     }
     499           0 :     bool bSetViewWindow = m_pShowExampleCB->IsChecked()
     500           0 :         && pExampleFrame && pExampleFrame->IsServiceAvailable();
     501             : 
     502           0 :     m_pExampleContainerWIN->Show( bSetViewWindow );
     503           0 :     SetViewWindow( bSetViewWindow ? m_pExampleContainerWIN : 0 );
     504             : 
     505           0 :     setOptimalLayoutSize();
     506             : 
     507           0 :     return 0;
     508             : }
     509             : 
     510           0 : bool SwMultiTOXTabDialog::IsNoNum(SwWrtShell& rSh, const OUString& rName)
     511             : {
     512           0 :     SwTxtFmtColl* pColl = rSh.GetParaStyle(rName);
     513           0 :     if(pColl && ! pColl->IsAssignedToListLevelOfOutlineStyle())
     514           0 :         return true;
     515             : 
     516             :     const sal_uInt16 nId = SwStyleNameMapper::GetPoolIdFromUIName(
     517           0 :         rName, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL);
     518           0 :     if(nId != USHRT_MAX &&
     519           0 :         ! rSh.GetTxtCollFromPool(nId)->IsAssignedToListLevelOfOutlineStyle())
     520           0 :         return true;
     521             : 
     522           0 :     return false;
     523             : }
     524             : 
     525           0 : class SwIndexTreeLB : public SvSimpleTable
     526             : {
     527             : public:
     528             :     SwIndexTreeLB(SvSimpleTableContainer& rParent, WinBits nBits = 0);
     529             :     virtual void KeyInput( const KeyEvent& rKEvt ) SAL_OVERRIDE;
     530             :     virtual void Resize() SAL_OVERRIDE;
     531             :     virtual sal_IntPtr GetTabPos( SvTreeListEntry*, SvLBoxTab* ) SAL_OVERRIDE;
     532             :     void setColSizes();
     533             : };
     534             : 
     535           0 : SwIndexTreeLB::SwIndexTreeLB(SvSimpleTableContainer& rParent, WinBits nBits)
     536           0 :     : SvSimpleTable(rParent, nBits)
     537             : {
     538           0 :     HeaderBar& rStylesHB = GetTheHeaderBar();
     539           0 :     rStylesHB.SetStyle(rStylesHB.GetStyle()|WB_BUTTONSTYLE);
     540           0 :     SetStyle(GetStyle() & ~(WB_AUTOHSCROLL|WB_HSCROLL));
     541           0 : }
     542             : 
     543           0 : sal_IntPtr SwIndexTreeLB::GetTabPos( SvTreeListEntry* pEntry, SvLBoxTab* pTab)
     544             : {
     545           0 :     sal_IntPtr nData = (sal_IntPtr)pEntry->GetUserData();
     546           0 :     if(nData != USHRT_MAX)
     547             :     {
     548           0 :         HeaderBar& rStylesHB = GetTheHeaderBar();
     549           0 :         sal_IntPtr  nPos = rStylesHB.GetItemRect( static_cast< sal_uInt16 >(2 + nData) ).TopLeft().X();
     550           0 :         nData = nPos;
     551             :     }
     552             :     else
     553           0 :         nData = 0;
     554           0 :     nData += pTab->GetPos();
     555           0 :     return nData;
     556             : }
     557             : 
     558           0 : void SwIndexTreeLB::KeyInput( const KeyEvent& rKEvt )
     559             : {
     560           0 :     SvTreeListEntry* pEntry = FirstSelected();
     561           0 :     vcl::KeyCode aCode = rKEvt.GetKeyCode();
     562           0 :     bool bChanged = false;
     563           0 :     if(pEntry)
     564             :     {
     565           0 :         sal_IntPtr nLevel = (sal_IntPtr)pEntry->GetUserData();
     566           0 :         if(aCode.GetCode() == KEY_ADD )
     567             :         {
     568           0 :             if(nLevel < MAXLEVEL - 1)
     569           0 :                 nLevel++;
     570           0 :             else if(nLevel == USHRT_MAX)
     571           0 :                 nLevel = 0;
     572           0 :             bChanged = true;
     573             :         }
     574           0 :         else if(aCode.GetCode() == KEY_SUBTRACT)
     575             :         {
     576           0 :             if(!nLevel)
     577           0 :                 nLevel = USHRT_MAX;
     578           0 :             else if(nLevel != USHRT_MAX)
     579           0 :                 nLevel--;
     580           0 :             bChanged = true;
     581             :         }
     582           0 :         if(bChanged)
     583             :         {
     584           0 :             pEntry->SetUserData((void*)nLevel);
     585           0 :             Invalidate();
     586             :         }
     587             :     }
     588           0 :     if(!bChanged)
     589           0 :         SvTreeListBox::KeyInput(rKEvt);
     590           0 : }
     591             : 
     592           0 : void SwIndexTreeLB::Resize()
     593             : {
     594           0 :     SvSimpleTable::Resize();
     595           0 :     setColSizes();
     596           0 : }
     597             : 
     598           0 : void SwIndexTreeLB::setColSizes()
     599             : {
     600           0 :     HeaderBar &rHB = GetTheHeaderBar();
     601           0 :     if (rHB.GetItemCount() < MAXLEVEL+1)
     602           0 :         return;
     603             : 
     604           0 :     long nWidth = rHB.GetSizePixel().Width();
     605           0 :     nWidth /= 14;
     606           0 :     nWidth--;
     607             : 
     608             :     long nTabs_Impl[MAXLEVEL+2];
     609             : 
     610           0 :     nTabs_Impl[0] = MAXLEVEL+1;
     611           0 :     nTabs_Impl[1] = 3 * nWidth;
     612             : 
     613           0 :     for(sal_uInt16 i = 1; i <= MAXLEVEL; ++i)
     614           0 :         nTabs_Impl[i+1] = nTabs_Impl[i] + nWidth;
     615           0 :     SvSimpleTable::SetTabs(&nTabs_Impl[0], MAP_PIXEL);
     616             : }
     617             : 
     618             : class SwAddStylesDlg_Impl : public SfxModalDialog
     619             : {
     620             :     OKButton*       m_pOk;
     621             : 
     622             :     SwIndexTreeLB*  m_pHeaderTree;
     623             :     PushButton*     m_pLeftPB;
     624             :     PushButton*     m_pRightPB;
     625             : 
     626             :     OUString*       pStyleArr;
     627             : 
     628             :     DECL_LINK(OkHdl, void *);
     629             :     DECL_LINK(LeftRightHdl, PushButton*);
     630             :     DECL_LINK(HeaderDragHdl, void *);
     631             : 
     632             : public:
     633             :     SwAddStylesDlg_Impl(vcl::Window* pParent, SwWrtShell& rWrtSh, OUString rStringArr[]);
     634             :     virtual ~SwAddStylesDlg_Impl();
     635             : };
     636             : 
     637           0 : SwAddStylesDlg_Impl::SwAddStylesDlg_Impl(vcl::Window* pParent,
     638             :             SwWrtShell& rWrtSh, OUString rStringArr[])
     639             :     : SfxModalDialog(pParent, "AssignStylesDialog",
     640             :         "modules/swriter/ui/assignstylesdialog.ui")
     641           0 :     , pStyleArr(rStringArr)
     642             : {
     643           0 :     get(m_pOk, "ok");
     644           0 :     get(m_pLeftPB, "left");
     645           0 :     get(m_pRightPB, "right");
     646           0 :     OUString sHBFirst = get<FixedText>("notapplied")->GetText();
     647           0 :     SvSimpleTableContainer *pHeaderTreeContainer = get<SvSimpleTableContainer>("styles");
     648           0 :     Size aSize = pHeaderTreeContainer->LogicToPixel(Size(273, 164), MAP_APPFONT);
     649           0 :     pHeaderTreeContainer->set_width_request(aSize.Width());
     650           0 :     pHeaderTreeContainer->set_height_request(aSize.Height());
     651           0 :     m_pHeaderTree = new SwIndexTreeLB(*pHeaderTreeContainer);
     652             : 
     653           0 :     m_pOk->SetClickHdl(LINK(this, SwAddStylesDlg_Impl, OkHdl));
     654           0 :     m_pLeftPB->SetClickHdl(LINK(this, SwAddStylesDlg_Impl, LeftRightHdl));
     655           0 :     m_pRightPB->SetClickHdl(LINK(this, SwAddStylesDlg_Impl, LeftRightHdl));
     656             : 
     657           0 :     HeaderBar& rHB = m_pHeaderTree->GetTheHeaderBar();
     658           0 :     rHB.SetEndDragHdl(LINK(this, SwAddStylesDlg_Impl, HeaderDragHdl));
     659             : 
     660           0 :     for(sal_uInt16 i = 1; i <= MAXLEVEL; ++i)
     661           0 :         sHBFirst += "\t" + OUString::number(i);
     662           0 :     m_pHeaderTree->InsertHeaderEntry(sHBFirst);
     663           0 :     m_pHeaderTree->setColSizes();
     664             : 
     665           0 :     m_pHeaderTree->SetStyle(m_pHeaderTree->GetStyle()|WB_CLIPCHILDREN|WB_SORT);
     666           0 :     m_pHeaderTree->GetModel()->SetSortMode(SortAscending);
     667           0 :     for (sal_uInt16 i = 0; i < MAXLEVEL; ++i)
     668             :     {
     669           0 :         OUString sStyles(rStringArr[i]);
     670           0 :         for(sal_Int32 nToken = 0;
     671           0 :             nToken < comphelper::string::getTokenCount(sStyles, TOX_STYLE_DELIMITER);
     672             :             ++nToken)
     673             :         {
     674           0 :             const OUString sTmp(sStyles.getToken(nToken, TOX_STYLE_DELIMITER));
     675           0 :             SvTreeListEntry* pEntry = m_pHeaderTree->InsertEntry(sTmp);
     676           0 :             pEntry->SetUserData(reinterpret_cast<void*>(i));
     677           0 :         }
     678           0 :     }
     679             :     // now the other styles
     680             : 
     681           0 :     const SwTxtFmtColl *pColl   = 0;
     682           0 :     const sal_uInt16 nSz = rWrtSh.GetTxtFmtCollCount();
     683             : 
     684           0 :     for ( sal_uInt16 j = 0;j < nSz; ++j )
     685             :     {
     686           0 :         pColl = &rWrtSh.GetTxtFmtColl(j);
     687           0 :         if(pColl->IsDefault())
     688           0 :             continue;
     689             : 
     690           0 :         const OUString aName = pColl->GetName();
     691           0 :         if (!aName.isEmpty())
     692             :         {
     693           0 :             SvTreeListEntry* pEntry = m_pHeaderTree->First();
     694           0 :             while (pEntry && m_pHeaderTree->GetEntryText(pEntry, 0) != aName)
     695             :             {
     696           0 :                 pEntry = m_pHeaderTree->Next(pEntry);
     697             :             }
     698           0 :             if (!pEntry)
     699             :             {
     700           0 :                 m_pHeaderTree->InsertEntry(aName)->SetUserData((void*)USHRT_MAX);
     701             :             }
     702             :         }
     703           0 :     }
     704           0 :     m_pHeaderTree->GetModel()->Resort();
     705           0 : }
     706             : 
     707           0 : SwAddStylesDlg_Impl::~SwAddStylesDlg_Impl()
     708             : {
     709           0 :     delete m_pHeaderTree;
     710           0 : }
     711             : 
     712           0 : IMPL_LINK_NOARG(SwAddStylesDlg_Impl, OkHdl)
     713             : {
     714           0 :     for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
     715           0 :         pStyleArr[i] = "";
     716             : 
     717           0 :     SvTreeListEntry* pEntry = m_pHeaderTree->First();
     718           0 :     while(pEntry)
     719             :     {
     720           0 :         sal_IntPtr nLevel = (sal_IntPtr)pEntry->GetUserData();
     721           0 :         if(nLevel != USHRT_MAX)
     722             :         {
     723           0 :             if(!pStyleArr[nLevel].isEmpty())
     724           0 :                 pStyleArr[nLevel] += OUString(TOX_STYLE_DELIMITER);
     725           0 :             pStyleArr[nLevel] += m_pHeaderTree->GetEntryText(pEntry, 0);
     726             :         }
     727           0 :         pEntry = m_pHeaderTree->Next(pEntry);
     728             :     }
     729             : 
     730             :     //TODO write back style names
     731           0 :     EndDialog(RET_OK);
     732           0 :     return 0;
     733             : }
     734             : 
     735           0 : IMPL_LINK_NOARG(SwAddStylesDlg_Impl, HeaderDragHdl)
     736             : {
     737           0 :     m_pHeaderTree->Invalidate();
     738           0 :     return 0;
     739             : }
     740             : 
     741           0 : IMPL_LINK(SwAddStylesDlg_Impl, LeftRightHdl, PushButton*, pBtn)
     742             : {
     743           0 :     bool bLeft = pBtn == m_pLeftPB;
     744           0 :     SvTreeListEntry* pEntry = m_pHeaderTree->FirstSelected();
     745           0 :     if(pEntry)
     746             :     {
     747           0 :         sal_IntPtr nLevel = (sal_IntPtr)pEntry->GetUserData();
     748           0 :         if(bLeft)
     749             :         {
     750           0 :             if(!nLevel)
     751           0 :                 nLevel = USHRT_MAX;
     752           0 :             else if(nLevel != USHRT_MAX)
     753           0 :                 nLevel--;
     754             :         }
     755             :         else
     756             :         {
     757           0 :             if(nLevel < MAXLEVEL - 1)
     758           0 :                 nLevel++;
     759           0 :             else if(nLevel == USHRT_MAX)
     760           0 :                 nLevel = 0;
     761             :         }
     762           0 :         pEntry->SetUserData((void*)nLevel);
     763           0 :         m_pHeaderTree->Invalidate();
     764             :     }
     765           0 :     return 0;
     766             : }
     767             : 
     768           0 : SwTOXSelectTabPage::SwTOXSelectTabPage(vcl::Window* pParent, const SfxItemSet& rAttrSet)
     769             :     : SfxTabPage(pParent, "TocIndexPage",
     770             :         "modules/swriter/ui/tocindexpage.ui", &rAttrSet)
     771             :     , aFromNames(SW_RES(RES_SRCTYPES))
     772             :     , pIndexRes(0)
     773             :     , sAutoMarkType(SW_RESSTR(STR_AUTOMARK_TYPE))
     774           0 :     , m_bWaitingInitialSettings(true)
     775             : {
     776           0 :     get(m_pTitleED, "title");
     777           0 :     get(m_pTypeFT, "typeft");
     778           0 :     get(m_pTypeLB, "type");
     779           0 :     get(m_pReadOnlyCB, "readonly");
     780             : 
     781           0 :     get(m_pAreaFrame, "areaframe");
     782           0 :     get(m_pAreaLB, "scope");
     783           0 :     get(m_pLevelFT, "levelft");
     784           0 :     get(m_pLevelNF, "level");
     785             : 
     786           0 :     get(m_pCreateFrame, "createframe");
     787           0 :     get(m_pFromHeadingsCB, "fromheadings");
     788           0 :     get(m_pAddStylesCB, "addstylescb");
     789           0 :     sAddStyleUser = get<vcl::Window>("stylescb")->GetText();
     790           0 :     get(m_pAddStylesPB, "styles");
     791           0 :     get(m_pFromTablesCB, "fromtables");
     792           0 :     get(m_pFromFramesCB, "fromframes");
     793           0 :     get(m_pFromGraphicsCB, "fromgraphics");
     794           0 :     get(m_pFromOLECB, "fromoles");
     795           0 :     get(m_pLevelFromChapterCB, "uselevel");
     796             : 
     797           0 :     get(m_pFromCaptionsRB, "captions");
     798           0 :     get(m_pFromObjectNamesRB, "objnames");
     799             : 
     800           0 :     get(m_pCaptionSequenceFT, "categoryft");
     801           0 :     get(m_pCaptionSequenceLB, "category");
     802           0 :     get(m_pDisplayTypeFT, "displayft");
     803           0 :     get(m_pDisplayTypeLB, "display");
     804           0 :     get(m_pTOXMarksCB, "indexmarks");
     805             : 
     806           0 :     get(m_pIdxOptionsFrame, "optionsframe");
     807           0 :     get(m_pCollectSameCB, "combinesame");
     808           0 :     get(m_pUseFFCB, "useff");
     809           0 :     get(m_pUseDashCB, "usedash");
     810           0 :     get(m_pCaseSensitiveCB, "casesens");
     811           0 :     get(m_pInitialCapsCB, "initcaps");
     812           0 :     get(m_pKeyAsEntryCB, "keyasentry");
     813           0 :     get(m_pFromFileCB, "fromfile");
     814           0 :     get(m_pAutoMarkPB, "file");
     815             : 
     816           0 :     get(m_pFromObjFrame, "objectframe");
     817           0 :     get(m_pFromObjCLB, "objects");
     818             : 
     819           0 :     get(m_pAuthorityFrame, "authframe");
     820           0 :     get(m_pSequenceCB, "numberentries");
     821           0 :     get(m_pBracketLB, "brackets");
     822             : 
     823           0 :     get(m_pSortFrame, "sortframe");
     824           0 :     get(m_pLanguageLB, "lang");
     825           0 :     get(m_pSortAlgorithmLB, "keytype");
     826             : 
     827             :     //Default mode is arranged to be the tallest mode
     828             :     //of alphabetical index, lock that height in now
     829           0 :     Size aPrefSize(get_preferred_size());
     830           0 :     set_height_request(aPrefSize.Height());
     831             : 
     832           0 :     pIndexEntryWrapper = new IndexEntrySupplierWrapper();
     833             : 
     834             :     m_pLanguageLB->SetLanguageList( LANG_LIST_ALL | LANG_LIST_ONLY_KNOWN,
     835           0 :                                  false, false, false );
     836             : 
     837           0 :     sAddStyleContent = m_pAddStylesCB->GetText();
     838             : 
     839           0 :     ResStringArray& rNames = aFromNames.GetNames();
     840           0 :     for(sal_uInt32 i = 0; i < rNames.Count(); i++)
     841             :     {
     842           0 :         m_pFromObjCLB->InsertEntry(rNames.GetString(i));
     843           0 :         m_pFromObjCLB->SetEntryData( i, (void*)rNames.GetValue(i) );
     844             :     }
     845             : 
     846           0 :     SetExchangeSupport();
     847           0 :     m_pTypeLB->SetSelectHdl(LINK(this, SwTOXSelectTabPage, TOXTypeHdl));
     848             : 
     849           0 :     m_pAddStylesPB->SetClickHdl(LINK(this, SwTOXSelectTabPage, AddStylesHdl));
     850             : 
     851           0 :     PopupMenu*  pMenu = m_pAutoMarkPB->GetPopupMenu();
     852           0 :     pMenu->SetActivateHdl(LINK(this, SwTOXSelectTabPage, MenuEnableHdl));
     853           0 :     pMenu->SetSelectHdl(LINK(this, SwTOXSelectTabPage, MenuExecuteHdl));
     854             : 
     855           0 :     Link aLk =  LINK(this, SwTOXSelectTabPage, CheckBoxHdl);
     856           0 :     m_pAddStylesCB->SetClickHdl(aLk);
     857           0 :     m_pFromHeadingsCB->SetClickHdl(aLk);
     858           0 :     m_pTOXMarksCB->SetClickHdl(aLk);
     859           0 :     m_pFromFileCB->SetClickHdl(aLk);
     860           0 :     m_pCollectSameCB->SetClickHdl(aLk);
     861           0 :     m_pUseFFCB->SetClickHdl(aLk);
     862           0 :     m_pUseDashCB->SetClickHdl(aLk);
     863           0 :     m_pInitialCapsCB->SetClickHdl(aLk);
     864           0 :     m_pKeyAsEntryCB->SetClickHdl(aLk);
     865             : 
     866           0 :     Link aModifyLk = LINK(this, SwTOXSelectTabPage, ModifyHdl);
     867           0 :     m_pTitleED->SetModifyHdl(aModifyLk);
     868           0 :     m_pLevelNF->SetModifyHdl(aModifyLk);
     869           0 :     m_pSortAlgorithmLB->SetSelectHdl(aModifyLk);
     870             : 
     871           0 :     aLk =  LINK(this, SwTOXSelectTabPage, RadioButtonHdl);
     872           0 :     m_pFromCaptionsRB->SetClickHdl(aLk);
     873           0 :     m_pFromObjectNamesRB->SetClickHdl(aLk);
     874           0 :     RadioButtonHdl(m_pFromCaptionsRB);
     875             : 
     876           0 :     m_pLanguageLB->SetSelectHdl(LINK(this, SwTOXSelectTabPage, LanguageHdl));
     877           0 :     m_pTypeLB->SelectEntryPos(0);
     878           0 :     m_pTitleED->SaveValue();
     879           0 : }
     880             : 
     881           0 : SwTOXSelectTabPage::~SwTOXSelectTabPage()
     882             : {
     883           0 :     delete pIndexRes;
     884           0 :     delete pIndexEntryWrapper;
     885           0 : }
     886             : 
     887           0 : void SwTOXSelectTabPage::SetWrtShell(SwWrtShell& rSh)
     888             : {
     889           0 :     const sal_uInt16 nUserTypeCount = rSh.GetTOXTypeCount(TOX_USER);
     890           0 :     if(nUserTypeCount > 1)
     891             :     {
     892             :         //insert all new user indexes names after the standard user index
     893           0 :         sal_Int32 nPos = m_pTypeLB->GetEntryPos((void*)(sal_uInt32)TO_USER) + 1;
     894           0 :         for(sal_uInt16 nUser = 1; nUser < nUserTypeCount; nUser++)
     895             :         {
     896           0 :             nPos = m_pTypeLB->InsertEntry(rSh.GetTOXType(TOX_USER, nUser)->GetTypeName(), nPos);
     897           0 :             sal_uIntPtr nEntryData = nUser << 8;
     898           0 :             nEntryData |= TO_USER;
     899           0 :             m_pTypeLB->SetEntryData(nPos, (void*)nEntryData);
     900             :         }
     901             :     }
     902           0 : }
     903             : 
     904           0 : bool SwTOXSelectTabPage::FillItemSet( SfxItemSet* )
     905             : {
     906           0 :     return true;
     907             : }
     908             : 
     909           0 : static long lcl_TOXTypesToUserData(CurTOXType eType)
     910             : {
     911           0 :     sal_uInt16 nRet = TOX_INDEX;
     912           0 :     switch(eType.eType)
     913             :     {
     914           0 :         case TOX_INDEX       : nRet = TO_INDEX;     break;
     915             :         case TOX_USER        :
     916             :         {
     917           0 :             nRet = eType.nIndex << 8;
     918           0 :             nRet |= TO_USER;
     919             :         }
     920           0 :         break;
     921           0 :         case TOX_CONTENT     : nRet = TO_CONTENT;   break;
     922           0 :         case TOX_ILLUSTRATIONS:nRet = TO_ILLUSTRATION; break;
     923           0 :         case TOX_OBJECTS     : nRet = TO_OBJECT;    break;
     924           0 :         case TOX_TABLES      : nRet = TO_TABLE;     break;
     925           0 :         case TOX_AUTHORITIES : nRet = TO_AUTHORITIES; break;
     926           0 :         case TOX_BIBLIOGRAPHY : nRet = TO_BIBLIOGRAPHY; break;
     927           0 :         case TOX_CITATION :break;
     928             :     }
     929           0 :     return nRet;
     930             : }
     931             : 
     932           0 : void SwTOXSelectTabPage::SelectType(TOXTypes eSet)
     933             : {
     934           0 :     CurTOXType eCurType (eSet, 0);
     935             : 
     936           0 :     sal_IntPtr nData = lcl_TOXTypesToUserData(eCurType);
     937           0 :     m_pTypeLB->SelectEntryPos(m_pTypeLB->GetEntryPos((void*)nData));
     938           0 :     m_pTypeFT->Enable(false);
     939           0 :     m_pTypeLB->Enable(false);
     940           0 :     TOXTypeHdl(m_pTypeLB);
     941           0 : }
     942             : 
     943           0 : static CurTOXType lcl_UserData2TOXTypes(sal_uInt16 nData)
     944             : {
     945           0 :     CurTOXType eRet;
     946             : 
     947           0 :     switch(nData&0xff)
     948             :     {
     949           0 :         case TO_INDEX       : eRet.eType = TOX_INDEX;       break;
     950             :         case TO_USER        :
     951             :         {
     952           0 :             eRet.eType = TOX_USER;
     953           0 :             eRet.nIndex  = (nData&0xff00) >> 8;
     954             :         }
     955           0 :         break;
     956           0 :         case TO_CONTENT     : eRet.eType = TOX_CONTENT;     break;
     957           0 :         case TO_ILLUSTRATION: eRet.eType = TOX_ILLUSTRATIONS; break;
     958           0 :         case TO_OBJECT      : eRet.eType = TOX_OBJECTS;     break;
     959           0 :         case TO_TABLE       : eRet.eType = TOX_TABLES;      break;
     960           0 :         case TO_AUTHORITIES : eRet.eType = TOX_AUTHORITIES; break;
     961           0 :         case TO_BIBLIOGRAPHY : eRet.eType = TOX_BIBLIOGRAPHY; break;
     962             :         default: OSL_FAIL("what a type?");
     963             :     }
     964           0 :     return eRet;
     965             : }
     966             : 
     967           0 : void SwTOXSelectTabPage::ApplyTOXDescription()
     968             : {
     969           0 :     SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog();
     970           0 :     const CurTOXType aCurType = pTOXDlg->GetCurrentTOXType();
     971           0 :     SwTOXDescription& rDesc = pTOXDlg->GetTOXDescription(aCurType);
     972           0 :     m_pReadOnlyCB->Check(rDesc.IsReadonly());
     973           0 :     if(m_pTitleED->GetText() == m_pTitleED->GetSavedValue())
     974             :     {
     975           0 :         if(rDesc.GetTitle())
     976           0 :             m_pTitleED->SetText(*rDesc.GetTitle());
     977             :         else
     978           0 :             m_pTitleED->SetText(aEmptyOUStr);
     979           0 :         m_pTitleED->SaveValue();
     980             :     }
     981             : 
     982           0 :     m_pAreaLB->SelectEntryPos(rDesc.IsFromChapter() ? 1 : 0);
     983             : 
     984           0 :     if(aCurType.eType != TOX_INDEX)
     985           0 :         m_pLevelNF->SetValue(rDesc.GetLevel());   //content, user
     986             : 
     987           0 :     sal_uInt16 nCreateType = rDesc.GetContentOptions();
     988             : 
     989             :     //user + content
     990           0 :     bool bHasStyleNames = false;
     991             : 
     992           0 :     for( sal_uInt16 i = 0; i < MAXLEVEL; i++)
     993           0 :         if(!rDesc.GetStyleNames(i).isEmpty())
     994             :         {
     995           0 :             bHasStyleNames = true;
     996           0 :             break;
     997             :         }
     998           0 :     m_pAddStylesCB->Check(bHasStyleNames && (nCreateType & nsSwTOXElement::TOX_TEMPLATE));
     999             : 
    1000           0 :     m_pFromOLECB->     Check( 0 != (nCreateType & nsSwTOXElement::TOX_OLE) );
    1001           0 :     m_pFromTablesCB->  Check( 0 != (nCreateType & nsSwTOXElement::TOX_TABLE) );
    1002           0 :     m_pFromGraphicsCB->Check( 0 != (nCreateType & nsSwTOXElement::TOX_GRAPHIC) );
    1003           0 :     m_pFromFramesCB->  Check( 0 != (nCreateType & nsSwTOXElement::TOX_FRAME) );
    1004             : 
    1005           0 :     m_pLevelFromChapterCB->Check(rDesc.IsLevelFromChapter());
    1006             : 
    1007             :     //all but illustration and table
    1008           0 :     m_pTOXMarksCB->Check( 0 != (nCreateType & nsSwTOXElement::TOX_MARK) );
    1009             : 
    1010             :     //content
    1011           0 :     if(TOX_CONTENT == aCurType.eType)
    1012             :     {
    1013           0 :         m_pFromHeadingsCB->Check( 0 != (nCreateType & nsSwTOXElement::TOX_OUTLINELEVEL) );
    1014           0 :         m_pAddStylesCB->SetText(sAddStyleContent);
    1015           0 :         m_pAddStylesPB->Enable(m_pAddStylesCB->IsChecked());
    1016             :     }
    1017             :     //index only
    1018           0 :     else if(TOX_INDEX == aCurType.eType)
    1019             :     {
    1020           0 :         const sal_uInt16 nIndexOptions = rDesc.GetIndexOptions();
    1021           0 :         m_pCollectSameCB->     Check( 0 != (nIndexOptions & nsSwTOIOptions::TOI_SAME_ENTRY) );
    1022           0 :         m_pUseFFCB->           Check( 0 != (nIndexOptions & nsSwTOIOptions::TOI_FF) );
    1023           0 :         m_pUseDashCB->         Check( 0 != (nIndexOptions & nsSwTOIOptions::TOI_DASH) );
    1024           0 :         if(m_pUseFFCB->IsChecked())
    1025           0 :             m_pUseDashCB->Enable(false);
    1026           0 :         else if(m_pUseDashCB->IsChecked())
    1027           0 :             m_pUseFFCB->Enable(false);
    1028             : 
    1029           0 :         m_pCaseSensitiveCB->   Check( 0 != (nIndexOptions & nsSwTOIOptions::TOI_CASE_SENSITIVE) );
    1030           0 :         m_pInitialCapsCB->     Check( 0 != (nIndexOptions & nsSwTOIOptions::TOI_INITIAL_CAPS) );
    1031           0 :         m_pKeyAsEntryCB->      Check( 0 != (nIndexOptions & nsSwTOIOptions::TOI_KEY_AS_ENTRY) );
    1032             :     }
    1033           0 :     else if(TOX_ILLUSTRATIONS == aCurType.eType ||
    1034           0 :         TOX_TABLES == aCurType.eType)
    1035             :     {
    1036           0 :         m_pFromObjectNamesRB->Check(rDesc.IsCreateFromObjectNames());
    1037           0 :         m_pFromCaptionsRB->Check(!rDesc.IsCreateFromObjectNames());
    1038           0 :         m_pCaptionSequenceLB->SelectEntry(rDesc.GetSequenceName());
    1039           0 :         m_pDisplayTypeLB->SelectEntryPos( static_cast< sal_Int32 >(rDesc.GetCaptionDisplay()) );
    1040           0 :         RadioButtonHdl(m_pFromCaptionsRB);
    1041             : 
    1042             :     }
    1043           0 :     else if(TOX_OBJECTS == aCurType.eType)
    1044             :     {
    1045           0 :         long nOLEData = rDesc.GetOLEOptions();
    1046           0 :         for(sal_uLong nFromObj = 0; nFromObj < m_pFromObjCLB->GetEntryCount(); nFromObj++)
    1047             :         {
    1048           0 :             sal_IntPtr nData = (sal_IntPtr)m_pFromObjCLB->GetEntryData(nFromObj);
    1049           0 :             m_pFromObjCLB->CheckEntryPos(nFromObj, 0 != (nData & nOLEData));
    1050             :         }
    1051             :     }
    1052           0 :     else if(TOX_AUTHORITIES == aCurType.eType)
    1053             :     {
    1054           0 :         const OUString sBrackets(rDesc.GetAuthBrackets());
    1055           0 :         if(sBrackets.isEmpty() || sBrackets == "  ")
    1056           0 :             m_pBracketLB->SelectEntryPos(0);
    1057             :         else
    1058           0 :             m_pBracketLB->SelectEntry(sBrackets);
    1059           0 :         m_pSequenceCB->Check(rDesc.IsAuthSequence());
    1060             :     }
    1061           0 :     m_pAutoMarkPB->Enable(m_pFromFileCB->IsChecked());
    1062             : 
    1063           0 :     for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
    1064           0 :         aStyleArr[i] = rDesc.GetStyleNames(i);
    1065             : 
    1066           0 :     m_pLanguageLB->SelectLanguage(rDesc.GetLanguage());
    1067           0 :     LanguageHdl(0);
    1068           0 :     for( sal_Int32 nCnt = 0; nCnt < m_pSortAlgorithmLB->GetEntryCount(); ++nCnt )
    1069             :     {
    1070           0 :         const OUString* pEntryData = (const OUString*)m_pSortAlgorithmLB->GetEntryData( nCnt );
    1071             :         OSL_ENSURE(pEntryData, "no entry data available");
    1072           0 :         if( pEntryData && *pEntryData == rDesc.GetSortAlgorithm())
    1073             :         {
    1074           0 :             m_pSortAlgorithmLB->SelectEntryPos( nCnt );
    1075           0 :             break;
    1076             :         }
    1077             :     }
    1078           0 : }
    1079             : 
    1080           0 : void SwTOXSelectTabPage::FillTOXDescription()
    1081             : {
    1082           0 :     SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog();
    1083           0 :     CurTOXType aCurType = pTOXDlg->GetCurrentTOXType();
    1084           0 :     SwTOXDescription& rDesc = pTOXDlg->GetTOXDescription(aCurType);
    1085           0 :     rDesc.SetTitle(m_pTitleED->GetText());
    1086           0 :     rDesc.SetFromChapter(1 == m_pAreaLB->GetSelectEntryPos());
    1087           0 :     sal_uInt16 nContentOptions = 0;
    1088           0 :     if(m_pTOXMarksCB->IsVisible() && m_pTOXMarksCB->IsChecked())
    1089           0 :         nContentOptions |= nsSwTOXElement::TOX_MARK;
    1090             : 
    1091           0 :     sal_uInt16 nIndexOptions = rDesc.GetIndexOptions()&nsSwTOIOptions::TOI_ALPHA_DELIMITTER;
    1092           0 :     switch(rDesc.GetTOXType())
    1093             :     {
    1094             :         case TOX_CONTENT:
    1095           0 :             if(m_pFromHeadingsCB->IsChecked())
    1096           0 :                 nContentOptions |= nsSwTOXElement::TOX_OUTLINELEVEL;
    1097           0 :         break;
    1098             :         case TOX_USER:
    1099             :         {
    1100           0 :             rDesc.SetTOUName(m_pTypeLB->GetSelectEntry());
    1101             : 
    1102           0 :             if(m_pFromOLECB->IsChecked())
    1103           0 :                 nContentOptions |= nsSwTOXElement::TOX_OLE;
    1104           0 :             if(m_pFromTablesCB->IsChecked())
    1105           0 :                 nContentOptions |= nsSwTOXElement::TOX_TABLE;
    1106           0 :             if(m_pFromFramesCB->IsChecked())
    1107           0 :                 nContentOptions |= nsSwTOXElement::TOX_FRAME;
    1108           0 :             if(m_pFromGraphicsCB->IsChecked())
    1109           0 :                 nContentOptions |= nsSwTOXElement::TOX_GRAPHIC;
    1110             :         }
    1111           0 :         break;
    1112             :         case TOX_INDEX:
    1113             :         {
    1114           0 :             nContentOptions = nsSwTOXElement::TOX_MARK;
    1115             : 
    1116           0 :             if(m_pCollectSameCB->IsChecked())
    1117           0 :                 nIndexOptions |= nsSwTOIOptions::TOI_SAME_ENTRY;
    1118           0 :             if(m_pUseFFCB->IsChecked())
    1119           0 :                 nIndexOptions |= nsSwTOIOptions::TOI_FF;
    1120           0 :             if(m_pUseDashCB->IsChecked())
    1121           0 :                 nIndexOptions |= nsSwTOIOptions::TOI_DASH;
    1122           0 :             if(m_pCaseSensitiveCB->IsChecked())
    1123           0 :                 nIndexOptions |= nsSwTOIOptions::TOI_CASE_SENSITIVE;
    1124           0 :             if(m_pInitialCapsCB->IsChecked())
    1125           0 :                 nIndexOptions |= nsSwTOIOptions::TOI_INITIAL_CAPS;
    1126           0 :             if(m_pKeyAsEntryCB->IsChecked())
    1127           0 :                 nIndexOptions |= nsSwTOIOptions::TOI_KEY_AS_ENTRY;
    1128           0 :             if(m_pFromFileCB->IsChecked())
    1129           0 :                 rDesc.SetAutoMarkURL(sAutoMarkURL);
    1130             :             else
    1131           0 :                 rDesc.SetAutoMarkURL(aEmptyOUStr);
    1132             :         }
    1133           0 :         break;
    1134             :         case TOX_ILLUSTRATIONS:
    1135             :         case TOX_TABLES :
    1136           0 :             rDesc.SetCreateFromObjectNames(m_pFromObjectNamesRB->IsChecked());
    1137           0 :             rDesc.SetSequenceName(m_pCaptionSequenceLB->GetSelectEntry());
    1138           0 :             rDesc.SetCaptionDisplay((SwCaptionDisplay)m_pDisplayTypeLB->GetSelectEntryPos());
    1139           0 :         break;
    1140             :         case TOX_OBJECTS:
    1141             :         {
    1142           0 :             long nOLEData = 0;
    1143           0 :             for(sal_uLong i = 0; i < m_pFromObjCLB->GetEntryCount(); i++)
    1144             :             {
    1145           0 :                 if(m_pFromObjCLB->IsChecked(i))
    1146             :                 {
    1147           0 :                     sal_IntPtr nData = (sal_IntPtr)m_pFromObjCLB->GetEntryData(i);
    1148           0 :                     nOLEData |= nData;
    1149             :                 }
    1150             :             }
    1151           0 :             rDesc.SetOLEOptions((sal_uInt16)nOLEData);
    1152             :         }
    1153           0 :         break;
    1154             :         case TOX_AUTHORITIES:
    1155             :         case TOX_BIBLIOGRAPHY :
    1156             :         {
    1157           0 :             if(m_pBracketLB->GetSelectEntryPos())
    1158           0 :                 rDesc.SetAuthBrackets(m_pBracketLB->GetSelectEntry());
    1159             :             else
    1160           0 :                 rDesc.SetAuthBrackets(aEmptyOUStr);
    1161           0 :             rDesc.SetAuthSequence(m_pSequenceCB->IsChecked());
    1162             :         }
    1163           0 :         break;
    1164             :         case TOX_CITATION :
    1165           0 :         break;
    1166             :     }
    1167             : 
    1168           0 :     rDesc.SetLevelFromChapter(  m_pLevelFromChapterCB->IsVisible() &&
    1169           0 :                                 m_pLevelFromChapterCB->IsChecked());
    1170           0 :     if(m_pTOXMarksCB->IsChecked() && m_pTOXMarksCB->IsVisible())
    1171           0 :         nContentOptions |= nsSwTOXElement::TOX_MARK;
    1172           0 :     if(m_pFromHeadingsCB->IsChecked() && m_pFromHeadingsCB->IsVisible())
    1173           0 :         nContentOptions |= nsSwTOXElement::TOX_OUTLINELEVEL;
    1174           0 :     if(m_pAddStylesCB->IsChecked() && m_pAddStylesCB->IsVisible())
    1175           0 :         nContentOptions |= nsSwTOXElement::TOX_TEMPLATE;
    1176             : 
    1177           0 :     rDesc.SetContentOptions(nContentOptions);
    1178           0 :     rDesc.SetIndexOptions(nIndexOptions);
    1179           0 :     rDesc.SetLevel( static_cast< sal_uInt8 >(m_pLevelNF->GetValue()) );
    1180             : 
    1181           0 :     rDesc.SetReadonly(m_pReadOnlyCB->IsChecked());
    1182             : 
    1183           0 :     for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
    1184           0 :         rDesc.SetStyleNames(aStyleArr[i], i);
    1185             : 
    1186           0 :     rDesc.SetLanguage(m_pLanguageLB->GetSelectLanguage());
    1187             :     const OUString* pEntryData = (const OUString*)m_pSortAlgorithmLB->GetEntryData(
    1188           0 :                                             m_pSortAlgorithmLB->GetSelectEntryPos() );
    1189             :     OSL_ENSURE(pEntryData, "no entry data available");
    1190           0 :     if(pEntryData)
    1191           0 :         rDesc.SetSortAlgorithm(*pEntryData);
    1192           0 : }
    1193             : 
    1194           0 : void SwTOXSelectTabPage::Reset( const SfxItemSet* )
    1195             : {
    1196           0 :     SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog();
    1197           0 :     SwWrtShell& rSh = pTOXDlg->GetWrtShell();
    1198           0 :     const CurTOXType aCurType = pTOXDlg->GetCurrentTOXType();
    1199           0 :     sal_IntPtr nData = lcl_TOXTypesToUserData(aCurType);
    1200           0 :     m_pTypeLB->SelectEntryPos(m_pTypeLB->GetEntryPos((void*)nData));
    1201             : 
    1202           0 :     sAutoMarkURL = INetURLObject::decode( rSh.GetTOIAutoMarkURL(),
    1203             :                                         '%',
    1204             :                                            INetURLObject::DECODE_UNAMBIGUOUS,
    1205           0 :                                         RTL_TEXTENCODING_UTF8 );
    1206           0 :     m_pFromFileCB->Check( !sAutoMarkURL.isEmpty() );
    1207             : 
    1208           0 :     m_pCaptionSequenceLB->Clear();
    1209           0 :     const sal_uInt16 nCount = rSh.GetFldTypeCount(RES_SETEXPFLD);
    1210           0 :     for (sal_uInt16 i = 0; i < nCount; i++)
    1211             :     {
    1212           0 :         SwFieldType *pType = rSh.GetFldType( i, RES_SETEXPFLD );
    1213           0 :         if( pType->Which() == RES_SETEXPFLD &&
    1214           0 :             ((SwSetExpFieldType *) pType)->GetType() & nsSwGetSetExpType::GSE_SEQ )
    1215           0 :             m_pCaptionSequenceLB->InsertEntry(pType->GetName());
    1216             :     }
    1217             : 
    1218           0 :     if(pTOXDlg->IsTOXEditMode())
    1219             :     {
    1220           0 :         m_pTypeFT->Enable(false);
    1221           0 :         m_pTypeLB->Enable(false);
    1222             :     }
    1223             : 
    1224           0 :     if(!m_bWaitingInitialSettings)
    1225             :     {
    1226             :         // save current values into the proper TOXDescription
    1227           0 :         FillTOXDescription();
    1228             :     }
    1229           0 :     m_bWaitingInitialSettings = false;
    1230             : 
    1231           0 :     TOXTypeHdl(m_pTypeLB);
    1232           0 :     CheckBoxHdl(m_pAddStylesCB);
    1233           0 : }
    1234             : 
    1235           0 : void SwTOXSelectTabPage::ActivatePage( const SfxItemSet& )
    1236             : {
    1237             :     //nothing to do
    1238           0 : }
    1239             : 
    1240           0 : int SwTOXSelectTabPage::DeactivatePage( SfxItemSet* _pSet )
    1241             : {
    1242           0 :     if(_pSet)
    1243             :         _pSet->Put(SfxUInt16Item(FN_PARAM_TOX_TYPE,
    1244           0 :             (sal_uInt16)(sal_IntPtr)m_pTypeLB->GetEntryData( m_pTypeLB->GetSelectEntryPos() )));
    1245           0 :     FillTOXDescription();
    1246           0 :     return LEAVE_PAGE;
    1247             : }
    1248             : 
    1249           0 : SfxTabPage* SwTOXSelectTabPage::Create( vcl::Window* pParent, const SfxItemSet* rAttrSet)
    1250             : {
    1251           0 :     return new SwTOXSelectTabPage(pParent, *rAttrSet);
    1252             : }
    1253             : 
    1254           0 : IMPL_LINK(SwTOXSelectTabPage, TOXTypeHdl,   ListBox*, pBox)
    1255             : {
    1256           0 :     SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog();
    1257             :     const sal_uInt16 nType =  sal::static_int_cast< sal_uInt16 >(reinterpret_cast< sal_uIntPtr >(
    1258           0 :                                 pBox->GetEntryData( pBox->GetSelectEntryPos() )));
    1259           0 :     CurTOXType eCurType = lcl_UserData2TOXTypes(nType);
    1260           0 :     pTOXDlg->SetCurrentTOXType(eCurType);
    1261             : 
    1262           0 :     m_pAreaLB->Show( 0 != (nType & (TO_CONTENT|TO_ILLUSTRATION|TO_USER|TO_INDEX|TO_TABLE|TO_OBJECT)) );
    1263           0 :     m_pLevelFT->Show( 0 != (nType & (TO_CONTENT)) );
    1264           0 :     m_pLevelNF->Show( 0 != (nType & (TO_CONTENT)) );
    1265           0 :     m_pLevelFromChapterCB->Show( 0 != (nType & (TO_USER)) );
    1266           0 :     m_pAreaFrame->Show( 0 != (nType & (TO_CONTENT|TO_ILLUSTRATION|TO_USER|TO_INDEX|TO_TABLE|TO_OBJECT)) );
    1267             : 
    1268           0 :     m_pFromHeadingsCB->Show( 0 != (nType & (TO_CONTENT)) );
    1269           0 :     m_pAddStylesCB->Show( 0 != (nType & (TO_CONTENT|TO_USER)) );
    1270           0 :     m_pAddStylesPB->Show( 0 != (nType & (TO_CONTENT|TO_USER)) );
    1271             : 
    1272           0 :     m_pFromTablesCB->Show( 0 != (nType & (TO_USER)) );
    1273           0 :     m_pFromFramesCB->Show( 0 != (nType & (TO_USER)) );
    1274           0 :     m_pFromGraphicsCB->Show( 0 != (nType & (TO_USER)) );
    1275           0 :     m_pFromOLECB->Show( 0 != (nType & (TO_USER)) );
    1276             : 
    1277           0 :     m_pFromCaptionsRB->Show( 0 != (nType & (TO_ILLUSTRATION|TO_TABLE)) );
    1278           0 :     m_pFromObjectNamesRB->Show( 0 != (nType & (TO_ILLUSTRATION|TO_TABLE)) );
    1279             : 
    1280           0 :     m_pTOXMarksCB->Show( 0 != (nType & (TO_CONTENT|TO_USER)) );
    1281             : 
    1282           0 :     m_pCreateFrame->Show( 0 != (nType & (TO_CONTENT|TO_ILLUSTRATION|TO_USER|TO_TABLE)) );
    1283           0 :     m_pCaptionSequenceFT->Show( 0 != (nType & (TO_ILLUSTRATION|TO_TABLE)) );
    1284           0 :     m_pCaptionSequenceLB->Show( 0 != (nType & (TO_ILLUSTRATION|TO_TABLE)) );
    1285           0 :     m_pDisplayTypeFT->Show( 0 != (nType & (TO_ILLUSTRATION|TO_TABLE)) );
    1286           0 :     m_pDisplayTypeLB->Show( 0 != (nType & (TO_ILLUSTRATION|TO_TABLE)) );
    1287             : 
    1288           0 :     m_pAuthorityFrame->Show( 0 != (nType & TO_AUTHORITIES) );
    1289             : 
    1290           0 :     bool bEnableSortLanguage = 0 != (nType & (TO_INDEX|TO_AUTHORITIES));
    1291           0 :     m_pSortFrame->Show(bEnableSortLanguage);
    1292             : 
    1293           0 :     if( nType & TO_ILLUSTRATION )
    1294             :     {
    1295             :         m_pCaptionSequenceLB->SelectEntry( SwStyleNameMapper::GetUIName(
    1296           0 :                                     RES_POOLCOLL_LABEL_ABB, OUString() ));
    1297             :     }
    1298           0 :     else if( nType & TO_TABLE )
    1299             :     {
    1300             :         m_pCaptionSequenceLB->SelectEntry( SwStyleNameMapper::GetUIName(
    1301           0 :                                     RES_POOLCOLL_LABEL_TABLE, OUString() ));
    1302             :     }
    1303           0 :     else if( nType & TO_USER )
    1304             :     {
    1305           0 :         m_pAddStylesCB->SetText(sAddStyleUser);
    1306             :     }
    1307             : 
    1308           0 :     m_pIdxOptionsFrame->Show( 0 != (nType & TO_INDEX) );
    1309             : 
    1310             :     //object index
    1311           0 :     m_pFromObjFrame->Show( 0 != (nType & TO_OBJECT) );
    1312             : 
    1313             :     //set control values from the proper TOXDescription
    1314             :     {
    1315           0 :         ApplyTOXDescription();
    1316             :     }
    1317           0 :     ModifyHdl(0);
    1318           0 :     return 0;
    1319             : }
    1320             : 
    1321           0 : IMPL_LINK_NOARG(SwTOXSelectTabPage, ModifyHdl)
    1322             : {
    1323           0 :     if(!m_bWaitingInitialSettings)
    1324             :     {
    1325           0 :         FillTOXDescription();
    1326           0 :         SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog();
    1327           0 :         pTOXDlg->CreateOrUpdateExample(pTOXDlg->GetCurrentTOXType().eType, TOX_PAGE_SELECT);
    1328             :     }
    1329           0 :     return 0;
    1330             : }
    1331             : 
    1332           0 : IMPL_LINK(SwTOXSelectTabPage, CheckBoxHdl,  CheckBox*, pBox )
    1333             : {
    1334           0 :     SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog();
    1335           0 :     const CurTOXType aCurType = pTOXDlg->GetCurrentTOXType();
    1336           0 :     if(TOX_CONTENT == aCurType.eType)
    1337             :     {
    1338             :         //at least one of the three CheckBoxes must be checked
    1339           0 :         if(!m_pAddStylesCB->IsChecked() && !m_pFromHeadingsCB->IsChecked() && !m_pTOXMarksCB->IsChecked())
    1340             :         {
    1341             :             //TODO: InfoBox?
    1342           0 :             pBox->Check(true);
    1343             :         }
    1344           0 :         m_pAddStylesPB->Enable(m_pAddStylesCB->IsChecked());
    1345             :     }
    1346           0 :     if(TOX_USER == aCurType.eType)
    1347             :     {
    1348           0 :         m_pAddStylesPB->Enable(m_pAddStylesCB->IsChecked());
    1349             :     }
    1350           0 :     else if(TOX_INDEX == aCurType.eType)
    1351             :     {
    1352           0 :         m_pAutoMarkPB->Enable(m_pFromFileCB->IsChecked());
    1353           0 :         m_pUseFFCB->Enable(m_pCollectSameCB->IsChecked() && !m_pUseDashCB->IsChecked());
    1354           0 :         m_pUseDashCB->Enable(m_pCollectSameCB->IsChecked() && !m_pUseFFCB->IsChecked());
    1355           0 :         m_pCaseSensitiveCB->Enable(m_pCollectSameCB->IsChecked());
    1356             :     }
    1357           0 :     ModifyHdl(0);
    1358           0 :     return 0;
    1359             : };
    1360             : 
    1361           0 : IMPL_LINK_NOARG(SwTOXSelectTabPage, RadioButtonHdl)
    1362             : {
    1363           0 :     bool bEnable = m_pFromCaptionsRB->IsChecked();
    1364           0 :     m_pCaptionSequenceFT->Enable(bEnable);
    1365           0 :     m_pCaptionSequenceLB->Enable(bEnable);
    1366           0 :     m_pDisplayTypeFT->Enable(bEnable);
    1367           0 :     m_pDisplayTypeLB->Enable(bEnable);
    1368           0 :     ModifyHdl(0);
    1369           0 :     return 0;
    1370             : }
    1371             : 
    1372           0 : IMPL_LINK(SwTOXSelectTabPage, LanguageHdl, ListBox*, pBox)
    1373             : {
    1374           0 :     lang::Locale aLcl( LanguageTag( m_pLanguageLB->GetSelectLanguage() ).getLocale() );
    1375           0 :     Sequence< OUString > aSeq = pIndexEntryWrapper->GetAlgorithmList( aLcl );
    1376             : 
    1377           0 :     if( !pIndexRes )
    1378           0 :         pIndexRes = new IndexEntryResource();
    1379             : 
    1380           0 :     OUString sOldString;
    1381             :     void* pUserData;
    1382           0 :     if( 0 != (pUserData = m_pSortAlgorithmLB->GetEntryData( m_pSortAlgorithmLB->GetSelectEntryPos())) )
    1383           0 :         sOldString = *(OUString*)pUserData;
    1384             :     void* pDel;
    1385           0 :     sal_Int32 nEnd = m_pSortAlgorithmLB->GetEntryCount();
    1386           0 :     for( sal_Int32 n = 0; n < nEnd; ++n )
    1387           0 :         if( 0 != ( pDel = m_pSortAlgorithmLB->GetEntryData( n )) )
    1388           0 :             delete (OUString*)pDel;
    1389           0 :     m_pSortAlgorithmLB->Clear();
    1390             : 
    1391           0 :     nEnd = aSeq.getLength();
    1392           0 :     for( sal_Int32 nCnt = 0; nCnt < nEnd; ++nCnt )
    1393             :     {
    1394           0 :         const OUString sAlg(aSeq[ nCnt ]);
    1395           0 :         const OUString sUINm = pIndexRes->GetTranslation( sAlg );
    1396           0 :         sal_Int32 nInsPos = m_pSortAlgorithmLB->InsertEntry( sUINm );
    1397           0 :         m_pSortAlgorithmLB->SetEntryData( nInsPos, new OUString( sAlg ));
    1398           0 :         if( sAlg == sOldString )
    1399           0 :             m_pSortAlgorithmLB->SelectEntryPos( nInsPos );
    1400           0 :     }
    1401             : 
    1402           0 :     if( LISTBOX_ENTRY_NOTFOUND == m_pSortAlgorithmLB->GetSelectEntryPos() )
    1403           0 :         m_pSortAlgorithmLB->SelectEntryPos( 0 );
    1404             : 
    1405           0 :     if(pBox)
    1406           0 :         ModifyHdl(0);
    1407           0 :     return 0;
    1408             : };
    1409             : 
    1410           0 : IMPL_LINK(SwTOXSelectTabPage, AddStylesHdl, PushButton*, pButton)
    1411             : {
    1412             :     boost::scoped_ptr<SwAddStylesDlg_Impl> pDlg(new SwAddStylesDlg_Impl(pButton,
    1413           0 :         ((SwMultiTOXTabDialog*)GetTabDialog())->GetWrtShell(),
    1414           0 :         aStyleArr));
    1415           0 :     pDlg->Execute();
    1416           0 :     pDlg.reset();
    1417           0 :     ModifyHdl(0);
    1418           0 :     return 0;
    1419             : }
    1420             : 
    1421           0 : IMPL_LINK(SwTOXSelectTabPage, MenuEnableHdl, Menu*, pMenu)
    1422             : {
    1423           0 :     pMenu->EnableItem("edit", !sAutoMarkURL.isEmpty());
    1424           0 :     return 0;
    1425             : }
    1426             : 
    1427           0 : IMPL_LINK(SwTOXSelectTabPage, MenuExecuteHdl, Menu*, pMenu)
    1428             : {
    1429           0 :     const OUString sSaveAutoMarkURL = sAutoMarkURL;
    1430           0 :     OString sIdent(pMenu->GetCurItemIdent());
    1431             : 
    1432           0 :     if (sIdent == "open")
    1433             :     {
    1434           0 :         sAutoMarkURL = lcl_CreateAutoMarkFileDlg(
    1435           0 :                                 sAutoMarkURL, sAutoMarkType, true);
    1436             :     }
    1437           0 :     else if ((sIdent == "new") || (sIdent == "edit"))
    1438             :     {
    1439           0 :         bool bNew = (sIdent == "new");
    1440           0 :         if (bNew)
    1441             :         {
    1442           0 :             sAutoMarkURL = lcl_CreateAutoMarkFileDlg(
    1443           0 :                                     sAutoMarkURL, sAutoMarkType, false);
    1444           0 :             if( sAutoMarkURL.isEmpty() )
    1445           0 :                 return 0;
    1446             :         }
    1447             : 
    1448             :         boost::scoped_ptr<SwAutoMarkDlg_Impl> pAutoMarkDlg(new SwAutoMarkDlg_Impl(
    1449           0 :                 m_pAutoMarkPB, sAutoMarkURL, bNew ));
    1450             : 
    1451           0 :         if( RET_OK != pAutoMarkDlg->Execute() && bNew )
    1452           0 :             sAutoMarkURL = sSaveAutoMarkURL;
    1453             :     }
    1454           0 :     return 0;
    1455             : }
    1456             : 
    1457           0 : class SwTOXEdit : public Edit
    1458             : {
    1459             :     SwFormToken aFormToken;
    1460             :     Link        aPrevNextControlLink;
    1461             :     bool     bNextControl;
    1462             :     SwTokenWindow* m_pParent;
    1463             : public:
    1464           0 :     SwTOXEdit( vcl::Window* pParent, SwTokenWindow* pTokenWin,
    1465             :                 const SwFormToken& aToken)
    1466             :         : Edit( pParent, WB_BORDER|WB_TABSTOP|WB_CENTER),
    1467             :         aFormToken(aToken),
    1468             :         bNextControl(false),
    1469           0 :         m_pParent( pTokenWin )
    1470             :     {
    1471           0 :     }
    1472             : 
    1473             :     virtual void    KeyInput( const KeyEvent& rKEvt ) SAL_OVERRIDE;
    1474             :     virtual void    RequestHelp( const HelpEvent& rHEvt ) SAL_OVERRIDE;
    1475             : 
    1476           0 :     bool    IsNextControl() const {return bNextControl;}
    1477           0 :     void SetPrevNextLink( const Link& rLink )   {aPrevNextControlLink = rLink;}
    1478             : 
    1479           0 :     const SwFormToken&  GetFormToken()
    1480             :         {
    1481           0 :             aFormToken.sText = GetText();
    1482           0 :             return aFormToken;
    1483             :         }
    1484             : 
    1485           0 :     void    SetCharStyleName(const OUString& rSet, sal_uInt16 nPoolId)
    1486             :         {
    1487           0 :             aFormToken.sCharStyleName = rSet;
    1488           0 :             aFormToken.nPoolId = nPoolId;
    1489           0 :         }
    1490             : 
    1491             :     void    AdjustSize();
    1492             : };
    1493             : 
    1494           0 : void SwTOXEdit::RequestHelp( const HelpEvent& rHEvt )
    1495             : {
    1496           0 :     if(!m_pParent->CreateQuickHelp(this, aFormToken, rHEvt))
    1497           0 :         Edit::RequestHelp(rHEvt);
    1498           0 : }
    1499             : 
    1500           0 : void SwTOXEdit::KeyInput( const KeyEvent& rKEvt )
    1501             : {
    1502           0 :     const Selection& rSel = GetSelection();
    1503           0 :     const sal_Int32 nTextLen = GetText().getLength();
    1504           0 :     if((rSel.A() == rSel.B() &&
    1505           0 :         !rSel.A()) || rSel.A() == nTextLen )
    1506             :     {
    1507           0 :         bool bCall = false;
    1508           0 :         vcl::KeyCode aCode = rKEvt.GetKeyCode();
    1509           0 :         if(aCode.GetCode() == KEY_RIGHT && rSel.A() == nTextLen)
    1510             :         {
    1511           0 :             bNextControl = true;
    1512           0 :             bCall = true;
    1513             :         }
    1514           0 :         else if(aCode.GetCode() == KEY_LEFT && !rSel.A() )
    1515             :         {
    1516           0 :             bNextControl = false;
    1517           0 :             bCall = true;
    1518             :         }
    1519           0 :         else if ( (aCode.GetCode() == KEY_F3) && aCode.IsShift() && !aCode.IsMod1() && !aCode.IsMod2() )
    1520             :         {
    1521           0 :             if ( m_pParent )
    1522             :             {
    1523           0 :                 m_pParent->SetFocus2theAllBtn();
    1524             :             }
    1525             :         }
    1526           0 :         if(bCall && aPrevNextControlLink.IsSet())
    1527           0 :             aPrevNextControlLink.Call(this);
    1528             : 
    1529             :     }
    1530           0 :     Edit::KeyInput(rKEvt);
    1531           0 : }
    1532             : 
    1533           0 : void SwTOXEdit::AdjustSize()
    1534             : {
    1535           0 :      Size aSize(GetSizePixel());
    1536           0 :      Size aTextSize(GetTextWidth(GetText()), GetTextHeight());
    1537           0 :     aTextSize = LogicToPixel(aTextSize);
    1538           0 :     aSize.Width() = aTextSize.Width() + EDIT_MINWIDTH;
    1539           0 :     SetSizePixel(aSize);
    1540           0 : }
    1541             : 
    1542           0 : class SwTOXButton : public PushButton
    1543             : {
    1544             :     SwFormToken aFormToken;
    1545             :     Link        aPrevNextControlLink;
    1546             :     bool        bNextControl;
    1547             :     SwTokenWindow* m_pParent;
    1548             : public:
    1549           0 :     SwTOXButton( vcl::Window* pParent, SwTokenWindow* pTokenWin,
    1550             :                 const SwFormToken& rToken)
    1551             :         : PushButton(pParent, WB_BORDER|WB_TABSTOP),
    1552             :         aFormToken(rToken),
    1553             :         bNextControl(false),
    1554           0 :         m_pParent(pTokenWin)
    1555             :     {
    1556           0 :     }
    1557             : 
    1558             :     virtual void KeyInput( const KeyEvent& rKEvt ) SAL_OVERRIDE;
    1559             :     virtual void RequestHelp( const HelpEvent& rHEvt ) SAL_OVERRIDE;
    1560             : 
    1561           0 :     bool IsNextControl() const          {return bNextControl;}
    1562           0 :     void SetPrevNextLink(const Link& rLink) {aPrevNextControlLink = rLink;}
    1563           0 :     const SwFormToken& GetFormToken() const {return aFormToken;}
    1564             : 
    1565           0 :     void SetCharStyleName(const OUString& rSet, sal_uInt16 nPoolId)
    1566             :         {
    1567           0 :             aFormToken.sCharStyleName = rSet;
    1568           0 :             aFormToken.nPoolId = nPoolId;
    1569           0 :         }
    1570             : 
    1571           0 :     void SetTabPosition(SwTwips nSet)
    1572           0 :         { aFormToken.nTabStopPosition = nSet; }
    1573             : 
    1574           0 :     void SetFillChar( sal_Unicode cSet )
    1575           0 :         { aFormToken.cTabFillChar = cSet; }
    1576             : 
    1577           0 :     void SetTabAlign(SvxTabAdjust eAlign)
    1578           0 :          {  aFormToken.eTabAlign = eAlign;}
    1579             : 
    1580             : //---> i89791
    1581             :     //used for entry number format, in TOC only
    1582             :     //needed for different UI dialog position
    1583           0 :     void SetEntryNumberFormat(sal_uInt16 nSet) {
    1584           0 :         switch(nSet)
    1585             :         {
    1586             :         default:
    1587             :         case 0:
    1588           0 :             aFormToken.nChapterFormat = CF_NUMBER;
    1589           0 :             break;
    1590             :         case 1:
    1591           0 :             aFormToken.nChapterFormat = CF_NUM_NOPREPST_TITLE;
    1592           0 :             break;
    1593             :         }
    1594           0 :     }
    1595             : 
    1596           0 :     void SetChapterInfo(sal_uInt16 nSet) {
    1597           0 :         switch(nSet)
    1598             :         {
    1599             :         default:
    1600             :         case 0:
    1601           0 :             aFormToken.nChapterFormat = CF_NUM_NOPREPST_TITLE;
    1602           0 :             break;
    1603             :         case 1:
    1604           0 :             aFormToken.nChapterFormat = CF_TITLE;
    1605           0 :             break;
    1606             :         case 2:
    1607           0 :             aFormToken.nChapterFormat = CF_NUMBER_NOPREPST;
    1608           0 :             break;
    1609             :         }
    1610           0 :     }
    1611             : 
    1612           0 :     void SetOutlineLevel( sal_uInt16 nSet ) { aFormToken.nOutlineLevel = nSet;}//i53420
    1613             : 
    1614           0 :     void SetLinkEnd()
    1615             :         {
    1616             :             OSL_ENSURE(TOKEN_LINK_START == aFormToken.eTokenType,
    1617             :                                     "call SetLinkEnd for link start only!");
    1618           0 :             aFormToken.eTokenType = TOKEN_LINK_END;
    1619           0 :             aFormToken.sText = SwForm::GetFormLinkEnd();
    1620           0 :             SetText(aFormToken.sText);
    1621           0 :         }
    1622           0 :     void SetLinkStart()
    1623             :         {
    1624             :             OSL_ENSURE(TOKEN_LINK_END == aFormToken.eTokenType,
    1625             :                                     "call SetLinkStart for link start only!");
    1626           0 :             aFormToken.eTokenType = TOKEN_LINK_START;
    1627           0 :             aFormToken.sText = SwForm::GetFormLinkStt();
    1628           0 :             SetText(aFormToken.sText);
    1629           0 :         }
    1630             : };
    1631             : 
    1632           0 : void SwTOXButton::KeyInput( const KeyEvent& rKEvt )
    1633             : {
    1634           0 :     bool bCall = false;
    1635           0 :     vcl::KeyCode aCode = rKEvt.GetKeyCode();
    1636           0 :     if(aCode.GetCode() == KEY_RIGHT)
    1637             :     {
    1638           0 :         bNextControl = true;
    1639           0 :         bCall = true;
    1640             :     }
    1641           0 :     else if(aCode.GetCode() == KEY_LEFT  )
    1642             :     {
    1643           0 :         bNextControl = false;
    1644           0 :         bCall = true;
    1645             :     }
    1646           0 :     else if(aCode.GetCode() == KEY_DELETE)
    1647             :     {
    1648           0 :         m_pParent->RemoveControl(this, true);
    1649             :         //this is invalid here
    1650           0 :         return;
    1651             :     }
    1652           0 :     else if ( (aCode.GetCode() == KEY_F3) && aCode.IsShift() && !aCode.IsMod1() && !aCode.IsMod2() )
    1653             :     {
    1654           0 :         if ( m_pParent )
    1655             :         {
    1656           0 :             m_pParent->SetFocus2theAllBtn();
    1657             :         }
    1658             :     }
    1659           0 :     if(bCall && aPrevNextControlLink.IsSet())
    1660           0 :             aPrevNextControlLink.Call(this);
    1661             :     else
    1662           0 :         PushButton::KeyInput(rKEvt);
    1663             : }
    1664             : 
    1665           0 : void SwTOXButton::RequestHelp( const HelpEvent& rHEvt )
    1666             : {
    1667           0 :     if(!m_pParent->CreateQuickHelp(this, aFormToken, rHEvt))
    1668           0 :         Button::RequestHelp(rHEvt);
    1669           0 : }
    1670             : 
    1671           0 : SwIdxTreeListBox::SwIdxTreeListBox(vcl::Window* pPar, WinBits nStyle)
    1672             :     : SvTreeListBox(pPar, nStyle)
    1673           0 :     , pParent(NULL)
    1674             : {
    1675           0 : }
    1676             : 
    1677           0 : extern "C" SAL_DLLPUBLIC_EXPORT vcl::Window* SAL_CALL makeSwIdxTreeListBox(vcl::Window *pParent, VclBuilder::stringmap &rMap)
    1678             : {
    1679           0 :     WinBits nWinStyle = WB_TABSTOP;
    1680           0 :     OString sBorder = VclBuilder::extractCustomProperty(rMap);
    1681           0 :     if (!sBorder.isEmpty())
    1682           0 :         nWinStyle |= WB_BORDER;
    1683           0 :     return new SwIdxTreeListBox(pParent, nWinStyle);
    1684             : }
    1685             : 
    1686           0 : void SwIdxTreeListBox::RequestHelp( const HelpEvent& rHEvt )
    1687             : {
    1688           0 :     if( rHEvt.GetMode() & HELPMODE_QUICK )
    1689             :     {
    1690           0 :      Point aPos( ScreenToOutputPixel( rHEvt.GetMousePosPixel() ));
    1691           0 :         SvTreeListEntry* pEntry = GetEntry( aPos );
    1692           0 :         if( pEntry )
    1693             :         {
    1694           0 :             sal_uInt16 nLevel = static_cast< sal_uInt16 >(GetModel()->GetAbsPos(pEntry));
    1695           0 :             OUString sEntry = pParent->GetLevelHelp(++nLevel);
    1696           0 :             if (comphelper::string::equals(sEntry, '*'))
    1697           0 :                 sEntry = GetEntryText(pEntry);
    1698           0 :             if(!sEntry.isEmpty())
    1699             :             {
    1700             :                 SvLBoxTab* pTab;
    1701           0 :                 SvLBoxItem* pItem = GetItem( pEntry, aPos.X(), &pTab );
    1702           0 :                 if (pItem && SV_ITEM_ID_LBOXSTRING == pItem->GetType())
    1703             :                 {
    1704           0 :                     aPos = GetEntryPosition( pEntry );
    1705             : 
    1706           0 :                     aPos.X() = GetTabPos( pEntry, pTab );
    1707           0 :                  Size aSize( pItem->GetSize( this, pEntry ) );
    1708             : 
    1709           0 :                     if((aPos.X() + aSize.Width()) > GetSizePixel().Width())
    1710           0 :                         aSize.Width() = GetSizePixel().Width() - aPos.X();
    1711             : 
    1712           0 :                     aPos = OutputToScreenPixel(aPos);
    1713           0 :                      Rectangle aItemRect( aPos, aSize );
    1714             :                     Help::ShowQuickHelp( this, aItemRect, sEntry,
    1715           0 :                             QUICKHELP_LEFT|QUICKHELP_VCENTER );
    1716             :                 }
    1717           0 :             }
    1718             :         }
    1719             :     }
    1720             :     else
    1721           0 :         SvTreeListBox::RequestHelp(rHEvt);
    1722           0 : }
    1723             : 
    1724           0 : SwTOXEntryTabPage::SwTOXEntryTabPage(vcl::Window* pParent, const SfxItemSet& rAttrSet)
    1725             :     : SfxTabPage(pParent, "TocEntriesPage",
    1726             :         "modules/swriter/ui/tocentriespage.ui", &rAttrSet)
    1727             :     , sDelimStr(SW_RESSTR(STR_DELIM))
    1728             :     , sNoCharStyle(SW_RESSTR(STR_NO_CHAR_STYLE))
    1729             :     , sNoCharSortKey(SW_RESSTR(STR_NOSORTKEY))
    1730             :     , m_pCurrentForm(0)
    1731           0 :     , bInLevelHdl(false)
    1732             : {
    1733           0 :     get(m_pLevelFT, "levelft");
    1734           0 :     sAuthTypeStr = get<FixedText>("typeft")->GetText();
    1735           0 :     get(m_pLevelLB, "level");
    1736           0 :     m_pLevelLB->SetTabPage(this);
    1737           0 :     get(m_pAllLevelsPB, "all");
    1738           0 :     get(m_pEntryNoPB, "chapterno");
    1739           0 :     get(m_pEntryPB, "entrytext");
    1740           0 :     get(m_pTabPB, "tabstop");
    1741           0 :     get(m_pChapterInfoPB, "chapterinfo");
    1742           0 :     get(m_pPageNoPB, "pageno");
    1743           0 :     get(m_pHyperLinkPB, "hyperlink");
    1744             : 
    1745           0 :     get(m_pAuthFieldsLB, "authfield");
    1746           0 :     m_pAuthFieldsLB->SetStyle(m_pAuthFieldsLB->GetStyle() | WB_SORT);
    1747           0 :     get(m_pAuthInsertPB, "insert");
    1748           0 :     get(m_pAuthRemovePB, "remove");
    1749             : 
    1750           0 :     get(m_pCharStyleLB, "charstyle");
    1751           0 :     get(m_pEditStylePB, "edit");
    1752             : 
    1753           0 :     get(m_pChapterEntryFT, "chapterentryft");
    1754           0 :     get(m_pChapterEntryLB, "chapterentry");
    1755             : 
    1756           0 :     get(m_pNumberFormatFT, "numberformatft");
    1757           0 :     get(m_pNumberFormatLB, "numberformat");
    1758             : 
    1759           0 :     get(m_pEntryOutlineLevelFT, "entryoutlinelevelft");
    1760           0 :     get(m_pEntryOutlineLevelNF, "entryoutlinelevel");
    1761             : 
    1762           0 :     get(m_pFillCharFT, "fillcharft");
    1763           0 :     get(m_pFillCharCB, "fillchar");
    1764             : 
    1765           0 :     get(m_pTabPosFT, "tabstopposft");
    1766           0 :     get(m_pTabPosMF, "tabstoppos");
    1767           0 :     get(m_pAutoRightCB, "alignright");
    1768             : 
    1769           0 :     get(m_pFormatFrame, "formatframe");
    1770           0 :     get(m_pRelToStyleCB, "reltostyle");
    1771           0 :     get(m_pMainEntryStyleFT, "mainstyleft");
    1772           0 :     get(m_pMainEntryStyleLB, "mainstyle");
    1773           0 :     get(m_pAlphaDelimCB, "alphadelim");
    1774           0 :     get(m_pCommaSeparatedCB, "commasep");
    1775             : 
    1776           0 :     get(m_pSortingFrame, "sortingframe");
    1777           0 :     get(m_pSortDocPosRB, "sortpos");
    1778           0 :     get(m_pSortContentRB, "sortcontents");
    1779             : 
    1780           0 :     get(m_pSortKeyFrame, "sortkeyframe");
    1781           0 :     get(m_pFirstKeyLB, "key1lb");
    1782           0 :     get(m_pSecondKeyLB, "key2lb");
    1783           0 :     get(m_pThirdKeyLB, "key3lb");
    1784           0 :     get(m_pFirstSortUpRB, "up1cb");
    1785           0 :     get(m_pSecondSortUpRB, "up2cb");
    1786           0 :     get(m_pThirdSortUpRB, "up3cb");
    1787           0 :     get(m_pFirstSortDownRB, "down1cb");
    1788           0 :     get(m_pSecondSortDownRB, "down2cb");
    1789           0 :     get(m_pThirdSortDownRB, "down3cb");
    1790             : 
    1791           0 :     get(m_pTokenWIN, "token");
    1792           0 :     m_pTokenWIN->SetTabPage(this);
    1793             : 
    1794           0 :     sLevelStr = m_pLevelFT->GetText();
    1795           0 :     m_pLevelLB->SetStyle( m_pLevelLB->GetStyle() | WB_HSCROLL );
    1796           0 :     m_pLevelLB->SetSpaceBetweenEntries(0);
    1797           0 :     m_pLevelLB->SetSelectionMode( SINGLE_SELECTION );
    1798           0 :     m_pLevelLB->SetHighlightRange();   // select full width
    1799           0 :     m_pLevelLB->Show();
    1800             : 
    1801           0 :     aLastTOXType.eType = (TOXTypes)USHRT_MAX;
    1802           0 :     aLastTOXType.nIndex = 0;
    1803             : 
    1804           0 :     SetExchangeSupport();
    1805           0 :     m_pEntryNoPB->SetClickHdl(LINK(this, SwTOXEntryTabPage, InsertTokenHdl));
    1806           0 :     m_pEntryPB->SetClickHdl(LINK(this, SwTOXEntryTabPage, InsertTokenHdl));
    1807           0 :     m_pChapterInfoPB->SetClickHdl(LINK(this, SwTOXEntryTabPage, InsertTokenHdl));
    1808           0 :     m_pPageNoPB->SetClickHdl(LINK(this, SwTOXEntryTabPage, InsertTokenHdl));
    1809           0 :     m_pTabPB->SetClickHdl(LINK(this, SwTOXEntryTabPage, InsertTokenHdl));
    1810           0 :     m_pHyperLinkPB->SetClickHdl(LINK(this, SwTOXEntryTabPage, InsertTokenHdl));
    1811           0 :     m_pEditStylePB->SetClickHdl(LINK(this, SwTOXEntryTabPage, EditStyleHdl));
    1812           0 :     m_pLevelLB->SetSelectHdl(LINK(this, SwTOXEntryTabPage, LevelHdl));
    1813           0 :     m_pTokenWIN->SetButtonSelectedHdl(LINK(this, SwTOXEntryTabPage, TokenSelectedHdl));
    1814           0 :     m_pTokenWIN->SetModifyHdl(LINK(this, SwTOXEntryTabPage, ModifyHdl));
    1815           0 :     m_pCharStyleLB->SetSelectHdl(LINK(this, SwTOXEntryTabPage, StyleSelectHdl));
    1816           0 :     m_pCharStyleLB->InsertEntry(sNoCharStyle);
    1817           0 :     m_pChapterEntryLB->SetSelectHdl(LINK(this, SwTOXEntryTabPage, ChapterInfoHdl));
    1818           0 :     m_pEntryOutlineLevelNF->SetModifyHdl(LINK(this, SwTOXEntryTabPage, ChapterInfoOutlineHdl));
    1819           0 :     m_pNumberFormatLB->SetSelectHdl(LINK(this, SwTOXEntryTabPage, NumberFormatHdl));
    1820             : 
    1821           0 :     m_pTabPosMF->SetModifyHdl(LINK(this, SwTOXEntryTabPage, TabPosHdl));
    1822           0 :     m_pFillCharCB->SetModifyHdl(LINK(this, SwTOXEntryTabPage, FillCharHdl));
    1823           0 :     m_pAutoRightCB->SetClickHdl(LINK(this, SwTOXEntryTabPage, AutoRightHdl));
    1824           0 :     m_pAuthInsertPB->SetClickHdl(LINK(this, SwTOXEntryTabPage, RemoveInsertAuthHdl));
    1825           0 :     m_pAuthRemovePB->SetClickHdl(LINK(this, SwTOXEntryTabPage, RemoveInsertAuthHdl));
    1826           0 :     m_pSortDocPosRB->SetClickHdl(LINK(this, SwTOXEntryTabPage, SortKeyHdl));
    1827           0 :     m_pSortContentRB->SetClickHdl(LINK(this, SwTOXEntryTabPage, SortKeyHdl));
    1828           0 :     m_pAllLevelsPB->SetClickHdl(LINK(this, SwTOXEntryTabPage, AllLevelsHdl));
    1829             : 
    1830           0 :     m_pAlphaDelimCB->SetClickHdl(LINK(this, SwTOXEntryTabPage, ModifyHdl));
    1831           0 :     m_pCommaSeparatedCB->SetClickHdl(LINK(this, SwTOXEntryTabPage, ModifyHdl));
    1832           0 :     m_pRelToStyleCB->SetClickHdl(LINK(this, SwTOXEntryTabPage, ModifyHdl));
    1833             : 
    1834           0 :     FieldUnit aMetric = ::GetDfltMetric(false);
    1835           0 :     SetMetric(*m_pTabPosMF, aMetric);
    1836             : 
    1837           0 :     m_pSortDocPosRB->Check();
    1838             : 
    1839           0 :     m_pFillCharCB->SetMaxTextLen(1);
    1840           0 :     m_pFillCharCB->InsertEntry(OUString(' '));
    1841           0 :     m_pFillCharCB->InsertEntry(OUString('.'));
    1842           0 :     m_pFillCharCB->InsertEntry(OUString('-'));
    1843           0 :     m_pFillCharCB->InsertEntry(OUString('_'));
    1844             : 
    1845           0 :     m_pEditStylePB->Enable(false);
    1846             : 
    1847             :     //fill the types in
    1848           0 :     for (sal_uInt16 i = 0; i < AUTH_FIELD_END; ++i)
    1849             :     {
    1850           0 :         sal_Int32 nPos = m_pAuthFieldsLB->InsertEntry(SW_RESSTR(STR_AUTH_FIELD_START + i));
    1851           0 :         m_pAuthFieldsLB->SetEntryData(nPos, reinterpret_cast< void * >(sal::static_int_cast< sal_uIntPtr >(i)));
    1852             :     }
    1853           0 :     sal_Int32 nPos = m_pFirstKeyLB->InsertEntry(sNoCharSortKey);
    1854           0 :     m_pFirstKeyLB->SetEntryData(nPos, reinterpret_cast< void * >(sal::static_int_cast< sal_uIntPtr >(USHRT_MAX)));
    1855           0 :     nPos = m_pSecondKeyLB->InsertEntry(sNoCharSortKey);
    1856           0 :     m_pSecondKeyLB->SetEntryData(nPos, reinterpret_cast< void * >(sal::static_int_cast< sal_uIntPtr >(USHRT_MAX)));
    1857           0 :     nPos = m_pThirdKeyLB->InsertEntry(sNoCharSortKey);
    1858           0 :     m_pThirdKeyLB->SetEntryData(nPos, reinterpret_cast< void * >(sal::static_int_cast< sal_uIntPtr >(USHRT_MAX)));
    1859             : 
    1860           0 :     for (sal_uInt16 i = 0; i < AUTH_FIELD_END; ++i)
    1861             :     {
    1862           0 :         const OUString sTmp(m_pAuthFieldsLB->GetEntry(i));
    1863           0 :         void* pEntryData = m_pAuthFieldsLB->GetEntryData(i);
    1864           0 :         nPos = m_pFirstKeyLB->InsertEntry(sTmp);
    1865           0 :         m_pFirstKeyLB->SetEntryData(nPos, pEntryData);
    1866           0 :         nPos = m_pSecondKeyLB->InsertEntry(sTmp);
    1867           0 :         m_pSecondKeyLB->SetEntryData(nPos, pEntryData);
    1868           0 :         nPos = m_pThirdKeyLB->InsertEntry(sTmp);
    1869           0 :         m_pThirdKeyLB->SetEntryData(nPos, pEntryData);
    1870           0 :     }
    1871           0 :     m_pFirstKeyLB->SelectEntryPos(0);
    1872           0 :     m_pSecondKeyLB->SelectEntryPos(0);
    1873           0 :     m_pThirdKeyLB->SelectEntryPos(0);
    1874           0 : }
    1875             : // pVoid is used as signal to change all levels of the example
    1876           0 : IMPL_LINK(SwTOXEntryTabPage, ModifyHdl, void*, pVoid)
    1877             : {
    1878           0 :     UpdateDescriptor();
    1879             : 
    1880           0 :     SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog();
    1881           0 :     if (pTOXDlg)
    1882             :     {
    1883           0 :         sal_uInt16 nCurLevel = static_cast< sal_uInt16 >(m_pLevelLB->GetModel()->GetAbsPos(m_pLevelLB->FirstSelected()) + 1);
    1884           0 :         if(aLastTOXType.eType == TOX_CONTENT && pVoid)
    1885           0 :             nCurLevel = USHRT_MAX;
    1886             :         pTOXDlg->CreateOrUpdateExample(
    1887           0 :             pTOXDlg->GetCurrentTOXType().eType, TOX_PAGE_ENTRY, nCurLevel);
    1888             :     }
    1889           0 :     return 0;
    1890             : }
    1891             : 
    1892           0 : SwTOXEntryTabPage::~SwTOXEntryTabPage()
    1893             : {
    1894           0 : }
    1895             : 
    1896           0 : bool SwTOXEntryTabPage::FillItemSet( SfxItemSet* )
    1897             : {
    1898             :     // nothing to do
    1899           0 :     return true;
    1900             : }
    1901             : 
    1902           0 : void SwTOXEntryTabPage::Reset( const SfxItemSet* )
    1903             : {
    1904           0 :     SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog();
    1905           0 :     const CurTOXType aCurType = pTOXDlg->GetCurrentTOXType();
    1906           0 :     m_pCurrentForm = pTOXDlg->GetForm(aCurType);
    1907           0 :     if(TOX_INDEX == aCurType.eType)
    1908             :     {
    1909           0 :         SwTOXDescription& rDesc = pTOXDlg->GetTOXDescription(aCurType);
    1910           0 :         const OUString sMainEntryCharStyle = rDesc.GetMainEntryCharStyle();
    1911           0 :         if(!sMainEntryCharStyle.isEmpty())
    1912             :         {
    1913           0 :             if( LISTBOX_ENTRY_NOTFOUND ==
    1914           0 :                     m_pMainEntryStyleLB->GetEntryPos(sMainEntryCharStyle))
    1915             :                 m_pMainEntryStyleLB->InsertEntry(
    1916           0 :                         sMainEntryCharStyle);
    1917           0 :             m_pMainEntryStyleLB->SelectEntry(sMainEntryCharStyle);
    1918             :         }
    1919             :         else
    1920           0 :             m_pMainEntryStyleLB->SelectEntry(sNoCharStyle);
    1921           0 :         m_pAlphaDelimCB->Check( 0 != (rDesc.GetIndexOptions() & nsSwTOIOptions::TOI_ALPHA_DELIMITTER) );
    1922             :     }
    1923           0 :     m_pRelToStyleCB->Check(m_pCurrentForm->IsRelTabPos());
    1924           0 :     m_pCommaSeparatedCB->Check(m_pCurrentForm->IsCommaSeparated());
    1925           0 : }
    1926             : 
    1927           0 : void SwTOXEntryTabPage::ActivatePage( const SfxItemSet& /*rSet*/)
    1928             : {
    1929           0 :     SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog();
    1930           0 :     const CurTOXType aCurType = pTOXDlg->GetCurrentTOXType();
    1931             : 
    1932           0 :     m_pCurrentForm = pTOXDlg->GetForm(aCurType);
    1933           0 :     if( !( aLastTOXType == aCurType ))
    1934             :     {
    1935           0 :         bool bToxIsAuthorities = TOX_AUTHORITIES == aCurType.eType;
    1936           0 :         bool bToxIsIndex =       TOX_INDEX == aCurType.eType;
    1937           0 :         bool bToxIsContent =     TOX_CONTENT == aCurType.eType;
    1938           0 :         bool bToxIsSequence =    TOX_ILLUSTRATIONS == aCurType.eType;
    1939             : 
    1940           0 :         m_pLevelLB->Clear();
    1941           0 :         for(sal_uInt16 i = 1; i < m_pCurrentForm->GetFormMax(); i++)
    1942             :         {
    1943           0 :             if(bToxIsAuthorities)
    1944             :                 m_pLevelLB->InsertEntry( SwAuthorityFieldType::GetAuthTypeName(
    1945           0 :                                             (ToxAuthorityType) (i - 1)) );
    1946           0 :             else if( bToxIsIndex )
    1947             :             {
    1948           0 :                 if(i == 1)
    1949           0 :                     m_pLevelLB->InsertEntry( sDelimStr );
    1950             :                 else
    1951           0 :                     m_pLevelLB->InsertEntry( OUString::number(i - 1) );
    1952             :             }
    1953             :             else
    1954           0 :                 m_pLevelLB->InsertEntry(OUString::number(i));
    1955             :         }
    1956           0 :         if(bToxIsAuthorities)
    1957             :         {
    1958           0 :             SwWrtShell& rSh = pTOXDlg->GetWrtShell();
    1959             :             const SwAuthorityFieldType* pFType = (const SwAuthorityFieldType*)
    1960           0 :                                     rSh.GetFldType(RES_AUTHORITY, aEmptyOUStr);
    1961           0 :             if(pFType)
    1962             :             {
    1963           0 :                 if(pFType->IsSortByDocument())
    1964           0 :                     m_pSortDocPosRB->Check();
    1965             :                 else
    1966             :                 {
    1967           0 :                     m_pSortContentRB->Check();
    1968           0 :                     const sal_uInt16 nKeyCount = pFType->GetSortKeyCount();
    1969           0 :                     if(0 < nKeyCount)
    1970             :                     {
    1971           0 :                         const SwTOXSortKey* pKey = pFType->GetSortKey(0);
    1972             :                         m_pFirstKeyLB->SelectEntryPos(
    1973           0 :                             m_pFirstKeyLB->GetEntryPos((void*)(sal_uIntPtr)pKey->eField));
    1974           0 :                         m_pFirstSortUpRB->Check(pKey->bSortAscending);
    1975           0 :                         m_pFirstSortDownRB->Check(!pKey->bSortAscending);
    1976             :                     }
    1977           0 :                     if(1 < nKeyCount)
    1978             :                     {
    1979           0 :                         const SwTOXSortKey* pKey = pFType->GetSortKey(1);
    1980             :                         m_pSecondKeyLB->SelectEntryPos(
    1981           0 :                             m_pSecondKeyLB->GetEntryPos((void*)(sal_uIntPtr)pKey->eField));
    1982           0 :                         m_pSecondSortUpRB->Check(pKey->bSortAscending);
    1983           0 :                         m_pSecondSortDownRB->Check(!pKey->bSortAscending);
    1984             :                     }
    1985           0 :                     if(2 < nKeyCount)
    1986             :                     {
    1987           0 :                         const SwTOXSortKey* pKey = pFType->GetSortKey(2);
    1988             :                         m_pThirdKeyLB->SelectEntryPos(
    1989           0 :                             m_pThirdKeyLB->GetEntryPos((void*)(sal_uIntPtr)pKey->eField));
    1990           0 :                         m_pThirdSortUpRB->Check(pKey->bSortAscending);
    1991           0 :                         m_pThirdSortDownRB->Check(!pKey->bSortAscending);
    1992             :                     }
    1993             :                 }
    1994             :             }
    1995           0 :             SortKeyHdl(m_pSortDocPosRB->IsChecked() ? m_pSortDocPosRB : m_pSortContentRB);
    1996           0 :             m_pLevelFT->SetText(sAuthTypeStr);
    1997             :         }
    1998             :         else
    1999           0 :             m_pLevelFT->SetText(sLevelStr);
    2000             : 
    2001           0 :         Link aLink = m_pLevelLB->GetSelectHdl();
    2002           0 :         m_pLevelLB->SetSelectHdl(Link());
    2003           0 :         m_pLevelLB->Select( m_pLevelLB->GetEntry( bToxIsIndex ? 1 : 0 ) );
    2004           0 :         m_pLevelLB->SetSelectHdl(aLink);
    2005             : 
    2006             :         //show or hide controls
    2007           0 :         m_pEntryNoPB->Show(bToxIsContent);
    2008           0 :         m_pHyperLinkPB->Show(bToxIsContent || bToxIsSequence);
    2009           0 :         m_pRelToStyleCB->Show(!bToxIsAuthorities);
    2010           0 :         m_pChapterInfoPB->Show(!bToxIsContent && !bToxIsAuthorities);
    2011           0 :         m_pEntryPB->Show(!bToxIsAuthorities);
    2012           0 :         m_pPageNoPB->Show(!bToxIsAuthorities);
    2013           0 :         m_pAuthFieldsLB->Show(bToxIsAuthorities);
    2014           0 :         m_pAuthInsertPB->Show(bToxIsAuthorities);
    2015           0 :         m_pAuthRemovePB->Show(bToxIsAuthorities);
    2016             : 
    2017           0 :         m_pFormatFrame->Show(!bToxIsAuthorities);
    2018             : 
    2019           0 :         m_pSortingFrame->Show(bToxIsAuthorities);
    2020           0 :         m_pSortKeyFrame->Show(bToxIsAuthorities);
    2021             : 
    2022           0 :         m_pMainEntryStyleFT->Show(bToxIsIndex);
    2023           0 :         m_pMainEntryStyleLB->Show(bToxIsIndex);
    2024           0 :         m_pAlphaDelimCB->Show(bToxIsIndex);
    2025           0 :         m_pCommaSeparatedCB->Show(bToxIsIndex);
    2026             :     }
    2027           0 :     aLastTOXType = aCurType;
    2028             : 
    2029             :     //invalidate PatternWindow
    2030           0 :     m_pTokenWIN->SetInvalid();
    2031           0 :     LevelHdl(m_pLevelLB);
    2032           0 : }
    2033             : 
    2034           0 : void SwTOXEntryTabPage::UpdateDescriptor()
    2035             : {
    2036           0 :     WriteBackLevel();
    2037           0 :     SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog();
    2038           0 :     SwTOXDescription& rDesc = pTOXDlg->GetTOXDescription(aLastTOXType);
    2039           0 :     if(TOX_INDEX == aLastTOXType.eType)
    2040             :     {
    2041           0 :         const OUString sTemp(m_pMainEntryStyleLB->GetSelectEntry());
    2042           0 :         rDesc.SetMainEntryCharStyle(sNoCharStyle == sTemp ? aEmptyOUStr : sTemp);
    2043           0 :         sal_uInt16 nIdxOptions = rDesc.GetIndexOptions() & ~nsSwTOIOptions::TOI_ALPHA_DELIMITTER;
    2044           0 :         if(m_pAlphaDelimCB->IsChecked())
    2045           0 :             nIdxOptions |= nsSwTOIOptions::TOI_ALPHA_DELIMITTER;
    2046           0 :         rDesc.SetIndexOptions(nIdxOptions);
    2047             :     }
    2048           0 :     else if(TOX_AUTHORITIES == aLastTOXType.eType)
    2049             :     {
    2050           0 :         rDesc.SetSortByDocument(m_pSortDocPosRB->IsChecked());
    2051           0 :         SwTOXSortKey aKey1, aKey2, aKey3;
    2052             :         aKey1.eField = (ToxAuthorityField)(sal_uIntPtr)m_pFirstKeyLB->GetEntryData(
    2053           0 :                                     m_pFirstKeyLB->GetSelectEntryPos());
    2054           0 :         aKey1.bSortAscending = m_pFirstSortUpRB->IsChecked();
    2055             :         aKey2.eField = (ToxAuthorityField)(sal_uIntPtr)m_pSecondKeyLB->GetEntryData(
    2056           0 :                                     m_pSecondKeyLB->GetSelectEntryPos());
    2057           0 :         aKey2.bSortAscending = m_pSecondSortUpRB->IsChecked();
    2058             :         aKey3.eField = (ToxAuthorityField)(sal_uIntPtr)m_pThirdKeyLB->GetEntryData(
    2059           0 :                                 m_pThirdKeyLB->GetSelectEntryPos());
    2060           0 :         aKey3.bSortAscending = m_pThirdSortUpRB->IsChecked();
    2061             : 
    2062           0 :         rDesc.SetSortKeys(aKey1, aKey2, aKey3);
    2063             :     }
    2064           0 :     SwForm* pCurrentForm = pTOXDlg->GetForm(aLastTOXType);
    2065           0 :     if(m_pRelToStyleCB->IsVisible())
    2066             :     {
    2067           0 :         pCurrentForm->SetRelTabPos(m_pRelToStyleCB->IsChecked());
    2068             :     }
    2069           0 :     if(m_pCommaSeparatedCB->IsVisible())
    2070           0 :         pCurrentForm->SetCommaSeparated(m_pCommaSeparatedCB->IsChecked());
    2071           0 : }
    2072             : 
    2073           0 : int SwTOXEntryTabPage::DeactivatePage( SfxItemSet* /*pSet*/)
    2074             : {
    2075           0 :     UpdateDescriptor();
    2076           0 :     return LEAVE_PAGE;
    2077             : }
    2078             : 
    2079           0 : SfxTabPage* SwTOXEntryTabPage::Create( vcl::Window* pParent,     const SfxItemSet* rAttrSet)
    2080             : {
    2081           0 :     return new SwTOXEntryTabPage(pParent, *rAttrSet);
    2082             : }
    2083             : 
    2084           0 : IMPL_LINK(SwTOXEntryTabPage, EditStyleHdl, PushButton*, pBtn)
    2085             : {
    2086           0 :     if( LISTBOX_ENTRY_NOTFOUND != m_pCharStyleLB->GetSelectEntryPos())
    2087             :     {
    2088           0 :         SfxStringItem aStyle(SID_STYLE_EDIT, m_pCharStyleLB->GetSelectEntry());
    2089           0 :         SfxUInt16Item aFamily(SID_STYLE_FAMILY, SFX_STYLE_FAMILY_CHAR);
    2090           0 :         vcl::Window* pDefDlgParent = Application::GetDefDialogParent();
    2091           0 :         Application::SetDefDialogParent( pBtn );
    2092           0 :         ((SwMultiTOXTabDialog*)GetTabDialog())->GetWrtShell().
    2093           0 :         GetView().GetViewFrame()->GetDispatcher()->Execute(
    2094             :         SID_STYLE_EDIT, SfxCallMode::SYNCHRON|SfxCallMode::MODAL,
    2095           0 :             &aStyle, &aFamily, 0L);
    2096           0 :         Application::SetDefDialogParent( pDefDlgParent );
    2097             :     }
    2098           0 :     return 0;
    2099             : }
    2100             : 
    2101           0 : IMPL_LINK(SwTOXEntryTabPage, RemoveInsertAuthHdl, PushButton*, pButton)
    2102             : {
    2103           0 :     bool bInsert = pButton == m_pAuthInsertPB;
    2104           0 :     if(bInsert)
    2105             :     {
    2106           0 :         sal_Int32 nSelPos = m_pAuthFieldsLB->GetSelectEntryPos();
    2107           0 :         const OUString sToInsert(m_pAuthFieldsLB->GetSelectEntry());
    2108           0 :         SwFormToken aInsert(TOKEN_AUTHORITY);
    2109           0 :         aInsert.nAuthorityField = (sal_uInt16)(sal_uIntPtr)m_pAuthFieldsLB->GetEntryData(nSelPos);
    2110           0 :         m_pTokenWIN->InsertAtSelection(SwForm::GetFormAuth(), aInsert);
    2111           0 :         m_pAuthFieldsLB->RemoveEntry(sToInsert);
    2112           0 :         m_pAuthFieldsLB->SelectEntryPos( nSelPos ? nSelPos - 1 : 0);
    2113             :     }
    2114             :     else
    2115             :     {
    2116           0 :         Control* pCtrl = m_pTokenWIN->GetActiveControl();
    2117             :         OSL_ENSURE(WINDOW_EDIT != pCtrl->GetType(), "Remove should be disabled");
    2118           0 :         if( WINDOW_EDIT != pCtrl->GetType() )
    2119             :         {
    2120             :             //fill it into the ListBox
    2121           0 :             const SwFormToken& rToken = ((SwTOXButton*)pCtrl)->GetFormToken();
    2122           0 :             PreTokenButtonRemoved(rToken);
    2123           0 :             m_pTokenWIN->RemoveControl((SwTOXButton*)pCtrl);
    2124             :         }
    2125             :     }
    2126           0 :     ModifyHdl(0);
    2127           0 :     return 0;
    2128             : }
    2129             : 
    2130           0 : void SwTOXEntryTabPage::PreTokenButtonRemoved(const SwFormToken& rToken)
    2131             : {
    2132             :     //fill it into the ListBox
    2133           0 :     sal_uInt32 nData = rToken.nAuthorityField;
    2134           0 :     sal_Int32 nPos = m_pAuthFieldsLB->InsertEntry(SW_RESSTR(STR_AUTH_FIELD_START + nData));
    2135           0 :     m_pAuthFieldsLB->SetEntryData(nPos, (void*)(sal_uIntPtr)(nData));
    2136           0 : }
    2137             : 
    2138           0 : void SwTOXEntryTabPage::SetFocus2theAllBtn()
    2139             : {
    2140           0 :     m_pAllLevelsPB->GrabFocus();
    2141           0 : }
    2142             : 
    2143           0 : bool SwTOXEntryTabPage::Notify( NotifyEvent& rNEvt )
    2144             : {
    2145           0 :     if ( rNEvt.GetType() == EVENT_KEYINPUT )
    2146             :     {
    2147           0 :         const KeyEvent& rKEvt = *rNEvt.GetKeyEvent();
    2148           0 :         vcl::KeyCode aCode = rKEvt.GetKeyCode();
    2149           0 :         if ( (aCode.GetCode() == KEY_F4) && aCode.IsShift() && !aCode.IsMod1() && !aCode.IsMod2() )
    2150             :         {
    2151           0 :             if ( m_pTokenWIN->GetActiveControl() )
    2152             :             {
    2153           0 :                 m_pTokenWIN->GetActiveControl()->GrabFocus();
    2154             :             }
    2155             :         }
    2156             : 
    2157             :     }
    2158             : 
    2159           0 :     return SfxTabPage::Notify( rNEvt );
    2160             : }
    2161             : 
    2162             : // This function initializes the default value in the Token
    2163             : // put here the UI dependent initializations
    2164           0 : IMPL_LINK(SwTOXEntryTabPage, InsertTokenHdl, PushButton*, pBtn)
    2165             : {
    2166           0 :     OUString sText;
    2167           0 :     FormTokenType eTokenType = TOKEN_ENTRY_NO;
    2168           0 :     OUString sCharStyle;
    2169           0 :     sal_uInt16  nChapterFormat = CF_NUMBER; // i89791
    2170           0 :     if(pBtn == m_pEntryNoPB)
    2171             :     {
    2172           0 :         sText = SwForm::GetFormEntryNum();
    2173           0 :         eTokenType = TOKEN_ENTRY_NO;
    2174             :     }
    2175           0 :     else if(pBtn == m_pEntryPB)
    2176             :     {
    2177           0 :         if( TOX_CONTENT == m_pCurrentForm->GetTOXType() )
    2178             :         {
    2179           0 :             sText = SwForm::GetFormEntryTxt();
    2180           0 :             eTokenType = TOKEN_ENTRY_TEXT;
    2181             :         }
    2182             :         else
    2183             :         {
    2184           0 :             sText = SwForm::GetFormEntry();
    2185           0 :             eTokenType = TOKEN_ENTRY;
    2186             :         }
    2187             :     }
    2188           0 :     else if(pBtn == m_pChapterInfoPB)
    2189             :     {
    2190           0 :         sText = SwForm::GetFormChapterMark();
    2191           0 :         eTokenType = TOKEN_CHAPTER_INFO;
    2192           0 :         nChapterFormat = CF_NUM_NOPREPST_TITLE; // i89791
    2193             :     }
    2194           0 :     else if(pBtn == m_pPageNoPB)
    2195             :     {
    2196           0 :         sText = SwForm::GetFormPageNums();
    2197           0 :         eTokenType = TOKEN_PAGE_NUMS;
    2198             :     }
    2199           0 :     else if(pBtn == m_pHyperLinkPB)
    2200             :     {
    2201           0 :         sText = SwForm::GetFormLinkStt();
    2202           0 :         eTokenType = TOKEN_LINK_START;
    2203           0 :         sCharStyle = SW_RES(STR_POOLCHR_TOXJUMP);
    2204             :     }
    2205           0 :     else if(pBtn == m_pTabPB)
    2206             :     {
    2207           0 :         sText = SwForm::GetFormTab();
    2208           0 :         eTokenType = TOKEN_TAB_STOP;
    2209             :     }
    2210           0 :     SwFormToken aInsert(eTokenType);
    2211           0 :     aInsert.sCharStyleName = sCharStyle;
    2212           0 :     aInsert.nTabStopPosition = 0;
    2213           0 :     aInsert.nChapterFormat = nChapterFormat; // i89791
    2214           0 :     m_pTokenWIN->InsertAtSelection(sText, aInsert);
    2215           0 :     ModifyHdl(0);
    2216           0 :     return 0;
    2217             : }
    2218             : 
    2219           0 : IMPL_LINK_NOARG(SwTOXEntryTabPage, AllLevelsHdl)
    2220             : {
    2221             :     //get current level
    2222             :     //write it into all levels
    2223           0 :     if(m_pTokenWIN->IsValid())
    2224             :     {
    2225           0 :         const OUString sNewToken = m_pTokenWIN->GetPattern();
    2226           0 :         for(sal_uInt16 i = 1; i < m_pCurrentForm->GetFormMax(); i++)
    2227           0 :             m_pCurrentForm->SetPattern(i, sNewToken);
    2228             : 
    2229           0 :         ModifyHdl(this);
    2230             :     }
    2231           0 :     return 0;
    2232             : }
    2233             : 
    2234           0 : void SwTOXEntryTabPage::WriteBackLevel()
    2235             : {
    2236           0 :     if(m_pTokenWIN->IsValid())
    2237             :     {
    2238           0 :         const OUString sNewToken = m_pTokenWIN->GetPattern();
    2239           0 :         const sal_uInt16 nLastLevel = m_pTokenWIN->GetLastLevel();
    2240           0 :         if(nLastLevel != USHRT_MAX)
    2241           0 :             m_pCurrentForm->SetPattern(nLastLevel + 1, sNewToken);
    2242             :     }
    2243           0 : }
    2244             : 
    2245           0 : IMPL_LINK(SwTOXEntryTabPage, LevelHdl, SvTreeListBox*, pBox)
    2246             : {
    2247           0 :     if(bInLevelHdl)
    2248           0 :         return 0;
    2249           0 :     bInLevelHdl = true;
    2250           0 :     WriteBackLevel();
    2251             : 
    2252             :     const sal_uInt16 nLevel = static_cast< sal_uInt16 >(
    2253           0 :         pBox->GetModel()->GetAbsPos(pBox->FirstSelected()));
    2254           0 :     m_pTokenWIN->SetForm(*m_pCurrentForm, nLevel);
    2255           0 :     if(TOX_AUTHORITIES == m_pCurrentForm->GetTOXType())
    2256             :     {
    2257             :         //fill the types in
    2258           0 :         m_pAuthFieldsLB->Clear();
    2259           0 :         for( sal_uInt32 i = 0; i < AUTH_FIELD_END; i++)
    2260             :         {
    2261           0 :             sal_Int32 nPos = m_pAuthFieldsLB->InsertEntry(SW_RESSTR(STR_AUTH_FIELD_START + i));
    2262           0 :             m_pAuthFieldsLB->SetEntryData(nPos, (void*)(sal_uIntPtr)(i));
    2263             :         }
    2264             : 
    2265             :         // #i21237#
    2266           0 :         SwFormTokens aPattern = m_pCurrentForm->GetPattern(nLevel + 1);
    2267           0 :         SwFormTokens::iterator aIt = aPattern.begin();
    2268             : 
    2269           0 :         while(aIt != aPattern.end())
    2270             :         {
    2271           0 :             SwFormToken aToken = *aIt; // #i21237#
    2272           0 :             if(TOKEN_AUTHORITY == aToken.eTokenType)
    2273             :             {
    2274           0 :                 sal_uInt32 nSearch = aToken.nAuthorityField;
    2275           0 :                 sal_Int32  nLstBoxPos = m_pAuthFieldsLB->GetEntryPos( (void*)(sal_uIntPtr)nSearch );
    2276             :                 OSL_ENSURE(LISTBOX_ENTRY_NOTFOUND != nLstBoxPos, "Entry not found?");
    2277           0 :                 m_pAuthFieldsLB->RemoveEntry(nLstBoxPos);
    2278             :             }
    2279             : 
    2280           0 :             ++aIt; // #i21237#
    2281           0 :         }
    2282           0 :         m_pAuthFieldsLB->SelectEntryPos(0);
    2283             :     }
    2284           0 :     bInLevelHdl = false;
    2285           0 :     pBox->GrabFocus();
    2286           0 :     return 0;
    2287             : }
    2288             : 
    2289           0 : IMPL_LINK(SwTOXEntryTabPage, SortKeyHdl, RadioButton*, pButton)
    2290             : {
    2291           0 :     bool bEnable = m_pSortContentRB == pButton;
    2292           0 :     m_pSortKeyFrame->Enable(bEnable);
    2293           0 :     return 0;
    2294             : }
    2295             : 
    2296           0 : IMPL_LINK(SwTOXEntryTabPage, TokenSelectedHdl, SwFormToken*, pToken)
    2297             : {
    2298           0 :     if (!pToken->sCharStyleName.isEmpty())
    2299           0 :         m_pCharStyleLB->SelectEntry(pToken->sCharStyleName);
    2300             :     else
    2301           0 :         m_pCharStyleLB->SelectEntry(sNoCharStyle);
    2302             : 
    2303           0 :     const OUString sEntry = m_pCharStyleLB->GetSelectEntry();
    2304           0 :     m_pEditStylePB->Enable(sEntry != sNoCharStyle);
    2305             : 
    2306           0 :     if(pToken->eTokenType == TOKEN_CHAPTER_INFO)
    2307             :     {
    2308             : //---> i89791
    2309           0 :         switch(pToken->nChapterFormat)
    2310             :         {
    2311             :         default:
    2312           0 :             m_pChapterEntryLB->SetNoSelection();//to alert the user
    2313           0 :             break;
    2314             :         case CF_NUM_NOPREPST_TITLE:
    2315           0 :             m_pChapterEntryLB->SelectEntryPos(0);
    2316           0 :             break;
    2317             :         case CF_TITLE:
    2318           0 :             m_pChapterEntryLB->SelectEntryPos(1);
    2319           0 :            break;
    2320             :         case CF_NUMBER_NOPREPST:
    2321           0 :             m_pChapterEntryLB->SelectEntryPos(2);
    2322           0 :             break;
    2323             :         }
    2324             : //i53420
    2325             : 
    2326           0 :         m_pEntryOutlineLevelNF->SetValue(pToken->nOutlineLevel);
    2327             :     }
    2328             : 
    2329             : //i53420
    2330           0 :     if(pToken->eTokenType == TOKEN_ENTRY_NO)
    2331             :     {
    2332           0 :         m_pEntryOutlineLevelNF->SetValue(pToken->nOutlineLevel);
    2333             :         const sal_uInt16 nFormat =
    2334           0 :             pToken->nChapterFormat == CF_NUM_NOPREPST_TITLE ? 1 : 0;
    2335           0 :         m_pNumberFormatLB->SelectEntryPos(nFormat);
    2336             :     }
    2337             : 
    2338           0 :     bool bTabStop = TOKEN_TAB_STOP == pToken->eTokenType;
    2339           0 :     m_pFillCharFT->Show(bTabStop);
    2340           0 :     m_pFillCharCB->Show(bTabStop);
    2341           0 :     m_pTabPosFT->Show(bTabStop);
    2342           0 :     m_pTabPosMF->Show(bTabStop);
    2343           0 :     m_pAutoRightCB->Show(bTabStop);
    2344           0 :     m_pAutoRightCB->Enable(bTabStop);
    2345           0 :     if(bTabStop)
    2346             :     {
    2347           0 :         m_pTabPosMF->SetValue(m_pTabPosMF->Normalize(pToken->nTabStopPosition), FUNIT_TWIP);
    2348           0 :         m_pAutoRightCB->Check(SVX_TAB_ADJUST_END == pToken->eTabAlign);
    2349           0 :         m_pFillCharCB->SetText(OUString(pToken->cTabFillChar));
    2350           0 :         m_pTabPosFT->Enable(!m_pAutoRightCB->IsChecked());
    2351           0 :         m_pTabPosMF->Enable(!m_pAutoRightCB->IsChecked());
    2352             :     }
    2353             :     else
    2354             :     {
    2355           0 :         m_pTabPosMF->Enable(false);
    2356             :     }
    2357             : 
    2358           0 :     bool bIsChapterInfo = pToken->eTokenType == TOKEN_CHAPTER_INFO;
    2359           0 :     bool bIsEntryNumber = pToken->eTokenType == TOKEN_ENTRY_NO;
    2360           0 :     m_pChapterEntryFT->Show( bIsChapterInfo );
    2361           0 :     m_pChapterEntryLB->Show( bIsChapterInfo );
    2362           0 :     m_pEntryOutlineLevelFT->Show( bIsChapterInfo || bIsEntryNumber );
    2363           0 :     m_pEntryOutlineLevelNF->Show( bIsChapterInfo || bIsEntryNumber );
    2364           0 :     m_pNumberFormatFT->Show( bIsEntryNumber );
    2365           0 :     m_pNumberFormatLB->Show( bIsEntryNumber );
    2366             : 
    2367             :     //now enable the visible buttons
    2368             :     //- inserting the same type of control is not allowed
    2369             :     //- some types of controls can only appear once (EntryText EntryNumber)
    2370             : 
    2371           0 :     if(m_pEntryNoPB->IsVisible())
    2372             :     {
    2373           0 :         m_pEntryNoPB->Enable(TOKEN_ENTRY_NO != pToken->eTokenType );
    2374             :     }
    2375           0 :     if(m_pEntryPB->IsVisible())
    2376             :     {
    2377           0 :         m_pEntryPB->Enable(TOKEN_ENTRY_TEXT != pToken->eTokenType &&
    2378           0 :                                 !m_pTokenWIN->Contains(TOKEN_ENTRY_TEXT)
    2379           0 :                                 && !m_pTokenWIN->Contains(TOKEN_ENTRY));
    2380             :     }
    2381             : 
    2382           0 :     if(m_pChapterInfoPB->IsVisible())
    2383             :     {
    2384           0 :         m_pChapterInfoPB->Enable(TOKEN_CHAPTER_INFO != pToken->eTokenType);
    2385             :     }
    2386           0 :     if(m_pPageNoPB->IsVisible())
    2387             :     {
    2388           0 :         m_pPageNoPB->Enable(TOKEN_PAGE_NUMS != pToken->eTokenType &&
    2389           0 :                                 !m_pTokenWIN->Contains(TOKEN_PAGE_NUMS));
    2390             :     }
    2391           0 :     if(m_pTabPB->IsVisible())
    2392             :     {
    2393           0 :         m_pTabPB->Enable(!bTabStop);
    2394             :     }
    2395           0 :     if(m_pHyperLinkPB->IsVisible())
    2396             :     {
    2397           0 :         m_pHyperLinkPB->Enable(TOKEN_LINK_START != pToken->eTokenType &&
    2398           0 :                             TOKEN_LINK_END != pToken->eTokenType);
    2399             :     }
    2400             :     //table of authorities
    2401           0 :     if(m_pAuthInsertPB->IsVisible())
    2402             :     {
    2403           0 :         bool bText = TOKEN_TEXT == pToken->eTokenType;
    2404           0 :         m_pAuthInsertPB->Enable(bText && !m_pAuthFieldsLB->GetSelectEntry().isEmpty());
    2405           0 :         m_pAuthRemovePB->Enable(!bText);
    2406             :     }
    2407             : 
    2408           0 :     return 0;
    2409             : }
    2410             : 
    2411           0 : IMPL_LINK(SwTOXEntryTabPage, StyleSelectHdl, ListBox*, pBox)
    2412             : {
    2413           0 :     OUString sEntry = pBox->GetSelectEntry();
    2414           0 :     const sal_uInt16 nId = (sal_uInt16)(sal_IntPtr)pBox->GetEntryData(pBox->GetSelectEntryPos());
    2415           0 :     const bool bEqualsNoCharStyle = sEntry == sNoCharStyle;
    2416           0 :     m_pEditStylePB->Enable(!bEqualsNoCharStyle);
    2417           0 :     if (bEqualsNoCharStyle)
    2418           0 :         sEntry = "";
    2419           0 :     Control* pCtrl = m_pTokenWIN->GetActiveControl();
    2420             :     OSL_ENSURE(pCtrl, "no active control?");
    2421           0 :     if(pCtrl)
    2422             :     {
    2423           0 :         if(WINDOW_EDIT == pCtrl->GetType())
    2424           0 :             ((SwTOXEdit*)pCtrl)->SetCharStyleName(sEntry, nId);
    2425             :         else
    2426           0 :             ((SwTOXButton*)pCtrl)->SetCharStyleName(sEntry, nId);
    2427             : 
    2428             :     }
    2429           0 :     ModifyHdl(0);
    2430           0 :     return 0;
    2431             : }
    2432             : 
    2433           0 : IMPL_LINK(SwTOXEntryTabPage, ChapterInfoHdl, ListBox*, pBox)
    2434             : {
    2435           0 :     sal_Int32 nPos = pBox->GetSelectEntryPos();
    2436           0 :     if(LISTBOX_ENTRY_NOTFOUND != nPos)
    2437             :     {
    2438           0 :         Control* pCtrl = m_pTokenWIN->GetActiveControl();
    2439             :         OSL_ENSURE(pCtrl, "no active control?");
    2440           0 :         if(pCtrl && WINDOW_EDIT != pCtrl->GetType())
    2441           0 :             ((SwTOXButton*)pCtrl)->SetChapterInfo(nPos);
    2442             : 
    2443           0 :         ModifyHdl(0);
    2444             :     }
    2445           0 :     return 0;
    2446             : }
    2447             : 
    2448           0 : IMPL_LINK(SwTOXEntryTabPage, ChapterInfoOutlineHdl, NumericField*, pField)
    2449             : {
    2450           0 :     const sal_uInt16 nLevel = static_cast<sal_uInt8>(pField->GetValue());
    2451             : 
    2452           0 :     Control* pCtrl = m_pTokenWIN->GetActiveControl();
    2453             :     OSL_ENSURE(pCtrl, "no active control?");
    2454           0 :     if(pCtrl && WINDOW_EDIT != pCtrl->GetType())
    2455           0 :         ((SwTOXButton*)pCtrl)->SetOutlineLevel(nLevel);
    2456             : 
    2457           0 :     ModifyHdl(0);
    2458           0 :     return 0;
    2459             : }
    2460             : 
    2461           0 : IMPL_LINK(SwTOXEntryTabPage, NumberFormatHdl, ListBox*, pBox)
    2462             : {
    2463           0 :     const sal_Int32 nPos = pBox->GetSelectEntryPos();
    2464             : 
    2465           0 :     if(LISTBOX_ENTRY_NOTFOUND != nPos)
    2466             :     {
    2467           0 :         Control* pCtrl = m_pTokenWIN->GetActiveControl();
    2468             :         OSL_ENSURE(pCtrl, "no active control?");
    2469           0 :         if(pCtrl && WINDOW_EDIT != pCtrl->GetType())
    2470             :         {
    2471           0 :            ((SwTOXButton*)pCtrl)->SetEntryNumberFormat(nPos);//i89791
    2472             :         }
    2473           0 :         ModifyHdl(0);
    2474             :     }
    2475           0 :     return 0;
    2476             : }
    2477             : 
    2478           0 : IMPL_LINK(SwTOXEntryTabPage, TabPosHdl, MetricField*, pField)
    2479             : {
    2480           0 :     Control* pCtrl = m_pTokenWIN->GetActiveControl();
    2481             :     OSL_ENSURE(pCtrl && WINDOW_EDIT != pCtrl->GetType() &&
    2482             :         TOKEN_TAB_STOP == ((SwTOXButton*)pCtrl)->GetFormToken().eTokenType,
    2483             :                 "no active style::TabStop control?");
    2484           0 :     if( pCtrl && WINDOW_EDIT != pCtrl->GetType() )
    2485             :     {
    2486             :         ((SwTOXButton*)pCtrl)->SetTabPosition( static_cast< SwTwips >(
    2487           0 :                 pField->Denormalize( pField->GetValue( FUNIT_TWIP ))));
    2488             :     }
    2489           0 :     ModifyHdl(0);
    2490           0 :     return 0;
    2491             : }
    2492             : 
    2493           0 : IMPL_LINK(SwTOXEntryTabPage, FillCharHdl, ComboBox*, pBox)
    2494             : {
    2495           0 :     Control* pCtrl = m_pTokenWIN->GetActiveControl();
    2496             :     OSL_ENSURE(pCtrl && WINDOW_EDIT != pCtrl->GetType() &&
    2497             :         TOKEN_TAB_STOP == ((SwTOXButton*)pCtrl)->GetFormToken().eTokenType,
    2498             :                 "no active style::TabStop control?");
    2499           0 :     if(pCtrl && WINDOW_EDIT != pCtrl->GetType())
    2500             :     {
    2501             :         sal_Unicode cSet;
    2502           0 :         if( !pBox->GetText().isEmpty() )
    2503           0 :             cSet = pBox->GetText()[0];
    2504             :         else
    2505           0 :             cSet = ' ';
    2506           0 :         ((SwTOXButton*)pCtrl)->SetFillChar( cSet );
    2507             :     }
    2508           0 :     ModifyHdl(0);
    2509           0 :     return 0;
    2510             : }
    2511             : 
    2512           0 : IMPL_LINK(SwTOXEntryTabPage, AutoRightHdl, CheckBox*, pBox)
    2513             : {
    2514             :     //the most right style::TabStop is usually right aligned
    2515           0 :     Control* pCurCtrl = m_pTokenWIN->GetActiveControl();
    2516             :     OSL_ENSURE(WINDOW_EDIT != pCurCtrl->GetType() &&
    2517             :             ((SwTOXButton*)pCurCtrl)->GetFormToken().eTokenType == TOKEN_TAB_STOP,
    2518             :             "no style::TabStop selected!");
    2519             : 
    2520           0 :     const SwFormToken& rToken = ((SwTOXButton*)pCurCtrl)->GetFormToken();
    2521           0 :     bool bChecked = pBox->IsChecked();
    2522           0 :     if(rToken.eTokenType == TOKEN_TAB_STOP)
    2523             :         ((SwTOXButton*)pCurCtrl)->SetTabAlign(
    2524           0 :             bChecked ? SVX_TAB_ADJUST_END : SVX_TAB_ADJUST_LEFT);
    2525           0 :     m_pTabPosFT->Enable(!bChecked);
    2526           0 :     m_pTabPosMF->Enable(!bChecked);
    2527           0 :     ModifyHdl(0);
    2528           0 :     return 0;
    2529             : }
    2530             : 
    2531           0 : void SwTOXEntryTabPage::SetWrtShell(SwWrtShell& rSh)
    2532             : {
    2533           0 :     SwDocShell* pDocSh = rSh.GetView().GetDocShell();
    2534           0 :     ::FillCharStyleListBox(*m_pCharStyleLB, pDocSh, true, true);
    2535           0 :     const OUString sDefault(SW_RES(STR_POOLCOLL_STANDARD));
    2536           0 :     for(sal_Int32 i = 0; i < m_pCharStyleLB->GetEntryCount(); i++)
    2537             :     {
    2538           0 :         const OUString sEntry = m_pCharStyleLB->GetEntry(i);
    2539           0 :         if(sDefault != sEntry)
    2540             :         {
    2541           0 :             m_pMainEntryStyleLB->InsertEntry( sEntry );
    2542           0 :             m_pMainEntryStyleLB->SetEntryData(i, m_pCharStyleLB->GetEntryData(i));
    2543             :         }
    2544           0 :     }
    2545             :     m_pMainEntryStyleLB->SelectEntry( SwStyleNameMapper::GetUIName(
    2546           0 :                                 RES_POOLCHR_IDX_MAIN_ENTRY, aEmptyOUStr ));
    2547           0 : }
    2548             : 
    2549           0 : OUString SwTOXEntryTabPage::GetLevelHelp(sal_uInt16 nLevel) const
    2550             : {
    2551           0 :     OUString sRet;
    2552           0 :     SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog();
    2553           0 :     const CurTOXType aCurType = pTOXDlg->GetCurrentTOXType();
    2554           0 :     if( TOX_INDEX == aCurType.eType )
    2555             :         SwStyleNameMapper::FillUIName( static_cast< sal_uInt16 >(1 == nLevel ? RES_POOLCOLL_TOX_IDXBREAK
    2556           0 :                                   : RES_POOLCOLL_TOX_IDX1 + nLevel-2), sRet );
    2557             : 
    2558           0 :     else if( TOX_AUTHORITIES == aCurType.eType )
    2559             :     {
    2560             :         //wildcard -> show entry text
    2561           0 :         sRet = "*";
    2562             :     }
    2563           0 :     return sRet;
    2564             : }
    2565             : 
    2566           0 : SwTokenWindow::SwTokenWindow(vcl::Window* pParent)
    2567             :     : VclHBox(pParent)
    2568             :     , pForm(0)
    2569             :     , nLevel(0)
    2570             :     , bValid(false)
    2571             :     , sCharStyle(SW_RESSTR(STR_CHARSTYLE))
    2572             :     , pActiveCtrl(0)
    2573           0 :     , m_pParent(NULL)
    2574             : {
    2575             :     m_pUIBuilder = new VclBuilder(this, getUIRootDir(),
    2576           0 :         "modules/swriter/ui/tokenwidget.ui", "TokenWidget");
    2577           0 :     get(m_pLeftScrollWin, "left");
    2578           0 :     get(m_pCtrlParentWin, "ctrl");
    2579           0 :     m_pCtrlParentWin->set_height_request(Edit::GetMinimumEditSize().Height());
    2580           0 :     get(m_pRightScrollWin, "right");
    2581             : 
    2582           0 :     for (sal_uInt32 i = 0; i < TOKEN_END; ++i)
    2583             :     {
    2584           0 :         sal_uInt32 nTextId = STR_BUTTON_TEXT_START + i;
    2585           0 :         if( STR_TOKEN_ENTRY_TEXT == nTextId )
    2586           0 :             nTextId = STR_TOKEN_ENTRY;
    2587           0 :         aButtonTexts[i] = SW_RESSTR(nTextId);
    2588             : 
    2589           0 :         sal_uInt32 nHelpId = STR_BUTTON_HELP_TEXT_START + i;
    2590           0 :         if(STR_TOKEN_HELP_ENTRY_TEXT == nHelpId)
    2591           0 :             nHelpId = STR_TOKEN_HELP_ENTRY;
    2592           0 :         aButtonHelpTexts[i] = SW_RESSTR(nHelpId);
    2593             :     }
    2594             : 
    2595           0 :     accessibleName = SW_RESSTR(STR_STRUCTURE);
    2596           0 :     sAdditionalAccnameString1 = SW_RESSTR(STR_ADDITIONAL_ACCNAME_STRING1);
    2597           0 :     sAdditionalAccnameString2 = SW_RESSTR(STR_ADDITIONAL_ACCNAME_STRING2);
    2598           0 :     sAdditionalAccnameString3 = SW_RESSTR(STR_ADDITIONAL_ACCNAME_STRING3);
    2599             : 
    2600           0 :     Link aLink(LINK(this, SwTokenWindow, ScrollHdl));
    2601           0 :     m_pLeftScrollWin->SetClickHdl(aLink);
    2602           0 :     m_pRightScrollWin->SetClickHdl(aLink);
    2603           0 : }
    2604             : 
    2605           0 : extern "C" SAL_DLLPUBLIC_EXPORT vcl::Window* SAL_CALL makeSwTokenWindow(vcl::Window *pParent, VclBuilder::stringmap &)
    2606             : {
    2607           0 :     return new SwTokenWindow(pParent);
    2608             : }
    2609             : 
    2610           0 : void SwTokenWindow::setAllocation(const Size &rAllocation)
    2611             : {
    2612           0 :     VclHBox::setAllocation(rAllocation);
    2613             : 
    2614           0 :     if (aControlList.empty())
    2615           0 :         return;
    2616             : 
    2617           0 :     Size aControlSize(m_pCtrlParentWin->GetSizePixel());
    2618           0 :     for (ctrl_iterator it = aControlList.begin(); it != aControlList.end(); ++it)
    2619             :     {
    2620           0 :         Control* pControl = (*it);
    2621           0 :         Size aSize(pControl->GetSizePixel());
    2622           0 :         aSize.Height() = aControlSize.Height();
    2623           0 :         pControl->SetSizePixel(aSize);
    2624             :     }
    2625             : }
    2626             : 
    2627           0 : SwTokenWindow::~SwTokenWindow()
    2628             : {
    2629           0 :     for (ctrl_iterator it = aControlList.begin(); it != aControlList.end(); ++it)
    2630             :     {
    2631           0 :         Control* pControl = (*it);
    2632           0 :         pControl->SetGetFocusHdl( Link() );
    2633           0 :         pControl->SetLoseFocusHdl( Link() );
    2634           0 :         delete pControl;
    2635             :     }
    2636           0 : }
    2637             : 
    2638           0 : void SwTokenWindow::SetForm(SwForm& rForm, sal_uInt16 nL)
    2639             : {
    2640           0 :     SetActiveControl(0);
    2641           0 :     bValid = true;
    2642             : 
    2643           0 :     if(pForm)
    2644             :     {
    2645             :         //apply current level settings to the form
    2646           0 :         for (ctrl_iterator iter = aControlList.begin(); iter != aControlList.end(); ++iter)
    2647           0 :             delete (*iter);
    2648             : 
    2649           0 :         aControlList.clear();
    2650             :     }
    2651             : 
    2652           0 :     nLevel = nL;
    2653           0 :     pForm = &rForm;
    2654             :     //now the display
    2655           0 :     if(nLevel < MAXLEVEL || rForm.GetTOXType() == TOX_AUTHORITIES)
    2656             :     {
    2657             :         // #i21237#
    2658           0 :         SwFormTokens aPattern = pForm->GetPattern(nLevel + 1);
    2659           0 :         SwFormTokens::iterator aIt = aPattern.begin();
    2660           0 :         bool bLastWasText = false; //assure alternating text - code - text
    2661             : 
    2662           0 :         Control* pSetActiveControl = 0;
    2663           0 :         while(aIt != aPattern.end()) // #i21237#
    2664             :         {
    2665           0 :             SwFormToken aToken(*aIt); // #i21237#
    2666             : 
    2667           0 :             if(TOKEN_TEXT == aToken.eTokenType)
    2668             :             {
    2669             :                 SAL_WARN_IF(bLastWasText, "sw", "text following text is invalid");
    2670           0 :                 Control* pCtrl = InsertItem(aToken.sText, aToken);
    2671           0 :                 bLastWasText = true;
    2672           0 :                 if(!GetActiveControl())
    2673           0 :                     SetActiveControl(pCtrl);
    2674             :             }
    2675             :             else
    2676             :             {
    2677           0 :                 if( !bLastWasText )
    2678             :                 {
    2679           0 :                     SwFormToken aTemp(TOKEN_TEXT);
    2680           0 :                     Control* pCtrl = InsertItem(aEmptyOUStr, aTemp);
    2681           0 :                     if(!pSetActiveControl)
    2682           0 :                         pSetActiveControl = pCtrl;
    2683             :                 }
    2684             : 
    2685           0 :                 OUString sForm;
    2686           0 :                 switch( aToken.eTokenType )
    2687             :                 {
    2688           0 :                 case TOKEN_ENTRY_NO:     sForm = SwForm::GetFormEntryNum(); break;
    2689           0 :                 case TOKEN_ENTRY_TEXT:   sForm = SwForm::GetFormEntryTxt(); break;
    2690           0 :                 case TOKEN_ENTRY:        sForm = SwForm::GetFormEntry(); break;
    2691           0 :                 case TOKEN_TAB_STOP:     sForm = SwForm::GetFormTab(); break;
    2692           0 :                 case TOKEN_PAGE_NUMS:    sForm = SwForm::GetFormPageNums(); break;
    2693           0 :                 case TOKEN_CHAPTER_INFO: sForm = SwForm::GetFormChapterMark(); break;
    2694           0 :                 case TOKEN_LINK_START:   sForm = SwForm::GetFormLinkStt(); break;
    2695           0 :                 case TOKEN_LINK_END:     sForm = SwForm::GetFormLinkEnd(); break;
    2696           0 :                 case TOKEN_AUTHORITY:    sForm = SwForm::GetFormAuth(); break;
    2697             :                 default:; //prevent warning
    2698             :                 }
    2699             : 
    2700           0 :                 InsertItem( sForm, aToken );
    2701           0 :                 bLastWasText = false;
    2702             :             }
    2703             : 
    2704           0 :             ++aIt; // #i21237#
    2705           0 :         }
    2706           0 :         if(!bLastWasText)
    2707             :         {
    2708           0 :             bLastWasText = true;
    2709           0 :             SwFormToken aTemp(TOKEN_TEXT);
    2710           0 :             Control* pCtrl = InsertItem(aEmptyOUStr, aTemp);
    2711           0 :             if(!pSetActiveControl)
    2712           0 :                 pSetActiveControl = pCtrl;
    2713             :         }
    2714           0 :         SetActiveControl(pSetActiveControl);
    2715             :     }
    2716           0 :     AdjustScrolling();
    2717           0 : }
    2718             : 
    2719           0 : void SwTokenWindow::SetActiveControl(Control* pSet)
    2720             : {
    2721           0 :     if( pSet != pActiveCtrl )
    2722             :     {
    2723           0 :         pActiveCtrl = pSet;
    2724           0 :         if( pActiveCtrl )
    2725             :         {
    2726           0 :             pActiveCtrl->GrabFocus();
    2727             :             //it must be a SwTOXEdit
    2728             :             const SwFormToken* pFToken;
    2729           0 :             if( WINDOW_EDIT == pActiveCtrl->GetType() )
    2730           0 :                 pFToken = &((SwTOXEdit*)pActiveCtrl)->GetFormToken();
    2731             :             else
    2732           0 :                 pFToken = &((SwTOXButton*)pActiveCtrl)->GetFormToken();
    2733             : 
    2734           0 :             SwFormToken aTemp( *pFToken );
    2735           0 :             aButtonSelectedHdl.Call( &aTemp );
    2736             :         }
    2737             :     }
    2738           0 : }
    2739             : 
    2740           0 : Control*    SwTokenWindow::InsertItem(const OUString& rText, const SwFormToken& rToken)
    2741             : {
    2742           0 :     Control* pRet = 0;
    2743           0 :     Size aControlSize(m_pCtrlParentWin->GetSizePixel());
    2744           0 :     Point aControlPos;
    2745             : 
    2746           0 :     if(!aControlList.empty())
    2747             :     {
    2748           0 :         Control* pLast = *(aControlList.rbegin());
    2749             : 
    2750           0 :         aControlSize = pLast->GetSizePixel();
    2751           0 :         aControlPos = pLast->GetPosPixel();
    2752           0 :         aControlPos.X() += aControlSize.Width();
    2753             :     }
    2754             : 
    2755           0 :     if(TOKEN_TEXT == rToken.eTokenType)
    2756             :     {
    2757           0 :         SwTOXEdit* pEdit = new SwTOXEdit(m_pCtrlParentWin, this, rToken);
    2758           0 :         pEdit->SetPosPixel(aControlPos);
    2759             : 
    2760           0 :         aControlList.push_back(pEdit);
    2761             : 
    2762           0 :         pEdit->SetText(rText);
    2763           0 :         sal_uInt32 nIndex = GetControlIndex( TOKEN_TEXT );
    2764           0 :         OUString strName(accessibleName + OUString::number(nIndex));
    2765           0 :         if ( nIndex == 1 )
    2766             :         {
    2767             :             /*Press left or right arrow to choose the structure controls*/
    2768           0 :             strName += " (" + sAdditionalAccnameString2 + ", "
    2769             :             /*Press Ctrl+Alt+A to move focus for more operations*/
    2770           0 :                      + sAdditionalAccnameString1 + ", "
    2771             :             /*Press Ctrl+Alt+B to move focus back to the current structure control*/
    2772           0 :                      + sAdditionalAccnameString3 + ")";
    2773             :         }
    2774           0 :         pEdit->SetAccessibleName(strName);
    2775           0 :         Size aEditSize(aControlSize);
    2776           0 :         aEditSize.Width() = pEdit->GetTextWidth(rText) + EDIT_MINWIDTH;
    2777           0 :         pEdit->SetSizePixel(aEditSize);
    2778           0 :         pEdit->SetModifyHdl(LINK(this, SwTokenWindow, EditResize ));
    2779           0 :         pEdit->SetPrevNextLink(LINK(this, SwTokenWindow, NextItemHdl));
    2780           0 :         pEdit->SetGetFocusHdl(LINK(this, SwTokenWindow, TbxFocusHdl));
    2781           0 :         pEdit->Show();
    2782           0 :         pRet = pEdit;
    2783             :     }
    2784             :     else
    2785             :     {
    2786           0 :         SwTOXButton* pButton = new SwTOXButton(m_pCtrlParentWin, this, rToken);
    2787           0 :         pButton->SetPosPixel(aControlPos);
    2788             : 
    2789           0 :         aControlList.push_back(pButton);
    2790             : 
    2791           0 :         Size aEditSize(aControlSize);
    2792           0 :         aEditSize.Width() = pButton->GetTextWidth(rText) + 5;
    2793           0 :         pButton->SetSizePixel(aEditSize);
    2794           0 :         pButton->SetPrevNextLink(LINK(this, SwTokenWindow, NextItemBtnHdl));
    2795           0 :         pButton->SetGetFocusHdl(LINK(this, SwTokenWindow, TbxFocusBtnHdl));
    2796             : 
    2797           0 :         if(TOKEN_AUTHORITY != rToken.eTokenType)
    2798           0 :             pButton->SetText(aButtonTexts[rToken.eTokenType]);
    2799             :         else
    2800             :         {
    2801             :             //use the first two chars as symbol
    2802             :             OUString sTmp(SwAuthorityFieldType::GetAuthFieldName(
    2803           0 :                         (ToxAuthorityField)rToken.nAuthorityField));
    2804           0 :             pButton->SetText(sTmp.copy(0, 2));
    2805             :         }
    2806             : 
    2807           0 :         sal_uInt32 nIndex = GetControlIndex( rToken.eTokenType );
    2808           0 :         OUString sAccName = aButtonHelpTexts[rToken.eTokenType];
    2809           0 :         if ( nIndex )
    2810             :         {
    2811           0 :             sAccName += " " + OUString::number(nIndex);
    2812             :         }
    2813           0 :         pButton->SetAccessibleName( sAccName );
    2814             : 
    2815           0 :         pButton->Show();
    2816           0 :         pRet = pButton;
    2817             :     }
    2818             : 
    2819           0 :     return pRet;
    2820             : }
    2821             : 
    2822           0 : void SwTokenWindow::InsertAtSelection(const OUString& rText, const SwFormToken& rToken)
    2823             : {
    2824             :     OSL_ENSURE(pActiveCtrl, "no active control!");
    2825             : 
    2826           0 :     if(!pActiveCtrl)
    2827           0 :         return;
    2828             : 
    2829           0 :     SwFormToken aToInsertToken(rToken);
    2830             : 
    2831           0 :     if(TOKEN_LINK_START == aToInsertToken.eTokenType)
    2832             :     {
    2833             :         //determine if start or end of hyperlink is appropriate
    2834             :         //eventually change a following link start into a link end
    2835             :         // groups of LS LE should be ignored
    2836             :         // <insert>
    2837             :         //LS <insert>
    2838             :         //LE <insert>
    2839             :         //<insert> LS
    2840             :         //<insert> LE
    2841             :         //<insert>
    2842           0 :         bool bPreStartLinkFound = false;
    2843           0 :         bool bPreEndLinkFound = false;
    2844             : 
    2845           0 :         const Control* pControl = 0;
    2846           0 :         const Control* pExchange = 0;
    2847             : 
    2848           0 :         ctrl_const_iterator it = aControlList.begin();
    2849           0 :         for( ; it != aControlList.end() && pActiveCtrl != (*it); ++it )
    2850             :         {
    2851           0 :             pControl = *it;
    2852             : 
    2853           0 :             if( WINDOW_EDIT != pControl->GetType())
    2854             :             {
    2855             :                 const SwFormToken& rNewToken =
    2856           0 :                                 ((SwTOXButton*)pControl)->GetFormToken();
    2857             : 
    2858           0 :                 if( TOKEN_LINK_START == rNewToken.eTokenType )
    2859             :                 {
    2860           0 :                     bPreStartLinkFound = true;
    2861           0 :                     pExchange = 0;
    2862             :                 }
    2863           0 :                 else if(TOKEN_LINK_END == rNewToken.eTokenType)
    2864             :                 {
    2865           0 :                     if( bPreStartLinkFound )
    2866           0 :                         bPreStartLinkFound = false;
    2867             :                     else
    2868             :                     {
    2869           0 :                         bPreEndLinkFound = false;
    2870           0 :                         pExchange = pControl;
    2871             :                     }
    2872             :                 }
    2873             :             }
    2874             :         }
    2875             : 
    2876           0 :         bool bPostLinkStartFound = false;
    2877             : 
    2878           0 :         if(!bPreStartLinkFound && !bPreEndLinkFound)
    2879             :         {
    2880           0 :             for( ; it != aControlList.end(); ++it )
    2881             :             {
    2882           0 :                 pControl = *it;
    2883             : 
    2884           0 :                 if( pControl != pActiveCtrl &&
    2885           0 :                     WINDOW_EDIT != pControl->GetType())
    2886             :                 {
    2887             :                     const SwFormToken& rNewToken =
    2888           0 :                                     ((SwTOXButton*)pControl)->GetFormToken();
    2889             : 
    2890           0 :                     if( TOKEN_LINK_START == rNewToken.eTokenType )
    2891             :                     {
    2892           0 :                         if(bPostLinkStartFound)
    2893           0 :                             break;
    2894           0 :                         bPostLinkStartFound = true;
    2895           0 :                         pExchange = pControl;
    2896             :                     }
    2897           0 :                     else if(TOKEN_LINK_END == rNewToken.eTokenType )
    2898             :                     {
    2899           0 :                         if(bPostLinkStartFound)
    2900             :                         {
    2901           0 :                             bPostLinkStartFound = false;
    2902           0 :                             pExchange = 0;
    2903             :                         }
    2904           0 :                         break;
    2905             :                     }
    2906             :                 }
    2907             :             }
    2908             :         }
    2909             : 
    2910           0 :         if(bPreStartLinkFound)
    2911             :         {
    2912           0 :             aToInsertToken.eTokenType = TOKEN_LINK_END;
    2913           0 :             aToInsertToken.sText =  aButtonTexts[TOKEN_LINK_END];
    2914             :         }
    2915             : 
    2916           0 :         if(bPostLinkStartFound)
    2917             :         {
    2918             :             OSL_ENSURE(pExchange, "no control to exchange?");
    2919           0 :             if(pExchange)
    2920             :             {
    2921           0 :                 ((SwTOXButton*)pExchange)->SetLinkEnd();
    2922           0 :                 ((SwTOXButton*)pExchange)->SetText(aButtonTexts[TOKEN_LINK_END]);
    2923             :             }
    2924             :         }
    2925             : 
    2926           0 :         if(bPreEndLinkFound)
    2927             :         {
    2928             :             OSL_ENSURE(pExchange, "no control to exchange?");
    2929             : 
    2930           0 :             if(pExchange)
    2931             :             {
    2932           0 :                 ((SwTOXButton*)pExchange)->SetLinkStart();
    2933           0 :                 ((SwTOXButton*)pExchange)->SetText(aButtonTexts[TOKEN_LINK_START]);
    2934             :             }
    2935             :         }
    2936             :     }
    2937             : 
    2938             :     //if the active control is text then insert a new button at the selection
    2939             :     //else replace the button
    2940             :     ctrl_iterator iterActive = std::find(aControlList.begin(),
    2941           0 :                                          aControlList.end(), pActiveCtrl);
    2942             : 
    2943             :     assert(iterActive != aControlList.end());
    2944           0 :     if (iterActive == aControlList.end())
    2945           0 :         return;
    2946             : 
    2947           0 :     Size aControlSize(GetOutputSizePixel());
    2948             : 
    2949           0 :     if( WINDOW_EDIT == pActiveCtrl->GetType())
    2950             :     {
    2951           0 :         ++iterActive;
    2952             : 
    2953           0 :         Selection aSel = ((SwTOXEdit*)pActiveCtrl)->GetSelection();
    2954           0 :         aSel.Justify();
    2955             : 
    2956           0 :         const OUString sEditText = ((SwTOXEdit*)pActiveCtrl)->GetText();
    2957           0 :         const OUString sLeft = sEditText.copy( 0, aSel.A() );
    2958           0 :         const OUString sRight = sEditText.copy( aSel.B() );
    2959             : 
    2960           0 :         ((SwTOXEdit*)pActiveCtrl)->SetText(sLeft);
    2961           0 :         ((SwTOXEdit*)pActiveCtrl)->AdjustSize();
    2962             : 
    2963           0 :         SwFormToken aTmpToken(TOKEN_TEXT);
    2964           0 :         SwTOXEdit* pEdit = new SwTOXEdit(m_pCtrlParentWin, this, aTmpToken);
    2965             : 
    2966           0 :         iterActive = aControlList.insert(iterActive, pEdit);
    2967             : 
    2968           0 :         pEdit->SetText(sRight);
    2969           0 :         sal_uInt32 nIndex = GetControlIndex( TOKEN_TEXT );
    2970           0 :         OUString strName(accessibleName + OUString::number(nIndex));
    2971           0 :         if ( nIndex == 1)
    2972             :         {
    2973             :             /*Press left or right arrow to choose the structure controls*/
    2974           0 :             strName += " (" + sAdditionalAccnameString2 + ", "
    2975             :             /*Press Ctrl+Alt+A to move focus for more operations*/
    2976           0 :                      + sAdditionalAccnameString1 + ", "
    2977             :             /*Press Ctrl+Alt+B to move focus back to the current structure control*/
    2978           0 :                      + sAdditionalAccnameString3 + ")";
    2979             :         }
    2980           0 :         pEdit->SetAccessibleName(strName);
    2981           0 :         pEdit->SetSizePixel(aControlSize);
    2982           0 :         pEdit->AdjustSize();
    2983           0 :         pEdit->SetModifyHdl(LINK(this, SwTokenWindow, EditResize ));
    2984           0 :         pEdit->SetPrevNextLink(LINK(this, SwTokenWindow, NextItemHdl));
    2985           0 :         pEdit->SetGetFocusHdl(LINK(this, SwTokenWindow, TbxFocusHdl));
    2986           0 :         pEdit->Show();
    2987             :     }
    2988             :     else
    2989             :     {
    2990           0 :         iterActive = aControlList.erase(iterActive);
    2991           0 :         pActiveCtrl->Hide();
    2992           0 :         delete pActiveCtrl;
    2993             :     }
    2994             : 
    2995             :     //now the new button
    2996           0 :     SwTOXButton* pButton = new SwTOXButton(m_pCtrlParentWin, this, aToInsertToken);
    2997             : 
    2998           0 :     aControlList.insert(iterActive, pButton);
    2999             : 
    3000           0 :     pButton->SetPrevNextLink(LINK(this, SwTokenWindow, NextItemBtnHdl));
    3001           0 :     pButton->SetGetFocusHdl(LINK(this, SwTokenWindow, TbxFocusBtnHdl));
    3002             : 
    3003           0 :     if(TOKEN_AUTHORITY != aToInsertToken.eTokenType)
    3004             :     {
    3005           0 :         pButton->SetText(aButtonTexts[aToInsertToken.eTokenType]);
    3006             :     }
    3007             :     else
    3008             :     {
    3009             :         //use the first two chars as symbol
    3010             :         OUString sTmp(SwAuthorityFieldType::GetAuthFieldName(
    3011           0 :                     (ToxAuthorityField)aToInsertToken.nAuthorityField));
    3012           0 :         pButton->SetText(sTmp.copy(0, 2));
    3013             :     }
    3014             : 
    3015           0 :     Size aEditSize(GetOutputSizePixel());
    3016           0 :     aEditSize.Width() = pButton->GetTextWidth(rText) + 5;
    3017           0 :     pButton->SetSizePixel(aEditSize);
    3018           0 :     pButton->Check(true);
    3019           0 :     pButton->Show();
    3020           0 :     SetActiveControl(pButton);
    3021             : 
    3022           0 :     AdjustPositions();
    3023             : }
    3024             : 
    3025           0 : void SwTokenWindow::RemoveControl(SwTOXButton* pDel, bool bInternalCall )
    3026             : {
    3027           0 :     if(bInternalCall && TOX_AUTHORITIES == pForm->GetTOXType())
    3028           0 :         m_pParent->PreTokenButtonRemoved(pDel->GetFormToken());
    3029             : 
    3030           0 :     ctrl_iterator it = std::find(aControlList.begin(), aControlList.end(), pDel);
    3031             : 
    3032             :     assert(it != aControlList.end()); //Control does not exist!
    3033           0 :     if (it == aControlList.end())
    3034           0 :         return;
    3035             : 
    3036             :     // the two neighbours of the box must be merged
    3037             :     // the properties of the right one will be lost
    3038             :     assert(it != aControlList.begin() && it != aControlList.end() - 1); //Button at first or last position?
    3039           0 :     if (it == aControlList.begin() || it == aControlList.end() - 1)
    3040           0 :         return;
    3041             : 
    3042           0 :     ctrl_iterator itLeft = it, itRight = it;
    3043           0 :     --itLeft;
    3044           0 :     ++itRight;
    3045           0 :     Control *pLeftEdit = *itLeft;
    3046           0 :     Control *pRightEdit = *itRight;
    3047             : 
    3048           0 :     ((SwTOXEdit*)pLeftEdit)->SetText(((SwTOXEdit*)pLeftEdit)->GetText() +
    3049           0 :                                      ((SwTOXEdit*)pRightEdit)->GetText());
    3050           0 :     ((SwTOXEdit*)pLeftEdit)->AdjustSize();
    3051             : 
    3052           0 :     aControlList.erase(itRight);
    3053           0 :     delete pRightEdit;
    3054             : 
    3055           0 :     aControlList.erase(it);
    3056           0 :     pActiveCtrl->Hide();
    3057           0 :     delete pActiveCtrl;
    3058             : 
    3059           0 :     SetActiveControl(pLeftEdit);
    3060           0 :     AdjustPositions();
    3061           0 :     if(aModifyHdl.IsSet())
    3062           0 :         aModifyHdl.Call(0);
    3063             : }
    3064             : 
    3065           0 : void SwTokenWindow::AdjustPositions()
    3066             : {
    3067           0 :     if(aControlList.size() > 1)
    3068             :     {
    3069           0 :         ctrl_iterator it = aControlList.begin();
    3070           0 :         Control* pCtrl = *it;
    3071           0 :         ++it;
    3072             : 
    3073           0 :         Point aNextPos = pCtrl->GetPosPixel();
    3074           0 :         aNextPos.X() += pCtrl->GetSizePixel().Width();
    3075             : 
    3076           0 :         for(; it != aControlList.end(); ++it)
    3077             :         {
    3078           0 :             pCtrl = *it;
    3079           0 :             pCtrl->SetPosPixel(aNextPos);
    3080           0 :             aNextPos.X() += pCtrl->GetSizePixel().Width();
    3081             :         }
    3082             : 
    3083           0 :         AdjustScrolling();
    3084             :     }
    3085           0 : };
    3086             : 
    3087           0 : void SwTokenWindow::MoveControls(long nOffset)
    3088             : {
    3089             :     // move the complete list
    3090           0 :     for (ctrl_iterator it = aControlList.begin(); it != aControlList.end(); ++it)
    3091             :     {
    3092           0 :         Control *pCtrl = *it;
    3093             : 
    3094           0 :         Point aPos = pCtrl->GetPosPixel();
    3095           0 :         aPos.X() += nOffset;
    3096             : 
    3097           0 :         pCtrl->SetPosPixel(aPos);
    3098             :     }
    3099           0 : }
    3100             : 
    3101           0 : void SwTokenWindow::AdjustScrolling()
    3102             : {
    3103           0 :     if(aControlList.size() > 1)
    3104             :     {
    3105             :         //validate scroll buttons
    3106           0 :         Control* pFirstCtrl = *(aControlList.begin());
    3107           0 :         Control* pLastCtrl = *(aControlList.rbegin());
    3108             : 
    3109           0 :         long nSpace = m_pCtrlParentWin->GetSizePixel().Width();
    3110           0 :         long nWidth = pLastCtrl->GetPosPixel().X() - pFirstCtrl->GetPosPixel().X()
    3111           0 :                                                     + pLastCtrl->GetSizePixel().Width();
    3112           0 :         bool bEnable = nWidth > nSpace;
    3113             : 
    3114             :         //the active control must be visible
    3115           0 :         if(bEnable && pActiveCtrl)
    3116             :         {
    3117           0 :             Point aActivePos(pActiveCtrl->GetPosPixel());
    3118             : 
    3119           0 :             long nMove = 0;
    3120             : 
    3121           0 :             if(aActivePos.X() < 0)
    3122           0 :                 nMove = -aActivePos.X();
    3123           0 :             else if((aActivePos.X() + pActiveCtrl->GetSizePixel().Width())  > nSpace)
    3124           0 :                 nMove = -(aActivePos.X() + pActiveCtrl->GetSizePixel().Width() - nSpace);
    3125             : 
    3126           0 :             if(nMove)
    3127           0 :                 MoveControls(nMove);
    3128             : 
    3129           0 :             m_pLeftScrollWin->Enable(pFirstCtrl->GetPosPixel().X() < 0);
    3130             : 
    3131           0 :             m_pRightScrollWin->Enable((pLastCtrl->GetPosPixel().X() + pLastCtrl->GetSizePixel().Width()) > nSpace);
    3132             :         }
    3133             :         else
    3134             :         {
    3135             :             //if the control fits into the space then the first control must be at position 0
    3136           0 :             long nFirstPos = pFirstCtrl->GetPosPixel().X();
    3137             : 
    3138           0 :             if(nFirstPos != 0)
    3139           0 :                 MoveControls(-nFirstPos);
    3140             : 
    3141           0 :             m_pRightScrollWin->Enable(false);
    3142           0 :             m_pLeftScrollWin->Enable(false);
    3143             :         }
    3144             :     }
    3145           0 : }
    3146             : 
    3147           0 : IMPL_LINK(SwTokenWindow, ScrollHdl, ImageButton*, pBtn )
    3148             : {
    3149           0 :     if(aControlList.empty())
    3150           0 :         return 0;
    3151             : 
    3152           0 :     const long nSpace = m_pCtrlParentWin->GetSizePixel().Width();
    3153             : #if OSL_DEBUG_LEVEL > 1
    3154             :     //find all start/end positions and print it
    3155             :     OUString sMessage("Space: " + OUString::number(nSpace) + " | ");
    3156             : 
    3157             :     for (ctrl_const_iterator it = aControlList.begin(); it != aControlList.end(); ++it)
    3158             :     {
    3159             :         Control *pDebugCtrl = *it;
    3160             : 
    3161             :         long nDebugXPos = pDebugCtrl->GetPosPixel().X();
    3162             :         long nDebugWidth = pDebugCtrl->GetSizePixel().Width();
    3163             : 
    3164             :         sMessage += OUString::number(nDebugXPos) + " "
    3165             :                   + OUString::number(nDebugXPos + nDebugWidth) + " | ";
    3166             :     }
    3167             : 
    3168             : #endif
    3169             : 
    3170           0 :     long nMove = 0;
    3171           0 :     if(pBtn == m_pLeftScrollWin)
    3172             :     {
    3173             :         //find the first completely visible control (left edge visible)
    3174           0 :         for (ctrl_iterator it = aControlList.begin(); it != aControlList.end(); ++it)
    3175             :         {
    3176           0 :             Control *pCtrl = *it;
    3177             : 
    3178           0 :             long nXPos = pCtrl->GetPosPixel().X();
    3179             : 
    3180           0 :             if (nXPos >= 0)
    3181             :             {
    3182           0 :                 if (it == aControlList.begin())
    3183             :                 {
    3184             :                     //move the current control to the left edge
    3185           0 :                     nMove = -nXPos;
    3186             :                 }
    3187             :                 else
    3188             :                 {
    3189             :                     //move the left neighbor to the start position
    3190           0 :                     ctrl_iterator itLeft = it;
    3191           0 :                     --itLeft;
    3192           0 :                     Control *pLeft = *itLeft;
    3193             : 
    3194           0 :                     nMove = -pLeft->GetPosPixel().X();
    3195             :                 }
    3196             : 
    3197           0 :                 break;
    3198             :             }
    3199             :         }
    3200             :     }
    3201             :     else
    3202             :     {
    3203             :         //find the first completely visible control (right edge visible)
    3204           0 :         for (ctrl_reverse_iterator it = aControlList.rbegin(); it != aControlList.rend(); ++it)
    3205             :         {
    3206           0 :             Control *pCtrl = *it;
    3207             : 
    3208           0 :             long nCtrlWidth = pCtrl->GetSizePixel().Width();
    3209           0 :             long nXPos = pCtrl->GetPosPixel().X() + nCtrlWidth;
    3210             : 
    3211           0 :             if (nXPos <= nSpace)
    3212             :             {
    3213           0 :                 if (it != aControlList.rbegin())
    3214             :                 {
    3215             :                     //move the right neighbor  to the right edge right aligned
    3216           0 :                     ctrl_reverse_iterator itRight = it;
    3217           0 :                     --itRight;
    3218           0 :                     Control *pRight = *itRight;
    3219           0 :                     nMove = nSpace - pRight->GetPosPixel().X() - pRight->GetSizePixel().Width();
    3220             :                 }
    3221             : 
    3222           0 :                 break;
    3223             :             }
    3224             :         }
    3225             : 
    3226             :         //move it left until it's completely visible
    3227             :     }
    3228             : 
    3229           0 :     if(nMove)
    3230             :     {
    3231             :         // move the complete list
    3232           0 :         MoveControls(nMove);
    3233             : 
    3234           0 :         Control *pCtrl = 0;
    3235             : 
    3236           0 :         pCtrl = *(aControlList.begin());
    3237           0 :         m_pLeftScrollWin->Enable(pCtrl->GetPosPixel().X() < 0);
    3238             : 
    3239           0 :         pCtrl = *(aControlList.rbegin());
    3240           0 :         m_pRightScrollWin->Enable((pCtrl->GetPosPixel().X() + pCtrl->GetSizePixel().Width()) > nSpace);
    3241             :     }
    3242             : 
    3243           0 :     return 0;
    3244             : }
    3245             : 
    3246           0 : OUString SwTokenWindow::GetPattern() const
    3247             : {
    3248           0 :     OUString sRet;
    3249             : 
    3250           0 :     for (ctrl_const_iterator it = aControlList.begin(); it != aControlList.end(); ++it)
    3251             :     {
    3252           0 :         const Control *pCtrl = *it;
    3253             : 
    3254           0 :         const SwFormToken &rNewToken = pCtrl->GetType() == WINDOW_EDIT
    3255             :                 ? ((SwTOXEdit*)pCtrl)->GetFormToken()
    3256           0 :                 : ((SwTOXButton*)pCtrl)->GetFormToken();
    3257             : 
    3258             :         //TODO: prevent input of TOX_STYLE_DELIMITER in KeyInput
    3259           0 :         sRet += rNewToken.GetString();
    3260             :     }
    3261             : 
    3262           0 :     return sRet;
    3263             : }
    3264             : 
    3265             : // Check if a control of the specified TokenType is already contained in the list
    3266           0 : bool SwTokenWindow::Contains(FormTokenType eSearchFor) const
    3267             : {
    3268           0 :     bool bRet = false;
    3269             : 
    3270           0 :     for (ctrl_const_iterator it = aControlList.begin(); it != aControlList.end(); ++it)
    3271             :     {
    3272           0 :         const Control *pCtrl = *it;
    3273             : 
    3274           0 :         const SwFormToken &rNewToken = pCtrl->GetType() == WINDOW_EDIT
    3275             :                 ? ((SwTOXEdit*)pCtrl)->GetFormToken()
    3276           0 :                 : ((SwTOXButton*)pCtrl)->GetFormToken();
    3277             : 
    3278           0 :         if (eSearchFor == rNewToken.eTokenType)
    3279             :         {
    3280           0 :             bRet = true;
    3281           0 :             break;
    3282             :         }
    3283             :     }
    3284             : 
    3285           0 :     return bRet;
    3286             : }
    3287             : 
    3288           0 : bool SwTokenWindow::CreateQuickHelp(Control* pCtrl,
    3289             :             const SwFormToken& rToken,
    3290             :             const HelpEvent& rHEvt)
    3291             : {
    3292           0 :     bool bRet = false;
    3293           0 :     if( rHEvt.GetMode() & HELPMODE_QUICK )
    3294             :     {
    3295           0 :         bool bBalloon = Help::IsBalloonHelpEnabled();
    3296           0 :         OUString sEntry;
    3297           0 :         if(bBalloon || rToken.eTokenType != TOKEN_AUTHORITY)
    3298           0 :             sEntry = (aButtonHelpTexts[rToken.eTokenType]);
    3299           0 :         if(rToken.eTokenType == TOKEN_AUTHORITY )
    3300             :         {
    3301           0 :              sEntry += SwAuthorityFieldType::GetAuthFieldName(
    3302           0 :                                 (ToxAuthorityField) rToken.nAuthorityField);
    3303             :         }
    3304             : 
    3305           0 :         Point aPos = OutputToScreenPixel(pCtrl->GetPosPixel());
    3306           0 :         Rectangle aItemRect( aPos, pCtrl->GetSizePixel() );
    3307           0 :         if ( rToken.eTokenType != TOKEN_TAB_STOP )
    3308             :         {
    3309           0 :             if (!rToken.sCharStyleName.isEmpty())
    3310             :             {
    3311             :                 sEntry += OUString(bBalloon ? '\n' : ' ')
    3312           0 :                         + sCharStyle + rToken.sCharStyleName;
    3313             :             }
    3314             :         }
    3315           0 :         if(bBalloon)
    3316             :         {
    3317           0 :             Help::ShowBalloon( this, aPos, aItemRect, sEntry );
    3318             :         }
    3319             :         else
    3320             :             Help::ShowQuickHelp( this, aItemRect, sEntry,
    3321           0 :                 QUICKHELP_LEFT|QUICKHELP_VCENTER );
    3322           0 :         bRet = true;
    3323             :     }
    3324           0 :     return bRet;
    3325             : }
    3326             : 
    3327           0 : IMPL_LINK(SwTokenWindow, EditResize, Edit*, pEdit)
    3328             : {
    3329           0 :     ((SwTOXEdit*)pEdit)->AdjustSize();
    3330           0 :     AdjustPositions();
    3331           0 :     if(aModifyHdl.IsSet())
    3332           0 :         aModifyHdl.Call(0);
    3333           0 :     return 0;
    3334             : }
    3335             : 
    3336           0 : IMPL_LINK(SwTokenWindow, NextItemHdl, SwTOXEdit*,  pEdit)
    3337             : {
    3338           0 :     ctrl_iterator it = std::find(aControlList.begin(),aControlList.end(),pEdit);
    3339             : 
    3340           0 :     if (it == aControlList.end())
    3341           0 :         return 0;
    3342             : 
    3343           0 :     ctrl_iterator itTest = it;
    3344           0 :     ++itTest;
    3345             : 
    3346           0 :     if ((it != aControlList.begin() && !pEdit->IsNextControl()) ||
    3347           0 :         (itTest != aControlList.end() && pEdit->IsNextControl()))
    3348             :     {
    3349           0 :         ctrl_iterator iterFocus = it;
    3350           0 :         pEdit->IsNextControl() ? ++iterFocus : --iterFocus;
    3351             : 
    3352           0 :         Control *pCtrlFocus = *iterFocus;
    3353           0 :         pCtrlFocus->GrabFocus();
    3354           0 :         static_cast<SwTOXButton*>(pCtrlFocus)->Check();
    3355             : 
    3356           0 :         AdjustScrolling();
    3357             :     }
    3358             : 
    3359           0 :     return 0;
    3360             : }
    3361             : 
    3362           0 : IMPL_LINK(SwTokenWindow, TbxFocusHdl, SwTOXEdit*, pEdit)
    3363             : {
    3364           0 :     for (ctrl_iterator it = aControlList.begin(); it != aControlList.end(); ++it)
    3365             :     {
    3366           0 :         Control *pCtrl = *it;
    3367             : 
    3368           0 :         if (pCtrl && pCtrl->GetType() != WINDOW_EDIT)
    3369           0 :             static_cast<SwTOXButton*>(pCtrl)->Check(false);
    3370             :     }
    3371             : 
    3372           0 :     SetActiveControl(pEdit);
    3373             : 
    3374           0 :     return 0;
    3375             : }
    3376             : 
    3377           0 : IMPL_LINK(SwTokenWindow, NextItemBtnHdl, SwTOXButton*, pBtn )
    3378             : {
    3379           0 :     ctrl_iterator it = std::find(aControlList.begin(),aControlList.end(),pBtn);
    3380             : 
    3381           0 :     if (it == aControlList.end())
    3382           0 :         return 0;
    3383             : 
    3384           0 :     ctrl_iterator itTest = it;
    3385           0 :     ++itTest;
    3386             : 
    3387           0 :     if (!pBtn->IsNextControl() || (itTest != aControlList.end() && pBtn->IsNextControl()))
    3388             :     {
    3389           0 :         bool isNext = pBtn->IsNextControl();
    3390             : 
    3391           0 :         ctrl_iterator iterFocus = it;
    3392           0 :         isNext ? ++iterFocus : --iterFocus;
    3393             : 
    3394           0 :         Control *pCtrlFocus = *iterFocus;
    3395           0 :         pCtrlFocus->GrabFocus();
    3396           0 :         Selection aSel(0,0);
    3397             : 
    3398           0 :         if (!isNext)
    3399             :         {
    3400           0 :             const sal_Int32 nLen = static_cast<SwTOXEdit*>(pCtrlFocus)->GetText().getLength();
    3401             : 
    3402           0 :             aSel.A() = nLen;
    3403           0 :             aSel.B() = nLen;
    3404             :         }
    3405             : 
    3406           0 :         static_cast<SwTOXEdit*>(pCtrlFocus)->SetSelection(aSel);
    3407             : 
    3408           0 :         pBtn->Check(false);
    3409             : 
    3410           0 :         AdjustScrolling();
    3411             :     }
    3412             : 
    3413           0 :     return 0;
    3414             : }
    3415             : 
    3416           0 : IMPL_LINK(SwTokenWindow, TbxFocusBtnHdl, SwTOXButton*, pBtn )
    3417             : {
    3418           0 :     for (ctrl_iterator it = aControlList.begin(); it != aControlList.end(); ++it)
    3419             :     {
    3420           0 :         Control *pControl = *it;
    3421             : 
    3422           0 :         if (pControl && WINDOW_EDIT != pControl->GetType())
    3423           0 :             static_cast<SwTOXButton*>(pControl)->Check(pBtn == pControl);
    3424             :     }
    3425             : 
    3426           0 :     SetActiveControl(pBtn);
    3427             : 
    3428           0 :     return 0;
    3429             : }
    3430             : 
    3431           0 : void SwTokenWindow::GetFocus()
    3432             : {
    3433           0 :     if(GETFOCUS_TAB & GetGetFocusFlags())
    3434             :     {
    3435           0 :         if (!aControlList.empty())
    3436             :         {
    3437           0 :             Control *pFirst = *aControlList.begin();
    3438             : 
    3439           0 :             if (pFirst)
    3440             :             {
    3441           0 :                 pFirst->GrabFocus();
    3442           0 :                 SetActiveControl(pFirst);
    3443           0 :                 AdjustScrolling();
    3444             :             }
    3445             :         }
    3446             :     }
    3447           0 : }
    3448             : 
    3449           0 : void SwTokenWindow::SetFocus2theAllBtn()
    3450             : {
    3451           0 :     if (m_pParent)
    3452             :     {
    3453           0 :         m_pParent->SetFocus2theAllBtn();
    3454             :     }
    3455           0 : }
    3456             : 
    3457           0 : sal_uInt32 SwTokenWindow::GetControlIndex(FormTokenType eType) const
    3458             : {
    3459             :     //there are only one entry-text button and only one page-number button,
    3460             :     //so we need not add index for these two buttons.
    3461           0 :     if ( eType == TOKEN_ENTRY_TEXT || eType == TOKEN_PAGE_NUMS )
    3462             :     {
    3463           0 :         return 0;
    3464             :     }
    3465             : 
    3466           0 :     sal_uInt32 nIndex = 0;
    3467           0 :     for (ctrl_const_iterator it = aControlList.begin(); it != aControlList.end(); ++it)
    3468             :     {
    3469           0 :         const Control* pControl = *it;
    3470           0 :         const SwFormToken& rNewToken = WINDOW_EDIT == pControl->GetType()
    3471             :             ? ((SwTOXEdit*)pControl)->GetFormToken()
    3472           0 :             : ((SwTOXButton*)pControl)->GetFormToken();
    3473             : 
    3474           0 :         if(eType == rNewToken.eTokenType)
    3475             :         {
    3476           0 :             ++nIndex;
    3477             :         }
    3478             :     }
    3479             : 
    3480           0 :     return nIndex;
    3481             : }
    3482             : 
    3483           0 : SwTOXStylesTabPage::SwTOXStylesTabPage(vcl::Window* pParent, const SfxItemSet& rAttrSet )
    3484             :     : SfxTabPage(pParent, "TocStylesPage",
    3485             :         "modules/swriter/ui/tocstylespage.ui", &rAttrSet)
    3486           0 :     , m_pCurrentForm(0)
    3487             : {
    3488           0 :     get(m_pLevelLB, "levels");
    3489           0 :     get(m_pAssignBT, "assign");
    3490           0 :     get(m_pParaLayLB, "styles");
    3491           0 :     m_pParaLayLB->SetStyle(m_pParaLayLB->GetStyle() | WB_SORT);
    3492           0 :     get(m_pStdBT, "default");
    3493           0 :     get(m_pEditStyleBT, "edit");
    3494           0 :     long nHeight = m_pLevelLB->GetTextHeight() * 16;
    3495           0 :     m_pLevelLB->set_height_request(nHeight);
    3496           0 :     m_pParaLayLB->set_height_request(nHeight);
    3497             : 
    3498           0 :     SetExchangeSupport( true );
    3499             : 
    3500           0 :     m_pEditStyleBT->SetClickHdl   (LINK(   this, SwTOXStylesTabPage, EditStyleHdl));
    3501           0 :     m_pAssignBT->SetClickHdl      (LINK(   this, SwTOXStylesTabPage, AssignHdl));
    3502           0 :     m_pStdBT->SetClickHdl         (LINK(   this, SwTOXStylesTabPage, StdHdl));
    3503           0 :     m_pParaLayLB->SetSelectHdl    (LINK(   this, SwTOXStylesTabPage, EnableSelectHdl));
    3504           0 :     m_pLevelLB->SetSelectHdl(LINK(this, SwTOXStylesTabPage, EnableSelectHdl));
    3505           0 :     m_pParaLayLB->SetDoubleClickHdl(LINK(  this, SwTOXStylesTabPage, DoubleClickHdl));
    3506           0 : }
    3507             : 
    3508           0 : SwTOXStylesTabPage::~SwTOXStylesTabPage()
    3509             : {
    3510           0 :     delete m_pCurrentForm;
    3511           0 : }
    3512             : 
    3513           0 : bool SwTOXStylesTabPage::FillItemSet( SfxItemSet* )
    3514             : {
    3515           0 :     return true;
    3516             : }
    3517             : 
    3518           0 : void SwTOXStylesTabPage::Reset( const SfxItemSet* rSet )
    3519             : {
    3520           0 :     ActivatePage(*rSet);
    3521           0 : }
    3522             : 
    3523           0 : void SwTOXStylesTabPage::ActivatePage( const SfxItemSet& )
    3524             : {
    3525           0 :     m_pCurrentForm = new SwForm(GetForm());
    3526           0 :     m_pParaLayLB->Clear();
    3527           0 :     m_pLevelLB->Clear();
    3528             : 
    3529             :     // not hyperlink for user directories
    3530             : 
    3531           0 :     const sal_uInt16 nSize = m_pCurrentForm->GetFormMax();
    3532             : 
    3533             :     // display form pattern without title
    3534             : 
    3535             :     // display 1st TemplateEntry
    3536           0 :     OUString aStr( SW_RES( STR_TITLE ));
    3537           0 :     if( !m_pCurrentForm->GetTemplate( 0 ).isEmpty() )
    3538             :     {
    3539           0 :         aStr += " " + OUString(aDeliStart)
    3540           0 :               + m_pCurrentForm->GetTemplate( 0 )
    3541           0 :               + OUString(aDeliEnd);
    3542             :     }
    3543           0 :     m_pLevelLB->InsertEntry(aStr);
    3544             : 
    3545           0 :     for( sal_uInt16 i=1; i < nSize; ++i )
    3546             :     {
    3547           0 :         if( TOX_INDEX == m_pCurrentForm->GetTOXType() &&
    3548             :             FORM_ALPHA_DELIMITTER == i )
    3549             :         {
    3550           0 :             aStr = SW_RESSTR(STR_ALPHA);
    3551             :         }
    3552             :         else
    3553             :         {
    3554           0 :             aStr = SW_RESSTR(STR_LEVEL) + OUString::number(
    3555           0 :                     TOX_INDEX == m_pCurrentForm->GetTOXType() ? i - 1 : i );
    3556             :         }
    3557           0 :         if( !m_pCurrentForm->GetTemplate( i ).isEmpty() )
    3558             :         {
    3559           0 :             aStr += " " + OUString(aDeliStart)
    3560           0 :                   + m_pCurrentForm->GetTemplate( i )
    3561           0 :                   + OUString(aDeliEnd);
    3562             :         }
    3563           0 :         m_pLevelLB->InsertEntry( aStr );
    3564             :     }
    3565             : 
    3566             :     // initialise templates
    3567             :     const SwTxtFmtColl *pColl;
    3568           0 :     SwWrtShell& rSh = ((SwMultiTOXTabDialog*)GetTabDialog())->GetWrtShell();
    3569           0 :     const sal_uInt16 nSz = rSh.GetTxtFmtCollCount();
    3570             : 
    3571           0 :     for( sal_uInt16 i = 0; i < nSz; ++i )
    3572           0 :         if( !(pColl = &rSh.GetTxtFmtColl( i ))->IsDefault() )
    3573           0 :             m_pParaLayLB->InsertEntry( pColl->GetName() );
    3574             : 
    3575             :     // query pool collections and set them for the directory
    3576           0 :     for( sal_uInt16 i = 0; i < m_pCurrentForm->GetFormMax(); ++i )
    3577             :     {
    3578           0 :         aStr = m_pCurrentForm->GetTemplate( i );
    3579           0 :         if( !aStr.isEmpty() &&
    3580           0 :             LISTBOX_ENTRY_NOTFOUND == m_pParaLayLB->GetEntryPos( aStr ))
    3581           0 :             m_pParaLayLB->InsertEntry( aStr );
    3582             :     }
    3583             : 
    3584           0 :     EnableSelectHdl(m_pParaLayLB);
    3585           0 : }
    3586             : 
    3587           0 : int SwTOXStylesTabPage::DeactivatePage( SfxItemSet* /*pSet*/  )
    3588             : {
    3589           0 :     GetForm() = *m_pCurrentForm;
    3590           0 :     return LEAVE_PAGE;
    3591             : }
    3592             : 
    3593           0 : SfxTabPage* SwTOXStylesTabPage::Create( vcl::Window* pParent,
    3594             :                                 const SfxItemSet* rAttrSet)
    3595             : {
    3596           0 :     return new SwTOXStylesTabPage(pParent, *rAttrSet);
    3597             : }
    3598             : 
    3599           0 : IMPL_LINK( SwTOXStylesTabPage, EditStyleHdl, Button *, pBtn )
    3600             : {
    3601           0 :     if( LISTBOX_ENTRY_NOTFOUND != m_pParaLayLB->GetSelectEntryPos())
    3602             :     {
    3603           0 :         SfxStringItem aStyle(SID_STYLE_EDIT, m_pParaLayLB->GetSelectEntry());
    3604           0 :         SfxUInt16Item aFamily(SID_STYLE_FAMILY, SFX_STYLE_FAMILY_PARA);
    3605           0 :         vcl::Window* pDefDlgParent = Application::GetDefDialogParent();
    3606           0 :         Application::SetDefDialogParent( pBtn );
    3607           0 :         SwWrtShell& rSh = ((SwMultiTOXTabDialog*)GetTabDialog())->GetWrtShell();
    3608           0 :         rSh.GetView().GetViewFrame()->GetDispatcher()->Execute(
    3609             :         SID_STYLE_EDIT, SfxCallMode::SYNCHRON|SfxCallMode::MODAL,
    3610           0 :             &aStyle, &aFamily, 0L);
    3611           0 :         Application::SetDefDialogParent( pDefDlgParent );
    3612             :     }
    3613           0 :     return 0;
    3614             : }
    3615             : 
    3616             : // allocate templates
    3617           0 : IMPL_LINK_NOARG(SwTOXStylesTabPage, AssignHdl)
    3618             : {
    3619           0 :     sal_Int32 nLevPos   = m_pLevelLB->GetSelectEntryPos();
    3620           0 :     sal_Int32 nTemplPos = m_pParaLayLB->GetSelectEntryPos();
    3621           0 :     if(nLevPos   != LISTBOX_ENTRY_NOTFOUND &&
    3622             :        nTemplPos != LISTBOX_ENTRY_NOTFOUND)
    3623             :     {
    3624             :         const OUString aStr(m_pLevelLB->GetEntry(nLevPos).getToken(0, aDeliStart)
    3625           0 :             + " " + OUString(aDeliStart)
    3626           0 :             + m_pParaLayLB->GetSelectEntry()
    3627           0 :             + OUString(aDeliEnd));
    3628             : 
    3629           0 :         m_pCurrentForm->SetTemplate(nLevPos, m_pParaLayLB->GetSelectEntry());
    3630             : 
    3631           0 :         m_pLevelLB->RemoveEntry(nLevPos);
    3632           0 :         m_pLevelLB->InsertEntry(aStr, nLevPos);
    3633           0 :         m_pLevelLB->SelectEntry(aStr);
    3634           0 :         Modify();
    3635             :     }
    3636           0 :     return 0;
    3637             : }
    3638             : 
    3639           0 : IMPL_LINK_NOARG(SwTOXStylesTabPage, StdHdl)
    3640             : {
    3641           0 :     const sal_Int32 nPos = m_pLevelLB->GetSelectEntryPos();
    3642           0 :     if(nPos != LISTBOX_ENTRY_NOTFOUND)
    3643             :     {
    3644           0 :         const OUString aStr(m_pLevelLB->GetEntry(nPos).getToken(0, aDeliStart));
    3645           0 :         m_pLevelLB->RemoveEntry(nPos);
    3646           0 :         m_pLevelLB->InsertEntry(aStr, nPos);
    3647           0 :         m_pLevelLB->SelectEntry(aStr);
    3648           0 :         m_pCurrentForm->SetTemplate(nPos, aEmptyOUStr);
    3649           0 :         Modify();
    3650             :     }
    3651           0 :     return 0;
    3652             : }
    3653             : 
    3654           0 : IMPL_LINK_NOARG_INLINE_START(SwTOXStylesTabPage, DoubleClickHdl)
    3655             : {
    3656           0 :     const OUString aTmpName( m_pParaLayLB->GetSelectEntry() );
    3657           0 :     SwWrtShell& rSh = ((SwMultiTOXTabDialog*)GetTabDialog())->GetWrtShell();
    3658             : 
    3659           0 :     if(m_pParaLayLB->GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND &&
    3660           0 :        (m_pLevelLB->GetSelectEntryPos() == 0 || SwMultiTOXTabDialog::IsNoNum(rSh, aTmpName)))
    3661           0 :         AssignHdl(m_pAssignBT);
    3662           0 :     return 0;
    3663             : }
    3664           0 : IMPL_LINK_NOARG_INLINE_END(SwTOXStylesTabPage, DoubleClickHdl)
    3665             : 
    3666             : // enable only when selected
    3667           0 : IMPL_LINK_NOARG(SwTOXStylesTabPage, EnableSelectHdl)
    3668             : {
    3669           0 :     m_pStdBT->Enable(m_pLevelLB->GetSelectEntryPos()  != LISTBOX_ENTRY_NOTFOUND);
    3670             : 
    3671           0 :     SwWrtShell& rSh = ((SwMultiTOXTabDialog*)GetTabDialog())->GetWrtShell();
    3672           0 :     const OUString aTmpName(m_pParaLayLB->GetSelectEntry());
    3673           0 :     m_pAssignBT->Enable(m_pParaLayLB->GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND &&
    3674           0 :                      LISTBOX_ENTRY_NOTFOUND != m_pLevelLB->GetSelectEntryPos() &&
    3675           0 :        (m_pLevelLB->GetSelectEntryPos() == 0 || SwMultiTOXTabDialog::IsNoNum(rSh, aTmpName)));
    3676           0 :     m_pEditStyleBT->Enable(m_pParaLayLB->GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND );
    3677           0 :     return 0;
    3678             : }
    3679             : 
    3680           0 : void SwTOXStylesTabPage::Modify()
    3681             : {
    3682           0 :     SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog();
    3683           0 :     if (pTOXDlg)
    3684             :     {
    3685           0 :         GetForm() = *m_pCurrentForm;
    3686           0 :         pTOXDlg->CreateOrUpdateExample(pTOXDlg->GetCurrentTOXType().eType, TOX_PAGE_STYLES);
    3687             :     }
    3688           0 : }
    3689             : 
    3690             : #define ITEM_SEARCH         1
    3691             : #define ITEM_ALTERNATIVE    2
    3692             : #define ITEM_PRIM_KEY       3
    3693             : #define ITEM_SEC_KEY        4
    3694             : #define ITEM_COMMENT        5
    3695             : #define ITEM_CASE           6
    3696             : #define ITEM_WORDONLY       7
    3697             : 
    3698           0 : SwEntryBrowseBox::SwEntryBrowseBox(vcl::Window* pParent, VclBuilderContainer* pBuilder)
    3699             :     : SwEntryBrowseBox_Base( pParent, EBBF_NONE, WB_TABSTOP | WB_BORDER,
    3700             :                            BROWSER_KEEPSELECTION |
    3701             :                            BROWSER_COLUMNSELECTION |
    3702             :                            BROWSER_MULTISELECTION |
    3703             :                            BROWSER_TRACKING_TIPS |
    3704             :                            BROWSER_HLINESFULL |
    3705             :                            BROWSER_VLINESFULL |
    3706             :                            BROWSER_AUTO_VSCROLL|
    3707             :                            BROWSER_HIDECURSOR   )
    3708           0 :     , aCellEdit(&GetDataWindow(), 0)
    3709           0 :     , aCellCheckBox(&GetDataWindow())
    3710             :     , nCurrentRow(0)
    3711           0 :     , bModified(false)
    3712             : {
    3713           0 :     sSearch = pBuilder->get<vcl::Window>("searchterm")->GetText();
    3714           0 :     sAlternative = pBuilder->get<vcl::Window>("alternative")->GetText();
    3715           0 :     sPrimKey = pBuilder->get<vcl::Window>("key1")->GetText();
    3716           0 :     sSecKey = pBuilder->get<vcl::Window>("key2")->GetText();
    3717           0 :     sComment = pBuilder->get<vcl::Window>("comment")->GetText();
    3718           0 :     sCaseSensitive = pBuilder->get<vcl::Window>("casesensitive")->GetText();
    3719           0 :     sWordOnly = pBuilder->get<vcl::Window>("wordonly")->GetText();
    3720           0 :     sYes = pBuilder->get<vcl::Window>("yes")->GetText();
    3721           0 :     sNo = pBuilder->get<vcl::Window>("no")->GetText();
    3722             : 
    3723           0 :     aCellCheckBox.GetBox().EnableTriState(false);
    3724           0 :     xController = new ::svt::EditCellController(&aCellEdit);
    3725           0 :     xCheckController = new ::svt::CheckBoxCellController(&aCellCheckBox);
    3726             : 
    3727             :     // HACK: BrowseBox doesn't invalidate its children, how it should be.
    3728             :     // That's why WB_CLIPCHILDREN is reset in order to enforce the
    3729             :     // children' invalidation
    3730           0 :     WinBits aStyle = GetStyle();
    3731           0 :     if( aStyle & WB_CLIPCHILDREN )
    3732             :     {
    3733           0 :         aStyle &= ~WB_CLIPCHILDREN;
    3734           0 :         SetStyle( aStyle );
    3735             :     }
    3736             : 
    3737             :     const OUString* aTitles[7] =
    3738             :     {
    3739             :         &sSearch,
    3740             :         &sAlternative,
    3741             :         &sPrimKey,
    3742             :         &sSecKey,
    3743             :         &sComment,
    3744             :         &sCaseSensitive,
    3745             :         &sWordOnly
    3746           0 :     };
    3747             : 
    3748           0 :     long nWidth = GetSizePixel().Width();
    3749           0 :     nWidth /=7;
    3750           0 :     --nWidth;
    3751           0 :     for(sal_uInt16 i = 1; i < 8; i++)
    3752           0 :         InsertDataColumn( i, *aTitles[i - 1], nWidth,
    3753           0 :                           HIB_STDSTYLE, HEADERBAR_APPEND );
    3754           0 : }
    3755             : 
    3756           0 : void SwEntryBrowseBox::Resize()
    3757             : {
    3758           0 :     SwEntryBrowseBox_Base::Resize();
    3759             : 
    3760           0 :     Dialog *pDlg = GetParentDialog();
    3761           0 :     if (pDlg && pDlg->isCalculatingInitialLayoutSize())
    3762             :     {
    3763           0 :         long nWidth = GetSizePixel().Width();
    3764           0 :         std::vector<long> aWidths = GetOptimalColWidths();
    3765           0 :         long nNaturalWidth(::std::accumulate(aWidths.begin(), aWidths.end(), 0));
    3766           0 :         long nExcess = ((nWidth - nNaturalWidth) / aWidths.size()) - 1;
    3767             : 
    3768           0 :         for (size_t i = 0; i < aWidths.size(); ++i)
    3769           0 :             SetColumnWidth(i+1, aWidths[i] + nExcess);
    3770             :     }
    3771           0 : }
    3772             : 
    3773           0 : std::vector<long> SwEntryBrowseBox::GetOptimalColWidths() const
    3774             : {
    3775           0 :     std::vector<long> aWidths;
    3776             : 
    3777           0 :     long nStandardColMinWidth = approximate_char_width() * 16;
    3778           0 :     long nYesNoWidth = approximate_char_width() * 5;
    3779           0 :     nYesNoWidth = std::max(nYesNoWidth, GetTextWidth(sYes));
    3780           0 :     nYesNoWidth = std::max(nYesNoWidth, GetTextWidth(sNo));
    3781           0 :     for (sal_uInt16 i = 1; i < 6; i++)
    3782             :     {
    3783             :         long nColWidth = std::max(nStandardColMinWidth,
    3784           0 :                                   GetTextWidth(GetColumnTitle(i)));
    3785           0 :         nColWidth += 12;
    3786           0 :         aWidths.push_back(nColWidth);
    3787             :     }
    3788             : 
    3789           0 :     for (sal_uInt16 i = 6; i < 8; i++)
    3790             :     {
    3791             :         long nColWidth = std::max(nYesNoWidth,
    3792           0 :                                   GetTextWidth(GetColumnTitle(i)));
    3793           0 :         nColWidth += 12;
    3794           0 :         aWidths.push_back(nColWidth);
    3795             :     }
    3796             : 
    3797           0 :     return aWidths;
    3798             : }
    3799             : 
    3800           0 : Size SwEntryBrowseBox::GetOptimalSize() const
    3801             : {
    3802           0 :     Size aSize = LogicToPixel(Size(276 , 175), MapMode(MAP_APPFONT));
    3803             : 
    3804           0 :     std::vector<long> aWidths = GetOptimalColWidths();
    3805             : 
    3806           0 :     long nWidth(::std::accumulate(aWidths.begin(), aWidths.end(), 0));
    3807             : 
    3808           0 :     aSize.Width() = std::max(aSize.Width(), nWidth);
    3809             : 
    3810           0 :     return aSize;
    3811             : }
    3812             : 
    3813           0 : bool SwEntryBrowseBox::SeekRow( long nRow )
    3814             : {
    3815           0 :     nCurrentRow = nRow;
    3816           0 :     return true;
    3817             : }
    3818             : 
    3819           0 : OUString SwEntryBrowseBox::GetCellText(long nRow, sal_uInt16 nColumn) const
    3820             : {
    3821           0 :     const OUString* pRet = &aEmptyOUStr;
    3822           0 :     if (aEntryArr.size() > static_cast<size_t>(nRow))
    3823             :     {
    3824           0 :         const AutoMarkEntry* pEntry = &aEntryArr[ nRow ];
    3825           0 :         switch(nColumn)
    3826             :         {
    3827           0 :             case  ITEM_SEARCH       :pRet = &pEntry->sSearch; break;
    3828           0 :             case  ITEM_ALTERNATIVE  :pRet = &pEntry->sAlternative; break;
    3829           0 :             case  ITEM_PRIM_KEY     :pRet = &pEntry->sPrimKey   ; break;
    3830           0 :             case  ITEM_SEC_KEY      :pRet = &pEntry->sSecKey    ; break;
    3831           0 :             case  ITEM_COMMENT      :pRet = &pEntry->sComment   ; break;
    3832           0 :             case  ITEM_CASE         :pRet = pEntry->bCase ? &sYes : &sNo; break;
    3833           0 :             case  ITEM_WORDONLY     :pRet = pEntry->bWord ? &sYes : &sNo; break;
    3834             :         }
    3835             :     }
    3836           0 :     return *pRet;
    3837             : }
    3838             : 
    3839           0 : void SwEntryBrowseBox::PaintCell(OutputDevice& rDev,
    3840             :                                 const Rectangle& rRect, sal_uInt16 nColumnId) const
    3841             : {
    3842           0 :     const sal_uInt16 nStyle = TEXT_DRAW_CLIP | TEXT_DRAW_CENTER;
    3843           0 :     rDev.DrawText( rRect, GetCellText( nCurrentRow, nColumnId ), nStyle );
    3844           0 : }
    3845             : 
    3846           0 : ::svt::CellController* SwEntryBrowseBox::GetController(long /*nRow*/, sal_uInt16 nCol)
    3847             : {
    3848           0 :     return nCol < ITEM_CASE ? xController : xCheckController;
    3849             : }
    3850             : 
    3851           0 : bool SwEntryBrowseBox::SaveModified()
    3852             : {
    3853           0 :     SetModified();
    3854           0 :     const size_t nRow = GetCurRow();
    3855           0 :     const sal_uInt16 nCol = GetCurColumnId();
    3856             : 
    3857           0 :     OUString sNew;
    3858           0 :     bool bVal = false;
    3859           0 :     ::svt::CellController* pController = 0;
    3860           0 :     if(nCol < ITEM_CASE)
    3861             :     {
    3862           0 :         pController = xController;
    3863           0 :         sNew = ((::svt::EditCellController*)pController)->GetEditImplementation()->GetText( LINEEND_LF );
    3864             :     }
    3865             :     else
    3866             :     {
    3867           0 :         pController = xCheckController;
    3868           0 :         bVal = ((::svt::CheckBoxCellController*)pController)->GetCheckBox().IsChecked();
    3869             :     }
    3870           0 :     AutoMarkEntry* pEntry = nRow >= aEntryArr.size() ? new AutoMarkEntry
    3871           0 :                                                       : &aEntryArr[nRow];
    3872           0 :     switch(nCol)
    3873             :     {
    3874           0 :         case  ITEM_SEARCH       : pEntry->sSearch = sNew; break;
    3875           0 :         case  ITEM_ALTERNATIVE  : pEntry->sAlternative = sNew; break;
    3876           0 :         case  ITEM_PRIM_KEY     : pEntry->sPrimKey   = sNew; break;
    3877           0 :         case  ITEM_SEC_KEY      : pEntry->sSecKey    = sNew; break;
    3878           0 :         case  ITEM_COMMENT      : pEntry->sComment   = sNew; break;
    3879           0 :         case  ITEM_CASE         : pEntry->bCase = bVal; break;
    3880           0 :         case  ITEM_WORDONLY     : pEntry->bWord = bVal; break;
    3881             :     }
    3882           0 :     if(nRow >= aEntryArr.size())
    3883             :     {
    3884           0 :         aEntryArr.push_back( pEntry );
    3885           0 :         RowInserted(nRow, 1, true, true);
    3886           0 :         if(nCol < ITEM_WORDONLY)
    3887             :         {
    3888           0 :             pController->ClearModified();
    3889           0 :             GoToRow( nRow );
    3890             :         }
    3891             :     }
    3892           0 :     return true;
    3893             : }
    3894             : 
    3895           0 : void SwEntryBrowseBox::InitController(
    3896             :                 ::svt::CellControllerRef& rController, long nRow, sal_uInt16 nCol)
    3897             : {
    3898           0 :     const OUString rTxt = GetCellText( nRow, nCol );
    3899           0 :     if(nCol < ITEM_CASE)
    3900             :     {
    3901           0 :         rController = xController;
    3902           0 :         ::svt::CellController* pController = xController;
    3903           0 :         ((::svt::EditCellController*)pController)->GetEditImplementation()->SetText( rTxt );
    3904             :     }
    3905             :     else
    3906             :     {
    3907           0 :         rController = xCheckController;
    3908           0 :         ::svt::CellController* pController = xCheckController;
    3909           0 :         ((::svt::CheckBoxCellController*)pController)->GetCheckBox().Check(
    3910           0 :                                                             rTxt == sYes );
    3911           0 :      }
    3912           0 : }
    3913             : 
    3914           0 : void SwEntryBrowseBox::ReadEntries(SvStream& rInStr)
    3915             : {
    3916           0 :     AutoMarkEntry* pToInsert = 0;
    3917           0 :     rtl_TextEncoding  eTEnc = osl_getThreadTextEncoding();
    3918           0 :     while( !rInStr.GetError() && !rInStr.IsEof() )
    3919             :     {
    3920           0 :         OUString sLine;
    3921           0 :         rInStr.ReadByteStringLine( sLine, eTEnc );
    3922             : 
    3923             :         // # -> comment
    3924             :         // ; -> delimiter between entries ->
    3925             :         // Format: TextToSearchFor;AlternativeString;PrimaryKey;SecondaryKey
    3926             :         // Leading and trailing blanks are ignored
    3927           0 :         if( !sLine.isEmpty() )
    3928             :         {
    3929             :             //comments are contained in separate lines but are put into the struct of the following data
    3930             :             //line (if available)
    3931           0 :             if( '#' != sLine[0] )
    3932             :             {
    3933           0 :                 if( !pToInsert )
    3934           0 :                     pToInsert = new AutoMarkEntry;
    3935             : 
    3936           0 :                 sal_Int32 nSttPos = 0;
    3937           0 :                 pToInsert->sSearch      = sLine.getToken(0, ';', nSttPos );
    3938           0 :                 pToInsert->sAlternative = sLine.getToken(0, ';', nSttPos );
    3939           0 :                 pToInsert->sPrimKey     = sLine.getToken(0, ';', nSttPos );
    3940           0 :                 pToInsert->sSecKey      = sLine.getToken(0, ';', nSttPos );
    3941             : 
    3942           0 :                 OUString sStr = sLine.getToken(0, ';', nSttPos );
    3943           0 :                 pToInsert->bCase = !sStr.isEmpty() && !comphelper::string::equals(sStr, '0');
    3944             : 
    3945           0 :                 sStr = sLine.getToken(0, ';', nSttPos );
    3946           0 :                 pToInsert->bWord = !sStr.isEmpty() && !comphelper::string::equals(sStr, '0');
    3947             : 
    3948           0 :                 aEntryArr.push_back( pToInsert );
    3949           0 :                 pToInsert = 0;
    3950             :             }
    3951             :             else
    3952             :             {
    3953           0 :                 if(pToInsert)
    3954           0 :                     aEntryArr.push_back(pToInsert);
    3955           0 :                 pToInsert = new AutoMarkEntry;
    3956           0 :                 pToInsert->sComment = sLine.copy(1);
    3957             :             }
    3958             :         }
    3959           0 :     }
    3960           0 :     if( pToInsert )
    3961           0 :         aEntryArr.push_back(pToInsert);
    3962           0 :     RowInserted(0, aEntryArr.size() + 1, true);
    3963           0 : }
    3964             : 
    3965           0 : void SwEntryBrowseBox::WriteEntries(SvStream& rOutStr)
    3966             : {
    3967             :     //check if the current controller is modified
    3968           0 :     const sal_uInt16 nCol = GetCurColumnId();
    3969             :     ::svt::CellController* pController;
    3970           0 :     if(nCol < ITEM_CASE)
    3971           0 :         pController = xController;
    3972             :     else
    3973           0 :         pController = xCheckController;
    3974           0 :     if(pController ->IsModified())
    3975           0 :         GoToColumnId(nCol + (nCol < ITEM_CASE ? 1 : -1 ));
    3976             : 
    3977           0 :     rtl_TextEncoding  eTEnc = osl_getThreadTextEncoding();
    3978           0 :     for(size_t i = 0; i < aEntryArr.size(); i++)
    3979             :     {
    3980           0 :         AutoMarkEntry* pEntry = &aEntryArr[i];
    3981           0 :         if(!pEntry->sComment.isEmpty())
    3982             :         {
    3983           0 :             rOutStr.WriteByteStringLine( "#" + pEntry->sComment, eTEnc );
    3984             :         }
    3985             : 
    3986           0 :         OUString sWrite( pEntry->sSearch + ";" +
    3987           0 :                          pEntry->sAlternative + ";" +
    3988           0 :                          pEntry->sPrimKey  + ";" +
    3989           0 :                          pEntry->sSecKey + ";" +
    3990           0 :                          (pEntry->bCase ? OUString("1") : OUString("0")) + ";" +
    3991           0 :                          (pEntry->bWord ? OUString("1") : OUString("0")) );
    3992             : 
    3993           0 :         if( sWrite.getLength() > 5 )
    3994           0 :             rOutStr.WriteByteStringLine( sWrite, eTEnc );
    3995           0 :     }
    3996           0 : }
    3997             : 
    3998           0 : bool SwEntryBrowseBox::IsModified()const
    3999             : {
    4000           0 :     if(bModified)
    4001           0 :         return true;
    4002             : 
    4003             :     //check if the current controller is modified
    4004           0 :     const sal_uInt16 nCol = GetCurColumnId();
    4005             :     ::svt::CellController* pController;
    4006           0 :     if(nCol < ITEM_CASE)
    4007           0 :         pController = xController;
    4008             :     else
    4009           0 :         pController = xCheckController;
    4010           0 :     return pController->IsModified();
    4011             : }
    4012             : 
    4013           0 : SwAutoMarkDlg_Impl::SwAutoMarkDlg_Impl(vcl::Window* pParent, const OUString& rAutoMarkURL,
    4014             :         bool bCreate)
    4015             :     : ModalDialog(pParent, "CreateAutomarkDialog",
    4016             :         "modules/swriter/ui/createautomarkdialog.ui")
    4017             :     , sAutoMarkURL(rAutoMarkURL)
    4018           0 :     , bCreateMode(bCreate)
    4019             : {
    4020           0 :     get(m_pOKPB, "ok");
    4021           0 :     m_pEntriesBB = new SwEntryBrowseBox(get<VclContainer>("area"), this);
    4022           0 :     m_pEntriesBB->set_expand(true);
    4023           0 :     m_pEntriesBB->Show();
    4024           0 :     m_pOKPB->SetClickHdl(LINK(this, SwAutoMarkDlg_Impl, OkHdl));
    4025             : 
    4026           0 :     SetText(GetText() + ": " + sAutoMarkURL);
    4027           0 :     bool bError = false;
    4028           0 :     if( bCreateMode )
    4029           0 :         m_pEntriesBB->RowInserted(0, 1, true);
    4030             :     else
    4031             :     {
    4032           0 :         SfxMedium aMed( sAutoMarkURL, STREAM_STD_READ );
    4033           0 :         if( aMed.GetInStream() && !aMed.GetInStream()->GetError() )
    4034           0 :             m_pEntriesBB->ReadEntries( *aMed.GetInStream() );
    4035             :         else
    4036           0 :             bError = true;
    4037             :     }
    4038             : 
    4039           0 :     if(bError)
    4040           0 :         EndDialog(RET_CANCEL);
    4041           0 : }
    4042             : 
    4043           0 : SwAutoMarkDlg_Impl::~SwAutoMarkDlg_Impl()
    4044             : {
    4045           0 :     delete m_pEntriesBB;
    4046           0 : }
    4047             : 
    4048           0 : IMPL_LINK_NOARG(SwAutoMarkDlg_Impl, OkHdl)
    4049             : {
    4050           0 :     bool bError = false;
    4051           0 :     if(m_pEntriesBB->IsModified() || bCreateMode)
    4052             :     {
    4053             :         SfxMedium aMed( sAutoMarkURL,
    4054             :                         bCreateMode ? STREAM_WRITE
    4055           0 :                                     : STREAM_WRITE| STREAM_TRUNC );
    4056           0 :         SvStream* pStrm = aMed.GetOutStream();
    4057           0 :         pStrm->SetStreamCharSet( RTL_TEXTENCODING_MS_1253 );
    4058           0 :         if( !pStrm->GetError() )
    4059             :         {
    4060           0 :             m_pEntriesBB->WriteEntries( *pStrm );
    4061           0 :             aMed.Commit();
    4062             :         }
    4063             :         else
    4064           0 :             bError = true;
    4065             :     }
    4066           0 :     if( !bError )
    4067           0 :         EndDialog(RET_OK);
    4068           0 :     return 0;
    4069           0 : }
    4070             : 
    4071             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10