summaryrefslogtreecommitdiff
path: root/sw/source/ui/misc/outline.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/ui/misc/outline.cxx')
-rw-r--r--sw/source/ui/misc/outline.cxx1348
1 files changed, 1348 insertions, 0 deletions
diff --git a/sw/source/ui/misc/outline.cxx b/sw/source/ui/misc/outline.cxx
new file mode 100644
index 000000000000..3f67fb5cdb1a
--- /dev/null
+++ b/sw/source/ui/misc/outline.cxx
@@ -0,0 +1,1348 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sw.hxx"
+#ifdef SW_DLLIMPLEMENTATION
+#undef SW_DLLIMPLEMENTATION
+#endif
+#include <hintids.hxx>
+#include <tools/shl.hxx>
+#ifndef _MENU_HXX //autogen
+#include <vcl/menu.hxx>
+#endif
+#ifndef _MSGBOX_HXX //autogen
+#include <vcl/msgbox.hxx>
+#endif
+#include <sfx2/tabdlg.hxx>
+#include <editeng/brshitem.hxx>
+#include <unotools/configmgr.hxx>
+#include <SwStyleNameMapper.hxx>
+
+#ifndef _NUM_HXX //autogen
+#define USE_NUMTABPAGES
+#include <num.hxx>
+#endif
+#ifndef _VIEW_HXX
+#include <view.hxx>
+#endif
+#ifndef _DOCSH_HXX
+#include <docsh.hxx>
+#endif
+#include <uitool.hxx>
+#include <errhdl.hxx>
+#include <wrtsh.hxx>
+#include <swmodule.hxx>
+#include <fmtcol.hxx>
+#include <outline.hxx>
+#include <uinums.hxx>
+#include <poolfmt.hxx>
+#include <shellres.hxx>
+#include <svl/style.hxx>
+#include <charfmt.hxx>
+#include <docstyle.hxx>
+#include <viewopt.hxx>
+#include <svtools/ctrlbox.hxx>
+#ifndef _HELPID_H
+#include <helpid.h>
+#endif
+#ifndef _GLOBALS_HRC
+#include <globals.hrc> // fuer Vorlagenname 'keins'
+#endif
+#ifndef _MISC_HRC
+#include <misc.hrc>
+#endif
+#ifndef _OUTLINE_HRC
+#include <outline.hrc>
+#endif
+#include <paratr.hxx>
+
+#include <unomid.h>
+
+#include <IDocumentOutlineNodes.hxx>
+// --> OD 2008-04-14 #outlinelevel#
+#include <app.hrc>
+// <--
+
+#ifndef _COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLEROLE_HPP_
+#include <com/sun/star/accessibility/AccessibleRole.hpp>
+#endif
+
+using namespace ::com::sun::star;
+
+/* -----------------------------31.01.01 10:23--------------------------------
+
+ ---------------------------------------------------------------------------*/
+
+DBG_NAME(outlinehdl)
+
+/*---------------------------------------------------------------------
+
+---------------------------------------------------------------------*/
+
+class SwNumNamesDlg: public ModalDialog
+{
+ FixedLine aFormFL;
+ Edit aFormEdit;
+ ListBox aFormBox;
+ OKButton aOKBtn;
+ CancelButton aCancelBtn;
+ HelpButton aHelpBtn;
+
+ DECL_LINK( ModifyHdl, Edit * );
+ DECL_LINK( SelectHdl, ListBox * );
+ DECL_LINK( DoubleClickHdl, ListBox * );
+
+public:
+ SwNumNamesDlg(Window *pParent);
+ ~SwNumNamesDlg();
+ void SetUserNames(const String *pList[]);
+ String GetName() const { return aFormEdit.GetText(); }
+ sal_uInt16 GetCurEntryPos() const { return aFormBox.GetSelectEntryPos(); }
+};
+
+/*------------------------------------------------------------------------
+ Beschreibung: selektierten Eintrag merken
+------------------------------------------------------------------------*/
+
+
+IMPL_LINK_INLINE_START( SwNumNamesDlg, SelectHdl, ListBox *, pBox )
+{
+ aFormEdit.SetText(pBox->GetSelectEntry());
+ aFormEdit.SetSelection(Selection(0, SELECTION_MAX));
+ return 0;
+}
+IMPL_LINK_INLINE_END( SwNumNamesDlg, SelectHdl, ListBox *, pBox )
+
+/*------------------------------------------------------------------------
+ Beschreibung: Setzen der vom Benutzer vergebenen Namen
+ Parameter: Liste der vom Benutzer vergebenen Namen;
+ nicht vom Benutzer benannte Positionen sind 0.
+------------------------------------------------------------------------*/
+
+
+void SwNumNamesDlg::SetUserNames(const String *pList[])
+{
+ sal_uInt16 nSelect = 0;
+ for(sal_uInt16 i = 0; i < SwBaseNumRules::nMaxRules; ++i)
+ {
+ if(pList[i])
+ {
+ aFormBox.RemoveEntry(i);
+ aFormBox.InsertEntry(*pList[i], i);
+ if(i == nSelect && nSelect < SwBaseNumRules::nMaxRules)
+ nSelect++;
+ }
+ }
+ aFormBox.SelectEntryPos(nSelect);
+ SelectHdl(&aFormBox);
+}
+/*------------------------------------------------------------------------
+ Beschreibung: OK-Button freischalten, wenn Text im Edit steht.
+------------------------------------------------------------------------*/
+
+
+IMPL_LINK_INLINE_START( SwNumNamesDlg, ModifyHdl, Edit *, pBox )
+{
+ aOKBtn.Enable(0 != pBox->GetText().Len());
+ return 0;
+}
+IMPL_LINK_INLINE_END( SwNumNamesDlg, ModifyHdl, Edit *, pBox )
+/*------------------------------------------------------------------------
+ Beschreibung: DoubleClickHdl
+------------------------------------------------------------------------*/
+
+
+IMPL_LINK_INLINE_START( SwNumNamesDlg, DoubleClickHdl, ListBox *, EMPTYARG )
+{
+ EndDialog(RET_OK);
+ return 0;
+}
+IMPL_LINK_INLINE_END( SwNumNamesDlg, DoubleClickHdl, ListBox *, EMPTYARG )
+
+/*--------------------------------------------------
+
+--------------------------------------------------*/
+
+SwNumNamesDlg::SwNumNamesDlg(Window *pParent)
+ : ModalDialog(pParent, SW_RES(DLG_NUM_NAMES)),
+ aFormFL(this, SW_RES(FL_FORM)),
+ aFormEdit(this, SW_RES(ED_FORM)),
+ aFormBox(this, SW_RES(LB_FORM)),
+ aOKBtn(this, SW_RES(BT_OK)),
+ aCancelBtn(this, SW_RES(BT_CANCEL)),
+ aHelpBtn(this, SW_RES(BT_HELP))
+{
+ FreeResource();
+ aFormEdit.SetModifyHdl(LINK(this, SwNumNamesDlg, ModifyHdl));
+ aFormBox.SetSelectHdl(LINK(this, SwNumNamesDlg, SelectHdl));
+ aFormBox.SetDoubleClickHdl(LINK(this, SwNumNamesDlg, DoubleClickHdl));
+ SelectHdl(&aFormBox);
+}
+
+/*--------------------------------------------------
+
+--------------------------------------------------*/
+
+__EXPORT SwNumNamesDlg::~SwNumNamesDlg() {}
+
+
+/* -----------------08.07.98 08:46-------------------
+ *
+ * --------------------------------------------------*/
+sal_uInt16 lcl_BitToLevel(sal_uInt16 nActLevel)
+{
+ sal_uInt16 nTmp = nActLevel;
+ sal_uInt16 nTmpLevel = 0;
+ while( 0 != (nTmp >>= 1) )
+ nTmpLevel++;
+ return nTmpLevel;
+}
+
+/* -----------------07.07.98 14:13-------------------
+ *
+ * --------------------------------------------------*/
+sal_uInt16 SwOutlineTabDialog::nNumLevel = 1;
+SwOutlineTabDialog::SwOutlineTabDialog(Window* pParent,
+ const SfxItemSet* pSwItemSet,
+ SwWrtShell &rSh) :
+ //der UserString wird danach richtig gesetzt
+ SfxTabDialog(pParent, SW_RES(DLG_TAB_OUTLINE), pSwItemSet, sal_False, &aEmptyStr),
+ aNullStr(C2S("____")),
+ aFormMenu(SW_RES(MN_FORM)),
+ rWrtSh(rSh),
+ pChapterNumRules(SW_MOD()->GetChapterNumRules()),
+ bModified(rWrtSh.IsModified())
+{
+ // --> OD 2008-04-14 #outlinelevel#
+ SetText( SW_RES( STR_OUTLINE_NUMBERING ) );
+ // <--
+ PushButton* pUserButton = GetUserButton();
+ pUserButton->SetText(SW_RES(ST_FORM));
+ pUserButton->SetHelpId(HID_OUTLINE_FORM);
+ pUserButton->SetClickHdl(LINK(this, SwOutlineTabDialog, FormHdl));
+ pUserButton->SetAccessibleRole( com::sun::star::accessibility::AccessibleRole::BUTTON_MENU );
+
+ FreeResource();
+ pNumRule = new SwNumRule( *rSh.GetOutlineNumRule() );
+ GetCancelButton().SetClickHdl(LINK(this, SwOutlineTabDialog, CancelHdl));
+
+ AddTabPage(TP_NUM_POSITION , &SwNumPositionTabPage::Create, 0);
+ AddTabPage(TP_OUTLINE_NUM , &SwOutlineSettingsTabPage::Create, 0);
+
+ String sHeadline;
+ sal_uInt16 i;
+
+ for( i = 0; i < MAXLEVEL; ++i )
+ {
+ // wurde die Vorlage noch nicht angelegt, dann ist sie noch an dieserPosition
+ if( !rWrtSh.GetParaStyle( sHeadline =
+ SwStyleNameMapper::GetUIName( static_cast< sal_uInt16 >(RES_POOLCOLL_HEADLINE1 + i),
+ sHeadline )) )
+ aCollNames[i] = sHeadline;
+ }
+
+ // Erfragen der Gliederungsebenen der Textvorlagen
+ const sal_uInt16 nCount = rWrtSh.GetTxtFmtCollCount();
+ for(i = 0; i < nCount; ++i )
+ {
+ SwTxtFmtColl &rTxtColl = rWrtSh.GetTxtFmtColl(i);
+ if(!rTxtColl.IsDefault())
+ {
+ //sal_uInt8 nOutLevel = rTxtColl.GetOutlineLevel(); //<-#outline level, removed out by zhaojianwei
+ //if(nOutLevel != NO_NUMBERING)
+ //->added by zhaojianwei
+ if(rTxtColl.IsAssignedToListLevelOfOutlineStyle())
+ {
+ int nOutLevel = rTxtColl.GetAssignedOutlineStyleLevel();
+ aCollNames[ nOutLevel ] = rTxtColl.GetName();
+ }
+ //<-end
+ }
+ }
+}
+
+/* -----------------07.07.98 14:13-------------------
+ *
+ * --------------------------------------------------*/
+SwOutlineTabDialog::~SwOutlineTabDialog()
+{
+ delete pNumRule;
+}
+
+/* -----------------07.07.98 14:13-------------------
+ *
+ * --------------------------------------------------*/
+void SwOutlineTabDialog::PageCreated(sal_uInt16 nPageId, SfxTabPage& rPage)
+{
+ switch ( nPageId )
+ {
+ case TP_NUM_POSITION:
+ ((SwNumPositionTabPage&)rPage).SetWrtShell(&rWrtSh);
+ ((SwNumPositionTabPage&)rPage).SetOutlineTabDialog(this);
+ break;
+ case TP_OUTLINE_NUM:
+ ((SwOutlineSettingsTabPage&)rPage).SetWrtShell(&rWrtSh);
+ break;
+ }
+}
+/* -----------------07.07.98 14:19-------------------
+ *
+ * --------------------------------------------------*/
+IMPL_LINK( SwOutlineTabDialog, CancelHdl, Button *, EMPTYARG )
+{
+ if (!bModified)
+ rWrtSh.ResetModified();
+ EndDialog(RET_CANCEL);
+ return 0;
+}
+/* -----------------08.07.98 12:14-------------------
+ *
+ * --------------------------------------------------*/
+IMPL_LINK( SwOutlineTabDialog, FormHdl, Button *, pBtn )
+{
+ //PopupMenu auffuellen
+ for( sal_uInt16 i = 0; i < SwChapterNumRules::nMaxRules; ++i )
+ {
+ const SwNumRulesWithName *pRules = pChapterNumRules->GetRules(i);
+ if( pRules )
+ aFormMenu.SetItemText(i + MN_FORMBASE, pRules->GetName());
+ }
+ aFormMenu.SetSelectHdl(LINK(this, SwOutlineTabDialog, MenuSelectHdl));
+ aFormMenu.Execute(pBtn, Rectangle(Point(0,0), pBtn->GetSizePixel()), POPUPMENU_EXECUTE_DOWN);
+ return 0;
+}
+
+/* -----------------08.07.98 12:14-------------------
+ *
+ * --------------------------------------------------*/
+IMPL_LINK( SwOutlineTabDialog, MenuSelectHdl, Menu *, pMenu )
+{
+ sal_uInt8 nLevelNo = 0;
+ switch(pMenu->GetCurItemId())
+ {
+ case MN_FORM1: nLevelNo = 1; break;
+ case MN_FORM2: nLevelNo = 2; break;
+ case MN_FORM3: nLevelNo = 3; break;
+ case MN_FORM4: nLevelNo = 4; break;
+ case MN_FORM5: nLevelNo = 5; break;
+ case MN_FORM6: nLevelNo = 6; break;
+ case MN_FORM7: nLevelNo = 7; break;
+ case MN_FORM8: nLevelNo = 8; break;
+ case MN_FORM9: nLevelNo = 9; break;
+
+ case MN_SAVE:
+ {
+ SwNumNamesDlg *pDlg = new SwNumNamesDlg(this);
+ const String *aStrArr[SwChapterNumRules::nMaxRules];
+ for(sal_uInt16 i = 0; i < SwChapterNumRules::nMaxRules; ++i)
+ {
+ const SwNumRulesWithName *pRules = pChapterNumRules->GetRules(i);
+ if(pRules)
+ aStrArr[i] = &pRules->GetName();
+ else
+ aStrArr[i] = 0;
+ }
+ pDlg->SetUserNames(aStrArr);
+ if(RET_OK == pDlg->Execute())
+ {
+ const String aName(pDlg->GetName());
+ pChapterNumRules->ApplyNumRules( SwNumRulesWithName(
+ *pNumRule, aName ), pDlg->GetCurEntryPos() );
+ pMenu->SetItemText(
+ pDlg->GetCurEntryPos() + MN_FORMBASE, aName);
+ }
+ delete pDlg;
+ return 0;
+
+ }
+
+ }
+ if( nLevelNo-- )
+ {
+ const SwNumRulesWithName *pRules = pChapterNumRules->GetRules( nLevelNo );
+ if( pRules )
+ {
+ pRules->MakeNumRule( rWrtSh, *pNumRule );
+ pNumRule->SetRuleType( OUTLINE_RULE );
+ }
+ else
+ *pNumRule = *rWrtSh.GetOutlineNumRule();
+ }
+
+ sal_uInt16 nPageId = GetCurPageId();
+ SfxTabPage* pPage = GetTabPage( nPageId );
+ pPage->Reset(*GetOutputItemSet());
+
+ return 0;
+}
+/* -----------------07.07.98 14:19-------------------
+ *
+ * --------------------------------------------------*/
+sal_uInt16 SwOutlineTabDialog::GetLevel(const String &rFmtName) const
+{
+ for(sal_uInt16 i = 0; i < MAXLEVEL; ++i)
+ {
+ if(aCollNames[i] == rFmtName)
+ return i;
+ }
+ return MAXLEVEL;//NO_NUMBERING; //#outline level,zhaojianwei
+
+}
+/* -----------------07.07.98 16:30-------------------
+ *
+ * --------------------------------------------------*/
+short SwOutlineTabDialog::Ok()
+{
+ SfxTabDialog::Ok();
+ // bei allen erzeugten Vorlagen die Ebenen setzen, muss
+ // geschehen, um evtl. aufgehobene Zuordnungen
+ // auch wieder zu loeschen
+
+ // --> OD 2006-12-11 #130443#
+ // encapsulate changes into a action to avoid effects on the current cursor
+ // position during the changes.
+ rWrtSh.StartAction();
+ // <--
+
+ const SwNumRule * pOutlineRule = rWrtSh.GetOutlineNumRule();
+
+ sal_uInt16 i, nCount = rWrtSh.GetTxtFmtCollCount();
+ for( i = 0; i < nCount; ++i )
+ {
+ SwTxtFmtColl &rTxtColl = rWrtSh.GetTxtFmtColl(i);
+ if( !rTxtColl.IsDefault() )
+ {
+ //rTxtColl.SetOutlineLevel( (sal_uInt8)GetLevel(rTxtColl.GetName()));//#outline level,removed by zhaojianwei
+
+ const SfxPoolItem & rItem =
+ rTxtColl.GetFmtAttr(RES_PARATR_NUMRULE, sal_False);
+
+ //if ((sal_uInt8)GetLevel(rTxtColl.GetName()) == NO_NUMBERING) //#outline level,removed by zhaojianwei
+ //{
+ // if (static_cast<const SwNumRuleItem &>(rItem).GetValue() ==
+ // pOutlineRule->GetName())
+ // {
+ // rTxtColl.ResetFmtAttr(RES_PARATR_NUMRULE);
+ // }
+ //}
+ //else
+ //{
+ // if (static_cast<const SwNumRuleItem &>(rItem).GetValue() !=
+ // pOutlineRule->GetName())
+ // {
+ // SwNumRuleItem aItem(pOutlineRule->GetName());
+ // rTxtColl.SetFmtAttr(aItem);
+ // }
+ //}
+ if ((sal_uInt8)GetLevel(rTxtColl.GetName()) == MAXLEVEL) //add by zhaojianwei
+ {
+ if(rTxtColl.IsAssignedToListLevelOfOutlineStyle())
+ {
+ rTxtColl.DeleteAssignmentToListLevelOfOutlineStyle();
+ }
+ if (static_cast<const SwNumRuleItem &>(rItem).GetValue() ==
+ pOutlineRule->GetName())
+ {
+ rTxtColl.ResetFmtAttr(RES_PARATR_NUMRULE);
+ }
+ }
+ else
+ {
+ rTxtColl.AssignToListLevelOfOutlineStyle(GetLevel(rTxtColl.GetName()));
+
+ if (static_cast<const SwNumRuleItem &>(rItem).GetValue() !=
+ pOutlineRule->GetName())
+ {
+ SwNumRuleItem aItem(pOutlineRule->GetName());
+ rTxtColl.SetFmtAttr(aItem);
+ }
+ } //<-end,zhaojianwei
+ }
+ }
+
+ for(i = 0; i < MAXLEVEL; ++i )
+ {
+ String sHeadline;
+ ::SwStyleNameMapper::FillUIName( static_cast< sal_uInt16 >(RES_POOLCOLL_HEADLINE1 + i),
+ sHeadline );
+ SwTxtFmtColl* pColl = rWrtSh.FindTxtFmtCollByName( sHeadline );
+ if( !pColl )
+ {
+ //if( !aCollNames[i].Len() ) //#outline level,removed by zhaojianwei
+ //{
+ // SwTxtFmtColl* pTxtColl = rWrtSh.GetTxtCollFromPool(
+ // static_cast< sal_uInt16 >(RES_POOLCOLL_HEADLINE1 + i) );
+ // pTxtColl->SetOutlineLevel( NO_NUMBERING );
+ // pTxtColl->ResetFmtAttr(RES_PARATR_NUMRULE);
+ //}
+ //else if(aCollNames[i] != sHeadline)
+ //{
+ // SwTxtFmtColl* pTxtColl = rWrtSh.GetParaStyle(
+ // aCollNames[i], SwWrtShell::GETSTYLE_CREATESOME);
+ // if(pTxtColl)
+ // {
+ // pTxtColl->SetOutlineLevel( static_cast< sal_uInt8 >(i) );
+
+ // SwNumRuleItem aItem(pOutlineRule->GetName());
+ // pTxtColl->SetFmtAttr(aItem);
+ // }
+ //}
+ if(aCollNames[i] != sHeadline)//->added by zhaojianwei
+ {
+ SwTxtFmtColl* pTxtColl = rWrtSh.GetTxtCollFromPool(
+ static_cast< sal_uInt16 >(RES_POOLCOLL_HEADLINE1 + i) );
+ pTxtColl->DeleteAssignmentToListLevelOfOutlineStyle();
+ pTxtColl->ResetFmtAttr(RES_PARATR_NUMRULE);
+
+ if( aCollNames[i].Len() )
+ {
+ pTxtColl = rWrtSh.GetParaStyle(
+ aCollNames[i], SwWrtShell::GETSTYLE_CREATESOME);
+ if(pTxtColl)
+ {
+ pTxtColl->AssignToListLevelOfOutlineStyle(i);
+ SwNumRuleItem aItem(pOutlineRule->GetName());
+ pTxtColl->SetFmtAttr(aItem);
+ }
+ }
+ }//<--end,zhaojianwei
+ }
+ }
+
+ rWrtSh.SetOutlineNumRule( *pNumRule);
+
+ // --> OD 2006-12-11 #130443#
+ rWrtSh.EndAction();
+ // <--
+
+ return RET_OK;
+}
+
+/* -----------------07.07.98 14:19-------------------
+ *
+ * --------------------------------------------------*/
+SwOutlineSettingsTabPage::SwOutlineSettingsTabPage(Window* pParent, const SfxItemSet& rSet) :
+ SfxTabPage(pParent, SW_RES(TP_OUTLINE_NUM), rSet),
+ aLevelFL( this, SW_RES(FL_LEVEL )),
+ aLevelLB( this, SW_RES(LB_LEVEL )),
+ aNumberFL(this, SW_RES(FL_NUMBER)),
+ aCollLbl(this, SW_RES(FT_COLL)),
+ aCollBox(this, SW_RES(LB_COLL)),
+ aNumberLbl(this, SW_RES(FT_NUMBER)),
+ aNumberBox(this, SW_RES(LB_NUMBER), INSERT_NUM_TYPE_NO_NUMBERING|INSERT_NUM_EXTENDED_TYPES),
+ aCharFmtFT(this, SW_RES(FT_CHARFMT)),
+ aCharFmtLB(this, SW_RES(LB_CHARFMT)),
+ aAllLevelFT( this, SW_RES(FT_ALL_LEVEL)),
+ aAllLevelNF( this, SW_RES(NF_ALL_LEVEL)),
+ aDelim(this, SW_RES(FT_DELIM)),
+ aPrefixFT(this, SW_RES(FT_PREFIX)),
+ aPrefixED(this, SW_RES(ED_PREFIX)),
+ aSuffixFT(this, SW_RES(FT_SUFFIX)),
+ aSuffixED(this, SW_RES(ED_SUFFIX)),
+ aStartLbl(this, SW_RES(FT_START)),
+ aStartEdit(this, SW_RES(ED_START)),
+ aPreviewWIN( this, SW_RES(WIN_PREVIEW )),
+
+ aNoFmtName(SW_RES(ST_NO_COLL)),
+ pSh(0),
+ pCollNames(0),
+ nActLevel(1)
+{
+ FreeResource();
+ SetExchangeSupport();
+
+ aCollBox.InsertEntry(aNoFmtName);
+ aLevelLB.SetSelectHdl(LINK(this, SwOutlineSettingsTabPage, LevelHdl));
+ aAllLevelNF.SetModifyHdl(LINK(this, SwOutlineSettingsTabPage, ToggleComplete));
+ aCollBox.SetSelectHdl(LINK(this, SwOutlineSettingsTabPage, CollSelect));
+ aCollBox.SetGetFocusHdl(LINK(this, SwOutlineSettingsTabPage, CollSelectGetFocus));
+ aNumberBox.SetSelectHdl(LINK(this, SwOutlineSettingsTabPage, NumberSelect));
+ aPrefixED.SetModifyHdl(LINK(this, SwOutlineSettingsTabPage, DelimModify));
+ aSuffixED.SetModifyHdl(LINK(this, SwOutlineSettingsTabPage, DelimModify));
+ aStartEdit.SetModifyHdl(LINK(this, SwOutlineSettingsTabPage, StartModified));
+ aCharFmtLB.SetSelectHdl(LINK(this, SwOutlineSettingsTabPage, CharFmtHdl));
+
+}
+/* -----------------07.07.98 14:19-------------------
+ *
+ * --------------------------------------------------*/
+void SwOutlineSettingsTabPage::Update()
+{
+ // falls eine Vorlage fuer diese Ebene bereits selektiert wurde,
+ // diese in der ListBox auswaehlean
+ aCollBox.Enable(USHRT_MAX != nActLevel);
+ if(USHRT_MAX == nActLevel)
+ {
+ sal_Bool bSamePrefix = sal_True;
+ sal_Bool bSameSuffix = sal_True;
+ sal_Bool bSameType = sal_True;
+ sal_Bool bSameComplete = sal_True;
+ sal_Bool bSameStart = sal_True;
+ sal_Bool bSameCharFmt = sal_True;
+
+ const SwNumFmt* aNumFmtArr[MAXLEVEL];
+ const SwCharFmt* pFirstFmt = 0;
+
+ for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
+ {
+
+ aNumFmtArr[ i ] = &pNumRule->Get(i);
+ if(i == 0)
+ pFirstFmt = aNumFmtArr[i]->GetCharFmt();
+ else
+ {
+ bSameType &= aNumFmtArr[i]->GetNumberingType() == aNumFmtArr[0]->GetNumberingType();
+ bSameStart &= aNumFmtArr[i]->GetStart() == aNumFmtArr[0]->GetStart();
+ bSamePrefix &= aNumFmtArr[i]->GetPrefix() == aNumFmtArr[0]->GetPrefix();
+ bSameSuffix &= aNumFmtArr[i]->GetSuffix() == aNumFmtArr[0]->GetSuffix();
+ bSameComplete &= aNumFmtArr[i]->GetIncludeUpperLevels() == aNumFmtArr[0]->GetIncludeUpperLevels();
+ const SwCharFmt* pFmt = aNumFmtArr[i]->GetCharFmt();
+ bSameCharFmt &= (!pFirstFmt && !pFmt)
+ || (pFirstFmt && pFmt && pFmt->GetName() == pFirstFmt->GetName());
+ }
+ }
+ CheckForStartValue_Impl(aNumFmtArr[0]->GetNumberingType());
+ if(bSameType)
+ aNumberBox.SelectNumberingType( aNumFmtArr[0]->GetNumberingType() );
+ else
+ aNumberBox.SetNoSelection();
+ if(bSameStart)
+ aStartEdit.SetValue(aNumFmtArr[0]->GetStart());
+ else
+ aStartEdit.SetText(aEmptyStr);
+ if(bSamePrefix)
+ aPrefixED.SetText(aNumFmtArr[0]->GetPrefix());
+ else
+ aPrefixED.SetText(aEmptyStr);
+ if(bSameSuffix)
+ aSuffixED.SetText(aNumFmtArr[0]->GetSuffix());
+ else
+ aSuffixED.SetText(aEmptyStr);
+
+ if(bSameCharFmt)
+ {
+ if(pFirstFmt)
+ aCharFmtLB.SelectEntry(pFirstFmt->GetName());
+ else
+ aCharFmtLB.SelectEntry( ViewShell::GetShellRes()->aStrNone );
+ }
+ else
+ aCharFmtLB.SetNoSelection();
+
+ aAllLevelFT.Enable(sal_True);
+ aAllLevelNF.Enable(sal_True);
+ aAllLevelNF.SetMax(MAXLEVEL);
+ if(bSameComplete)
+ {
+ aAllLevelNF.SetValue(aNumFmtArr[0]->GetIncludeUpperLevels());
+ }
+ else
+ {
+ aAllLevelNF.SetText(aEmptyStr);
+ }
+ }
+ else
+ {
+ sal_uInt16 nTmpLevel = lcl_BitToLevel(nActLevel);
+ String aColl(pCollNames[nTmpLevel]);
+ if(aColl.Len())
+ aCollBox.SelectEntry(aColl);
+ else
+ aCollBox.SelectEntry(aNoFmtName);
+ const SwNumFmt &rFmt = pNumRule->Get(nTmpLevel);
+
+ aNumberBox.SelectNumberingType( rFmt.GetNumberingType() );
+ aPrefixED.SetText(rFmt.GetPrefix());
+ aSuffixED.SetText(rFmt.GetSuffix());
+ const SwCharFmt* pFmt = rFmt.GetCharFmt();
+ if(pFmt)
+ aCharFmtLB.SelectEntry(pFmt->GetName());
+ else
+ aCharFmtLB.SelectEntry( ViewShell::GetShellRes()->aStrNone );
+
+ if(nTmpLevel)
+ {
+ aAllLevelFT.Enable(sal_True);
+ aAllLevelNF.Enable(sal_True);
+ aAllLevelNF.SetMax(nTmpLevel + 1);
+ aAllLevelNF.SetValue(rFmt.GetIncludeUpperLevels());
+ }
+ else
+ {
+ aAllLevelNF.SetText(aEmptyStr);
+ aAllLevelNF.Enable(sal_False);
+ aAllLevelFT.Enable(sal_False);
+ }
+ CheckForStartValue_Impl(rFmt.GetNumberingType());
+ aStartEdit.SetValue( rFmt.GetStart() );
+ }
+ SetModified();
+}
+
+/* -----------------07.07.98 14:19-------------------
+ *
+ * --------------------------------------------------*/
+IMPL_LINK( SwOutlineSettingsTabPage, LevelHdl, ListBox *, pBox )
+{
+ nActLevel = 0;
+ if(pBox->IsEntryPosSelected( MAXLEVEL ))
+ {
+ nActLevel = 0xFFFF;
+ }
+ else
+ {
+ sal_uInt16 nMask = 1;
+ for( sal_uInt16 i = 0; i < MAXLEVEL; i++ )
+ {
+ if(pBox->IsEntryPosSelected( i ))
+ nActLevel |= nMask;
+ nMask <<= 1;
+ }
+ }
+ Update();
+ return 0;
+}
+/* -----------------07.07.98 14:19-------------------
+ *
+ * --------------------------------------------------*/
+IMPL_LINK( SwOutlineSettingsTabPage, ToggleComplete, NumericField *, pFld )
+{
+ sal_uInt16 nMask = 1;
+ for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
+ {
+ if(nActLevel & nMask)
+ {
+ SwNumFmt aNumFmt(pNumRule->Get(i));
+ aNumFmt.SetIncludeUpperLevels( Min( (sal_uInt8)pFld->GetValue(),
+ (sal_uInt8)(i + 1)) );
+ pNumRule->Set(i, aNumFmt);
+ }
+ nMask <<= 1;
+ }
+ SetModified();
+ return 0;
+}
+/* -----------------07.07.98 14:19-------------------
+ *
+ * --------------------------------------------------*/
+IMPL_LINK( SwOutlineSettingsTabPage, CollSelect, ListBox *, pBox )
+{
+ sal_uInt8 i;
+
+ const String aCollName(pBox->GetSelectEntry());
+ //0xFFFF darf hier nicht sein (disable)
+ sal_uInt16 nTmpLevel = lcl_BitToLevel(nActLevel);
+ String sOldName( pCollNames[nTmpLevel] );
+
+ for( i = 0; i < MAXLEVEL; ++i)
+ pCollNames[i] = aSaveCollNames[i];
+
+ if(aCollName == aNoFmtName)
+ pCollNames[nTmpLevel] = aEmptyStr;
+ else
+ {
+ pCollNames[nTmpLevel] = aCollName;
+ // wird die Vorlage bereits verwendet ?
+ for( i = 0; i < MAXLEVEL; ++i)
+ if(i != nTmpLevel && pCollNames[i] == aCollName )
+ pCollNames[i] = aEmptyStr;
+ }
+
+ // search the oldname and put it into the current entries
+ if( sOldName.Len() )
+ for( i = 0; i < MAXLEVEL; ++i)
+ if( aSaveCollNames[ i ] == sOldName && i != nTmpLevel &&
+ !pCollNames[ i ].Len() )
+ {
+ sal_uInt8 n;
+ for( n = 0; n < MAXLEVEL; ++n )
+ if( pCollNames[ n ] == sOldName )
+ break;
+
+ if( MAXLEVEL == n )
+ // it was a outline leveld name and the current entries is zero.
+ pCollNames[ i ] = sOldName;
+ }
+
+ SetModified();
+ return 0;
+}
+
+IMPL_LINK( SwOutlineSettingsTabPage, CollSelectGetFocus, ListBox *, EMPTYARG )
+{
+ for( sal_uInt8 i = 0; i < MAXLEVEL; ++i)
+ aSaveCollNames[i] = pCollNames[i];
+ return 0;
+}
+
+/* -----------------07.07.98 14:19-------------------
+ *
+ * --------------------------------------------------*/
+IMPL_LINK( SwOutlineSettingsTabPage, NumberSelect, SwNumberingTypeListBox *, pBox )
+{
+ sal_uInt16 nMask = 1;
+ sal_Int16 nNumberType = pBox->GetSelectedNumberingType();//(sal_Int16)(sal_uLong)pBox->GetEntryData(pBox->GetSelectEntryPos());
+ for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
+ {
+ if(nActLevel & nMask)
+ {
+ SwNumFmt aNumFmt(pNumRule->Get(i));
+ aNumFmt.SetNumberingType(nNumberType);
+ pNumRule->Set(i, aNumFmt);
+ CheckForStartValue_Impl(nNumberType);
+ }
+ nMask <<= 1;
+ }
+ SetModified();
+ return 0;
+}
+/* -----------------07.07.98 14:19-------------------
+ *
+ * --------------------------------------------------*/
+IMPL_LINK( SwOutlineSettingsTabPage, DelimModify, Edit *, EMPTYARG )
+{
+ sal_uInt16 nMask = 1;
+ for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
+ {
+ if(nActLevel & nMask)
+ {
+ SwNumFmt aNumFmt(pNumRule->Get(i));
+ aNumFmt.SetPrefix( aPrefixED.GetText() );
+ aNumFmt.SetSuffix( aSuffixED.GetText() );
+ pNumRule->Set(i, aNumFmt);
+ }
+ nMask <<= 1;
+ }
+ SetModified();
+ return 0;
+}
+/* -----------------07.07.98 14:19-------------------
+ *
+ * --------------------------------------------------*/
+IMPL_LINK( SwOutlineSettingsTabPage, StartModified, NumericField *, pFld )
+{
+ sal_uInt16 nMask = 1;
+ for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
+ {
+ if(nActLevel & nMask)
+ {
+ SwNumFmt aNumFmt(pNumRule->Get(i));
+ aNumFmt.SetStart( (sal_uInt16)pFld->GetValue() );
+ pNumRule->Set(i, aNumFmt);
+ }
+ nMask <<= 1;
+ }
+ SetModified();
+ return 0;
+}
+/* -----------------21.09.98 12:21-------------------
+ *
+ * --------------------------------------------------*/
+IMPL_LINK( SwOutlineSettingsTabPage, CharFmtHdl, ListBox *, EMPTYARG )
+{
+// bAutomaticCharStyles = sal_False;
+ String sEntry = aCharFmtLB.GetSelectEntry();
+ sal_uInt16 nMask = 1;
+ sal_Bool bFormatNone = sEntry == ViewShell::GetShellRes()->aStrNone;
+ SwCharFmt* pFmt = 0;
+ if(!bFormatNone)
+ {
+ sal_uInt16 nChCount = pSh->GetCharFmtCount();
+ for(sal_uInt16 i = 0; i < nChCount; i++)
+ {
+ SwCharFmt& rChFmt = pSh->GetCharFmt(i);
+ if(rChFmt.GetName() == sEntry)
+ {
+ pFmt = &rChFmt;
+ break;
+ }
+ }
+ if(!pFmt)
+ {
+ SfxStyleSheetBasePool* pPool = pSh->GetView().GetDocShell()->GetStyleSheetPool();
+ SfxStyleSheetBase* pBase;
+ pBase = pPool->Find(sEntry, SFX_STYLE_FAMILY_CHAR);
+ if(!pBase)
+ pBase = &pPool->Make(sEntry, SFX_STYLE_FAMILY_PAGE);
+ pFmt = ((SwDocStyleSheet*)pBase)->GetCharFmt();
+
+ }
+ }
+
+ for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
+ {
+ if(nActLevel & nMask)
+ {
+ SwNumFmt aNumFmt(pNumRule->Get(i));
+ if(bFormatNone)
+ aNumFmt.SetCharFmt(0);
+ else
+ aNumFmt.SetCharFmt(pFmt);
+ pNumRule->Set(i, aNumFmt);
+ }
+ nMask <<= 1;
+ }
+ return RET_OK;
+}
+/* -----------------07.07.98 14:19-------------------
+ *
+ * --------------------------------------------------*/
+SwOutlineSettingsTabPage::~SwOutlineSettingsTabPage()
+{
+}
+/* -----------------07.07.98 16:27-------------------
+ *
+ * --------------------------------------------------*/
+void SwOutlineSettingsTabPage::SetWrtShell(SwWrtShell* pShell)
+{
+ pSh = pShell;
+ // Erfragen der NumRules dieses Dokumentes
+ pNumRule = ((SwOutlineTabDialog*)GetTabDialog())->GetNumRule();
+ pCollNames = ((SwOutlineTabDialog*)GetTabDialog())->GetCollNames();
+
+ //pNumRule = new SwNumRule( *rSh.GetOutlineNumRule() );
+
+ aPreviewWIN.SetNumRule(pNumRule);
+ aPreviewWIN.SetOutlineNames(pCollNames);
+ // Startwert setzen - nActLevel muss hier 1 sein
+ sal_uInt16 nTmpLevel = lcl_BitToLevel(nActLevel);
+ const SwNumFmt& rNumFmt = pNumRule->Get( nTmpLevel );
+ aStartEdit.SetValue( rNumFmt.GetStart() );
+
+ // Poolformate fuer Ueberschriften anlegen
+ String sStr;
+ sal_uInt16 i;
+ for( i = 0; i < MAXLEVEL; ++i )
+ {
+ aCollBox.InsertEntry( SwStyleNameMapper::GetUIName(
+ static_cast< sal_uInt16 >(RES_POOLCOLL_HEADLINE1 + i), aEmptyStr ));
+ aLevelLB.InsertEntry( String::CreateFromInt32(i + 1) );
+ }
+ sStr.AssignAscii( RTL_CONSTASCII_STRINGPARAM( "1 - " ));
+ sStr += String::CreateFromInt32(MAXLEVEL);
+ aLevelLB.InsertEntry( sStr );
+
+ // Erfragen der Gliederungsebenen der Textvorlagen
+ const sal_uInt16 nCount = pSh->GetTxtFmtCollCount();
+ for( i = 0; i < nCount; ++i )
+ {
+ SwTxtFmtColl &rTxtColl = pSh->GetTxtFmtColl(i);
+ if(!rTxtColl.IsDefault())
+ {
+ sStr = rTxtColl.GetName();
+ if(LISTBOX_ENTRY_NOTFOUND == aCollBox.GetEntryPos( sStr ))
+ aCollBox.InsertEntry( sStr );
+ }
+ }
+
+ aNumberBox.SelectNumberingType(rNumFmt.GetNumberingType());
+ sal_uInt16 nOutlinePos = pSh->GetOutlinePos(MAXLEVEL);
+ sal_uInt16 nTmp = 0;
+ if(nOutlinePos != USHRT_MAX)
+ {
+ nTmp = static_cast<sal_uInt16>(pSh->getIDocumentOutlineNodesAccess()->getOutlineLevel(nOutlinePos));
+ }
+ aLevelLB.SelectEntryPos(nTmp-1);//nTmp);//#outline level,zhaojianwei
+
+ // Zeichenvorlagen sammeln
+ aCharFmtLB.Clear();
+ aCharFmtLB.InsertEntry( ViewShell::GetShellRes()->aStrNone );
+
+ // Zeichenvorlagen
+ ::FillCharStyleListBox(aCharFmtLB,
+ pSh->GetView().GetDocShell());
+ Update();
+}
+/* -----------------07.07.98 14:19-------------------
+ *
+ * --------------------------------------------------*/
+void SwOutlineSettingsTabPage::ActivatePage(const SfxItemSet& )
+{
+ nActLevel = SwOutlineTabDialog::GetActNumLevel();
+ if(nActLevel != USHRT_MAX)
+ aLevelLB.SelectEntryPos(lcl_BitToLevel(nActLevel));
+ else
+ aLevelLB.SelectEntryPos(MAXLEVEL);
+ LevelHdl(&aLevelLB);
+}
+/* -----------------07.07.98 14:19-------------------
+ *
+ * --------------------------------------------------*/
+int SwOutlineSettingsTabPage::DeactivatePage(SfxItemSet*)
+{
+ SwOutlineTabDialog::SetActNumLevel(nActLevel);
+ return LEAVE_PAGE;
+}
+/* -----------------07.07.98 14:19-------------------
+ *
+ * --------------------------------------------------*/
+sal_Bool SwOutlineSettingsTabPage::FillItemSet( SfxItemSet& )
+{
+ return sal_True;
+}
+/* -----------------07.07.98 14:19-------------------
+ *
+ * --------------------------------------------------*/
+void SwOutlineSettingsTabPage::Reset( const SfxItemSet& rSet )
+{
+ ActivatePage(rSet);
+}
+/* -----------------07.07.98 14:19-------------------
+ *
+ * --------------------------------------------------*/
+SfxTabPage* SwOutlineSettingsTabPage::Create( Window* pParent,
+ const SfxItemSet& rAttrSet)
+{
+ return new SwOutlineSettingsTabPage(pParent, rAttrSet);
+}
+/* -----------------07.11.2002 15:13-----------------
+ *
+ * --------------------------------------------------*/
+void SwOutlineSettingsTabPage::CheckForStartValue_Impl(sal_uInt16 nNumberingType)
+{
+ sal_Bool bIsNull = aStartEdit.GetValue() == 0;
+ sal_Bool bNoZeroAllowed = nNumberingType < SVX_NUM_ARABIC ||
+ SVX_NUM_CHARS_UPPER_LETTER_N == nNumberingType ||
+ SVX_NUM_CHARS_LOWER_LETTER_N == nNumberingType;
+ aStartEdit.SetMin(bNoZeroAllowed ? 1 : 0);
+ if(bIsNull && bNoZeroAllowed)
+ aStartEdit.GetModifyHdl().Call(&aStartEdit);
+}
+/*-----------------09.12.97 11:54-------------------
+
+--------------------------------------------------*/
+sal_uInt16 lcl_DrawBullet(VirtualDevice* pVDev,
+ const SwNumFmt& rFmt, sal_uInt16 nXStart,
+ sal_uInt16 nYStart, const Size& rSize)
+{
+ Font aTmpFont(pVDev->GetFont());
+
+ Font aFont(*rFmt.GetBulletFont());
+ aFont.SetSize(rSize);
+ aFont.SetTransparent(sal_True);
+ pVDev->SetFont( aFont );
+ String aText(rFmt.GetBulletChar());
+ pVDev->DrawText( Point(nXStart, nYStart), aText );
+ sal_uInt16 nRet = (sal_uInt16)pVDev->GetTextWidth(aText);
+
+ pVDev->SetFont(aTmpFont);
+ return nRet;
+}
+/*-----------------09.12.97 11:49-------------------
+
+--------------------------------------------------*/
+sal_uInt16 lcl_DrawGraphic(VirtualDevice* pVDev, const SwNumFmt &rFmt, sal_uInt16 nXStart,
+ sal_uInt16 nYStart, sal_uInt16 nDivision)
+{
+ const SvxBrushItem* pBrushItem = rFmt.GetBrush();
+ sal_uInt16 nRet = 0;
+ if(pBrushItem)
+ {
+ const Graphic* pGrf = pBrushItem->GetGraphic();
+ if(pGrf)
+ {
+ Size aGSize( rFmt.GetGraphicSize());
+ aGSize.Width() /= nDivision;
+ nRet = (sal_uInt16)aGSize.Width();
+ aGSize.Height() /= nDivision;
+ pGrf->Draw( pVDev, Point(nXStart,nYStart),
+ pVDev->PixelToLogic( aGSize ) );
+ }
+ }
+ return nRet;
+
+}
+/*-----------------02.12.97 10:34-------------------
+ Vorschau der Numerierung painten
+--------------------------------------------------*/
+void NumberingPreview::Paint( const Rectangle& /*rRect*/ )
+{
+ Size aSize(PixelToLogic(GetOutputSizePixel()));
+ Rectangle aRect(Point(0,0), aSize);
+
+ VirtualDevice* pVDev = new VirtualDevice(*this);
+ pVDev->SetMapMode(GetMapMode());
+ pVDev->SetOutputSize( aSize );
+
+ // #101524# OJ
+ pVDev->SetFillColor( GetSettings().GetStyleSettings().GetWindowColor() );
+ pVDev->SetLineColor( GetSettings().GetStyleSettings().GetButtonTextColor() );
+ pVDev->DrawRect(aRect);
+
+ if(pActNum)
+ {
+ sal_uInt16 nWidthRelation;
+ if(nPageWidth)
+ {
+ nWidthRelation = sal_uInt16 (nPageWidth / aSize.Width());
+ if(bPosition)
+ nWidthRelation = nWidthRelation * 2 / 3;
+ else
+ nWidthRelation = nWidthRelation / 4;
+ }
+ else
+ nWidthRelation = 30; // Kapiteldialog
+
+ //Hoehe pro Ebene
+ sal_uInt16 nXStep = sal_uInt16(aSize.Width() / (3 * MAXLEVEL));
+ if(MAXLEVEL < 10)
+ nXStep /= 2;
+ sal_uInt16 nYStart = 4;
+ sal_uInt16 nYStep = sal_uInt16((aSize.Height() - 6)/ MAXLEVEL);
+ aStdFont = OutputDevice::GetDefaultFont(
+ DEFAULTFONT_UI_SANS, (LanguageType)GetAppLanguage(),
+ DEFAULTFONT_FLAGS_ONLYONE, this );
+ // #101524# OJ
+ aStdFont.SetColor( SwViewOption::GetFontColor() );
+
+ //
+ sal_uInt16 nFontHeight = nYStep * 6 / 10;
+ if(bPosition)
+ nFontHeight = nYStep * 15 / 10;
+ aStdFont.SetSize(Size( 0, nFontHeight ));
+
+ sal_uInt16 nPreNum = pActNum->Get(0).GetStart();
+
+ if(bPosition)
+ {
+ sal_uInt16 nLineHeight = nFontHeight * 8 / 7;
+ sal_uInt8 nStart = 0;
+ while( !(nActLevel & (1<<nStart)) )
+ {
+ nStart++;
+ }
+ if(nStart) // damit moeglichs Vorgaenger und Nachfolger gezeigt werden
+ nStart--;
+
+ SwNumberTree::tNumberVector aNumVector;
+ sal_uInt8 nEnd = Min( (sal_uInt8)(nStart + 3), MAXLEVEL );
+ for( sal_uInt8 nLevel = nStart; nLevel < nEnd; ++nLevel )
+ {
+ const SwNumFmt &rFmt = pActNum->Get(nLevel);
+ aNumVector.push_back(rFmt.GetStart());
+
+ // --> OD 2008-02-01 #newlistlevelattrs#
+ sal_uInt16 nXStart( 0 );
+ short nTextOffset( 0 );
+ sal_uInt16 nNumberXPos( 0 );
+ if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
+ {
+ nXStart = rFmt.GetAbsLSpace() / nWidthRelation;
+ nTextOffset = rFmt.GetCharTextDistance() / nWidthRelation;
+ nNumberXPos = nXStart;
+ sal_uInt16 nFirstLineOffset = (-rFmt.GetFirstLineOffset()) / nWidthRelation;
+
+ if(nFirstLineOffset <= nNumberXPos)
+ nNumberXPos = nNumberXPos - nFirstLineOffset;
+ else
+ nNumberXPos = 0;
+ }
+ else if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT )
+ {
+ const long nTmpNumberXPos( ( rFmt.GetIndentAt() +
+ rFmt.GetFirstLineIndent() ) /
+ nWidthRelation );
+ if ( nTmpNumberXPos < 0 )
+ {
+ nNumberXPos = 0;
+ }
+ else
+ {
+ nNumberXPos = static_cast<sal_uInt16>(nTmpNumberXPos);
+ }
+ }
+ // <--
+
+ sal_uInt16 nBulletWidth = 0;
+ if( SVX_NUM_BITMAP == rFmt.GetNumberingType() )
+ {
+ nBulletWidth = lcl_DrawGraphic(pVDev, rFmt,
+ nNumberXPos,
+ nYStart, nWidthRelation);
+ }
+ else if( SVX_NUM_CHAR_SPECIAL == rFmt.GetNumberingType() )
+ {
+ nBulletWidth = lcl_DrawBullet(pVDev, rFmt, nNumberXPos, nYStart, aStdFont.GetSize());
+ }
+ else
+ {
+ pVDev->SetFont(aStdFont);
+ if(pActNum->IsContinusNum())
+ aNumVector[nLevel] = nPreNum;
+ // --> OD 2005-11-17 #128041#
+ String aText(pActNum->MakeNumString( aNumVector ));
+ // <--
+ pVDev->DrawText( Point(nNumberXPos, nYStart), aText );
+ nBulletWidth = (sal_uInt16)pVDev->GetTextWidth(aText);
+ nPreNum++;
+ }
+ // --> OD 2008-02-01 #newlistlevelattrs#
+ if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT &&
+ rFmt.GetLabelFollowedBy() == SvxNumberFormat::SPACE )
+ {
+ pVDev->SetFont(aStdFont);
+ String aText(' ');
+ pVDev->DrawText( Point(nNumberXPos, nYStart), aText );
+ nBulletWidth = nBulletWidth + (sal_uInt16)pVDev->GetTextWidth(aText);
+ }
+ // <--
+
+ // --> OD 2008-02-01 #newlistlevelattrs#
+ sal_uInt16 nTextXPos( 0 );
+ if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
+ {
+ nTextXPos = nXStart;
+ if(nTextOffset < 0)
+ nTextXPos = nTextXPos + nTextOffset;
+ if(nNumberXPos + nBulletWidth + nTextOffset > nTextXPos )
+ nTextXPos = nNumberXPos + nBulletWidth + nTextOffset;
+ }
+ else if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT )
+ {
+ switch ( rFmt.GetLabelFollowedBy() )
+ {
+ case SvxNumberFormat::LISTTAB:
+ {
+ nTextXPos = static_cast<sal_uInt16>(
+ rFmt.GetListtabPos() / nWidthRelation );
+ if ( nTextXPos < nNumberXPos + nBulletWidth )
+ {
+ nTextXPos = nNumberXPos + nBulletWidth;
+ }
+ }
+ break;
+ case SvxNumberFormat::SPACE:
+ case SvxNumberFormat::NOTHING:
+ {
+ nTextXPos = nNumberXPos + nBulletWidth;
+ }
+ break;
+ }
+
+ nXStart = static_cast<sal_uInt16>( rFmt.GetIndentAt() / nWidthRelation );
+ }
+ // <--
+
+
+ Rectangle aRect1(Point(nTextXPos, nYStart + nFontHeight / 2), Size(aSize.Width() / 2, 2));
+ pVDev->SetFillColor( GetSettings().GetStyleSettings().GetWindowColor() ); // Color( COL_BLACK ) );
+ pVDev->DrawRect( aRect1 );
+
+ Rectangle aRect2(Point(nXStart, nYStart + nLineHeight + nFontHeight / 2 ), Size(aSize.Width() / 2, 2));
+ pVDev->DrawRect( aRect2 );
+ nYStart += 2 * nLineHeight;
+ }
+ }
+ else
+ {
+ SwNumberTree::tNumberVector aNumVector;
+ sal_uInt16 nLineHeight = nFontHeight * 3 / 2;
+ for( sal_uInt8 nLevel = 0; nLevel < MAXLEVEL;
+ ++nLevel, nYStart = nYStart + nYStep )
+ {
+ const SwNumFmt &rFmt = pActNum->Get(nLevel);
+ aNumVector.push_back(rFmt.GetStart());
+ // --> OD 2008-02-01 #newlistlevelattrs#
+ sal_uInt16 nXStart( 0 );
+ if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
+ {
+ nXStart = rFmt.GetAbsLSpace() / nWidthRelation;
+ }
+ else if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT )
+ {
+ const long nTmpXStart( ( rFmt.GetIndentAt() +
+ rFmt.GetFirstLineIndent() ) /
+ nWidthRelation );
+ if ( nTmpXStart < 0 )
+ {
+ nXStart = 0;
+ }
+ else
+ {
+ nXStart = static_cast<sal_uInt16>(nTmpXStart);
+ }
+ }
+ nXStart /= 2;
+ nXStart += 2;
+ // <--
+ sal_uInt16 nTextOffset = 2 * nXStep;
+ if( SVX_NUM_BITMAP == rFmt.GetNumberingType() )
+ {
+ lcl_DrawGraphic(pVDev, rFmt, nXStart, nYStart, nWidthRelation);
+ nTextOffset = nLineHeight + nXStep;
+ }
+ else if( SVX_NUM_CHAR_SPECIAL == rFmt.GetNumberingType() )
+ {
+ nTextOffset = lcl_DrawBullet(pVDev, rFmt, nXStart, nYStart, aStdFont.GetSize());
+ nTextOffset = nTextOffset + nXStep;
+ }
+ else
+ {
+ pVDev->SetFont(aStdFont);
+ if(pActNum->IsContinusNum())
+ aNumVector[nLevel] = nPreNum;
+ // --> OD 2005-11-17 #128041#
+ String aText(pActNum->MakeNumString( aNumVector ));
+ // <--
+ pVDev->DrawText( Point(nXStart, nYStart), aText );
+ nTextOffset = (sal_uInt16)pVDev->GetTextWidth(aText);
+ nTextOffset = nTextOffset + nXStep;
+ nPreNum++;
+ }
+ pVDev->SetFont(aStdFont);
+
+ // Changed as per BugID 79541 Branding/Configuration
+ uno::Any MyAny = ::utl::ConfigManager::GetConfigManager()->
+ GetDirectConfigProperty( ::utl::ConfigManager::PRODUCTNAME );
+ ::rtl::OUString aProductName;
+
+ MyAny >>= aProductName;
+ String sMsg(C2S("%PRODUCTNAME"));
+ sMsg.SearchAndReplaceAscii( "%PRODUCTNAME" , aProductName );
+
+ if(pOutlineNames)
+ sMsg = pOutlineNames[nLevel];
+ pVDev->DrawText( Point(nXStart + nTextOffset, nYStart), sMsg );
+ }
+ }
+ }
+ DrawOutDev( Point(0,0), aSize,
+ Point(0,0), aSize,
+ *pVDev );
+ delete pVDev;
+
+}
+
+/*-----------------02.12.97 10:34-------------------
+
+--------------------------------------------------*/
+NumberingPreview::~NumberingPreview()
+{
+}
+
+