xref: /trunk/main/sw/source/ui/shells/txtnum.cxx (revision 1ff378ef)
1efeef26fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3efeef26fSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4efeef26fSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5efeef26fSAndrew Rist  * distributed with this work for additional information
6efeef26fSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7efeef26fSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8efeef26fSAndrew Rist  * "License"); you may not use this file except in compliance
9efeef26fSAndrew Rist  * with the License.  You may obtain a copy of the License at
10efeef26fSAndrew Rist  *
11efeef26fSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12efeef26fSAndrew Rist  *
13efeef26fSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14efeef26fSAndrew Rist  * software distributed under the License is distributed on an
15efeef26fSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16efeef26fSAndrew Rist  * KIND, either express or implied.  See the License for the
17efeef26fSAndrew Rist  * specific language governing permissions and limitations
18efeef26fSAndrew Rist  * under the License.
19efeef26fSAndrew Rist  *
20efeef26fSAndrew Rist  *************************************************************/
21efeef26fSAndrew Rist 
22efeef26fSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sw.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir 
28cdf0e10cSrcweir #include <hintids.hxx>
29cdf0e10cSrcweir #ifndef _MSGBOX_HXX //autogen
30cdf0e10cSrcweir #include <vcl/msgbox.hxx>
31cdf0e10cSrcweir #endif
32cdf0e10cSrcweir #include <sfx2/request.hxx>
33cdf0e10cSrcweir #include <svl/eitem.hxx>
34cdf0e10cSrcweir #include <svl/stritem.hxx>
35cdf0e10cSrcweir #include <editeng/numitem.hxx>
36cdf0e10cSrcweir #include <editeng/brshitem.hxx>
37cdf0e10cSrcweir #include <numrule.hxx>
38cdf0e10cSrcweir 
39cdf0e10cSrcweir #include "cmdid.h"
40cdf0e10cSrcweir #include "wrtsh.hxx"
41cdf0e10cSrcweir #include "view.hxx"
42cdf0e10cSrcweir #include "viewopt.hxx"
43cdf0e10cSrcweir #include "wdocsh.hxx"
44cdf0e10cSrcweir #include "textsh.hxx"
45cdf0e10cSrcweir #include "uiitems.hxx"
46cdf0e10cSrcweir #include "swabstdlg.hxx"
47cdf0e10cSrcweir #include <globals.hrc>
48cdf0e10cSrcweir #include <sfx2/tabdlg.hxx>
49766ce4d0SZheng Fan #include <svx/nbdtmg.hxx>
50766ce4d0SZheng Fan #include <svx/nbdtmgfact.hxx>
51*1ff378efSZheng Fan #include <sfx2/viewfrm.hxx>
52*1ff378efSZheng Fan #include <sfx2/bindings.hxx>
53766ce4d0SZheng Fan using namespace svx::sidebar;
54cdf0e10cSrcweir 
55cdf0e10cSrcweir void SwTextShell::ExecEnterNum(SfxRequest &rReq)
56cdf0e10cSrcweir {
57cdf0e10cSrcweir 	//wg. Aufzeichnung schon vor dem evtl. Shellwechsel
58cdf0e10cSrcweir 	switch(rReq.GetSlot())
59cdf0e10cSrcweir 	{
60cdf0e10cSrcweir 	case FN_NUM_NUMBERING_ON:
61cdf0e10cSrcweir 	{
62*1ff378efSZheng Fan 		GetShell().StartAllAction();
63*1ff378efSZheng Fan 		SFX_REQUEST_ARG( rReq, pItem, SfxBoolItem, FN_PARAM_1 , sal_False );
64*1ff378efSZheng Fan 		sal_Bool bMode = !GetShell().SelectionHasNumber(); // #i29560#
65*1ff378efSZheng Fan 		if ( pItem )
66*1ff378efSZheng Fan 			bMode = pItem->GetValue();
67*1ff378efSZheng Fan 		else
68*1ff378efSZheng Fan 			rReq.AppendItem( SfxBoolItem( FN_PARAM_1, bMode ) );
69cdf0e10cSrcweir 
70*1ff378efSZheng Fan 		if ( bMode != (GetShell().SelectionHasNumber()) ) // #i29560#
71*1ff378efSZheng Fan 		{
72*1ff378efSZheng Fan 			rReq.Done();
73*1ff378efSZheng Fan 			if( bMode )
74*1ff378efSZheng Fan 				GetShell().NumOn();
75*1ff378efSZheng Fan 			else
76*1ff378efSZheng Fan 				GetShell().NumOrBulletOff(); // #i29560#
77*1ff378efSZheng Fan 		}
78*1ff378efSZheng Fan 		sal_Bool bNewResult = GetShell().SelectionHasNumber();
79*1ff378efSZheng Fan 		if (bNewResult!=bMode) {
80*1ff378efSZheng Fan 			SfxBindings& rBindings = GetView().GetViewFrame()->GetBindings();
81*1ff378efSZheng Fan 			SfxBoolItem aItem(FN_NUM_NUMBERING_ON,!bNewResult);
82*1ff378efSZheng Fan 			rBindings.SetState(aItem);
83*1ff378efSZheng Fan 			SfxBoolItem aNewItem(FN_NUM_NUMBERING_ON,bNewResult);
84*1ff378efSZheng Fan 			rBindings.SetState(aNewItem);
85*1ff378efSZheng Fan 		}
86*1ff378efSZheng Fan 		GetShell().EndAllAction();
87cdf0e10cSrcweir 	}
88cdf0e10cSrcweir 	break;
89cdf0e10cSrcweir 	case FN_NUM_BULLET_ON:
90cdf0e10cSrcweir 	{
91*1ff378efSZheng Fan 		GetShell().StartAllAction();
92*1ff378efSZheng Fan 		SFX_REQUEST_ARG( rReq, pItem, SfxBoolItem, FN_PARAM_1 , sal_False );
93*1ff378efSZheng Fan 		sal_Bool bMode = !GetShell().SelectionHasBullet(); // #i29560#
94*1ff378efSZheng Fan 		if ( pItem )
95*1ff378efSZheng Fan 			bMode = pItem->GetValue();
96*1ff378efSZheng Fan 		else
97*1ff378efSZheng Fan 			rReq.AppendItem( SfxBoolItem( FN_PARAM_1, bMode ) );
98cdf0e10cSrcweir 
99*1ff378efSZheng Fan 		if ( bMode != (GetShell().SelectionHasBullet()) ) // #i29560#
100*1ff378efSZheng Fan 		{
101*1ff378efSZheng Fan 			rReq.Done();
102*1ff378efSZheng Fan 			if( bMode )
103*1ff378efSZheng Fan 				GetShell().BulletOn();
104*1ff378efSZheng Fan 			else
105*1ff378efSZheng Fan 				GetShell().NumOrBulletOff(); // #i29560#
106*1ff378efSZheng Fan 		}
107*1ff378efSZheng Fan 		sal_Bool bNewResult = GetShell().SelectionHasBullet();
108*1ff378efSZheng Fan 		if (bNewResult!=bMode) {
109*1ff378efSZheng Fan 			SfxBindings& rBindings = GetView().GetViewFrame()->GetBindings();
110*1ff378efSZheng Fan 			SfxBoolItem aItem(FN_NUM_BULLET_ON,!bNewResult);
111*1ff378efSZheng Fan 			rBindings.SetState(aItem);
112*1ff378efSZheng Fan 			SfxBoolItem aNewItem(FN_NUM_BULLET_ON,bNewResult);
113*1ff378efSZheng Fan 			rBindings.SetState(aNewItem);
114*1ff378efSZheng Fan 		}
115*1ff378efSZheng Fan 		GetShell().EndAllAction();
116cdf0e10cSrcweir 	}
117cdf0e10cSrcweir 	break;
118cdf0e10cSrcweir 	case FN_NUMBER_BULLETS:
119766ce4d0SZheng Fan 	case SID_OUTLINE_BULLET:
120cdf0e10cSrcweir 	{
121cdf0e10cSrcweir         // --> OD 2008-02-29 #refactorlists#
122cdf0e10cSrcweir //        // per default sal_True, damit die Schleife im Dialog richtig arbeitet!
123cdf0e10cSrcweir //        sal_Bool bHasChild = sal_True;
124cdf0e10cSrcweir         // <--
125cdf0e10cSrcweir 		SfxItemSet aSet(GetPool(),
126cdf0e10cSrcweir 				SID_HTML_MODE, SID_HTML_MODE,
127cdf0e10cSrcweir 				SID_ATTR_NUMBERING_RULE, SID_PARAM_CUR_NUM_LEVEL,
128cdf0e10cSrcweir 				0 );
129cdf0e10cSrcweir 		SwDocShell* pDocSh = GetView().GetDocShell();
130cdf0e10cSrcweir 		sal_Bool bHtml = 0 != PTR_CAST(SwWebDocShell, pDocSh);
131cdf0e10cSrcweir 		const SwNumRule* pCurRule = GetShell().GetCurNumRule();
132cdf0e10cSrcweir 		if( pCurRule )
133cdf0e10cSrcweir 		{
134cdf0e10cSrcweir 			SvxNumRule aRule = pCurRule->MakeSvxNumRule();
135cdf0e10cSrcweir 
136cdf0e10cSrcweir 			//convert type of linked bitmaps from SVX_NUM_BITMAP to (SVX_NUM_BITMAP|LINK_TOKEN)
137cdf0e10cSrcweir 			for(sal_uInt16 i = 0; i < aRule.GetLevelCount(); i++)
138cdf0e10cSrcweir 			{
139cdf0e10cSrcweir 				SvxNumberFormat aFmt(aRule.GetLevel(i));
140cdf0e10cSrcweir 				if(SVX_NUM_BITMAP == aFmt.GetNumberingType())
141cdf0e10cSrcweir 				{
142cdf0e10cSrcweir 					const SvxBrushItem* pBrush = aFmt.GetBrush();
143cdf0e10cSrcweir 					const String* pLinkStr;
144cdf0e10cSrcweir 					if(pBrush &&
145cdf0e10cSrcweir 						0 != (pLinkStr = pBrush->GetGraphicLink()) &&
146cdf0e10cSrcweir 							pLinkStr->Len())
147cdf0e10cSrcweir 						aFmt.SetNumberingType(SvxExtNumType(SVX_NUM_BITMAP|LINK_TOKEN));
148cdf0e10cSrcweir 					aRule.SetLevel(i, aFmt, aRule.Get(i) != 0);
149cdf0e10cSrcweir 				}
150cdf0e10cSrcweir 			}
151cdf0e10cSrcweir 			if(bHtml)
152cdf0e10cSrcweir 				aRule.SetFeatureFlag(NUM_ENABLE_EMBEDDED_BMP, sal_False);
153cdf0e10cSrcweir 
154cdf0e10cSrcweir 			aSet.Put(SvxNumBulletItem(aRule));
155cdf0e10cSrcweir             // --> OD 2008-02-29 #refactorlists# - removed <bHasChild>
156cdf0e10cSrcweir             ASSERT( GetShell().GetNumLevel() < MAXLEVEL,
157cdf0e10cSrcweir                     "<SwTextShell::ExecEnterNum()> - numbered node without valid list level. Serious defect -> please inform OD." );
158cdf0e10cSrcweir             sal_uInt16 nLevel = GetShell().GetNumLevel();
159cdf0e10cSrcweir             // <--
160cdf0e10cSrcweir 			if( nLevel < MAXLEVEL )
161cdf0e10cSrcweir 			{
162cdf0e10cSrcweir 				nLevel = 1<<nLevel;
163cdf0e10cSrcweir 				aSet.Put( SfxUInt16Item( SID_PARAM_CUR_NUM_LEVEL, nLevel ));
164cdf0e10cSrcweir 			}
165cdf0e10cSrcweir 		}
166cdf0e10cSrcweir 		else
167cdf0e10cSrcweir 		{
168cdf0e10cSrcweir             // --> OD 2008-02-11 #newlistlevelattrs#
169cdf0e10cSrcweir             SwNumRule aRule( GetShell().GetUniqueNumRuleName(),
170cdf0e10cSrcweir                              // --> OD 2008-06-06 #i89178#
171cdf0e10cSrcweir                              numfunc::GetDefaultPositionAndSpaceMode() );
172cdf0e10cSrcweir                              // <--
173cdf0e10cSrcweir             // <--
174cdf0e10cSrcweir 			SvxNumRule aSvxRule = aRule.MakeSvxNumRule();
175cdf0e10cSrcweir             const bool bRightToLeft = GetShell().IsInRightToLeftText( 0 );
176cdf0e10cSrcweir 
177cdf0e10cSrcweir             if( bHtml || bRightToLeft )
178cdf0e10cSrcweir 			{
179cdf0e10cSrcweir                 for( sal_uInt8 n = 0; n < MAXLEVEL; ++n )
180cdf0e10cSrcweir 				{
181cdf0e10cSrcweir 					SvxNumberFormat aFmt( aSvxRule.GetLevel( n ) );
182cdf0e10cSrcweir                     if ( n && bHtml )
183cdf0e10cSrcweir                     {
184cdf0e10cSrcweir                         // 1/2" fuer HTML
185cdf0e10cSrcweir                         aFmt.SetLSpace(720);
186cdf0e10cSrcweir                         aFmt.SetAbsLSpace(n * 720);
187cdf0e10cSrcweir                     }
188cdf0e10cSrcweir                     // --> FME 2005-01-21 #i38904#  Default alignment for
189cdf0e10cSrcweir                     // numbering/bullet should be rtl in rtl paragraph:
190cdf0e10cSrcweir                     if ( bRightToLeft )
191cdf0e10cSrcweir                     {
192cdf0e10cSrcweir                         aFmt.SetNumAdjust( SVX_ADJUST_RIGHT );
193cdf0e10cSrcweir                     }
194cdf0e10cSrcweir                     // <--
195cdf0e10cSrcweir                     aSvxRule.SetLevel( n, aFmt, sal_False );
196cdf0e10cSrcweir 				}
197cdf0e10cSrcweir 				aSvxRule.SetFeatureFlag(NUM_ENABLE_EMBEDDED_BMP, sal_False);
198cdf0e10cSrcweir 			}
199cdf0e10cSrcweir 			aSet.Put(SvxNumBulletItem(aSvxRule));
200cdf0e10cSrcweir 		}
201cdf0e10cSrcweir 
202cdf0e10cSrcweir 		aSet.Put( SfxBoolItem( SID_PARAM_NUM_PRESET,sal_False ));
203cdf0e10cSrcweir 
204cdf0e10cSrcweir 		// vor dem Dialog wird der HtmlMode an der DocShell versenkt
205cdf0e10cSrcweir 		pDocSh->PutItem(SfxUInt16Item(SID_HTML_MODE, ::GetHtmlMode(pDocSh)));
206cdf0e10cSrcweir 
207cdf0e10cSrcweir 		SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
208cdf0e10cSrcweir         DBG_ASSERT(pFact, "Dialogdiet fail!");
209cdf0e10cSrcweir         SfxAbstractTabDialog* pDlg = pFact->CreateSwTabDialog( DLG_SVXTEST_NUM_BULLET,
210cdf0e10cSrcweir 														GetView().GetWindow(), &aSet, GetShell());
211cdf0e10cSrcweir         DBG_ASSERT(pDlg, "Dialogdiet fail!");
212cdf0e10cSrcweir 		sal_uInt16 nRet = pDlg->Execute();
213cdf0e10cSrcweir 		const SfxPoolItem* pItem;
214cdf0e10cSrcweir 		if( RET_OK == nRet )
215cdf0e10cSrcweir 		{
216cdf0e10cSrcweir 			if( SFX_ITEM_SET == pDlg->GetOutputItemSet()->GetItemState( SID_ATTR_NUMBERING_RULE, sal_False, &pItem ))
217cdf0e10cSrcweir 			{
218cdf0e10cSrcweir 				rReq.AppendItem(*pItem);
219cdf0e10cSrcweir 				rReq.Done();
220cdf0e10cSrcweir 				SvxNumRule* pSetRule = ((SvxNumBulletItem*)pItem)->GetNumRule();
221cdf0e10cSrcweir 				pSetRule->UnLinkGraphics();
222cdf0e10cSrcweir                 // --> OD 2008-02-11 #newlistlevelattrs#
223cdf0e10cSrcweir 				SwNumRule aSetRule( pCurRule
224cdf0e10cSrcweir 										? pCurRule->GetName()
225cdf0e10cSrcweir                                         : GetShell().GetUniqueNumRuleName(),
226cdf0e10cSrcweir                                     // --> OD 2008-06-06 #i89178#
227cdf0e10cSrcweir                                     numfunc::GetDefaultPositionAndSpaceMode() );
228cdf0e10cSrcweir                                     // <--
229cdf0e10cSrcweir                 // <--
230cdf0e10cSrcweir 				aSetRule.SetSvxRule( *pSetRule, GetShell().GetDoc());
231cdf0e10cSrcweir 				aSetRule.SetAutoRule( sal_True );
232cdf0e10cSrcweir                 // --> OD 2008-03-17 #refactorlists#
233cdf0e10cSrcweir                 // No start of new list, if an existing list style is edited.
234cdf0e10cSrcweir                 // Otherwise start a new list.
235cdf0e10cSrcweir                 const bool bCreateList = (pCurRule == 0);
236cdf0e10cSrcweir                 GetShell().SetCurNumRule( aSetRule, bCreateList );
237cdf0e10cSrcweir                 // <--
238cdf0e10cSrcweir 			}
239cdf0e10cSrcweir 			// wenn der Dialog mit OK verlassen wurde, aber nichts ausgewaehlt
240cdf0e10cSrcweir 			// wurde dann muss die Numerierung zumindest eingeschaltet werden,
241cdf0e10cSrcweir 			// wenn sie das noch nicht ist
242cdf0e10cSrcweir 			else if( !pCurRule && SFX_ITEM_SET == aSet.GetItemState( SID_ATTR_NUMBERING_RULE, sal_False, &pItem ))
243cdf0e10cSrcweir 			{
244cdf0e10cSrcweir 				rReq.AppendItem( *pItem );
245cdf0e10cSrcweir 				rReq.Done();
246cdf0e10cSrcweir 				SvxNumRule* pSetRule = ((SvxNumBulletItem*)pItem)->GetNumRule();
247cdf0e10cSrcweir                 // --> OD 2008-02-11 #newlistlevelattrs#
248cdf0e10cSrcweir                 SwNumRule aSetRule( GetShell().GetUniqueNumRuleName(),
249cdf0e10cSrcweir                                     // --> OD 2008-06-06 #i89178#
250cdf0e10cSrcweir                                     numfunc::GetDefaultPositionAndSpaceMode() );
251cdf0e10cSrcweir                                     // <--
252cdf0e10cSrcweir                 // <--
253cdf0e10cSrcweir 				aSetRule.SetSvxRule(*pSetRule, GetShell().GetDoc());
254cdf0e10cSrcweir 				aSetRule.SetAutoRule( sal_True );
255cdf0e10cSrcweir                 // --> OD 2008-03-17 #refactorlists#
256cdf0e10cSrcweir                 // start new list
257cdf0e10cSrcweir                 GetShell().SetCurNumRule( aSetRule, true );
258cdf0e10cSrcweir                 // <--
259cdf0e10cSrcweir 			}
260cdf0e10cSrcweir 		}
261cdf0e10cSrcweir 		else if(RET_USER == nRet)
262cdf0e10cSrcweir 			GetShell().DelNumRules();
263cdf0e10cSrcweir 
264cdf0e10cSrcweir 		delete pDlg;
265cdf0e10cSrcweir 	}
266cdf0e10cSrcweir 	break;
267cdf0e10cSrcweir 	default:
268cdf0e10cSrcweir 		ASSERT(sal_False,  falscher Dispatcher);
269cdf0e10cSrcweir 		return;
270cdf0e10cSrcweir 	}
271cdf0e10cSrcweir }
272cdf0e10cSrcweir 
273766ce4d0SZheng Fan void SwTextShell::ExecSetNumber(SfxRequest &rReq)
274766ce4d0SZheng Fan {
275766ce4d0SZheng Fan 	SwNumRule aRule( GetShell().GetUniqueNumRuleName(),
276766ce4d0SZheng Fan 						 // --> OD 2008-06-06 #i89178#
277766ce4d0SZheng Fan 						 numfunc::GetDefaultPositionAndSpaceMode() );
278766ce4d0SZheng Fan 						 // <--
279766ce4d0SZheng Fan 
280766ce4d0SZheng Fan 	SvxNumRule aSvxRule = aRule.MakeSvxNumRule();
281766ce4d0SZheng Fan     const bool bRightToLeft = GetShell().IsInRightToLeftText( 0 );
282766ce4d0SZheng Fan 
283766ce4d0SZheng Fan     if( bRightToLeft )
284766ce4d0SZheng Fan 	{
285766ce4d0SZheng Fan         for( sal_uInt8 n = 0; n < MAXLEVEL; ++n )
286766ce4d0SZheng Fan 		{
287766ce4d0SZheng Fan 			SvxNumberFormat aFmt( aSvxRule.GetLevel( n ) );
288766ce4d0SZheng Fan            /* if ( n && bHtml )
289766ce4d0SZheng Fan             {
290766ce4d0SZheng Fan                 // 1/2" fuer HTML
291766ce4d0SZheng Fan                 aFmt.SetLSpace(720);
292766ce4d0SZheng Fan                 aFmt.SetAbsLSpace(n * 720);
293766ce4d0SZheng Fan             }*/
294766ce4d0SZheng Fan             // --> FME 2005-01-21 #i38904#  Default alignment for
295766ce4d0SZheng Fan             // numbering/bullet should be rtl in rtl paragraph:
296766ce4d0SZheng Fan             if ( bRightToLeft )
297766ce4d0SZheng Fan             {
298766ce4d0SZheng Fan                 aFmt.SetNumAdjust( SVX_ADJUST_RIGHT );
299766ce4d0SZheng Fan             }
300766ce4d0SZheng Fan             // <--
301766ce4d0SZheng Fan             aSvxRule.SetLevel( n, aFmt, sal_False );
302766ce4d0SZheng Fan 		}
303766ce4d0SZheng Fan 		aSvxRule.SetFeatureFlag(NUM_ENABLE_EMBEDDED_BMP, sal_False);
304766ce4d0SZheng Fan 	}
305766ce4d0SZheng Fan 
306766ce4d0SZheng Fan 	const SwNumRule* pCurRule = GetShell().GetCurNumRule();
307766ce4d0SZheng Fan 	sal_uInt16		nActNumLvl = (sal_uInt16)0xFFFF;
308766ce4d0SZheng Fan 	if( pCurRule )
309766ce4d0SZheng Fan 	{
310766ce4d0SZheng Fan 		sal_uInt16 nLevel = GetShell().GetNumLevel();
311766ce4d0SZheng Fan      	if( nLevel < MAXLEVEL )
312766ce4d0SZheng Fan 		{
313766ce4d0SZheng Fan 			nActNumLvl = 1<<nLevel;
314766ce4d0SZheng Fan 		}
315766ce4d0SZheng Fan 
316766ce4d0SZheng Fan 		aSvxRule = pCurRule->MakeSvxNumRule();
317766ce4d0SZheng Fan 
318766ce4d0SZheng Fan 		//convert type of linked bitmaps from SVX_NUM_BITMAP to (SVX_NUM_BITMAP|LINK_TOKEN)
319766ce4d0SZheng Fan 		for(sal_uInt16 i = 0; i < aSvxRule.GetLevelCount(); i++)
320766ce4d0SZheng Fan 		{
321766ce4d0SZheng Fan 			SvxNumberFormat aFmt(aSvxRule.GetLevel(i));
322766ce4d0SZheng Fan 			if(SVX_NUM_BITMAP == aFmt.GetNumberingType())
323766ce4d0SZheng Fan 			{
324766ce4d0SZheng Fan 				const SvxBrushItem* pBrush = aFmt.GetBrush();
325766ce4d0SZheng Fan 				const String* pLinkStr;
326766ce4d0SZheng Fan 				if(pBrush &&
327766ce4d0SZheng Fan 					0 != (pLinkStr = pBrush->GetGraphicLink()) &&
328766ce4d0SZheng Fan 						pLinkStr->Len())
329766ce4d0SZheng Fan 					aFmt.SetNumberingType(SvxExtNumType(SVX_NUM_BITMAP|LINK_TOKEN));
330766ce4d0SZheng Fan 				aSvxRule.SetLevel(i, aFmt, aSvxRule.Get(i) != 0);
331766ce4d0SZheng Fan 			}
332766ce4d0SZheng Fan 		}
333766ce4d0SZheng Fan 	}
334766ce4d0SZheng Fan 
335766ce4d0SZheng Fan 
336766ce4d0SZheng Fan 	switch(rReq.GetSlot())
337766ce4d0SZheng Fan 	{
338766ce4d0SZheng Fan 	case FN_SVX_SET_NUMBER:
339766ce4d0SZheng Fan 		{
340766ce4d0SZheng Fan 			SFX_REQUEST_ARG( rReq, pItem, SfxUInt16Item, FN_SVX_SET_NUMBER , sal_False );
341766ce4d0SZheng Fan 			if (pItem)
342766ce4d0SZheng Fan 			{
343766ce4d0SZheng Fan 				sal_uInt16 nIdx = pItem->GetValue();
344766ce4d0SZheng Fan 				if (nIdx==DEFAULT_NONE) {
345766ce4d0SZheng Fan 					GetShell().DelNumRules();
346766ce4d0SZheng Fan 					break;
347766ce4d0SZheng Fan 				}
348766ce4d0SZheng Fan 				--nIdx;
349766ce4d0SZheng Fan 
350766ce4d0SZheng Fan 				NBOTypeMgrBase* pNumbering = NBOutlineTypeMgrFact::CreateInstance(eNBOType::NUMBERING);
351766ce4d0SZheng Fan 				if ( pNumbering )
352766ce4d0SZheng Fan 				{
353766ce4d0SZheng Fan 					SwNumRule aTmpRule( GetShell().GetUniqueNumRuleName(),
354766ce4d0SZheng Fan 						 numfunc::GetDefaultPositionAndSpaceMode() );
355766ce4d0SZheng Fan 
356766ce4d0SZheng Fan 					SvxNumRule aTempRule = aTmpRule.MakeSvxNumRule();
357766ce4d0SZheng Fan 					//Sym3_2508, set unit attribute to NB Manager
358766ce4d0SZheng Fan 					SfxItemSet aSet(GetPool(),
359766ce4d0SZheng Fan 							SID_ATTR_NUMBERING_RULE, SID_PARAM_CUR_NUM_LEVEL,
360766ce4d0SZheng Fan 							0 );
361766ce4d0SZheng Fan 					aSet.Put(SvxNumBulletItem(aTempRule));
362766ce4d0SZheng Fan 					pNumbering->SetItems(&aSet);
363766ce4d0SZheng Fan 					pNumbering->ApplyNumRule(aTempRule,nIdx,nActNumLvl);
364766ce4d0SZheng Fan 
365766ce4d0SZheng Fan 					sal_uInt16 nMask = 1;
366766ce4d0SZheng Fan 					for(sal_uInt16 i = 0; i < aSvxRule.GetLevelCount(); i++)
367766ce4d0SZheng Fan 					{
368766ce4d0SZheng Fan 						if(nActNumLvl & nMask)
369766ce4d0SZheng Fan 						{
370766ce4d0SZheng Fan 							SvxNumberFormat aFmt(aTempRule.GetLevel(i));
371766ce4d0SZheng Fan 							aSvxRule.SetLevel(i, aFmt);
372766ce4d0SZheng Fan 						}
373766ce4d0SZheng Fan 						nMask <<= 1 ;
374766ce4d0SZheng Fan 					}
375766ce4d0SZheng Fan 
376766ce4d0SZheng Fan 					aSvxRule.UnLinkGraphics();
377766ce4d0SZheng Fan 					SwNumRule aSetRule( pCurRule
378766ce4d0SZheng Fan 											? pCurRule->GetName()
379766ce4d0SZheng Fan 											: GetShell().GetUniqueNumRuleName(),
380766ce4d0SZheng Fan 										numfunc::GetDefaultPositionAndSpaceMode() );
381766ce4d0SZheng Fan 					aSetRule.SetSvxRule( aSvxRule, GetShell().GetDoc());
382cdf0e10cSrcweir 
383766ce4d0SZheng Fan 					aSetRule.SetAutoRule( sal_True );
384766ce4d0SZheng Fan 					const bool bCreateList = (pCurRule == 0);
385766ce4d0SZheng Fan 					GetShell().SetCurNumRule( aSetRule, bCreateList );
386766ce4d0SZheng Fan 				}
387766ce4d0SZheng Fan 				//End
388766ce4d0SZheng Fan 			}
389766ce4d0SZheng Fan 			break;
390766ce4d0SZheng Fan 		}
391766ce4d0SZheng Fan 	case FN_SVX_SET_BULLET:
392766ce4d0SZheng Fan 		{
393766ce4d0SZheng Fan 			SFX_REQUEST_ARG( rReq, pItem, SfxUInt16Item, FN_SVX_SET_BULLET , sal_False );
394766ce4d0SZheng Fan 			if (pItem)
395766ce4d0SZheng Fan 			{
396766ce4d0SZheng Fan 				sal_uInt16 nIdx = pItem->GetValue();
397766ce4d0SZheng Fan 				if (nIdx==DEFAULT_NONE) {
398766ce4d0SZheng Fan 					GetShell().DelNumRules();
399766ce4d0SZheng Fan 					break;
400766ce4d0SZheng Fan 				}
401766ce4d0SZheng Fan 				nIdx--;
402766ce4d0SZheng Fan 
403766ce4d0SZheng Fan 				NBOTypeMgrBase* pBullets = NBOutlineTypeMgrFact::CreateInstance(eNBOType::MIXBULLETS);
404766ce4d0SZheng Fan 				if ( pBullets )
405766ce4d0SZheng Fan 				{
406766ce4d0SZheng Fan 					SwNumRule aTmpRule( GetShell().GetUniqueNumRuleName(),
407766ce4d0SZheng Fan 						 numfunc::GetDefaultPositionAndSpaceMode() );
408766ce4d0SZheng Fan 
409766ce4d0SZheng Fan 					SvxNumRule aTempRule = aTmpRule.MakeSvxNumRule();
410766ce4d0SZheng Fan 					//Sym3_2508, set unit attribute to NB Manager
411766ce4d0SZheng Fan 					SfxItemSet aSet(GetPool(),
412766ce4d0SZheng Fan 							SID_ATTR_NUMBERING_RULE, SID_PARAM_CUR_NUM_LEVEL,
413766ce4d0SZheng Fan 							0 );
414766ce4d0SZheng Fan 					aSet.Put(SvxNumBulletItem(aTempRule));
415766ce4d0SZheng Fan 					pBullets->SetItems(&aSet);
416766ce4d0SZheng Fan 
417766ce4d0SZheng Fan 					//SvxNumRule aTempRule( 0, 10, false );
418766ce4d0SZheng Fan 					pBullets->ApplyNumRule(aTempRule,nIdx,nActNumLvl);
419766ce4d0SZheng Fan 					sal_uInt16 nMask = 1;
420766ce4d0SZheng Fan 					for(sal_uInt16 i = 0; i < aSvxRule.GetLevelCount(); i++)
421766ce4d0SZheng Fan 					{
422766ce4d0SZheng Fan 						if(nActNumLvl & nMask)
423766ce4d0SZheng Fan 						{
424766ce4d0SZheng Fan 							SvxNumberFormat aFmt(aTempRule.GetLevel(i));
425766ce4d0SZheng Fan 							aSvxRule.SetLevel(i, aFmt);
426766ce4d0SZheng Fan 						}
427766ce4d0SZheng Fan 						nMask <<= 1;
428766ce4d0SZheng Fan 					}
429766ce4d0SZheng Fan 					aSvxRule.UnLinkGraphics();
430766ce4d0SZheng Fan 
431766ce4d0SZheng Fan 					SwNumRule aSetRule( pCurRule
432766ce4d0SZheng Fan 											? pCurRule->GetName()
433766ce4d0SZheng Fan 											: GetShell().GetUniqueNumRuleName(),
434766ce4d0SZheng Fan 										numfunc::GetDefaultPositionAndSpaceMode() );
435766ce4d0SZheng Fan 
436766ce4d0SZheng Fan 					aSetRule.SetSvxRule( aSvxRule, GetShell().GetDoc());
437766ce4d0SZheng Fan 
438766ce4d0SZheng Fan 					aSetRule.SetAutoRule( sal_True );
439766ce4d0SZheng Fan 					const bool bCreateList = (pCurRule == 0);
440766ce4d0SZheng Fan 					GetShell().SetCurNumRule( aSetRule, bCreateList );
441766ce4d0SZheng Fan 				}
442766ce4d0SZheng Fan 				//End
443766ce4d0SZheng Fan 			}
444766ce4d0SZheng Fan 
445766ce4d0SZheng Fan 		}
446766ce4d0SZheng Fan 		break;
447766ce4d0SZheng Fan 	}
448766ce4d0SZheng Fan }
449