LCOV - code coverage report
Current view: top level - libreoffice/sw/source/ui/misc - outline.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 599 0.0 %
Date: 2012-12-27 Functions: 0 60 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 <hintids.hxx>
      21             : #include <tools/shl.hxx>
      22             : #include <vcl/menu.hxx>
      23             : #include <vcl/msgbox.hxx>
      24             : #include <sfx2/tabdlg.hxx>
      25             : #include <editeng/brshitem.hxx>
      26             : #include <unotools/configmgr.hxx>
      27             : #include <SwStyleNameMapper.hxx>
      28             : #include <num.hxx>
      29             : #include <view.hxx>
      30             : #include <docsh.hxx>
      31             : #include <uitool.hxx>
      32             : #include <wrtsh.hxx>
      33             : #include <swmodule.hxx>
      34             : #include <fmtcol.hxx>
      35             : #include <outline.hxx>
      36             : #include <uinums.hxx>
      37             : #include <poolfmt.hxx>
      38             : #include <shellres.hxx>
      39             : #include <svl/style.hxx>
      40             : #include <charfmt.hxx>
      41             : #include <docstyle.hxx>
      42             : #include <viewopt.hxx>
      43             : #include <svtools/ctrlbox.hxx>
      44             : #include <helpid.h>
      45             : #include <globals.hrc>      // for template name 'none'
      46             : #include <misc.hrc>
      47             : #include <outline.hrc>
      48             : #include <paratr.hxx>
      49             : 
      50             : #include <unomid.h>
      51             : 
      52             : #include <IDocumentOutlineNodes.hxx>
      53             : #include <app.hrc>
      54             : 
      55             : #include <com/sun/star/accessibility/AccessibleRole.hpp>
      56             : 
      57             : using namespace ::com::sun::star;
      58             : 
      59             : DBG_NAME(outlinehdl)
      60             : 
      61             : class SwNumNamesDlg: public ModalDialog
      62             : {
      63             :     FixedLine    aFormFL;
      64             :     Edit         aFormEdit;
      65             :     ListBox      aFormBox;
      66             :     OKButton     aOKBtn;
      67             :     CancelButton aCancelBtn;
      68             :     HelpButton   aHelpBtn;
      69             : 
      70             :     DECL_LINK( ModifyHdl, Edit * );
      71             :     DECL_LINK( SelectHdl, ListBox * );
      72             :     DECL_LINK(DoubleClickHdl, void *);
      73             : 
      74             : public:
      75             :     SwNumNamesDlg(Window *pParent);
      76             :     ~SwNumNamesDlg();
      77             :     void SetUserNames(const String *pList[]);
      78           0 :     String GetName() const { return aFormEdit.GetText(); }
      79           0 :     sal_uInt16 GetCurEntryPos() const { return aFormBox.GetSelectEntryPos(); }
      80             : };
      81             : 
      82             : /*------------------------------------------------------------------------
      83             :  Description:  remember selected entry
      84             : ------------------------------------------------------------------------*/
      85           0 : IMPL_LINK_INLINE_START( SwNumNamesDlg, SelectHdl, ListBox *, pBox )
      86             : {
      87           0 :     aFormEdit.SetText(pBox->GetSelectEntry());
      88           0 :     aFormEdit.SetSelection(Selection(0, SELECTION_MAX));
      89           0 :     return 0;
      90             : }
      91           0 : IMPL_LINK_INLINE_END( SwNumNamesDlg, SelectHdl, ListBox *, pBox )
      92             : 
      93             : /*------------------------------------------------------------------------
      94             :  Description:  set user defined names
      95             :  Parameter:    list of user defined names;
      96             :                unknown positions for the user are 0.
      97             : ------------------------------------------------------------------------*/
      98           0 : void SwNumNamesDlg::SetUserNames(const String *pList[])
      99             : {
     100           0 :     sal_uInt16 nSelect = 0;
     101           0 :     for(sal_uInt16 i = 0; i < SwBaseNumRules::nMaxRules; ++i)
     102             :     {
     103           0 :         if(pList[i])
     104             :         {
     105           0 :             aFormBox.RemoveEntry(i);
     106           0 :             aFormBox.InsertEntry(*pList[i], i);
     107           0 :             if(i == nSelect && nSelect < SwBaseNumRules::nMaxRules)
     108           0 :                 nSelect++;
     109             :         }
     110             :     }
     111           0 :     aFormBox.SelectEntryPos(nSelect);
     112           0 :     SelectHdl(&aFormBox);
     113           0 : }
     114             : 
     115             : /*------------------------------------------------------------------------
     116             :  Description:  unlock OK-Button when text is in Edit
     117             : ------------------------------------------------------------------------*/
     118           0 : IMPL_LINK_INLINE_START( SwNumNamesDlg, ModifyHdl, Edit *, pBox )
     119             : {
     120           0 :     aOKBtn.Enable(0 != pBox->GetText().Len());
     121           0 :     return 0;
     122             : }
     123           0 : IMPL_LINK_INLINE_END( SwNumNamesDlg, ModifyHdl, Edit *, pBox )
     124             : 
     125             : /*------------------------------------------------------------------------
     126             :  Description:  DoubleClickHdl
     127             : ------------------------------------------------------------------------*/
     128           0 : IMPL_LINK_NOARG_INLINE_START(SwNumNamesDlg, DoubleClickHdl)
     129             : {
     130           0 :     EndDialog(RET_OK);
     131           0 :     return 0;
     132             : }
     133           0 : IMPL_LINK_NOARG_INLINE_END(SwNumNamesDlg, DoubleClickHdl)
     134             : 
     135           0 : SwNumNamesDlg::SwNumNamesDlg(Window *pParent)
     136             :     : ModalDialog(pParent, SW_RES(DLG_NUM_NAMES)),
     137             :     aFormFL(this, SW_RES(FL_FORM)),
     138             :     aFormEdit(this, SW_RES(ED_FORM)),
     139             :     aFormBox(this, SW_RES(LB_FORM)),
     140             :     aOKBtn(this, SW_RES(BT_OK)),
     141             :     aCancelBtn(this, SW_RES(BT_CANCEL)),
     142           0 :     aHelpBtn(this, SW_RES(BT_HELP))
     143             : {
     144           0 :     FreeResource();
     145           0 :     aFormEdit.SetModifyHdl(LINK(this, SwNumNamesDlg, ModifyHdl));
     146           0 :     aFormBox.SetSelectHdl(LINK(this, SwNumNamesDlg, SelectHdl));
     147           0 :     aFormBox.SetDoubleClickHdl(LINK(this, SwNumNamesDlg, DoubleClickHdl));
     148           0 :     SelectHdl(&aFormBox);
     149           0 : }
     150             : 
     151           0 : SwNumNamesDlg::~SwNumNamesDlg() {}
     152             : 
     153           0 : static sal_uInt16 lcl_BitToLevel(sal_uInt16 nActLevel)
     154             : {
     155           0 :     sal_uInt16 nTmp = nActLevel;
     156           0 :     sal_uInt16 nTmpLevel = 0;
     157           0 :     while( 0 != (nTmp >>= 1) )
     158           0 :         nTmpLevel++;
     159           0 :     return nTmpLevel;
     160             : }
     161             : 
     162             : sal_uInt16 SwOutlineTabDialog::nNumLevel = 1;
     163           0 : SwOutlineTabDialog::SwOutlineTabDialog(Window* pParent,
     164             :                     const SfxItemSet* pSwItemSet,
     165             :                     SwWrtShell &rSh) :
     166             :                                     // the UserString is set correctly afterwards
     167             :         SfxTabDialog(pParent, SW_RES(DLG_TAB_OUTLINE), pSwItemSet, sal_False, &aEmptyStr),
     168             :         aNullStr(rtl::OUString("____")),
     169             :         aFormMenu(SW_RES(MN_FORM)),
     170             :         rWrtSh(rSh),
     171           0 :         pChapterNumRules(SW_MOD()->GetChapterNumRules()),
     172           0 :         bModified(rWrtSh.IsModified())
     173             : {
     174             :     // --> OD 2008-04-14 #outlinelevel#
     175           0 :     SetText( SW_RES( STR_OUTLINE_NUMBERING ) );
     176           0 :     PushButton* pUserButton = GetUserButton();
     177           0 :     pUserButton->SetText(SW_RES(ST_FORM));
     178           0 :     pUserButton->SetHelpId(HID_OUTLINE_FORM);
     179           0 :     pUserButton->SetClickHdl(LINK(this, SwOutlineTabDialog, FormHdl));
     180           0 :     pUserButton->SetAccessibleRole( com::sun::star::accessibility::AccessibleRole::BUTTON_MENU );
     181             : 
     182           0 :     FreeResource();
     183           0 :     pNumRule = new SwNumRule( *rSh.GetOutlineNumRule() );
     184           0 :     GetCancelButton().SetClickHdl(LINK(this, SwOutlineTabDialog, CancelHdl));
     185             : 
     186           0 :     AddTabPage(TP_NUM_POSITION   , &SwNumPositionTabPage::Create, 0);
     187           0 :     AddTabPage(TP_OUTLINE_NUM    , &SwOutlineSettingsTabPage::Create, 0);
     188             : 
     189           0 :     String sHeadline;
     190             :     sal_uInt16 i;
     191             : 
     192           0 :     for( i = 0; i < MAXLEVEL; ++i )
     193             :     {
     194             :         // if the style wasn't created yet, it's still at this position
     195           0 :         if( !rWrtSh.GetParaStyle( sHeadline =
     196             :             SwStyleNameMapper::GetUIName( static_cast< sal_uInt16 >(RES_POOLCOLL_HEADLINE1 + i),
     197           0 :                                           sHeadline )) )
     198           0 :             aCollNames[i] = sHeadline;
     199             :     }
     200             : 
     201             :     // query the text templates' outlining levels
     202           0 :     const sal_uInt16 nCount = rWrtSh.GetTxtFmtCollCount();
     203           0 :     for(i = 0; i < nCount; ++i )
     204             :     {
     205           0 :         SwTxtFmtColl &rTxtColl = rWrtSh.GetTxtFmtColl(i);
     206           0 :         if(!rTxtColl.IsDefault())
     207             :         {
     208             :             //->added by zhaojianwei
     209           0 :             if(rTxtColl.IsAssignedToListLevelOfOutlineStyle())
     210             :             {
     211           0 :                 int nOutLevel = rTxtColl.GetAssignedOutlineStyleLevel();
     212           0 :                 aCollNames[ nOutLevel ] = rTxtColl.GetName();
     213             :             }
     214             :             //<-end
     215             :         }
     216           0 :     }
     217           0 : }
     218             : 
     219           0 : SwOutlineTabDialog::~SwOutlineTabDialog()
     220             : {
     221           0 :     delete pNumRule;
     222           0 : }
     223             : 
     224           0 : void    SwOutlineTabDialog::PageCreated(sal_uInt16 nPageId, SfxTabPage& rPage)
     225             : {
     226           0 :     switch ( nPageId )
     227             :     {
     228             :         case TP_NUM_POSITION:
     229           0 :                 ((SwNumPositionTabPage&)rPage).SetWrtShell(&rWrtSh);
     230           0 :                 ((SwNumPositionTabPage&)rPage).SetOutlineTabDialog(this);
     231           0 :         break;
     232             :         case TP_OUTLINE_NUM:
     233           0 :                 ((SwOutlineSettingsTabPage&)rPage).SetWrtShell(&rWrtSh);
     234           0 :         break;
     235             :     }
     236           0 : }
     237             : 
     238           0 : IMPL_LINK_NOARG(SwOutlineTabDialog, CancelHdl)
     239             : {
     240           0 :     if (!bModified)
     241           0 :         rWrtSh.ResetModified();
     242           0 :     EndDialog(RET_CANCEL);
     243           0 :     return 0;
     244             : }
     245             : 
     246           0 : IMPL_LINK( SwOutlineTabDialog, FormHdl, Button *, pBtn )
     247             : {
     248             :     // fill PopupMenu
     249           0 :     for( sal_uInt16 i = 0; i < SwChapterNumRules::nMaxRules; ++i )
     250             :     {
     251           0 :         const SwNumRulesWithName *pRules = pChapterNumRules->GetRules(i);
     252           0 :         if( pRules )
     253           0 :             aFormMenu.SetItemText(i + MN_FORMBASE, pRules->GetName());
     254             :     }
     255           0 :     aFormMenu.SetSelectHdl(LINK(this, SwOutlineTabDialog, MenuSelectHdl));
     256           0 :     aFormMenu.Execute(pBtn, Rectangle(Point(0,0), pBtn->GetSizePixel()), POPUPMENU_EXECUTE_DOWN);
     257           0 :     return 0;
     258             : }
     259             : 
     260           0 : IMPL_LINK( SwOutlineTabDialog, MenuSelectHdl, Menu *, pMenu )
     261             : {
     262           0 :     sal_uInt8 nLevelNo = 0;
     263           0 :     switch(pMenu->GetCurItemId())
     264             :     {
     265           0 :         case MN_FORM1: nLevelNo = 1;    break;
     266           0 :         case MN_FORM2: nLevelNo = 2;    break;
     267           0 :         case MN_FORM3: nLevelNo = 3;    break;
     268           0 :         case MN_FORM4: nLevelNo = 4;    break;
     269           0 :         case MN_FORM5: nLevelNo = 5;    break;
     270           0 :         case MN_FORM6: nLevelNo = 6;    break;
     271           0 :         case MN_FORM7: nLevelNo = 7;    break;
     272           0 :         case MN_FORM8: nLevelNo = 8;    break;
     273           0 :         case MN_FORM9: nLevelNo = 9;    break;
     274             : 
     275             :         case MN_SAVE:
     276             :         {
     277           0 :             SwNumNamesDlg *pDlg = new SwNumNamesDlg(this);
     278             :             const String *aStrArr[SwChapterNumRules::nMaxRules];
     279           0 :             for(sal_uInt16 i = 0; i < SwChapterNumRules::nMaxRules; ++i)
     280             :             {
     281           0 :                 const SwNumRulesWithName *pRules = pChapterNumRules->GetRules(i);
     282           0 :                 if(pRules)
     283           0 :                     aStrArr[i] = &pRules->GetName();
     284             :                 else
     285           0 :                     aStrArr[i] = 0;
     286             :             }
     287           0 :             pDlg->SetUserNames(aStrArr);
     288           0 :             if(RET_OK == pDlg->Execute())
     289             :             {
     290           0 :                 const String aName(pDlg->GetName());
     291             :                 pChapterNumRules->ApplyNumRules( SwNumRulesWithName(
     292           0 :                         *pNumRule, aName ), pDlg->GetCurEntryPos() );
     293             :                 pMenu->SetItemText(
     294           0 :                         pDlg->GetCurEntryPos() + MN_FORMBASE, aName);
     295             :             }
     296           0 :             delete pDlg;
     297           0 :             return 0;
     298             : 
     299             :         }
     300             : 
     301             :     }
     302           0 :     if( nLevelNo-- )
     303             :     {
     304           0 :         const SwNumRulesWithName *pRules = pChapterNumRules->GetRules( nLevelNo );
     305           0 :         if( pRules )
     306             :         {
     307           0 :             pRules->MakeNumRule( rWrtSh, *pNumRule );
     308           0 :             pNumRule->SetRuleType( OUTLINE_RULE );
     309             :         }
     310             :         else
     311           0 :             *pNumRule = *rWrtSh.GetOutlineNumRule();
     312             :     }
     313             : 
     314           0 :     sal_uInt16  nPageId = GetCurPageId();
     315           0 :     SfxTabPage* pPage = GetTabPage( nPageId );
     316           0 :     pPage->Reset(*GetOutputItemSet());
     317             : 
     318           0 :     return 0;
     319             : }
     320             : 
     321           0 : sal_uInt16  SwOutlineTabDialog::GetLevel(const String &rFmtName) const
     322             : {
     323           0 :     for(sal_uInt16 i = 0; i < MAXLEVEL; ++i)
     324             :     {
     325           0 :         if(aCollNames[i] == rFmtName)
     326           0 :             return i;
     327             :     }
     328           0 :     return MAXLEVEL;//NO_NUMBERING; //#outline level,zhaojianwei
     329             : 
     330             : }
     331             : 
     332           0 : short SwOutlineTabDialog::Ok()
     333             : {
     334           0 :     SfxTabDialog::Ok();
     335             :     // set levels for all created templates; has to be done in order to
     336             :     // delete possibly cancelled assignments again.
     337             : 
     338             :     // #130443#
     339             :     // encapsulate changes into a action to avoid effects on the current cursor
     340             :     // position during the changes.
     341           0 :     rWrtSh.StartAction();
     342             : 
     343           0 :     const SwNumRule * pOutlineRule = rWrtSh.GetOutlineNumRule();
     344             : 
     345           0 :     sal_uInt16 i, nCount = rWrtSh.GetTxtFmtCollCount();
     346           0 :     for( i = 0; i < nCount; ++i )
     347             :     {
     348           0 :         SwTxtFmtColl &rTxtColl = rWrtSh.GetTxtFmtColl(i);
     349           0 :         if( !rTxtColl.IsDefault() )
     350             :         {
     351             : 
     352             :             const SfxPoolItem & rItem =
     353           0 :                 rTxtColl.GetFmtAttr(RES_PARATR_NUMRULE, sal_False);
     354             : 
     355           0 :            if ((sal_uInt8)GetLevel(rTxtColl.GetName()) == MAXLEVEL) //add by zhaojianwei
     356             :             {
     357           0 :                 if(rTxtColl.IsAssignedToListLevelOfOutlineStyle())
     358             :                 {
     359           0 :                     rTxtColl.DeleteAssignmentToListLevelOfOutlineStyle();
     360             :                 }
     361           0 :                 if (static_cast<const SwNumRuleItem &>(rItem).GetValue() ==
     362           0 :                     pOutlineRule->GetName())
     363             :                 {
     364           0 :                     rTxtColl.ResetFmtAttr(RES_PARATR_NUMRULE);
     365             :                 }
     366             :             }
     367             :             else
     368             :             {
     369           0 :                 rTxtColl.AssignToListLevelOfOutlineStyle(GetLevel(rTxtColl.GetName()));
     370             : 
     371           0 :                 if (static_cast<const SwNumRuleItem &>(rItem).GetValue() !=
     372           0 :                     pOutlineRule->GetName())
     373             :                 {
     374           0 :                     SwNumRuleItem aItem(pOutlineRule->GetName());
     375           0 :                     rTxtColl.SetFmtAttr(aItem);
     376             :                 }
     377             :             }                           //<-end,zhaojianwei
     378             :         }
     379             :     }
     380             : 
     381           0 :     for(i = 0; i < MAXLEVEL; ++i )
     382             :     {
     383           0 :         String sHeadline;
     384             :         ::SwStyleNameMapper::FillUIName( static_cast< sal_uInt16 >(RES_POOLCOLL_HEADLINE1 + i),
     385           0 :                                          sHeadline );
     386           0 :         SwTxtFmtColl* pColl = rWrtSh.FindTxtFmtCollByName( sHeadline );
     387           0 :         if( !pColl )
     388             :         {
     389           0 :             if(aCollNames[i] != sHeadline)
     390             :             {
     391             :                 SwTxtFmtColl* pTxtColl = rWrtSh.GetTxtCollFromPool(
     392           0 :                     static_cast< sal_uInt16 >(RES_POOLCOLL_HEADLINE1 + i) );
     393           0 :                 pTxtColl->DeleteAssignmentToListLevelOfOutlineStyle();
     394           0 :                 pTxtColl->ResetFmtAttr(RES_PARATR_NUMRULE);
     395             : 
     396           0 :                 if( aCollNames[i].Len() )
     397             :                 {
     398             :                     pTxtColl = rWrtSh.GetParaStyle(
     399           0 :                                 aCollNames[i], SwWrtShell::GETSTYLE_CREATESOME);
     400           0 :                     if(pTxtColl)
     401             :                     {
     402           0 :                         pTxtColl->AssignToListLevelOfOutlineStyle(i);
     403           0 :                         SwNumRuleItem aItem(pOutlineRule->GetName());
     404           0 :                         pTxtColl->SetFmtAttr(aItem);
     405             :                     }
     406             :                 }
     407             :             }
     408             :         }
     409           0 :     }
     410             : 
     411           0 :     rWrtSh.SetOutlineNumRule( *pNumRule);
     412             : 
     413             :     // #i30443#
     414           0 :     rWrtSh.EndAction();
     415             : 
     416           0 :     return RET_OK;
     417             : }
     418             : 
     419           0 : SwOutlineSettingsTabPage::SwOutlineSettingsTabPage(Window* pParent,
     420             :     const SfxItemSet& rSet)
     421             :     : SfxTabPage(pParent, "OutlineNumberingPage",
     422             :         "modules/swriter/ui/outlinenumberingpage.ui", rSet)
     423             :     , aNoFmtName(SW_RESSTR(SW_STR_NONE))
     424             :     , pSh(0)
     425             :     , pCollNames(0)
     426           0 :     , nActLevel(1)
     427             : {
     428           0 :     get(m_pLevelLB, "level");
     429           0 :     get(m_pCollBox, "style");
     430           0 :     m_pCollBox->SetStyle(m_pCollBox->GetStyle()|WB_SORT);
     431           0 :     get(m_pNumberBox, "numbering");
     432           0 :     get(m_pCharFmtLB, "charstyle");
     433           0 :     get(m_pAllLevelFT, "sublevelsft");
     434           0 :     get(m_pAllLevelNF, "sublevelsnf");
     435           0 :     get(m_pPrefixED, "prefix");
     436           0 :     get(m_pSuffixED, "suffix");
     437           0 :     get(m_pStartEdit, "startat");
     438           0 :     get(m_pPreviewWIN, "preview");
     439             : 
     440           0 :     SetExchangeSupport();
     441             : 
     442           0 :     m_pCollBox->InsertEntry(aNoFmtName);
     443           0 :     m_pLevelLB->SetSelectHdl(LINK(this,    SwOutlineSettingsTabPage, LevelHdl));
     444           0 :     m_pAllLevelNF->SetModifyHdl(LINK(this, SwOutlineSettingsTabPage, ToggleComplete));
     445           0 :     m_pCollBox->SetSelectHdl(LINK(this,    SwOutlineSettingsTabPage, CollSelect));
     446           0 :     m_pCollBox->SetGetFocusHdl(LINK(this,  SwOutlineSettingsTabPage, CollSelectGetFocus));
     447           0 :     m_pNumberBox->SetSelectHdl(LINK(this,  SwOutlineSettingsTabPage, NumberSelect));
     448           0 :     m_pPrefixED->SetModifyHdl(LINK(this,   SwOutlineSettingsTabPage, DelimModify));
     449           0 :     m_pSuffixED->SetModifyHdl(LINK(this,   SwOutlineSettingsTabPage, DelimModify));
     450           0 :     m_pStartEdit->SetModifyHdl(LINK(this,  SwOutlineSettingsTabPage, StartModified));
     451           0 :     m_pCharFmtLB->SetSelectHdl(LINK(this,  SwOutlineSettingsTabPage, CharFmtHdl));
     452           0 : }
     453             : 
     454           0 : void    SwOutlineSettingsTabPage::Update()
     455             : {
     456             :         // if a template was already selected for this level, select it in the ListBox
     457           0 :     m_pCollBox->Enable(USHRT_MAX != nActLevel);
     458           0 :     if(USHRT_MAX == nActLevel)
     459             :     {
     460           0 :         sal_Bool bSamePrefix = sal_True;
     461           0 :         sal_Bool bSameSuffix = sal_True;
     462           0 :         sal_Bool bSameType = sal_True;
     463           0 :         sal_Bool bSameComplete = sal_True;
     464           0 :         sal_Bool bSameStart = sal_True;
     465           0 :         sal_Bool bSameCharFmt = sal_True;
     466             : 
     467             :         const SwNumFmt* aNumFmtArr[MAXLEVEL];
     468           0 :         const SwCharFmt* pFirstFmt = 0;
     469             : 
     470           0 :         for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
     471             :         {
     472             : 
     473           0 :             aNumFmtArr[ i ] = &pNumRule->Get(i);
     474           0 :             if(i == 0)
     475           0 :                 pFirstFmt = aNumFmtArr[i]->GetCharFmt();
     476             :             else
     477             :             {
     478           0 :                 bSameType   &= aNumFmtArr[i]->GetNumberingType() == aNumFmtArr[0]->GetNumberingType();
     479           0 :                 bSameStart  &= aNumFmtArr[i]->GetStart() == aNumFmtArr[0]->GetStart();
     480           0 :                 bSamePrefix &= aNumFmtArr[i]->GetPrefix() == aNumFmtArr[0]->GetPrefix();
     481           0 :                 bSameSuffix &= aNumFmtArr[i]->GetSuffix() == aNumFmtArr[0]->GetSuffix();
     482           0 :                 bSameComplete &= aNumFmtArr[i]->GetIncludeUpperLevels() == aNumFmtArr[0]->GetIncludeUpperLevels();
     483           0 :                 const SwCharFmt* pFmt = aNumFmtArr[i]->GetCharFmt();
     484             :                 bSameCharFmt &=     (!pFirstFmt && !pFmt)
     485           0 :                                     || (pFirstFmt && pFmt && pFmt->GetName() == pFirstFmt->GetName());
     486             :             }
     487             :         }
     488           0 :         CheckForStartValue_Impl(aNumFmtArr[0]->GetNumberingType());
     489           0 :         if(bSameType)
     490           0 :             m_pNumberBox->SelectNumberingType( aNumFmtArr[0]->GetNumberingType() );
     491             :         else
     492           0 :             m_pNumberBox->SetNoSelection();
     493           0 :         if(bSameStart)
     494           0 :             m_pStartEdit->SetValue(aNumFmtArr[0]->GetStart());
     495             :         else
     496           0 :             m_pStartEdit->SetText(aEmptyStr);
     497           0 :         if(bSamePrefix)
     498           0 :             m_pPrefixED->SetText(aNumFmtArr[0]->GetPrefix());
     499             :         else
     500           0 :             m_pPrefixED->SetText(aEmptyStr);
     501           0 :         if(bSameSuffix)
     502           0 :             m_pSuffixED->SetText(aNumFmtArr[0]->GetSuffix());
     503             :         else
     504           0 :             m_pSuffixED->SetText(aEmptyStr);
     505             : 
     506           0 :         if(bSameCharFmt)
     507             :         {
     508           0 :             if(pFirstFmt)
     509           0 :                 m_pCharFmtLB->SelectEntry(pFirstFmt->GetName());
     510             :             else
     511           0 :                 m_pCharFmtLB->SelectEntry( ViewShell::GetShellRes()->aStrNone );
     512             :         }
     513             :         else
     514           0 :             m_pCharFmtLB->SetNoSelection();
     515             : 
     516           0 :         m_pAllLevelFT->Enable(sal_True);
     517           0 :         m_pAllLevelNF->Enable(sal_True);
     518           0 :         m_pAllLevelNF->SetMax(MAXLEVEL);
     519           0 :         if(bSameComplete)
     520             :         {
     521           0 :             m_pAllLevelNF->SetValue(aNumFmtArr[0]->GetIncludeUpperLevels());
     522             :         }
     523             :         else
     524             :         {
     525           0 :             m_pAllLevelNF->SetText(aEmptyStr);
     526             :         }
     527             :     }
     528             :     else
     529             :     {
     530           0 :         sal_uInt16 nTmpLevel = lcl_BitToLevel(nActLevel);
     531           0 :         String aColl(pCollNames[nTmpLevel]);
     532           0 :         if(aColl.Len())
     533           0 :             m_pCollBox->SelectEntry(aColl);
     534             :         else
     535           0 :             m_pCollBox->SelectEntry(aNoFmtName);
     536           0 :         const SwNumFmt &rFmt = pNumRule->Get(nTmpLevel);
     537             : 
     538           0 :         m_pNumberBox->SelectNumberingType( rFmt.GetNumberingType() );
     539           0 :         m_pPrefixED->SetText(rFmt.GetPrefix());
     540           0 :         m_pSuffixED->SetText(rFmt.GetSuffix());
     541           0 :         const SwCharFmt* pFmt = rFmt.GetCharFmt();
     542           0 :         if(pFmt)
     543           0 :             m_pCharFmtLB->SelectEntry(pFmt->GetName());
     544             :         else
     545           0 :             m_pCharFmtLB->SelectEntry( ViewShell::GetShellRes()->aStrNone );
     546             : 
     547           0 :         if(nTmpLevel)
     548             :         {
     549           0 :             m_pAllLevelFT->Enable(sal_True);
     550           0 :             m_pAllLevelNF->Enable(sal_True);
     551           0 :             m_pAllLevelNF->SetMax(nTmpLevel + 1);
     552           0 :             m_pAllLevelNF->SetValue(rFmt.GetIncludeUpperLevels());
     553             :         }
     554             :         else
     555             :         {
     556           0 :             m_pAllLevelNF->SetText(aEmptyStr);
     557           0 :             m_pAllLevelNF->Enable(sal_False);
     558           0 :             m_pAllLevelFT->Enable(sal_False);
     559             :         }
     560           0 :         CheckForStartValue_Impl(rFmt.GetNumberingType());
     561           0 :         m_pStartEdit->SetValue( rFmt.GetStart() );
     562             :     }
     563           0 :     SetModified();
     564           0 : }
     565             : 
     566           0 : IMPL_LINK( SwOutlineSettingsTabPage, LevelHdl, ListBox *, pBox )
     567             : {
     568           0 :     nActLevel = 0;
     569           0 :     if(pBox->IsEntryPosSelected( MAXLEVEL ))
     570             :     {
     571           0 :         nActLevel = 0xFFFF;
     572             :     }
     573             :     else
     574             :     {
     575           0 :         sal_uInt16 nMask = 1;
     576           0 :         for( sal_uInt16 i = 0; i < MAXLEVEL; i++ )
     577             :         {
     578           0 :             if(pBox->IsEntryPosSelected( i ))
     579           0 :                 nActLevel |= nMask;
     580           0 :             nMask <<= 1;
     581             :         }
     582             :     }
     583           0 :     Update();
     584           0 :     return 0;
     585             : }
     586             : 
     587           0 : IMPL_LINK( SwOutlineSettingsTabPage, ToggleComplete, NumericField *, pFld )
     588             : {
     589           0 :     sal_uInt16 nMask = 1;
     590           0 :     for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
     591             :     {
     592           0 :         if(nActLevel & nMask)
     593             :         {
     594           0 :             SwNumFmt aNumFmt(pNumRule->Get(i));
     595           0 :             aNumFmt.SetIncludeUpperLevels( Min( (sal_uInt8)pFld->GetValue(),
     596           0 :                                                 (sal_uInt8)(i + 1)) );
     597           0 :             pNumRule->Set(i, aNumFmt);
     598             :         }
     599           0 :         nMask <<= 1;
     600             :     }
     601           0 :     SetModified();
     602           0 :     return 0;
     603             : }
     604             : 
     605           0 : IMPL_LINK( SwOutlineSettingsTabPage, CollSelect, ListBox *, pBox )
     606             : {
     607             :     sal_uInt8 i;
     608             : 
     609           0 :     const String aCollName(pBox->GetSelectEntry());
     610             :     //0xFFFF not allowed here (disable)
     611           0 :     sal_uInt16 nTmpLevel = lcl_BitToLevel(nActLevel);
     612           0 :     String sOldName( pCollNames[nTmpLevel] );
     613             : 
     614           0 :     for( i = 0; i < MAXLEVEL; ++i)
     615           0 :         pCollNames[i] = aSaveCollNames[i];
     616             : 
     617           0 :     if(aCollName == aNoFmtName)
     618           0 :         pCollNames[nTmpLevel] = aEmptyStr;
     619             :     else
     620             :     {
     621           0 :         pCollNames[nTmpLevel] = aCollName;
     622             :                 // template already in use?
     623           0 :         for( i = 0; i < MAXLEVEL; ++i)
     624           0 :             if(i != nTmpLevel && pCollNames[i] == aCollName )
     625           0 :                 pCollNames[i] = aEmptyStr;
     626             :     }
     627             : 
     628             :     // search the oldname and put it into the current entries
     629           0 :     if( sOldName.Len() )
     630           0 :         for( i = 0; i < MAXLEVEL; ++i)
     631           0 :             if( aSaveCollNames[ i ] == sOldName && i != nTmpLevel &&
     632           0 :                 !pCollNames[ i ].Len() )
     633             :             {
     634             :                 sal_uInt8 n;
     635           0 :                 for( n = 0; n < MAXLEVEL; ++n )
     636           0 :                     if( pCollNames[ n ] == sOldName )
     637           0 :                         break;
     638             : 
     639           0 :                 if( MAXLEVEL == n )
     640             :                     // it was a outline leveld name and the current entries is zero.
     641           0 :                     pCollNames[ i ] = sOldName;
     642             :             }
     643             : 
     644           0 :     SetModified();
     645           0 :     return 0;
     646             : }
     647             : 
     648           0 : IMPL_LINK_NOARG(SwOutlineSettingsTabPage, CollSelectGetFocus)
     649             : {
     650           0 :     for( sal_uInt8 i = 0; i < MAXLEVEL; ++i)
     651           0 :         aSaveCollNames[i] =  pCollNames[i];
     652           0 :     return 0;
     653             : }
     654             : 
     655           0 : IMPL_LINK( SwOutlineSettingsTabPage, NumberSelect, SwNumberingTypeListBox *, pBox )
     656             : {
     657           0 :     sal_uInt16 nMask = 1;
     658           0 :     sal_Int16 nNumberType = pBox->GetSelectedNumberingType();
     659           0 :     for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
     660             :     {
     661           0 :         if(nActLevel & nMask)
     662             :         {
     663           0 :             SwNumFmt aNumFmt(pNumRule->Get(i));
     664           0 :             aNumFmt.SetNumberingType(nNumberType);
     665           0 :             pNumRule->Set(i, aNumFmt);
     666           0 :             CheckForStartValue_Impl(nNumberType);
     667             :         }
     668           0 :         nMask <<= 1;
     669             :     }
     670           0 :     SetModified();
     671           0 :     return 0;
     672             : }
     673             : 
     674           0 : IMPL_LINK_NOARG(SwOutlineSettingsTabPage, DelimModify)
     675             : {
     676           0 :     sal_uInt16 nMask = 1;
     677           0 :     for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
     678             :     {
     679           0 :         if(nActLevel & nMask)
     680             :         {
     681           0 :             SwNumFmt aNumFmt(pNumRule->Get(i));
     682           0 :             aNumFmt.SetPrefix( m_pPrefixED->GetText() );
     683           0 :             aNumFmt.SetSuffix( m_pSuffixED->GetText() );
     684           0 :             pNumRule->Set(i, aNumFmt);
     685             :         }
     686           0 :         nMask <<= 1;
     687             :     }
     688           0 :     SetModified();
     689           0 :     return 0;
     690             : }
     691             : 
     692           0 : IMPL_LINK( SwOutlineSettingsTabPage, StartModified, NumericField *, pFld )
     693             : {
     694           0 :     sal_uInt16 nMask = 1;
     695           0 :     for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
     696             :     {
     697           0 :         if(nActLevel & nMask)
     698             :         {
     699           0 :             SwNumFmt aNumFmt(pNumRule->Get(i));
     700           0 :             aNumFmt.SetStart( (sal_uInt16)pFld->GetValue() );
     701           0 :             pNumRule->Set(i, aNumFmt);
     702             :         }
     703           0 :         nMask <<= 1;
     704             :     }
     705           0 :     SetModified();
     706           0 :     return 0;
     707             : }
     708             : 
     709           0 : IMPL_LINK_NOARG(SwOutlineSettingsTabPage, CharFmtHdl)
     710             : {
     711           0 :     String sEntry = m_pCharFmtLB->GetSelectEntry();
     712           0 :     sal_uInt16 nMask = 1;
     713           0 :     sal_Bool bFormatNone = sEntry == ViewShell::GetShellRes()->aStrNone;
     714           0 :     SwCharFmt* pFmt = 0;
     715           0 :     if(!bFormatNone)
     716             :     {
     717           0 :         sal_uInt16 nChCount = pSh->GetCharFmtCount();
     718           0 :         for(sal_uInt16 i = 0; i < nChCount; i++)
     719             :         {
     720           0 :             SwCharFmt& rChFmt = pSh->GetCharFmt(i);
     721           0 :             if(rChFmt.GetName() == sEntry)
     722             :             {
     723           0 :                 pFmt = &rChFmt;
     724           0 :                 break;
     725             :             }
     726             :         }
     727           0 :         if(!pFmt)
     728             :         {
     729           0 :             SfxStyleSheetBasePool* pPool = pSh->GetView().GetDocShell()->GetStyleSheetPool();
     730             :             SfxStyleSheetBase* pBase;
     731           0 :             pBase = pPool->Find(sEntry, SFX_STYLE_FAMILY_CHAR);
     732           0 :             if(!pBase)
     733           0 :                 pBase = &pPool->Make(sEntry, SFX_STYLE_FAMILY_PAGE);
     734           0 :             pFmt = ((SwDocStyleSheet*)pBase)->GetCharFmt();
     735             : 
     736             :         }
     737             :     }
     738             : 
     739           0 :     for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
     740             :     {
     741           0 :         if(nActLevel & nMask)
     742             :         {
     743           0 :             SwNumFmt aNumFmt(pNumRule->Get(i));
     744           0 :             if(bFormatNone)
     745           0 :                 aNumFmt.SetCharFmt(0);
     746             :             else
     747           0 :                 aNumFmt.SetCharFmt(pFmt);
     748           0 :             pNumRule->Set(i, aNumFmt);
     749             :         }
     750           0 :         nMask <<= 1;
     751             :     }
     752           0 :     return RET_OK;
     753             : }
     754             : 
     755           0 : SwOutlineSettingsTabPage::~SwOutlineSettingsTabPage()
     756             : {
     757           0 : }
     758             : 
     759           0 : void SwOutlineSettingsTabPage::SetWrtShell(SwWrtShell* pShell)
     760             : {
     761           0 :     pSh = pShell;
     762             :     // query this document's NumRules
     763           0 :     pNumRule = ((SwOutlineTabDialog*)GetTabDialog())->GetNumRule();
     764           0 :     pCollNames = ((SwOutlineTabDialog*)GetTabDialog())->GetCollNames();
     765             : 
     766           0 :     m_pPreviewWIN->SetNumRule(pNumRule);
     767           0 :     m_pPreviewWIN->SetOutlineNames(pCollNames);
     768             :     // set start value - nActLevel must be 1 here
     769           0 :     sal_uInt16 nTmpLevel = lcl_BitToLevel(nActLevel);
     770           0 :     const SwNumFmt& rNumFmt = pNumRule->Get( nTmpLevel );
     771           0 :     m_pStartEdit->SetValue( rNumFmt.GetStart() );
     772             : 
     773             :     // create pool formats for headlines
     774           0 :     String sStr;
     775             :     sal_uInt16 i;
     776           0 :     for( i = 0; i < MAXLEVEL; ++i )
     777             :     {
     778             :         m_pCollBox->InsertEntry( SwStyleNameMapper::GetUIName(
     779           0 :                                     static_cast< sal_uInt16 >(RES_POOLCOLL_HEADLINE1 + i), aEmptyStr ));
     780           0 :         m_pLevelLB->InsertEntry( String::CreateFromInt32(i + 1) );
     781             :     }
     782           0 :     sStr.AssignAscii( RTL_CONSTASCII_STRINGPARAM( "1 - " ));
     783           0 :     sStr += String::CreateFromInt32(MAXLEVEL);
     784           0 :     m_pLevelLB->InsertEntry( sStr );
     785             : 
     786             :     // query the texttemplates' outlining levels
     787           0 :     const sal_uInt16 nCount = pSh->GetTxtFmtCollCount();
     788           0 :     for( i = 0; i < nCount; ++i )
     789             :     {
     790           0 :         SwTxtFmtColl &rTxtColl = pSh->GetTxtFmtColl(i);
     791           0 :         if(!rTxtColl.IsDefault())
     792             :         {
     793           0 :             sStr = rTxtColl.GetName();
     794           0 :             if(LISTBOX_ENTRY_NOTFOUND == m_pCollBox->GetEntryPos( sStr ))
     795           0 :                 m_pCollBox->InsertEntry( sStr );
     796             :         }
     797             :     }
     798             : 
     799           0 :     m_pNumberBox->SelectNumberingType(rNumFmt.GetNumberingType());
     800           0 :     sal_uInt16 nOutlinePos = pSh->GetOutlinePos(MAXLEVEL);
     801           0 :     sal_uInt16 nTmp = 0;
     802           0 :     if(nOutlinePos != USHRT_MAX)
     803             :     {
     804           0 :         nTmp = static_cast<sal_uInt16>(pSh->getIDocumentOutlineNodesAccess()->getOutlineLevel(nOutlinePos));
     805             :     }
     806           0 :     m_pLevelLB->SelectEntryPos(nTmp-1);//nTmp);//#outline level,zhaojianwei
     807             : 
     808             :     // collect char styles
     809           0 :     m_pCharFmtLB->Clear();
     810           0 :     m_pCharFmtLB->InsertEntry( ViewShell::GetShellRes()->aStrNone );
     811             : 
     812             :     // char styles
     813             :     ::FillCharStyleListBox(*m_pCharFmtLB,
     814           0 :                         pSh->GetView().GetDocShell());
     815           0 :     Update();
     816           0 : }
     817             : 
     818           0 : void    SwOutlineSettingsTabPage::ActivatePage(const SfxItemSet& )
     819             : {
     820           0 :     nActLevel = SwOutlineTabDialog::GetActNumLevel();
     821           0 :     if(nActLevel != USHRT_MAX)
     822           0 :         m_pLevelLB->SelectEntryPos(lcl_BitToLevel(nActLevel));
     823             :     else
     824           0 :         m_pLevelLB->SelectEntryPos(MAXLEVEL);
     825           0 :     LevelHdl(m_pLevelLB);
     826           0 : }
     827             : 
     828           0 : int     SwOutlineSettingsTabPage::DeactivatePage(SfxItemSet*)
     829             : {
     830           0 :     SwOutlineTabDialog::SetActNumLevel(nActLevel);
     831           0 :     return LEAVE_PAGE;
     832             : }
     833             : 
     834           0 : sal_Bool    SwOutlineSettingsTabPage::FillItemSet( SfxItemSet&  )
     835             : {
     836           0 :     return sal_True;
     837             : }
     838             : 
     839           0 : void    SwOutlineSettingsTabPage::Reset( const SfxItemSet& rSet )
     840             : {
     841           0 :     ActivatePage(rSet);
     842           0 : }
     843             : 
     844           0 : SfxTabPage* SwOutlineSettingsTabPage::Create( Window* pParent,
     845             :                                 const SfxItemSet& rAttrSet)
     846             : {
     847           0 :     return new SwOutlineSettingsTabPage(pParent, rAttrSet);
     848             : }
     849             : 
     850           0 : void SwOutlineSettingsTabPage::CheckForStartValue_Impl(sal_uInt16 nNumberingType)
     851             : {
     852           0 :     sal_Bool bIsNull = m_pStartEdit->GetValue() == 0;
     853             :     sal_Bool bNoZeroAllowed = nNumberingType < SVX_NUM_ARABIC ||
     854             :                         SVX_NUM_CHARS_UPPER_LETTER_N == nNumberingType ||
     855           0 :                         SVX_NUM_CHARS_LOWER_LETTER_N == nNumberingType;
     856           0 :     m_pStartEdit->SetMin(bNoZeroAllowed ? 1 : 0);
     857           0 :     if(bIsNull && bNoZeroAllowed)
     858           0 :         m_pStartEdit->GetModifyHdl().Call(m_pStartEdit);
     859           0 : }
     860             : 
     861           0 : static sal_uInt16 lcl_DrawBullet(VirtualDevice* pVDev,
     862             :             const SwNumFmt& rFmt, sal_uInt16 nXStart,
     863             :             sal_uInt16 nYStart, const Size& rSize)
     864             : {
     865           0 :     Font aTmpFont(pVDev->GetFont());
     866             : 
     867           0 :     Font aFont(*rFmt.GetBulletFont());
     868           0 :     aFont.SetSize(rSize);
     869           0 :     aFont.SetTransparent(sal_True);
     870           0 :     pVDev->SetFont( aFont );
     871           0 :     rtl::OUString aText(rFmt.GetBulletChar());
     872           0 :     pVDev->DrawText( Point(nXStart, nYStart), aText );
     873           0 :     sal_uInt16 nRet = (sal_uInt16)pVDev->GetTextWidth(aText);
     874             : 
     875           0 :     pVDev->SetFont(aTmpFont);
     876           0 :     return nRet;
     877             : }
     878             : 
     879           0 : static sal_uInt16 lcl_DrawGraphic(VirtualDevice* pVDev, const SwNumFmt &rFmt, sal_uInt16 nXStart,
     880             :                         sal_uInt16 nYStart, sal_uInt16 nDivision)
     881             : {
     882           0 :     const SvxBrushItem* pBrushItem = rFmt.GetBrush();
     883           0 :     sal_uInt16 nRet = 0;
     884           0 :     if(pBrushItem)
     885             :     {
     886           0 :         const Graphic* pGrf = pBrushItem->GetGraphic();
     887           0 :         if(pGrf)
     888             :         {
     889           0 :             Size aGSize( rFmt.GetGraphicSize());
     890           0 :             aGSize.Width() /= nDivision;
     891           0 :             nRet = (sal_uInt16)aGSize.Width();
     892           0 :             aGSize.Height() /= nDivision;
     893             :             pGrf->Draw( pVDev, Point(nXStart,nYStart),
     894           0 :                     pVDev->PixelToLogic( aGSize ) );
     895             :         }
     896             :     }
     897           0 :     return nRet;
     898             : 
     899             : }
     900             : 
     901           0 : extern "C" SAL_DLLPUBLIC_EXPORT Window* SAL_CALL makeNumberingPreview(Window *pParent, VclBuilder::stringmap &)
     902             : {
     903           0 :     return new NumberingPreview(pParent);
     904             : }
     905             : 
     906             : /*--------------------------------------------------
     907             :     paint numbering's preview
     908             : --------------------------------------------------*/
     909           0 : void    NumberingPreview::Paint( const Rectangle& /*rRect*/ )
     910             : {
     911           0 :     Size aSize(PixelToLogic(GetOutputSizePixel()));
     912           0 :     Rectangle aRect(Point(0,0), aSize);
     913             : 
     914           0 :     VirtualDevice* pVDev = new VirtualDevice(*this);
     915           0 :     pVDev->SetMapMode(GetMapMode());
     916           0 :     pVDev->SetOutputSize( aSize );
     917             : 
     918             :     // #101524# OJ
     919           0 :     pVDev->SetFillColor( GetSettings().GetStyleSettings().GetWindowColor() );
     920           0 :     pVDev->SetLineColor( GetSettings().GetStyleSettings().GetButtonTextColor() );
     921           0 :     pVDev->DrawRect(aRect);
     922             : 
     923           0 :     if(pActNum)
     924             :     {
     925             :         sal_uInt16 nWidthRelation;
     926           0 :         if(nPageWidth)
     927             :         {
     928           0 :             nWidthRelation = sal_uInt16 (nPageWidth / aSize.Width());
     929           0 :             if(bPosition)
     930           0 :                 nWidthRelation = nWidthRelation * 2 / 3;
     931             :             else
     932           0 :                 nWidthRelation = nWidthRelation / 4;
     933             :         }
     934             :         else
     935           0 :             nWidthRelation = 30; // chapter dialog
     936             : 
     937             :         // height per level
     938           0 :         sal_uInt16 nXStep = sal_uInt16(aSize.Width() / (3 * MAXLEVEL));
     939             :         if(MAXLEVEL < 10)
     940             :             nXStep /= 2;
     941           0 :         sal_uInt16 nYStart = 4;
     942           0 :         sal_uInt16 nYStep = sal_uInt16((aSize.Height() - 6)/ MAXLEVEL);
     943             :         aStdFont = OutputDevice::GetDefaultFont(
     944           0 :                                     DEFAULTFONT_UI_SANS, GetAppLanguage(),
     945           0 :                                     DEFAULTFONT_FLAGS_ONLYONE, this );
     946             :         // #101524# OJ
     947           0 :         aStdFont.SetColor( SwViewOption::GetFontColor() );
     948             : 
     949           0 :         sal_uInt16 nFontHeight = nYStep * 6 / 10;
     950           0 :         if(bPosition)
     951           0 :             nFontHeight = nYStep * 15 / 10;
     952           0 :         aStdFont.SetSize(Size( 0, nFontHeight ));
     953             : 
     954           0 :         sal_uInt16 nPreNum = pActNum->Get(0).GetStart();
     955             : 
     956           0 :         if(bPosition)
     957             :         {
     958           0 :             sal_uInt16 nLineHeight = nFontHeight * 8 / 7;
     959           0 :             sal_uInt8 nStart = 0;
     960           0 :             while( !(nActLevel & (1<<nStart)) )
     961             :             {
     962           0 :                 nStart++;
     963             :             }
     964           0 :             if(nStart) // so that possible predecessors and successors are showed
     965           0 :                 nStart--;
     966             : 
     967           0 :             SwNumberTree::tNumberVector aNumVector;
     968           0 :             sal_uInt8 nEnd = Min( (sal_uInt8)(nStart + 3), MAXLEVEL );
     969           0 :             for( sal_uInt8 nLevel = nStart; nLevel < nEnd; ++nLevel )
     970             :             {
     971           0 :                 const SwNumFmt &rFmt = pActNum->Get(nLevel);
     972           0 :                 aNumVector.push_back(rFmt.GetStart());
     973             : 
     974           0 :                 sal_uInt16 nXStart( 0 );
     975           0 :                 short nTextOffset( 0 );
     976           0 :                 sal_uInt16 nNumberXPos( 0 );
     977           0 :                 if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
     978             :                 {
     979           0 :                     nXStart = rFmt.GetAbsLSpace() / nWidthRelation;
     980           0 :                     nTextOffset = rFmt.GetCharTextDistance() / nWidthRelation;
     981           0 :                     nNumberXPos = nXStart;
     982           0 :                     sal_uInt16 nFirstLineOffset = (-rFmt.GetFirstLineOffset()) / nWidthRelation;
     983             : 
     984           0 :                     if(nFirstLineOffset <= nNumberXPos)
     985           0 :                         nNumberXPos = nNumberXPos - nFirstLineOffset;
     986             :                     else
     987           0 :                         nNumberXPos = 0;
     988             :                 }
     989           0 :                 else if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT )
     990             :                 {
     991           0 :                     const long nTmpNumberXPos( ( rFmt.GetIndentAt() +
     992           0 :                                                  rFmt.GetFirstLineIndent() ) /
     993           0 :                                                nWidthRelation );
     994           0 :                     if ( nTmpNumberXPos < 0 )
     995             :                     {
     996           0 :                         nNumberXPos = 0;
     997             :                     }
     998             :                     else
     999             :                     {
    1000           0 :                         nNumberXPos = static_cast<sal_uInt16>(nTmpNumberXPos);
    1001             :                     }
    1002             :                 }
    1003             : 
    1004           0 :                 sal_uInt16 nBulletWidth = 0;
    1005           0 :                 if( SVX_NUM_BITMAP == rFmt.GetNumberingType() )
    1006             :                 {
    1007             :                     nBulletWidth = lcl_DrawGraphic(pVDev, rFmt,
    1008             :                                         nNumberXPos,
    1009           0 :                                             nYStart, nWidthRelation);
    1010             :                 }
    1011           0 :                 else if( SVX_NUM_CHAR_SPECIAL == rFmt.GetNumberingType() )
    1012             :                 {
    1013           0 :                     nBulletWidth =  lcl_DrawBullet(pVDev, rFmt, nNumberXPos, nYStart, aStdFont.GetSize());
    1014             :                 }
    1015             :                 else
    1016             :                 {
    1017           0 :                     pVDev->SetFont(aStdFont);
    1018           0 :                     if(pActNum->IsContinusNum())
    1019           0 :                         aNumVector[nLevel] = nPreNum;
    1020             :                     // #128041#
    1021           0 :                     String aText(pActNum->MakeNumString( aNumVector ));
    1022           0 :                     pVDev->DrawText( Point(nNumberXPos, nYStart), aText );
    1023           0 :                     nBulletWidth = (sal_uInt16)pVDev->GetTextWidth(aText);
    1024           0 :                     nPreNum++;
    1025             :                 }
    1026           0 :                 if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT &&
    1027           0 :                      rFmt.GetLabelFollowedBy() == SvxNumberFormat::SPACE )
    1028             :                 {
    1029           0 :                     pVDev->SetFont(aStdFont);
    1030           0 :                     rtl::OUString aText(' ');
    1031           0 :                     pVDev->DrawText( Point(nNumberXPos, nYStart), aText );
    1032           0 :                     nBulletWidth = nBulletWidth + (sal_uInt16)pVDev->GetTextWidth(aText);
    1033             :                 }
    1034             : 
    1035           0 :                 sal_uInt16 nTextXPos( 0 );
    1036           0 :                 if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
    1037             :                 {
    1038           0 :                     nTextXPos = nXStart;
    1039           0 :                     if(nTextOffset < 0)
    1040           0 :                          nTextXPos = nTextXPos + nTextOffset;
    1041           0 :                     if(nNumberXPos + nBulletWidth + nTextOffset > nTextXPos )
    1042           0 :                         nTextXPos = nNumberXPos + nBulletWidth + nTextOffset;
    1043             :                 }
    1044           0 :                 else if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT )
    1045             :                 {
    1046           0 :                     switch ( rFmt.GetLabelFollowedBy() )
    1047             :                     {
    1048             :                         case SvxNumberFormat::LISTTAB:
    1049             :                         {
    1050             :                             nTextXPos = static_cast<sal_uInt16>(
    1051           0 :                                             rFmt.GetListtabPos() / nWidthRelation );
    1052           0 :                             if ( nTextXPos < nNumberXPos + nBulletWidth )
    1053             :                             {
    1054           0 :                                 nTextXPos = nNumberXPos + nBulletWidth;
    1055             :                             }
    1056             :                         }
    1057           0 :                         break;
    1058             :                         case SvxNumberFormat::SPACE:
    1059             :                         case SvxNumberFormat::NOTHING:
    1060             :                         {
    1061           0 :                             nTextXPos = nNumberXPos + nBulletWidth;
    1062             :                         }
    1063           0 :                         break;
    1064             :                     }
    1065             : 
    1066           0 :                     nXStart = static_cast<sal_uInt16>( rFmt.GetIndentAt() / nWidthRelation );
    1067             :                 }
    1068             : 
    1069             : 
    1070           0 :                 Rectangle aRect1(Point(nTextXPos, nYStart + nFontHeight / 2), Size(aSize.Width() / 2, 2));
    1071           0 :                 pVDev->SetFillColor( GetSettings().GetStyleSettings().GetWindowColor() ); // Color( COL_BLACK ) );
    1072           0 :                 pVDev->DrawRect( aRect1 );
    1073             : 
    1074           0 :                 Rectangle aRect2(Point(nXStart, nYStart + nLineHeight + nFontHeight / 2 ), Size(aSize.Width() / 2, 2));
    1075           0 :                 pVDev->DrawRect( aRect2 );
    1076           0 :                 nYStart += 2 * nLineHeight;
    1077           0 :             }
    1078             :         }
    1079             :         else
    1080             :         {
    1081           0 :             SwNumberTree::tNumberVector aNumVector;
    1082           0 :             sal_uInt16 nLineHeight = nFontHeight * 3 / 2;
    1083           0 :             for( sal_uInt8 nLevel = 0; nLevel < MAXLEVEL;
    1084             :                             ++nLevel, nYStart = nYStart + nYStep )
    1085             :             {
    1086           0 :                 const SwNumFmt &rFmt = pActNum->Get(nLevel);
    1087           0 :                 aNumVector.push_back(rFmt.GetStart());
    1088           0 :                 sal_uInt16 nXStart( 0 );
    1089           0 :                 if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
    1090             :                 {
    1091           0 :                     nXStart = rFmt.GetAbsLSpace() / nWidthRelation;
    1092             :                 }
    1093           0 :                 else if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT )
    1094             :                 {
    1095           0 :                     const long nTmpXStart( ( rFmt.GetIndentAt() +
    1096           0 :                                              rFmt.GetFirstLineIndent() ) /
    1097           0 :                                            nWidthRelation );
    1098           0 :                     if ( nTmpXStart < 0 )
    1099             :                     {
    1100           0 :                         nXStart = 0;
    1101             :                     }
    1102             :                     else
    1103             :                     {
    1104           0 :                         nXStart = static_cast<sal_uInt16>(nTmpXStart);
    1105             :                     }
    1106             :                 }
    1107           0 :                 nXStart /= 2;
    1108           0 :                 nXStart += 2;
    1109           0 :                 sal_uInt16 nTextOffset = 2 * nXStep;
    1110           0 :                 if( SVX_NUM_BITMAP == rFmt.GetNumberingType() )
    1111             :                 {
    1112           0 :                     lcl_DrawGraphic(pVDev, rFmt, nXStart, nYStart, nWidthRelation);
    1113           0 :                     nTextOffset = nLineHeight + nXStep;
    1114             :                 }
    1115           0 :                 else if( SVX_NUM_CHAR_SPECIAL == rFmt.GetNumberingType() )
    1116             :                 {
    1117           0 :                     nTextOffset =  lcl_DrawBullet(pVDev, rFmt, nXStart, nYStart, aStdFont.GetSize());
    1118           0 :                     nTextOffset = nTextOffset + nXStep;
    1119             :                 }
    1120             :                 else
    1121             :                 {
    1122           0 :                     pVDev->SetFont(aStdFont);
    1123           0 :                     if(pActNum->IsContinusNum())
    1124           0 :                         aNumVector[nLevel] = nPreNum;
    1125             :                     // #128041#
    1126           0 :                     String aText(pActNum->MakeNumString( aNumVector ));
    1127           0 :                     pVDev->DrawText( Point(nXStart, nYStart), aText );
    1128           0 :                     nTextOffset = (sal_uInt16)pVDev->GetTextWidth(aText);
    1129           0 :                     nTextOffset = nTextOffset + nXStep;
    1130           0 :                     nPreNum++;
    1131             :                 }
    1132           0 :                 pVDev->SetFont(aStdFont);
    1133             :                 pVDev->DrawText(
    1134             :                     Point(nXStart + nTextOffset, nYStart),
    1135             :                     (pOutlineNames == 0
    1136             :                      ? utl::ConfigManager::getProductName()
    1137           0 :                      : rtl::OUString(pOutlineNames[nLevel])));
    1138           0 :             }
    1139             :         }
    1140             :     }
    1141             :     DrawOutDev( Point(0,0), aSize,
    1142             :                 Point(0,0), aSize,
    1143           0 :                         *pVDev );
    1144           0 :     delete pVDev;
    1145             : 
    1146           0 : }
    1147             : 
    1148           0 : NumberingPreview::~NumberingPreview()
    1149             : {
    1150           0 : }
    1151             : 
    1152             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10