|  | /************************************************************** | 
|  | * | 
|  | * Licensed to the Apache Software Foundation (ASF) under one | 
|  | * or more contributor license agreements.  See the NOTICE file | 
|  | * distributed with this work for additional information | 
|  | * regarding copyright ownership.  The ASF licenses this file | 
|  | * to you under the Apache License, Version 2.0 (the | 
|  | * "License"); you may not use this file except in compliance | 
|  | * with the License.  You may obtain a copy of the License at | 
|  | * | 
|  | *   http://www.apache.org/licenses/LICENSE-2.0 | 
|  | * | 
|  | * Unless required by applicable law or agreed to in writing, | 
|  | * software distributed under the License is distributed on an | 
|  | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
|  | * KIND, either express or implied.  See the License for the | 
|  | * specific language governing permissions and limitations | 
|  | * under the 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() | 
|  | { | 
|  | } | 
|  |  | 
|  |  |