xref: /aoo42x/main/sw/source/ui/shells/basesh.cxx (revision ff0525f2)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sw.hxx"
26 
27 #include <sot/factory.hxx>
28 #include <hintids.hxx>
29 #include <svl/urihelper.hxx>
30 #include <svl/languageoptions.hxx>
31 
32 #include <svx/svxids.hrc>
33 #include <sfx2/linkmgr.hxx>
34 #include <svx/htmlmode.hxx>
35 #include <svx/imapdlg.hxx>
36 #include <sfx2/dispatch.hxx>
37 #include <sfx2/docfile.hxx>
38 #include <sfx2/viewfrm.hxx>
39 #include <sfx2/request.hxx>
40 #include <svl/whiter.hxx>
41 #include <svl/visitem.hxx>
42 #include <sfx2/objitem.hxx>
43 #include <svtools/filter.hxx>
44 #include <svx/gallery.hxx>
45 #include <editeng/langitem.hxx>
46 #include <svx/clipfmtitem.hxx>
47 #include <svx/contdlg.hxx>
48 #include <vcl/graph.hxx>
49 #include <svl/slstitm.hxx>
50 #include <vcl/msgbox.hxx>
51 #include <svl/ptitem.hxx>
52 #include <svl/itemiter.hxx>
53 #include <svl/stritem.hxx>
54 #include <editeng/colritem.hxx>
55 #include <editeng/shaditem.hxx>
56 #include <editeng/boxitem.hxx>
57 #include <svl/srchitem.hxx>
58 #include <editeng/ulspitem.hxx>
59 #include <editeng/lrspitem.hxx>
60 #include <editeng/brshitem.hxx>
61 #include <editeng/opaqitem.hxx>
62 #include <editeng/sizeitem.hxx>
63 #include <svx/flagsdef.hxx>
64 #include <editeng/scripttypeitem.hxx>
65 #include <sfx2/objface.hxx>
66 #include <fmturl.hxx>
67 #include <fmthdft.hxx>
68 #include <fmtclds.hxx>
69 #include <docsh.hxx>
70 #include <wrtsh.hxx>
71 #include <view.hxx>
72 #include <swmodule.hxx>
73 #include <swundo.hxx>
74 #include <fldbas.hxx>
75 #include <uitool.hxx>
76 #include <basesh.hxx>
77 #include <viewopt.hxx>
78 #include <fontcfg.hxx>
79 #include <docstat.hxx>
80 #include <usrfld.hxx>
81 #include <expfld.hxx>
82 #include <fldmgr.hxx>
83 #include <frmmgr.hxx>
84 #include <tablemgr.hxx>
85 #include <mdiexp.hxx>
86 #include <swdtflvr.hxx>
87 #include <pagedesc.hxx>
88 #include <convert.hxx>
89 #include <fmtcol.hxx>
90 #include <edtwin.hxx>
91 #include <tblafmt.hxx>
92 #include <caption.hxx>
93 #include <swwait.hxx>
94 #include <cmdid.h>
95 #include <globals.hrc>
96 #include <shells.hrc>
97 #include <statstr.hrc>
98 #include <globals.h>
99 #include <unotxdoc.hxx>
100 #include <crsskip.hxx>
101 #include <fmtinfmt.hxx>
102 #include <doc.hxx>
103 
104 #include "swabstdlg.hxx"
105 #include "dialog.hrc"
106 #include "fldui.hrc"
107 #include "table.hrc"
108 #include <modcfg.hxx>
109 #include <instable.hxx>
110 #include <svx/fmshell.hxx> // for FN_XFORMS_DESIGN_MODE
111 #include <SwRewriter.hxx>
112 #include <comcore.hrc>
113 
114 #include <unomid.h>
115 
116 FlyMode SwBaseShell::eFrameMode = FLY_DRAG_END;
117 
118 
119 //Fuer die Erkennung der Id, die variable von Gallery mit SID_GALLERY_BG_BRUSH
120 //ankommt.
121 static sal_uInt8 nParagraphPos;
122 static sal_uInt8 nGraphicPos;
123 static sal_uInt8 nOlePos;
124 static sal_uInt8 nFramePos;
125 static sal_uInt8 nTablePos;
126 static sal_uInt8 nTableRowPos;
127 static sal_uInt8 nTableCellPos;
128 static sal_uInt8 nPagePos;
129 static sal_uInt8 nHeaderPos;
130 static sal_uInt8 nFooterPos;
131 
132 #define SwBaseShell
133 #define Shadow
134 #include <sfx2/msg.hxx>
135 #include "swslots.hxx"
136 
137 #define SWCONTOURDLG(rView) ( (SvxContourDlg*) ( rView.GetViewFrame()->GetChildWindow( 	\
138 						  SvxContourDlgChildWindow::GetChildWindowId() )-> 	\
139 						  GetWindow() ) )
140 
141 #define SWIMAPDLG(rView) ( (SvxIMapDlg*) ( rView.GetViewFrame()->GetChildWindow( 		\
142 						SvxIMapDlgChildWindow::GetChildWindowId() )-> 	\
143 						GetWindow() ) )
144 
145 
146 using namespace ::com::sun::star;
147 using namespace ::com::sun::star::uno;
148 using namespace ::com::sun::star::frame;
149 using namespace ::com::sun::star::lang;
150 
151 
152 SFX_IMPL_INTERFACE(SwBaseShell, SfxShell, SW_RES(0))
153 {
154 	SFX_CHILDWINDOW_REGISTRATION(SvxIMapDlgChildWindow::GetChildWindowId());
155 	SFX_CHILDWINDOW_REGISTRATION(SvxContourDlgChildWindow::GetChildWindowId());
156 }
157 
158 TYPEINIT1(SwBaseShell,SfxShell)
159 
160 /*--------------------------------------------------------------------
161 	Beschreibung:	statics
162  --------------------------------------------------------------------*/
163 
164 
165 void lcl_UpdateIMapDlg( SwWrtShell& rSh )
166 {
167 	Graphic aGrf( rSh.GetIMapGraphic() );
168     GraphicType nGrfType = aGrf.GetType();
169 	void* pEditObj = GRAPHIC_NONE != nGrfType && GRAPHIC_DEFAULT != nGrfType
170 						? rSh.GetIMapInventor() : 0;
171 	TargetList* pList = new TargetList;
172 	rSh.GetView().GetViewFrame()->GetTopFrame().GetTargetList(*pList);
173 
174 	SfxItemSet aSet( rSh.GetAttrPool(), RES_URL, RES_URL );
175 	rSh.GetFlyFrmAttr( aSet );
176 	const SwFmtURL &rURL = (SwFmtURL&)aSet.Get( RES_URL );
177 	SvxIMapDlgChildWindow::UpdateIMapDlg(
178 			aGrf, rURL.GetMap(), pList, pEditObj );
179 
180 	sal_uInt16 nCount = (sal_uInt16)pList->Count();
181 	if(nCount)
182 		for( sal_uInt16 i = nCount; i; i--  )
183 		{
184 			delete pList->GetObject(i-1);
185 		}
186 	delete pList;
187 }
188 
189 
190 sal_Bool lcl_UpdateContourDlg( SwWrtShell &rSh, int nSel )
191 {
192 	Graphic aGraf( rSh.GetIMapGraphic() );
193     GraphicType nGrfType = aGraf.GetType();
194 	sal_Bool bRet = GRAPHIC_NONE != nGrfType && GRAPHIC_DEFAULT != nGrfType;
195 	if( bRet )
196 	{
197 		String aGrfName;
198 		if ( nSel & nsSelectionType::SEL_GRF )
199 			rSh.GetGrfNms( &aGrfName, 0 );
200 
201 		SvxContourDlg *pDlg = SWCONTOURDLG(rSh.GetView());
202 		pDlg->Update( aGraf, aGrfName.Len() > 0,
203 				  rSh.GetGraphicPolygon(), rSh.GetIMapInventor() );
204 	}
205 	return bRet;
206 }
207 
208 /*--------------------------------------------------------------------
209 	Beschreibung:	loeschen
210  --------------------------------------------------------------------*/
211 
212 void SwBaseShell::ExecDelete(SfxRequest &rReq)
213 {
214 	SwWrtShell &rSh = GetShell();
215     SwEditWin& rTmpEditWin = GetView().GetEditWin();
216 	switch(rReq.GetSlot())
217 	{
218 		case SID_DELETE:
219 			rSh.DelRight();
220 			break;
221 
222 		case FN_BACKSPACE:
223 
224 			if( rSh.IsNoNum() )
225 			{
226 				rSh.SttCrsrMove();
227 				sal_Bool bLeft = rSh.Left( CRSR_SKIP_CHARS, sal_True, 1, sal_False  );
228 				if( bLeft )
229 				{
230 					// JP 28.03.96: ein Backspace im Absatz ohne Nummer wird zum Delete
231 					//rSh.SwapPam();
232 					//rSh.DelRight( sal_False );
233 
234                     rSh.DelLeft();
235 				}
236 				else
237 					// JP 15.07.96: wenns nicht mehr nach vorne geht, die
238 					//				Numerierung aufheben. Z.B. am Doc-/
239 					//				Rahmen-/Tabellen-/Bereichs-Anfang
240 					rSh.DelNumRules();
241 
242 				rSh.EndCrsrMove();
243 				break;
244 			}
245 
246 			// ansonsten DelLeft rufen
247 		case FN_SHIFT_BACKSPACE:
248 			rSh.DelLeft();
249 			break;
250 		default:
251 			DBG_ERROR("falscher Dispatcher");
252 			return;
253 	}
254     rReq.Done();
255 
256     //#i42732# - notify the edit window that from now on we do not use the input language
257     rTmpEditWin.SetUseInputLanguage( sal_False );
258 }
259 
260 /*--------------------------------------------------------------------
261 	Beschreibung:
262  --------------------------------------------------------------------*/
263 
264 void SwBaseShell::ExecClpbrd(SfxRequest &rReq)
265 {
266 	//Achtung: Suizid gefaehrdet! Nach Paste, Paste special kann der die
267 	//Shell zerstoert sein.
268 
269 
270 	SwWrtShell &rSh = GetShell();
271 	sal_uInt16 nId = rReq.GetSlot();
272     sal_Bool bIgnore = sal_False;
273 	switch( nId )
274 	{
275 		case SID_CUT:
276 		case SID_COPY:
277             rView.GetEditWin().FlushInBuffer();
278 			if ( rSh.HasSelection() )
279 			{
280 				SwTransferable* pTransfer = new SwTransferable( rSh );
281 /*??*/          uno::Reference< datatransfer::XTransferable > xRef( pTransfer );
282 
283 				if ( nId == SID_CUT && !rSh.IsSelObjProtected(FLYPROTECT_CONTENT|FLYPROTECT_PARENT) )
284 					pTransfer->Cut();
285 				else
286                 {
287                     const sal_Bool bLockedView = rSh.IsViewLocked();
288                     rSh.LockView( sal_True );    //lock visible section
289                     pTransfer->Copy();
290                     rSh.LockView( bLockedView );
291                 }
292 				break;
293 			}
294 			return;
295 
296 		case SID_PASTE:
297 			{
298 				TransferableDataHelper aDataHelper(
299 						TransferableDataHelper::CreateFromSystemClipboard(
300 										&rSh.GetView().GetEditWin() ) );
301 
302 				if( aDataHelper.GetXTransferable().is() &&
303 					SwTransferable::IsPaste( rSh, aDataHelper ))
304 				{
305 					// temp. Variablen, da die Shell nach dem Paste schon
306 					// zerstoert sein kann
307 					SwView* pView = &rView;
308 					SwTransferable::Paste( rSh, aDataHelper );
309 					if( rSh.IsFrmSelected() || rSh.IsObjSelected() )
310 						rSh.EnterSelFrmMode();
311 					pView->AttrChangedNotify( &rSh );
312 				}
313 				else
314 					return;
315 			}
316 			break;
317 
318 		case SID_CLIPBOARD_FORMAT_ITEMS:
319 			{
320 				const SfxItemSet* pArgs = rReq.GetArgs();
321 				const SfxPoolItem* pFmt;
322                 if( pArgs && SFX_ITEM_SET == pArgs->GetItemState( nId, sal_False, &pFmt ) )
323 				{
324 					TransferableDataHelper aDataHelper(
325 						TransferableDataHelper::CreateFromSystemClipboard(
326 											&rSh.GetView().GetEditWin()) );
327 					if( aDataHelper.GetXTransferable().is()
328 						/*&& SwTransferable::IsPaste( rSh, aDataHelper )*/ )
329 					{
330 						// temp. Variablen, da die Shell nach dem Paste schon
331 						// zerstoert sein kann
332 						SwView* pView = &rView;
333 
334 						SwTransferable::PasteFormat( rSh, aDataHelper,
335 										((SfxUInt32Item*)pFmt)->GetValue() );
336 
337                         //Done() has to be called before the shell has been removed
338                         rReq.Done();
339                         bIgnore = sal_True;
340                         if( rSh.IsFrmSelected() || rSh.IsObjSelected())
341 							rSh.EnterSelFrmMode();
342 						pView->AttrChangedNotify( &rSh );
343                     }
344 				}
345 			}
346 			break;
347 
348 		case SID_PASTE_UNFORMATTED:
349             {
350                 TransferableDataHelper aDataHelper(
351                     TransferableDataHelper::CreateFromSystemClipboard(
352                         &rSh.GetView().GetEditWin()) );
353                 if( aDataHelper.GetXTransferable().is() &&
354                     SwTransferable::IsPaste( rSh, aDataHelper ))
355                 {
356                     // temp. Variablen, da die Shell nach dem Paste schon
357                     // zerstoert sein kann
358                     SwView* pView = &rView;
359                     rReq.Ignore();
360                     bIgnore = sal_True;
361                     int nRet = SwTransferable::PasteUnformatted( rSh, aDataHelper );
362                     if(nRet)// && rReq.IsRecording() )
363                     {
364                         SfxViewFrame* pViewFrame = pView->GetViewFrame();
365                         uno::Reference< frame::XDispatchRecorder > xRecorder =
366                             pViewFrame->GetBindings().GetRecorder();
367                         if(xRecorder.is()) {
368 							SfxRequest aReq( pViewFrame, SID_CLIPBOARD_FORMAT_ITEMS );
369 							aReq.AppendItem( SfxUInt32Item( SID_CLIPBOARD_FORMAT_ITEMS, SOT_FORMAT_STRING ) );
370 							aReq.Done();
371 						}
372                     }
373 
374 					if (rSh.IsFrmSelected() || rSh.IsObjSelected())
375 						rSh.EnterSelFrmMode();
376 					pView->AttrChangedNotify( &rSh );
377 				}
378 				else
379 					return;
380 			}
381 			break;
382 
383         case SID_PASTE_SPECIAL:
384 			{
385 				TransferableDataHelper aDataHelper(
386 						TransferableDataHelper::CreateFromSystemClipboard(
387 										&rSh.GetView().GetEditWin()) );
388 				if( aDataHelper.GetXTransferable().is() &&
389 					SwTransferable::IsPaste( rSh, aDataHelper ))
390 				{
391 					// temp. Variablen, da die Shell nach dem Paste schon
392 					// zerstoert sein kann
393 					SwView* pView = &rView;
394                     sal_uLong nFormatId = 0;
395                     rReq.Ignore();
396                     bIgnore = sal_True;
397                     int nRet = SwTransferable::PasteSpecial( rSh, aDataHelper, nFormatId );
398                     if(nRet)// && rReq.IsRecording() )
399                     {
400 		                SfxViewFrame* pViewFrame = pView->GetViewFrame();
401                         uno::Reference< frame::XDispatchRecorder > xRecorder =
402 								pViewFrame->GetBindings().GetRecorder();
403 						if(xRecorder.is()) {
404 							SfxRequest aReq( pViewFrame, SID_CLIPBOARD_FORMAT_ITEMS );
405 							aReq.AppendItem( SfxUInt32Item( SID_CLIPBOARD_FORMAT_ITEMS, nFormatId ) );
406 							aReq.Done();
407 						}
408                     }
409 
410 					if (rSh.IsFrmSelected() || rSh.IsObjSelected())
411 						rSh.EnterSelFrmMode();
412 					pView->AttrChangedNotify( &rSh );
413 				}
414 				else
415 					return;
416 			}
417 			break;
418 		default:
419 			DBG_ERROR("falscher Dispatcher");
420 			return;
421 	}
422     if(!bIgnore)
423         rReq.Done();
424 }
425 
426 /*--------------------------------------------------------------------
427 	Beschreibung:	ClipBoard-Status
428  --------------------------------------------------------------------*/
429 
430 void SwBaseShell::StateClpbrd(SfxItemSet &rSet)
431 {
432 	SwWrtShell &rSh = GetShell();
433 	SfxWhichIter aIter(rSet);
434 
435 	const sal_Bool bCopy = rSh.HasSelection();
436 
437 	sal_uInt16 nWhich = aIter.FirstWhich();
438 
439 	while(nWhich)
440 	{
441 		switch(nWhich)
442 		{
443 		case SID_CUT:
444 			if( 0 != rSh.IsSelObjProtected(FLYPROTECT_CONTENT|FLYPROTECT_PARENT ) )
445 			{
446 				rSet.DisableItem( nWhich );
447 				break;
448 			}
449 		case SID_COPY:
450 			if( !bCopy )
451 				rSet.DisableItem( nWhich );
452 			break;
453 
454 		case SID_PASTE:
455             if( !GetView().IsPasteAllowed() )
456 				rSet.DisableItem( SID_PASTE );
457 			break;
458 
459         case SID_PASTE_SPECIAL:
460             if( !GetView().IsPasteSpecialAllowed() )
461 			{
462                 rSet.DisableItem( SID_PASTE_SPECIAL );
463 				rSet.DisableItem( SID_PASTE_UNFORMATTED );
464 			}
465 			break;
466 
467 		case SID_CLIPBOARD_FORMAT_ITEMS:
468 			{
469 				TransferableDataHelper aDataHelper(
470 					TransferableDataHelper::CreateFromSystemClipboard(
471 											&rSh.GetView().GetEditWin()) );
472 
473 				SvxClipboardFmtItem aFmtItem( nWhich );
474 				SwTransferable::FillClipFmtItem( rSh, aDataHelper, aFmtItem );
475 				rSet.Put( aFmtItem );
476 			}
477 			break;
478 		}
479 		nWhich = aIter.NextWhich();
480 	}
481 }
482 
483 /*--------------------------------------------------------------------
484 	Beschreibung:	Undo ausfuehren
485  --------------------------------------------------------------------*/
486 
487 void SwBaseShell::ExecUndo(SfxRequest &rReq)
488 {
489 	SwWrtShell &rSh = GetShell();
490 
491 	sal_uInt16 nId = rReq.GetSlot(), nCnt = 1;
492 	const SfxItemSet* pArgs = rReq.GetArgs();
493 	const SfxPoolItem* pItem;
494 	if( pArgs && SFX_ITEM_SET == pArgs->GetItemState( nId, sal_False, &pItem ))
495 		nCnt = ((SfxUInt16Item*)pItem)->GetValue();
496 
497     // #i106349#: save pointer: undo/redo may delete the shell, i.e., this!
498     SfxViewFrame *const pViewFrame( GetView().GetViewFrame() );
499 
500 	switch( nId )
501 	{
502 		case SID_UNDO:
503             rSh.LockPaint();
504 			rSh.Do( SwWrtShell::UNDO, nCnt );
505             rSh.UnlockPaint();
506 			break;
507 
508 		case SID_REDO:
509             rSh.LockPaint();
510 			rSh.Do( SwWrtShell::REDO, nCnt );
511             rSh.UnlockPaint();
512 			break;
513 
514 		case SID_REPEAT:
515 			rSh.Do( SwWrtShell::REPEAT );
516 			break;
517 		default:
518 			DBG_ERROR("falscher Dispatcher");
519 	}
520 
521     if (pViewFrame) { pViewFrame->GetBindings().InvalidateAll(sal_False); }
522 }
523 
524 /*--------------------------------------------------------------------
525 	Beschreibung:	Zustand Undo
526  --------------------------------------------------------------------*/
527 
528 void SwBaseShell::StateUndo(SfxItemSet &rSet)
529 {
530 	SwWrtShell &rSh = GetShell();
531 	SfxWhichIter aIter(rSet);
532 	sal_uInt16 nWhich = aIter.FirstWhich();
533 	while(nWhich)
534 	{
535 		switch(nWhich)
536 		{
537 			case SID_UNDO:
538 			{
539                 if (rSh.GetLastUndoInfo(0, 0))
540                 {
541 					rSet.Put( SfxStringItem(nWhich,
542 						rSh.GetDoString(SwWrtShell::UNDO)));
543                 }
544 				else
545 					rSet.DisableItem(nWhich);
546 				break;
547 			}
548 			case SID_REDO:
549 			{
550                 if (rSh.GetFirstRedoInfo(0))
551                 {
552 					rSet.Put(SfxStringItem(nWhich,
553 						rSh.GetDoString(SwWrtShell::REDO)));
554                 }
555 				else
556 					rSet.DisableItem(nWhich);
557 				break;
558 			}
559 			case SID_REPEAT:
560 			{	// Repeat nur moeglich wenn kein REDO moeglich - UI-Restriktion
561                 if ((!rSh.GetFirstRedoInfo(0)) &&
562 					!rSh.IsSelFrmMode() &&
563                     (UNDO_EMPTY != rSh.GetRepeatInfo(0)))
564                 {
565 					rSet.Put(SfxStringItem(nWhich, rSh.GetRepeatString()));
566                 }
567 				else
568 					rSet.DisableItem(nWhich);
569 				break;
570 			}
571 
572 			case SID_GETUNDOSTRINGS:
573                 if (rSh.GetLastUndoInfo(0, 0))
574 				{
575 					SfxStringListItem aStrLst( nWhich );
576 					rSh.GetDoStrings( SwWrtShell::UNDO, aStrLst );
577 					rSet.Put( aStrLst );
578 				}
579 				else
580 					rSet.DisableItem( nWhich );
581 				break;
582 
583 			case SID_GETREDOSTRINGS:
584                 if (rSh.GetFirstRedoInfo(0))
585 				{
586 					SfxStringListItem aStrLst( nWhich );
587 					rSh.GetDoStrings( SwWrtShell::REDO, aStrLst );
588 					rSet.Put( aStrLst );
589 				}
590 				else
591 					rSet.DisableItem( nWhich );
592 				break;
593 		}
594 		nWhich = aIter.NextWhich();
595 	}
596 }
597 
598 /*--------------------------------------------------------------------
599 	Beschreibung:	Slot-Id auswerten bzw. Dispatchen
600  --------------------------------------------------------------------*/
601 
602 void SwBaseShell::Execute(SfxRequest &rReq)
603 {
604 	const SfxPoolItem *pItem;
605 	SwWrtShell &rSh = GetShell();
606 	const SfxItemSet* pArgs = rReq.GetArgs();
607 	sal_Bool bMore = sal_False;
608 
609 	sal_uInt16 nSlot = rReq.GetSlot();
610 	switch(nSlot)
611 	{
612 		case FN_REPAGINATE:
613 			{
614 				Reference < XModel > xModel = GetView().GetDocShell()->GetModel();
615 				Reference < XUnoTunnel > xDocTunnel ( xModel, UNO_QUERY );
616 				SwXTextDocument *pDoc = reinterpret_cast < SwXTextDocument * > ( xDocTunnel->getSomething ( SwXTextDocument::getUnoTunnelId() ) );
617 				pDoc->notifyRefreshListeners();
618 				rSh.CalcLayout();
619 			}
620 			break;
621 		case FN_UPDATE_FIELDS:
622 			{
623 				SwDocStat aDocStat;
624 				rSh.UpdateDocStat(aDocStat);
625 				rSh.EndAllTblBoxEdit();
626 				rSh.ViewShell::UpdateFlds(sal_True);
627 
628 				if( rSh.IsCrsrInTbl() )
629 				{
630 					if( !rSh.IsTblComplexForChart() )
631 						SwTableFUNC( &rSh, sal_False).UpdateChart();
632 					rSh.ClearTblBoxCntnt();
633 					rSh.SaveTblBoxCntnt();
634 				}
635 			}
636 			break;
637 		case FN_UPDATE_CHARTS:
638 			{
639 				SwWait aWait( *rView.GetDocShell(), sal_True );
640 				rSh.UpdateAllCharts();
641 			}
642 			break;
643 
644 		case FN_UPDATE_ALL:
645 			{
646                 SwView&  rTempView = GetView();
647                 rSh.EnterStdMode();
648 				if( rSh.GetLinkManager().GetLinks().Count() )
649 				{
650 					rSh.StartAllAction();
651 					rSh.GetLinkManager().UpdateAllLinks( sal_False, sal_True, sal_True );
652 					rSh.EndAllAction();
653 				}
654                 SfxDispatcher &rDis = *rTempView.GetViewFrame()->GetDispatcher();
655 				rDis.Execute( FN_UPDATE_FIELDS );
656 				rDis.Execute( FN_UPDATE_TOX );
657 				rDis.Execute( FN_UPDATE_CHARTS );
658 				rSh.CalcLayout();
659 			}
660 			break;
661 
662 		case FN_UPDATE_INPUTFIELDS:
663 			rSh.UpdateInputFlds(NULL, sal_False);
664 			break;
665 		case FN_PREV_BOOKMARK:
666 			rReq.SetReturnValue(SfxBoolItem( nSlot, rSh.GoPrevBookmark()));
667 			break;
668 		case FN_NEXT_BOOKMARK:
669 			rReq.SetReturnValue(SfxBoolItem( nSlot, rSh.GoNextBookmark()));
670 			break;
671 
672 		case FN_GOTO_NEXT_MARK:
673 		case FN_GOTO_PREV_MARK:
674 		{
675 			SwFldMgr aFldMgr;
676 			SwFieldType* pFldType = aFldMgr.GetFldType(RES_JUMPEDITFLD);
677 
678 			if (pFldType)
679 			{
680 				if (rSh.IsSelFrmMode())
681 				{
682 					rSh.UnSelectFrm();
683 					rSh.LeaveSelFrmMode();
684 				}
685 
686 				if (rSh.HasMark())
687 				{
688 					MV_KONTEXT(&rSh);
689 					if (rSh.IsCrsrPtAtEnd())
690 						rSh.SwapPam();
691 					rSh.ClearMark();
692 					rSh.EndSelect();
693 				}
694 				sal_Bool bRet = rSh.MoveFldType(pFldType, nSlot == FN_GOTO_NEXT_MARK);
695                 SwField* pCurField = bRet ? rSh.GetCurFld() : 0;
696                 if (pCurField)
697 					rSh.ClickToField(*pCurField);
698 				rReq.SetReturnValue(SfxBoolItem( nSlot, bRet));
699 			}
700 		}
701 		break;
702 
703 		case FN_START_DOC_DIRECT:
704 		case FN_END_DOC_DIRECT:
705 		{
706 			if (rSh.IsSelFrmMode())
707 			{
708 				rSh.UnSelectFrm();
709 				rSh.LeaveSelFrmMode();
710 			}
711 			rSh.EnterStdMode();
712 			nSlot == FN_START_DOC_DIRECT ?
713 				rSh.SttEndDoc(sal_True) :
714 					rSh.SttEndDoc(sal_False);
715 		}
716 		break;
717 		case FN_GOTO_PREV_OBJ:
718 		case FN_GOTO_NEXT_OBJ:
719 		{
720 				sal_Bool bSuccess = rSh.GotoObj(
721 							nSlot == FN_GOTO_NEXT_OBJ ? sal_True : sal_False);
722 				rReq.SetReturnValue(SfxBoolItem(nSlot, bSuccess));
723 				if (bSuccess && !rSh.IsSelFrmMode())
724 				{
725 					rSh.HideCrsr();
726 					rSh.EnterSelFrmMode();
727 					GetView().AttrChangedNotify( &rSh );
728 				}
729 		}
730 		break;
731 		case SID_GALLERY_FORMATS:
732 		{
733 			const int nSelType = rSh.GetSelectionType();
734             if(SFX_ITEM_SET == pArgs->GetItemState( nSlot, sal_True, &pItem))
735             {
736                 GalleryExplorer* pGal = 0;
737                 if ( (!rSh.IsSelFrmMode() || nSelType & nsSelectionType::SEL_GRF) &&
738                     0!= (pGal = SVX_GALLERY())&&
739                     0 != (SGA_FORMAT_GRAPHIC & ((SfxUInt32Item*)pItem)->GetValue()))
740                 {
741                     SwWait aWait( *rView.GetDocShell(), sal_True );
742 
743                     String aGrfName, aFltName;
744                     const Graphic aGrf( pGal->GetGraphic() );
745 
746                     if( pGal->IsLinkage() )
747                     {
748                         // Verknuepft
749                         aGrfName = pGal->GetURL().GetMainURL(INetURLObject::NO_DECODE);
750                         aFltName = pGal->GetFilterName();
751                     }
752 
753                     if ( nSelType & nsSelectionType::SEL_GRF )
754                         rSh.ReRead( aGrfName, aFltName, &aGrf );
755                     else
756                         rSh.Insert( aGrfName, aFltName, aGrf );
757 
758                     GetView().GetEditWin().GrabFocus();
759                 }
760                 else if(!rSh.IsSelFrmMode() && SGA_FORMAT_SOUND & ((SfxUInt32Item*)pItem)->GetValue())
761                 {
762         		    const SfxStringItem aMediaURLItem( SID_INSERT_AVMEDIA, pGal->GetURL().GetMainURL( INetURLObject::NO_DECODE ) );
763        			    GetView().GetViewFrame()->GetDispatcher()->Execute( SID_INSERT_AVMEDIA, SFX_CALLMODE_SYNCHRON, &aMediaURLItem, 0L );
764 /*
765                     String sURL( pGal->GetURL().GetMainURL( INetURLObject::NO_DECODE ) );
766                     String sLabel( pGal->GetURL().getBase() );
767                     String sTarget; // empty string!
768 
769                     bool bIsHTMLMode =
770                         0 == ( HTMLMODE_ON &
771                                ::GetHtmlMode( GetView().GetDocShell() ) );
772 
773                     // in Writer, we insert a button which plays the
774                     // sound. In Writer/Web, we just insert a (text) link.
775                     if( bIsHTMLMode )
776                         InsertURLButton( sURL, sTarget, sLabel );
777                     else
778                         rSh.InsertURL( SwFmtINetFmt( sURL, sTarget ), sLabel );
779 */
780                 }
781 			}
782 		}
783 		break;
784 		case FN_PAGE_STYLE_SET_COLS:
785 		{
786 			if (pArgs)
787 			{
788 				// aktuellen PageDescriptor ermitteln und damit den Set fuellen
789 				const sal_uInt16 nCurIdx = rSh.GetCurPageDesc();
790 				SwPageDesc aPageDesc(rSh.GetPageDesc(nCurIdx));
791 
792 				SwFrmFmt &rFmt = aPageDesc.GetMaster();
793 
794 				SwFmtCol aFmtCol = rFmt.GetCol();
795 
796 				sal_uInt16 nCount;
797 				if(SFX_ITEM_SET == pArgs->GetItemState(nSlot))
798 					nCount = ((SfxUInt16Item &)pArgs->Get(nSlot)).GetValue();
799 				else
800 					nCount = ((SfxUInt16Item &)pArgs->Get(SID_ATTR_COLUMNS)).GetValue();
801 				sal_uInt16 nGutterWidth = DEF_GUTTER_WIDTH;
802 
803 				aFmtCol.Init(nCount ? nCount : 1, nGutterWidth, USHRT_MAX);
804 				aFmtCol.SetWishWidth(USHRT_MAX);
805 				aFmtCol.SetGutterWidth(nGutterWidth, USHRT_MAX);
806 
807                 rFmt.SetFmtAttr(aFmtCol);
808 
809 				rSh.ChgPageDesc(nCurIdx, aPageDesc);
810 			}
811 			else
812 				GetView().GetViewFrame()->GetDispatcher()->Execute(FN_FORMAT_PAGE_COLUMN_DLG, sal_False);
813 		}
814 		break;
815         case FN_CONVERT_TABLE_TO_TEXT:
816         case FN_CONVERT_TEXT_TO_TABLE:
817         case FN_CONVERT_TEXT_TABLE:
818 		{
819             sal_Unicode cDelim = 0;
820             bool bToTable = false;
821             if( nSlot == FN_CONVERT_TEXT_TO_TABLE ||
822                 ( nSlot == FN_CONVERT_TEXT_TABLE && 0 == rSh.GetTableFmt() ))
823                 bToTable = true;
824             SwInsertTableOptions aInsTblOpts( tabopts::ALL_TBL_INS_ATTR, 1 );
825             SwTableAutoFmt* pTAFmt = 0;
826             SwTableAutoFmtTbl* pAutoFmtTbl = 0;
827             bool bDeleteFormat = true;
828             if(pArgs && SFX_ITEM_SET == pArgs->GetItemState( FN_PARAM_1, sal_True, &pItem))
829             {
830                 aInsTblOpts.mnInsMode = 0;
831                 //Delimiter
832                 String sDelim = static_cast< const SfxStringItem* >(pItem)->GetValue();
833                 if(sDelim.Len())
834                     cDelim = sDelim.GetChar(0);
835                 //AutoFormat
836                 if(SFX_ITEM_SET == pArgs->GetItemState( FN_PARAM_2, sal_True, &pItem))
837                 {
838                     String sAutoFmt = static_cast< const SfxStringItem* >(pItem)->GetValue();
839 
840                     pAutoFmtTbl = new SwTableAutoFmtTbl;
841                     pAutoFmtTbl->Load();
842 
843                     for( sal_uInt16 i = 0, nCount = pAutoFmtTbl->Count(); i < nCount; i++ )
844                     {
845                         SwTableAutoFmt* pFmt = (*pAutoFmtTbl)[ i ];
846                         if( pFmt->GetName() == sAutoFmt )
847                         {
848                             pTAFmt = pFmt;
849                             bDeleteFormat = false;
850                             break;
851                         }
852                     }
853                 }
854                 //WithHeader
855                 if(SFX_ITEM_SET == pArgs->GetItemState( FN_PARAM_3, sal_True, &pItem) &&
856                             static_cast< const SfxBoolItem* >(pItem)->GetValue())
857                     aInsTblOpts.mnInsMode |= tabopts::HEADLINE;
858                 // RepeatHeaderLines
859                 if(SFX_ITEM_SET == pArgs->GetItemState( FN_PARAM_4, sal_True, &pItem))
860                    aInsTblOpts.mnRowsToRepeat =
861                             (sal_uInt16)static_cast< const SfxInt16Item* >(pItem)->GetValue();
862                 //WithBorder
863                 if(SFX_ITEM_SET == pArgs->GetItemState( FN_PARAM_5, sal_True, &pItem) &&
864                     static_cast< const SfxBoolItem* >(pItem)->GetValue())
865                     aInsTblOpts.mnInsMode |= tabopts::DEFAULT_BORDER;
866                 //DontSplitTable
867                 if(SFX_ITEM_SET == pArgs->GetItemState( FN_PARAM_6, sal_True, &pItem) &&
868                     !static_cast< const SfxBoolItem* >(pItem)->GetValue() )
869                     aInsTblOpts.mnInsMode |= tabopts::SPLIT_LAYOUT;
870             }
871             else
872             {
873                 SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
874                 DBG_ASSERT(pFact, "SwAbstractDialogFactory fail!");
875 
876                 AbstractSwConvertTableDlg* pDlg = pFact->CreateSwConvertTableDlg(
877                             GetView(),DLG_CONV_TEXT_TABLE , bToTable);
878                 DBG_ASSERT(pDlg, "Dialogdiet fail!");
879                 if( RET_OK == pDlg->Execute() )
880                 {
881                     pDlg->GetValues( cDelim, aInsTblOpts, pTAFmt );
882 
883                 }
884                 delete pDlg;
885             }
886 
887 			if( cDelim )
888 			{
889 				//Shellwechsel!
890 				SwView& rSaveView = rView;
891 				sal_Bool bInserted = sal_False;
892                 //recording:
893 
894                 SfxViewFrame* pViewFrame = GetView().GetViewFrame();
895                 if( SfxRequest::HasMacroRecorder(pViewFrame) )
896                 {
897                     SfxRequest aReq( pViewFrame, nSlot);
898                     aReq.AppendItem( SfxStringItem( FN_PARAM_1, String(cDelim) ));
899                     if(bToTable)
900                     {
901                         if(pTAFmt)
902                             aReq.AppendItem( SfxStringItem( FN_PARAM_2, pTAFmt->GetName()));
903                         aReq.AppendItem( SfxBoolItem ( FN_PARAM_3, 0 != (aInsTblOpts.mnInsMode & tabopts::HEADLINE)));
904                         aReq.AppendItem( SfxInt16Item( FN_PARAM_4, (short)aInsTblOpts.mnRowsToRepeat ));
905                         aReq.AppendItem( SfxBoolItem ( FN_PARAM_5, 0 != (aInsTblOpts.mnInsMode & tabopts::DEFAULT_BORDER) ));
906                         aReq.AppendItem( SfxBoolItem ( FN_PARAM_6, !(aInsTblOpts.mnInsMode & tabopts::SPLIT_LAYOUT)));
907                     }
908                     aReq.Done();
909                 }
910 
911                 if( !bToTable )
912 					rSh.TableToText( cDelim );
913 				else
914                 {
915                     bInserted = rSh.TextToTable( aInsTblOpts, cDelim, text::HoriOrientation::FULL, pTAFmt );
916                 }
917                 rSh.EnterStdMode();
918 
919 				if( bInserted )
920 					rSaveView.AutoCaption( TABLE_CAP );
921 			}
922             if(bDeleteFormat)
923                 delete pTAFmt;
924             delete pAutoFmtTbl;
925 		}
926 		break;
927 		case SID_STYLE_WATERCAN:
928 		case SID_STYLE_UPDATE_BY_EXAMPLE:
929 		case SID_STYLE_NEW_BY_EXAMPLE:
930 		case SID_STYLE_APPLY:
931 		{
932 			ShellModes eMode = GetView().GetShellMode();
933 			if ( SHELL_MODE_DRAW != eMode &&
934 				 SHELL_MODE_DRAW_CTRL != eMode &&
935 				 SHELL_MODE_DRAW_FORM != eMode &&
936 				 SHELL_MODE_DRAWTEXT != eMode &&
937 				 SHELL_MODE_BEZIER != eMode )
938 			{
939 				// oj #107754#
940 				if ( SID_STYLE_WATERCAN == nSlot )
941 				{
942 					const sal_Bool bLockedView = rSh.IsViewLocked();
943 					rSh.LockView( sal_True );    //lock visible section
944 
945 					GetView().GetDocShell()->ExecStyleSheet(rReq);
946 
947 					rSh.LockView( bLockedView );
948 				}
949 				else
950 				// wird von der DocShell aufgezeichnet
951 					GetView().GetDocShell()->ExecStyleSheet(rReq);
952 			}
953 		}
954 		break;
955 		case FN_ESCAPE:
956 			GetView().ExecuteSlot(rReq);
957 		break;
958 		case SID_IMAP:
959 		{
960 			sal_uInt16		nId = SvxIMapDlgChildWindow::GetChildWindowId();
961 
962 			SfxViewFrame* pVFrame = GetView().GetViewFrame();
963 			pVFrame->ToggleChildWindow( nId );
964 			pVFrame->GetBindings().Invalidate( SID_IMAP );
965 
966 			if ( pVFrame->HasChildWindow( nId ) && rSh.IsFrmSelected() )
967 				lcl_UpdateIMapDlg( rSh );
968 		}
969 		break;
970 		case SID_IMAP_EXEC:
971 		{
972 			SvxIMapDlg*	pDlg = SWIMAPDLG(GetView());
973 
974 			// Kontrolle, ob Zuweisung ueberhaupt sinnvoll/erlaubt
975 			if ( rSh.IsFrmSelected() &&
976 				 pDlg->GetEditingObject() == rSh.GetIMapInventor() )
977 			{
978 					SfxItemSet aSet( rSh.GetAttrPool(), RES_URL, RES_URL );
979 					rSh.GetFlyFrmAttr( aSet );
980 					SwFmtURL aURL( (SwFmtURL&)aSet.Get( RES_URL ) );
981 					aURL.SetMap( &pDlg->GetImageMap() );
982 					aSet.Put( aURL );
983 					rSh.SetFlyFrmAttr( aSet );
984 			}
985 		}
986 		break;
987 		case SID_CONTOUR_DLG:
988 		{
989 			sal_uInt16 nId = SvxContourDlgChildWindow::GetChildWindowId();
990 
991 			SfxViewFrame* pVFrame = GetView().GetViewFrame();
992 			pVFrame->ToggleChildWindow( nId );
993 			pVFrame->GetBindings().Invalidate( SID_CONTOUR_DLG );
994 
995 			int nSel = rSh.GetSelectionType();
996 			if ( pVFrame->HasChildWindow( nId ) &&
997 				 (nSel & (nsSelectionType::SEL_GRF|nsSelectionType::SEL_OLE)) )
998 			{
999 				lcl_UpdateContourDlg( rSh, nSel );
1000 			}
1001 		}
1002 		break;
1003 		case SID_CONTOUR_EXEC:
1004 		{
1005 			SvxContourDlg *pDlg = SWCONTOURDLG(GetView());
1006 
1007 			// Kontrolle, ob Zuweisung ueberhaupt sinnvoll/erlaubt
1008 			int nSel = rSh.GetSelectionType();
1009 			if ( nSel & (nsSelectionType::SEL_GRF|nsSelectionType::SEL_OLE) )
1010 			{
1011 				if ( pDlg->GetEditingObject() == rSh.GetIMapInventor() )
1012 				{
1013 					rSh.StartAction();
1014 					SfxItemSet aSet( rSh.GetAttrPool(), RES_SURROUND, RES_SURROUND);
1015 					rSh.GetFlyFrmAttr( aSet );
1016 					SwFmtSurround aSur( (SwFmtSurround&)aSet.Get( RES_SURROUND ) );
1017 					if ( !aSur.IsContour() )
1018 					{
1019 						aSur.SetContour( sal_True );
1020 						if ( aSur.GetSurround() == SURROUND_NONE )
1021 							aSur.SetSurround( SURROUND_PARALLEL );
1022 						aSet.Put( aSur );
1023 						rSh.SetFlyFrmAttr( aSet );
1024 					}
1025 					const PolyPolygon aPoly( pDlg->GetPolyPolygon() );
1026 					rSh.SetGraphicPolygon( &aPoly );
1027 					if ( pDlg->IsGraphicChanged() )
1028 						rSh.ReRead( aEmptyStr, aEmptyStr, &pDlg->GetGraphic());
1029 					rSh.EndAction();
1030 				}
1031 			}
1032 		}
1033 		break;
1034 		case FN_FRAME_TO_ANCHOR:
1035 		{
1036 			rSh.GotoFlyAnchor();
1037 			rSh.EnterStdMode();
1038 			rSh.CallChgLnk();
1039 		}
1040 		break;
1041 		case FN_TOOL_ANKER:
1042 			break;
1043 		case FN_TOOL_ANKER_PAGE:
1044 		case FN_TOOL_ANKER_PARAGRAPH:
1045 		case FN_TOOL_ANKER_CHAR:
1046 		case FN_TOOL_ANKER_AT_CHAR:
1047 		case FN_TOOL_ANKER_FRAME:
1048 		{
1049 			RndStdIds eSet = nSlot == FN_TOOL_ANKER_PAGE
1050                                 ? FLY_AT_PAGE
1051 								: nSlot == FN_TOOL_ANKER_PARAGRAPH
1052                                     ? FLY_AT_PARA
1053 									: nSlot == FN_TOOL_ANKER_FRAME
1054 										? FLY_AT_FLY
1055 										: nSlot == FN_TOOL_ANKER_CHAR
1056                                             ? FLY_AS_CHAR
1057                                             : FLY_AT_CHAR;
1058 			rSh.StartUndo();
1059 			if( rSh.IsObjSelected() )
1060 				rSh.ChgAnchor( eSet );
1061 			else if( rSh.IsFrmSelected() )
1062 			{
1063 				// Der Set beinhaltet auch VERT/HORI_ORIENT, da in FEShell::
1064 				// SetFlyFrmAttr/SetFlyFrmAnchor ggf. als Folge des Umankerns
1065 				// die Ausrichtungen veraendert werden sollen.
1066 				SfxItemSet aSet( GetPool(), RES_VERT_ORIENT, RES_ANCHOR );
1067 				SwFmtAnchor aAnc( eSet, rSh.GetPhyPageNum() );
1068 				aSet.Put( aAnc );
1069 				rSh.SetFlyFrmAttr(aSet);
1070 			}
1071 
1072             // if new anchor is 'as char' and it is a Math object and the usual
1073             // pre-conditions are met then align the formula to the baseline of the text
1074             const uno::Reference < embed::XEmbeddedObject > xObj( rSh.GetOleRef() );
1075             const bool bDoMathBaselineAlignment = xObj.is() && SotExchange::IsMath( xObj->getClassID() )
1076                     && FLY_AS_CHAR == eSet && rSh.GetDoc()->get( IDocumentSettingAccess::MATH_BASELINE_ALIGNMENT );
1077             if (bDoMathBaselineAlignment)
1078                 rSh.AlignFormulaToBaseline( xObj );
1079 
1080 			sal_uInt16 nHtmlMode = ::GetHtmlMode(GetView().GetDocShell());
1081 			if( nHtmlMode )
1082 			{
1083 				SfxItemSet aSet(GetPool(), RES_SURROUND, RES_HORI_ORIENT);
1084 				rSh.GetFlyFrmAttr(aSet);
1085 
1086 				const SwFmtSurround& rSurround = (const SwFmtSurround&)aSet.Get(RES_SURROUND);
1087 				const SwFmtVertOrient& rVert = (const SwFmtVertOrient&)aSet.Get(RES_VERT_ORIENT);
1088 				const SwFmtHoriOrient& rHori = (const SwFmtHoriOrient&)aSet.Get(RES_HORI_ORIENT);
1089                 sal_Int16 eVOrient = rVert.GetVertOrient();
1090                 sal_Int16 eHOrient = rHori.GetHoriOrient();
1091 				SwSurround eSurround = rSurround.GetSurround();
1092 
1093 				switch( eSet )
1094 				{
1095 				case FLY_AT_FLY:
1096                 case FLY_AT_PAGE:
1097 
1098 					//Durchlauf, links oder von links, oben, von oben
1099 					if(eSurround != SURROUND_THROUGHT)
1100 						aSet.Put(SwFmtSurround(SURROUND_THROUGHT));
1101 
1102                     if( eVOrient != text::VertOrientation::TOP && eVOrient != text::VertOrientation::NONE)
1103                         aSet.Put(SwFmtVertOrient(0, text::VertOrientation::TOP));
1104 
1105                     if(eHOrient != text::HoriOrientation::NONE || eHOrient != text::HoriOrientation::LEFT)
1106                         aSet.Put(SwFmtHoriOrient(0, text::HoriOrientation::LEFT));
1107 					break;
1108 
1109                 case FLY_AT_PARA:
1110 					//links, von links, rechts, oben, kein Uml, li+re Umlauf,
1111 					if(eSurround != SURROUND_LEFT || eSurround != SURROUND_RIGHT)
1112 						aSet.Put(SwFmtSurround(SURROUND_LEFT));
1113 
1114                     if( eVOrient != text::VertOrientation::TOP)
1115                         aSet.Put(SwFmtVertOrient(0, text::VertOrientation::TOP));
1116 
1117                     if(eHOrient != text::HoriOrientation::NONE || eHOrient != text::HoriOrientation::LEFT || eHOrient != text::HoriOrientation::RIGHT)
1118                         aSet.Put(SwFmtHoriOrient(0, text::HoriOrientation::LEFT));
1119 					break;
1120 
1121                 case FLY_AT_CHAR:
1122 					//links, von links, rechts, oben,  Durchlauf
1123 					if(eSurround != SURROUND_THROUGHT)
1124 						aSet.Put(SwFmtSurround(SURROUND_THROUGHT));
1125 
1126                     if( eVOrient != text::VertOrientation::TOP)
1127                         aSet.Put(SwFmtVertOrient(0, text::VertOrientation::TOP));
1128 
1129                     if(eHOrient != text::HoriOrientation::NONE || eHOrient != text::HoriOrientation::LEFT || eHOrient != text::HoriOrientation::RIGHT)
1130                         aSet.Put(SwFmtHoriOrient(0, text::HoriOrientation::LEFT));
1131 					break;
1132 
1133 				default:
1134 					;
1135 				}
1136 
1137 				if( aSet.Count() )
1138 					rSh.SetFlyFrmAttr( aSet );
1139 			}
1140 			rSh.EndUndo();
1141 
1142 			GetView().GetViewFrame()->GetBindings().Invalidate( FN_TOOL_ANKER );
1143 		}
1144 		break;
1145 
1146 		case FN_FRAME_NOWRAP:
1147 		case FN_FRAME_WRAP:
1148 		case FN_FRAME_WRAP_IDEAL:
1149 		case FN_FRAME_WRAPTHRU:
1150 		case FN_FRAME_WRAPTHRU_TRANSP:
1151 		case FN_FRAME_WRAP_CONTOUR:
1152 		case FN_WRAP_ANCHOR_ONLY:
1153 		case FN_FRAME_WRAP_LEFT:
1154 		case FN_FRAME_WRAP_RIGHT:
1155 			SetWrapMode( nSlot );
1156 			break;
1157 
1158 		case FN_UPDATE_ALL_LINKS:
1159 			{
1160 				if( rSh.GetLinkManager().GetLinks().Count() )
1161 				{
1162 					sal_Bool bUpdateGrf = sal_False, bCallErrHdl = sal_False;
1163 					rSh.EnterStdMode();
1164 					rSh.StartAllAction();
1165 					rSh.GetLinkManager().UpdateAllLinks( sal_False, bCallErrHdl, bUpdateGrf );
1166 					rSh.EndAllAction();
1167 				}
1168 			}
1169 			break;
1170 
1171         case FN_XFORMS_DESIGN_MODE:
1172             if( pArgs != NULL
1173                 && pArgs->GetItemState( nSlot, sal_True, &pItem ) == SFX_ITEM_SET
1174                 && pItem != NULL
1175                 && pItem->ISA( SfxBoolItem ) )
1176             {
1177                 sal_Bool bDesignMode =
1178                     static_cast<const SfxBoolItem*>( pItem )->GetValue();
1179 
1180                 // set form design mode
1181                 DBG_ASSERT( GetView().GetFormShell() != NULL, "form shell?" );
1182                 SfxRequest aReq( GetView().GetViewFrame(), SID_FM_DESIGN_MODE );
1183                 aReq.AppendItem( SfxBoolItem( SID_FM_DESIGN_MODE, bDesignMode ) );
1184                 GetView().GetFormShell()->Execute( aReq );
1185                 aReq.Done();
1186 
1187                 // also set suitable view options
1188                 SwViewOption aViewOption = *rSh.GetViewOptions();
1189                 aViewOption.SetFormView( ! bDesignMode );
1190                 rSh.ApplyViewOptions( aViewOption );
1191             }
1192             break;
1193 
1194 		default:
1195 			bMore = sal_True;
1196 	}
1197 	if(bMore && pArgs)
1198 	{
1199 		pItem = 0;
1200 		pArgs->GetItemState(GetPool().GetWhich(nSlot), sal_False, &pItem);
1201 		if(pItem)
1202 		switch(nSlot)
1203 		{
1204         case SID_ATTR_BRUSH:
1205 		case SID_ATTR_BORDER_SHADOW:
1206 		case RES_SHADOW:
1207 		{
1208 			rSh.StartAllAction();
1209 			SfxItemSet	 aSet( rSh.GetAttrPool(),
1210                                 RES_SHADOW, RES_SHADOW,
1211                                 RES_BACKGROUND, RES_BACKGROUND, 0 );
1212 
1213 			aSet.Put(*pItem);
1214 			// Tabellenzelle(n) selektiert?
1215 			if ( rSh.IsTableMode() )
1216 			{
1217 				SwFrmFmt *pFmt = rSh.GetTableFmt();
1218                 pFmt->SetFmtAttr( *pItem );
1219 			}
1220 			else if ( rSh.IsFrmSelected() )
1221 			{
1222 				// Umrandungsattribute ueber Frame-Manager setzen
1223 				SwFlyFrmAttrMgr aMgr( sal_False, &rSh, FRMMGR_TYPE_NONE );
1224 				aMgr.SetAttrSet( *pArgs );
1225 				aMgr.UpdateFlyFrm();
1226 			}
1227 			else
1228 			{
1229 				rSh.SetAttr( *pArgs );
1230 			}
1231 			rSh.EndAllAction();
1232 		}
1233 		break;
1234 		case FN_PAGE_STYLE_SET_LR_MARGIN:
1235 		case FN_PAGE_STYLE_SET_UL_MARGIN:
1236 		case FN_PAGE_STYLE_SET_NUMBER_FORMAT:
1237 		case FN_PAGE_STYLE_SET_PAPER_SIZE:
1238 		case FN_PAGE_STYLE_SET_PAPER_BIN:
1239 		{
1240 			DBG_ERROR("not implemented");
1241 		}
1242 		break;
1243 
1244 		case SID_ATTR_BORDER_OUTER:
1245 		{
1246 			// Tabellenzelle(n) selektiert?
1247 			if ( rSh.IsTableMode() )
1248 			{
1249 				// Umrandungattribute Get/SetTabBorders() setzen
1250 				rSh.SetTabBorders(*pArgs);
1251 			}
1252 			else if ( rSh.IsFrmSelected() )
1253 			{
1254 				// Umrandungsattribute ueber Frame-Manager setzen
1255 				SwFlyFrmAttrMgr aMgr( sal_False, &rSh, FRMMGR_TYPE_NONE );
1256 				aMgr.SetAttrSet(*pArgs);
1257 				aMgr.UpdateFlyFrm();
1258 			}
1259 			else
1260 			{
1261 				// Umrandungsattribute ganz normal ueber Shell setzen
1262 				rSh.SetAttr( *pItem );
1263 			}
1264 		}
1265 		break;
1266 		default:
1267 				DBG_ERROR("falscher Dispatcher");
1268 		}
1269 
1270 	}
1271 }
1272 
1273 /* -----------------14.04.99 15:10-------------------
1274  * Hier wird der State fuer SID_IMAP / SID_CONTOUR behandelt,
1275  * wenn die Grafik ausgeswappt ist
1276  * --------------------------------------------------*/
1277 IMPL_LINK(SwBaseShell, GraphicArrivedHdl, SwCrsrShell* , EMPTYARG )
1278 {
1279 	sal_uInt16 nGrfType;
1280 	SwWrtShell &rSh = GetShell();
1281 	if( CNT_GRF == rSh.SwEditShell::GetCntType() &&
1282 		GRAPHIC_NONE != ( nGrfType = rSh.GetGraphicType() ) &&
1283 		aGrfUpdateSlots.Count() )
1284 	{
1285 		sal_Bool bProtect = 0 != rSh.IsSelObjProtected(FLYPROTECT_CONTENT|FLYPROTECT_PARENT);
1286 		SfxViewFrame* pVFrame = GetView().GetViewFrame();
1287 		sal_uInt16 nSlot;
1288 		for( sal_uInt16 n = 0; n < aGrfUpdateSlots.Count(); ++n )
1289 		{
1290 			sal_Bool bSetState = sal_False;
1291 			sal_Bool bState = sal_False;
1292 			switch( nSlot = aGrfUpdateSlots[ n ] )
1293 			{
1294 			case SID_IMAP:
1295 			case SID_IMAP_EXEC:
1296 				{
1297 					sal_uInt16 nId = SvxIMapDlgChildWindow::GetChildWindowId();
1298 					SvxIMapDlg *pDlg = pVFrame->HasChildWindow( nId ) ?
1299 						(SvxIMapDlg*) ( pVFrame->GetChildWindow( nId )
1300 											->GetWindow()) : 0;
1301 
1302 					if( pDlg && ( SID_IMAP_EXEC == nSlot ||
1303 								( SID_IMAP == nSlot && !bProtect)) &&
1304 						pDlg->GetEditingObject() != rSh.GetIMapInventor())
1305 							lcl_UpdateIMapDlg( rSh );
1306 
1307 					if( !bProtect && SID_IMAP == nSlot )
1308 						bSetState = sal_True, bState = 0 != pDlg;
1309 				}
1310 				break;
1311 
1312 			case SID_CONTOUR_DLG:
1313 				if( !bProtect )
1314 				{
1315 					sal_uInt16 nId = SvxContourDlgChildWindow::GetChildWindowId();
1316 					SvxIMapDlg *pDlg = pVFrame->HasChildWindow( nId ) ?
1317 						(SvxIMapDlg*) ( pVFrame->GetChildWindow( nId )
1318 											->GetWindow()) : 0;
1319 					if( pDlg && pDlg->GetEditingObject() !=
1320 								rSh.GetIMapInventor() )
1321 						lcl_UpdateContourDlg( rSh, nsSelectionType::SEL_GRF );
1322 
1323 					bSetState = sal_True;
1324 					bState = 0 != pDlg;
1325 				}
1326 				break;
1327 
1328 			case FN_FRAME_WRAP_CONTOUR:
1329 				if( !bProtect )
1330 				{
1331 					SfxItemSet aSet(GetPool(), RES_SURROUND, RES_SURROUND);
1332 					rSh.GetFlyFrmAttr(aSet);
1333 					const SwFmtSurround& rWrap = (const SwFmtSurround&)aSet.Get(RES_SURROUND);
1334 					bSetState = sal_True;
1335 					bState = rWrap.IsContour();
1336 				}
1337 				break;
1338 
1339 			case SID_GRFFILTER:
1340 			case SID_GRFFILTER_INVERT:
1341 			case SID_GRFFILTER_SMOOTH:
1342 			case SID_GRFFILTER_SHARPEN:
1343 			case SID_GRFFILTER_REMOVENOISE:
1344 			case SID_GRFFILTER_SOBEL:
1345 			case SID_GRFFILTER_MOSAIC:
1346 			case SID_GRFFILTER_EMBOSS:
1347 			case SID_GRFFILTER_POSTER:
1348 			case SID_GRFFILTER_POPART:
1349 			case SID_GRFFILTER_SEPIA:
1350 			case SID_GRFFILTER_SOLARIZE:
1351 				bSetState = bState = GRAPHIC_BITMAP == nGrfType;
1352 				break;
1353 			}
1354 
1355 			if( bSetState )
1356 			{
1357 				SfxBoolItem aBool( nSlot, bState );
1358 				if( pGetStateSet )
1359 					pGetStateSet->Put( aBool );
1360 				else
1361 					pVFrame->GetBindings().SetState( aBool );
1362 			}
1363 		}
1364 		aGrfUpdateSlots.RemoveAt( 0, aGrfUpdateSlots.Count() );
1365 	}
1366 	return 0;
1367 }
1368 
1369 void SwBaseShell::GetState( SfxItemSet &rSet )
1370 {
1371 	SwWrtShell &rSh = GetShell();
1372 	SfxViewFrame* pVFrame = GetView().GetViewFrame();
1373 	SfxWhichIter aIter( rSet );
1374 	sal_uInt16 nWhich = aIter.FirstWhich();
1375 	pGetStateSet = &rSet;
1376 	while ( nWhich )
1377 	{
1378 		switch ( nWhich )
1379 		{
1380 			case SID_GALLERY_FORMATS:
1381 				if ( rSh.IsObjSelected() ||
1382 					 (rSh.IsSelFrmMode() &&
1383 					  !(rSh.GetSelectionType() & nsSelectionType::SEL_GRF)) )
1384 					rSet.DisableItem( nWhich );
1385 				break;
1386 			case SID_GALLERY_ENABLE_ADDCOPY:
1387                 // #108230# allow copy from gallery in Writer AND Writer/Web!
1388                 rSet.Put( SfxBoolItem( SID_GALLERY_ENABLE_ADDCOPY, sal_True ) );
1389 				break;
1390 			case FN_EDIT_REGION:
1391 				if( !rSh.IsAnySectionInDoc() )
1392 					rSet.DisableItem(nWhich);
1393 				break;
1394 
1395             case FN_INSERT_REGION:
1396 				if( rSh.IsSelFrmMode() ||
1397 					!rSh.IsInsRegionAvailable() )
1398 					rSet.DisableItem( nWhich );
1399 				break;
1400             case FN_CONVERT_TABLE_TO_TEXT:
1401             {
1402                 sal_uInt16 eFrmType = rSh.GetFrmType(0,sal_True);
1403                 if( (eFrmType & FRMTYPE_FOOTNOTE) ||
1404                     !rSh.GetTableFmt() )
1405                     rSet.DisableItem( nWhich );
1406             }
1407             break;
1408             case FN_CONVERT_TEXT_TO_TABLE:
1409             {
1410                 sal_uInt16 eFrmType = rSh.GetFrmType(0,sal_True);
1411                 if( (eFrmType & FRMTYPE_FOOTNOTE) ||
1412                     !rSh.IsTextToTableAvailable()  )
1413                     rSet.DisableItem( nWhich );
1414             }
1415             break;
1416             case FN_CONVERT_TEXT_TABLE:
1417 			{
1418 				sal_uInt16 eFrmType = rSh.GetFrmType(0,sal_True);
1419 				if( (eFrmType & FRMTYPE_FOOTNOTE) ||
1420 					(!rSh.GetTableFmt() && !rSh.IsTextToTableAvailable() ) )
1421 					rSet.DisableItem( nWhich );
1422 			}
1423 			break;
1424 			case RES_SHADOW:
1425 			{
1426 				SfxItemSet	 aSet( rSh.GetAttrPool(),
1427 									RES_SHADOW, RES_SHADOW );
1428 
1429 				// Tabellenzelle(n) selektiert?
1430 				if ( rSh.IsTableMode() )
1431 				{
1432 					SwFrmFmt *pFmt = rSh.GetTableFmt();
1433                     aSet.Put(pFmt->GetFmtAttr( nWhich, sal_True ));
1434 				}
1435 				else if( rSh.IsFrmSelected() )
1436 				{
1437 					SwFlyFrmAttrMgr aMgr( sal_False, &rSh, FRMMGR_TYPE_NONE );
1438 					aSet.Put( aMgr.GetAttrSet() );
1439 				}
1440 				else
1441                     rSh.GetCurAttr( aSet );
1442 #if OSL_DEBUG_LEVEL > 1
1443 
1444 				const SvxShadowItem& rShItem = (const SvxShadowItem&)aSet.Get(nWhich);
1445 				rSet.Put(rShItem);
1446 #else
1447 				rSet.Put((const SvxShadowItem&)aSet.Get(nWhich));
1448 #endif
1449 			}
1450 			break;
1451 			case SID_IMAP:
1452 			{
1453                 // --> OD 2006-11-08 #i59688#
1454                 // improve efficiency:
1455                 // If selected object is protected, item has to disabled.
1456                 const sal_Bool bProtect = 0 != rSh.IsSelObjProtected(FLYPROTECT_CONTENT|FLYPROTECT_PARENT);
1457                 if ( bProtect )
1458                 {
1459                     rSet.DisableItem( nWhich );
1460                 }
1461                 else
1462                 {
1463                     const sal_uInt16 nId = SvxIMapDlgChildWindow::GetChildWindowId();
1464                     const sal_Bool bHas = pVFrame->HasChildWindow( nId );
1465                     const sal_Bool bFrmSel = rSh.IsFrmSelected();
1466                     const sal_Bool bIsGraphicSelection =
1467                                 rSh.GetSelectionType() == nsSelectionType::SEL_GRF;
1468 
1469                     // --> OD 2006-11-08 #i59688#
1470                     // avoid unnecessary loading of selected graphic.
1471                     // The graphic is only needed, if the dialog is open.
1472                     //wenn die Grafik ausgeswappt ist, dann muss der
1473                     //Status asynchron ermittelt werden
1474                     //bis dahin wird der Slot disabled
1475                     if ( bHas && bIsGraphicSelection && rSh.IsGrfSwapOut( sal_True ) )
1476                     {
1477                         if( AddGrfUpdateSlot( nWhich ))
1478                             rSh.GetGraphic(sal_False);  // start the loading
1479                     }
1480                     else
1481                     {
1482                         if ( !bHas &&
1483                              ( !bFrmSel ||
1484                                ( bIsGraphicSelection &&
1485                                  rSh.GetGraphicType() == GRAPHIC_NONE ) ) )
1486                         {
1487                             rSet.DisableItem( nWhich );
1488                         }
1489                         else
1490                         {
1491                             SfxBoolItem aBool(nWhich, bHas);
1492                             if ( bHas && bFrmSel )
1493                                 lcl_UpdateIMapDlg( rSh );
1494                             rSet.Put(aBool);
1495                         }
1496                     }
1497                     // <--
1498                 }
1499                 // <--
1500 			}
1501 			break;
1502 			case SID_IMAP_EXEC:
1503 			{
1504 				sal_Bool bDisable = sal_False;
1505 				if( !rSh.IsFrmSelected())
1506 					bDisable = sal_True;
1507 				sal_uInt16 nId = SvxIMapDlgChildWindow::GetChildWindowId();
1508 				if(!bDisable && pVFrame->HasChildWindow( nId ))
1509 				{
1510 					if(rSh.GetSelectionType() == nsSelectionType::SEL_GRF
1511 									&& rSh.IsGrfSwapOut(sal_True))
1512 					{
1513 						if( AddGrfUpdateSlot( nWhich ))
1514 							rSh.GetGraphic(sal_False);  // start the loading
1515 					}
1516 					else
1517 					{
1518 						SvxIMapDlg *pDlg = SWIMAPDLG(GetView());
1519 						if( pDlg->GetEditingObject() != rSh.GetIMapInventor() )
1520 							lcl_UpdateIMapDlg( rSh );
1521 					}
1522 				}
1523 				rSet.Put(SfxBoolItem(nWhich, bDisable));
1524 			}
1525 			break;
1526 			case FN_BACKSPACE:
1527 			case SID_DELETE:
1528 				if (rSh.IsSelObjProtected( FLYPROTECT_CONTENT|FLYPROTECT_PARENT ) != 0)
1529 					rSet.DisableItem( nWhich );
1530 				break;
1531 			case SID_CONTOUR_DLG:
1532 			{
1533 				sal_Bool bParentCntProt = 0 != rSh.IsSelObjProtected(FLYPROTECT_CONTENT|FLYPROTECT_PARENT );
1534 
1535 				if( bParentCntProt || 0 != (HTMLMODE_ON & ::GetHtmlMode(
1536 											GetView().GetDocShell() )) )
1537 					rSet.DisableItem( nWhich );
1538 				else
1539 				{
1540 					sal_uInt16 nId = SvxContourDlgChildWindow::GetChildWindowId();
1541 					sal_Bool bHas = GetView().GetViewFrame()->HasChildWindow( nId );
1542 					int nSel = rSh.GetSelectionType();
1543 					sal_Bool bOk = 0 != (nSel & (nsSelectionType::SEL_GRF|nsSelectionType::SEL_OLE));
1544 
1545                     sal_Bool bDisable = sal_False;
1546 					if( !bHas && !bOk )
1547 						bDisable = sal_True;
1548                     // --> OD 2006-11-08 #i59688#
1549                     // avoid unnecessary loading of selected graphic.
1550                     // The graphic is only needed, if the dialog is open.
1551 					// wenn die Grafik ausgeswappt ist, dann muss der Status
1552 					// asynchron ermittelt werden bis dahin wird der Slot
1553 					// disabled
1554                     else if ( bHas && (nSel & nsSelectionType::SEL_GRF) &&
1555                               rSh.IsGrfSwapOut(sal_True) )
1556 					{
1557 						if( AddGrfUpdateSlot( nWhich ))
1558 							rSh.GetGraphic(sal_False);  // start the loading
1559                         // --> OD 2007-07-04 #i75481#
1560                         bDisable = sal_True;
1561                         // <--
1562 					}
1563 					else if( bHas && bOk )
1564 						bDisable = !lcl_UpdateContourDlg( rSh, nSel );
1565 					else if( bOk )
1566                     {
1567                         // --> OD 2007-07-04 #i75481#
1568                         // apply fix #i59688# only for selected graphics
1569                         if ( nSel & nsSelectionType::SEL_GRF )
1570                             bDisable = GRAPHIC_NONE == rSh.GetGraphicType();
1571                         else
1572                             bDisable = GRAPHIC_NONE == rSh.GetIMapGraphic().GetType();
1573                         // <--
1574                     }
1575                     // <--
1576 
1577 					if( bDisable )
1578 						rSet.DisableItem( nWhich );
1579 					else
1580 						rSet.Put( SfxBoolItem(nWhich, bHas) );
1581 				}
1582 			}
1583 			break;
1584 			case SID_CONTOUR_EXEC:
1585 			{
1586 				sal_Bool bDisable = sal_False;
1587 				int nSel = rSh.GetSelectionType();
1588 				if( !(nSel & (nsSelectionType::SEL_GRF|nsSelectionType::SEL_OLE)) )
1589 					bDisable = sal_True;
1590 				sal_uInt16 nId = SvxContourDlgChildWindow::GetChildWindowId();
1591 				if( !bDisable && GetView().GetViewFrame()->HasChildWindow( nId ))
1592 				{
1593 					SvxContourDlg *pDlg = SWCONTOURDLG(GetView());
1594 					if( pDlg->GetEditingObject() != rSh.GetIMapInventor() )
1595 						bDisable = sal_True;
1596 				}
1597 				rSet.Put(SfxBoolItem(nWhich, bDisable));
1598 			}
1599 			break;
1600 
1601 			case FN_TOOL_ANKER:
1602 			case FN_TOOL_ANKER_PAGE:
1603 			case FN_TOOL_ANKER_PARAGRAPH:
1604 			case FN_TOOL_ANKER_CHAR:
1605 			case FN_TOOL_ANKER_AT_CHAR:
1606 			case FN_TOOL_ANKER_FRAME:
1607 			{
1608 				sal_Bool bObj = 0 != rSh.IsObjSelected();
1609 				sal_Bool bParentCntProt = rSh.IsSelObjProtected( FLYPROTECT_CONTENT|FLYPROTECT_PARENT ) != 0;
1610 
1611 				if( !bParentCntProt && (bObj || rSh.IsFrmSelected()))
1612 				{
1613 					SfxItemSet aSet(GetPool(), RES_ANCHOR, RES_ANCHOR);
1614 					if(bObj)
1615 						rSh.GetObjAttr(aSet);
1616 					else
1617 						rSh.GetFlyFrmAttr(aSet);
1618 					RndStdIds eSet = ((SwFmtAnchor&)aSet.Get(RES_ANCHOR)).GetAnchorId();
1619                     const sal_Bool bSet =
1620                            ((nWhich == FN_TOOL_ANKER_PAGE) &&
1621                             (eSet == FLY_AT_PAGE))
1622                         || ((nWhich == FN_TOOL_ANKER_PARAGRAPH) &&
1623                             (eSet == FLY_AT_PARA))
1624                         || ((nWhich == FN_TOOL_ANKER_FRAME) &&
1625                             (eSet == FLY_AT_FLY))
1626                         || ((nWhich == FN_TOOL_ANKER_AT_CHAR) &&
1627                             (eSet == FLY_AT_CHAR))
1628                         || ((nWhich == FN_TOOL_ANKER_CHAR) &&
1629                             (eSet == FLY_AS_CHAR));
1630 					if(nWhich != FN_TOOL_ANKER)
1631 					{
1632 						sal_uInt16 nHtmlMode = ::GetHtmlMode(GetView().GetDocShell());
1633 						if( ( nWhich == FN_TOOL_ANKER_PAGE &&
1634 							  ((HTMLMODE_ON & nHtmlMode) && (0 == (nHtmlMode & HTMLMODE_SOME_ABS_POS)))) ||
1635                             ( nWhich == FN_TOOL_ANKER_FRAME && !rSh.IsFlyInFly() ) )
1636 							rSet.DisableItem(nWhich);
1637 						else
1638 							rSet.Put(SfxBoolItem(nWhich, bSet));
1639 					}
1640 					else
1641 					{
1642 						sal_uInt16 nSlotId = 0;
1643 
1644 						switch (eSet)
1645 						{
1646                             case FLY_AT_PAGE:
1647 								nSlotId = FN_TOOL_ANKER_PAGE;
1648 							break;
1649                             case FLY_AT_PARA:
1650 								nSlotId = FN_TOOL_ANKER_PARAGRAPH;
1651 							break;
1652 							case FLY_AS_CHAR:
1653 								nSlotId = FN_TOOL_ANKER_CHAR;
1654 							break;
1655                             case FLY_AT_CHAR:
1656 								nSlotId = FN_TOOL_ANKER_AT_CHAR;
1657 							break;
1658 							case FLY_AT_FLY:
1659 								nSlotId = FN_TOOL_ANKER_FRAME;
1660 							break;
1661 							default:
1662 								;
1663 						}
1664 						rSet.Put(SfxUInt16Item(nWhich, nSlotId));
1665 					}
1666 				}
1667 				else
1668 					rSet.DisableItem( nWhich );
1669 			}
1670 			break;
1671 			case FN_FRAME_NOWRAP:
1672 			case FN_FRAME_WRAP:
1673 			case FN_FRAME_WRAP_IDEAL:
1674 			case FN_FRAME_WRAPTHRU:
1675 			case FN_FRAME_WRAPTHRU_TRANSP:
1676 			case FN_FRAME_WRAP_CONTOUR:
1677 			case FN_WRAP_ANCHOR_ONLY:
1678 			case FN_FRAME_WRAP_LEFT:
1679 			case FN_FRAME_WRAP_RIGHT:
1680 			{
1681 				sal_Bool bObj = 0 != rSh.IsObjSelected();
1682 				sal_Bool bParentCntProt = rSh.IsSelObjProtected( FLYPROTECT_CONTENT|FLYPROTECT_PARENT ) != 0;
1683 
1684 				if( !bParentCntProt && (bObj || rSh.IsFrmSelected()))
1685 				{
1686 					SfxItemSet aSet(GetPool(), RES_OPAQUE, RES_ANCHOR);
1687 					int nAnchorType;
1688 					if(bObj)
1689 					{
1690 						rSh.GetObjAttr(aSet);
1691 						nAnchorType = rSh.GetAnchorId();
1692 					}
1693 					else
1694 					{
1695 						rSh.GetFlyFrmAttr(aSet);
1696 						nAnchorType = ((SwFmtAnchor&)aSet.Get(RES_ANCHOR)).GetAnchorId();
1697 					}
1698 					const SwFmtSurround& rWrap = (const SwFmtSurround&)aSet.Get(RES_SURROUND);
1699 
1700 					const SvxOpaqueItem& rOpaque = (const SvxOpaqueItem&)aSet.Get(RES_OPAQUE);
1701 					sal_Bool bOpaque = rOpaque.GetValue();
1702 					SwSurround nSurround = rWrap.GetSurround();
1703                     sal_Bool bSet = sal_False;
1704 
1705                     bool bDisable =
1706                         (nAnchorType == - 1) || (nAnchorType == FLY_AS_CHAR);
1707                     const bool bHtmlMode =
1708                         0 != ::GetHtmlMode(GetView().GetDocShell());
1709 
1710 					switch( nWhich )
1711 					{
1712 						case FN_FRAME_NOWRAP:
1713                             bDisable |=
1714                                 (   (nAnchorType != FLY_AT_PARA)
1715                                  && (nAnchorType != FLY_AT_CHAR)
1716                                  && (nAnchorType != FLY_AT_PAGE));
1717 							bSet = nSurround == SURROUND_NONE;
1718 						break;
1719 						case FN_FRAME_WRAP:
1720 							bDisable |= bHtmlMode;
1721 							bSet = nSurround == SURROUND_PARALLEL;
1722 						break;
1723 						case FN_FRAME_WRAP_IDEAL:
1724 							bDisable |= bHtmlMode;
1725 							bSet = nSurround == SURROUND_IDEAL;
1726 						break;
1727 						case FN_FRAME_WRAPTHRU:
1728 							bDisable |= (bHtmlMode ||
1729                                 (   (nAnchorType != FLY_AT_PARA)
1730                                  && (nAnchorType != FLY_AT_CHAR)
1731                                  && (nAnchorType != FLY_AT_PAGE)));
1732 							if(bObj)
1733 								bSet = nSurround == SURROUND_THROUGHT && rSh.GetLayerId();
1734 							else
1735 								bSet = nSurround == SURROUND_THROUGHT && bOpaque;
1736 						break;
1737 						case FN_FRAME_WRAPTHRU_TRANSP:
1738 							bDisable |= bHtmlMode;
1739 							if(bObj)
1740 								bSet = nSurround == SURROUND_THROUGHT && !rSh.GetLayerId();
1741 							else
1742 								bSet = nSurround == SURROUND_THROUGHT && !bOpaque;
1743 						break;
1744 						case FN_FRAME_WRAP_CONTOUR:
1745 							bDisable |= bHtmlMode;
1746                             //no contour available whenn no wrap or wrap through is set
1747                             bDisable |= (nSurround == SURROUND_NONE || nSurround == SURROUND_THROUGHT);
1748 							bSet = rWrap.IsContour();
1749 							if( !bDisable )
1750 							{
1751 								int nSel = rSh.GetSelectionType();
1752 								if( (nSel & nsSelectionType::SEL_GRF) &&
1753 											rSh.IsGrfSwapOut(sal_True))
1754 								{
1755 									if( AddGrfUpdateSlot( nWhich ))
1756 										rSh.GetGraphic(sal_False);  // start the loading
1757 								}
1758 								else if( rSh.IsFrmSelected() )
1759                                 {
1760 									// #i102253# applied patch from OD (see task)
1761                                     bDisable =
1762                                         nSel & nsSelectionType::SEL_FRM ||
1763                                         GRAPHIC_NONE == rSh.GetIMapGraphic().GetType();
1764 								}
1765 							}
1766 							bSet = bDisable ? sal_False : rWrap.IsContour();
1767 
1768 						break;
1769 						case FN_WRAP_ANCHOR_ONLY:
1770 							bDisable |= (bHtmlMode ||
1771                                 (nAnchorType != FLY_AT_PARA));
1772 							bSet = rWrap.IsAnchorOnly();
1773 						break;
1774 						case FN_FRAME_WRAP_LEFT:
1775 							bSet = nSurround == SURROUND_LEFT;
1776 						break;
1777 						case FN_FRAME_WRAP_RIGHT:
1778 							bSet = nSurround == SURROUND_RIGHT;
1779 						break;
1780 					}
1781 
1782 					if(bDisable)
1783 						rSet.DisableItem(nWhich);
1784 					else
1785 						rSet.Put(SfxBoolItem(nWhich, bSet));
1786 				}
1787 				else
1788 					rSet.DisableItem(nWhich);
1789 			}
1790 			break;
1791 			case FN_UPDATE_CHARTS:
1792 				if( !rSh.HasCharts() )
1793 					rSet.DisableItem( nWhich );
1794 				break;
1795 			case FN_UPDATE_ALL_LINKS:
1796 				if ( !rSh.GetLinkManager().GetLinks().Count() )
1797 					rSet.DisableItem(nWhich);
1798 				break;
1799             case FN_XFORMS_DESIGN_MODE:
1800                 // enable if in XForms document
1801                 if( rSh.GetDoc()->isXForms() )
1802                 {
1803                     // determine current state from view options
1804                     sal_Bool bValue = ! rSh.GetViewOptions()->IsFormView();
1805                     rSet.Put( SfxBoolItem( nWhich, bValue ) );
1806                 }
1807                 else
1808                     rSet.Put( SfxVisibilityItem( nWhich, sal_False ) );
1809                 break;
1810 		}
1811 		nWhich = aIter.NextWhich();
1812 	}
1813 	pGetStateSet = 0;
1814 }
1815 
1816 /*--------------------------------------------------------------------
1817 	Beschreibung:	Slots mit dieser Statusmethode disablen
1818  --------------------------------------------------------------------*/
1819 
1820 
1821 void SwBaseShell::StateDisableItems( SfxItemSet &rSet )
1822 {
1823 	SfxWhichIter aIter(rSet);
1824 	sal_uInt16 nWhich = aIter.FirstWhich();
1825 
1826 	while (nWhich)
1827 	{
1828 		rSet.DisableItem( nWhich );
1829 		nWhich = aIter.NextWhich();
1830 	}
1831 }
1832 
1833 /*--------------------------------------------------------------------
1834 	Beschreibung:	Slots mit dieser Statusmethode disablen
1835  --------------------------------------------------------------------*/
1836 
1837 
1838 void SwBaseShell::StateStyle( SfxItemSet &rSet )
1839 {
1840 	sal_Bool bParentCntProt = GetShell().IsSelObjProtected( FLYPROTECT_CONTENT|FLYPROTECT_PARENT ) != 0;
1841 	ShellModes eMode = GetView().GetShellMode();
1842 
1843 	if ( bParentCntProt ||
1844 		 SHELL_MODE_DRAW == eMode ||
1845 		 SHELL_MODE_DRAW_CTRL == eMode ||
1846 		 SHELL_MODE_DRAW_FORM == eMode ||
1847 		 SHELL_MODE_DRAWTEXT == eMode ||
1848 		 SHELL_MODE_BEZIER == eMode )
1849 	{
1850 		SfxWhichIter aIter( rSet );
1851 		sal_uInt16 nWhich = aIter.FirstWhich();
1852 		while ( nWhich )
1853 		{
1854 			rSet.DisableItem( nWhich );
1855 			nWhich = aIter.NextWhich();
1856 		}
1857 	}
1858 	else
1859 		GetView().GetDocShell()->StateStyleSheet(rSet, &GetShell());
1860 }
1861 
1862 /*--------------------------------------------------------------------
1863 	Beschreibung:
1864  --------------------------------------------------------------------*/
1865 
1866 
1867 void SwBaseShell::SetWrapMode( sal_uInt16 nSlot )
1868 {
1869 	SwWrtShell &rSh = GetShell();
1870 	sal_Bool bObj = 0 != rSh.IsObjSelected();
1871 	if( bObj || rSh.IsFrmSelected())
1872 	{
1873 		SfxItemSet aSet(GetPool(), RES_OPAQUE, RES_SURROUND);
1874 		if(bObj)
1875 			rSh.GetObjAttr(aSet);
1876 		else
1877 			rSh.GetFlyFrmAttr(aSet);
1878 		SwFmtSurround aWrap( (SwFmtSurround&)aSet.Get(RES_SURROUND) );
1879 		SwSurround nOldSurround(aWrap.GetSurround());
1880 		SwSurround nSurround = SURROUND_PARALLEL;
1881 
1882 		switch (nSlot)
1883 		{
1884 			case FN_FRAME_NOWRAP:
1885 				nSurround = SURROUND_NONE;
1886 				if (aWrap.IsContour())
1887 					aWrap.SetContour(sal_False);
1888 				break;
1889 			case FN_FRAME_WRAP_IDEAL:
1890 				nSurround = SURROUND_IDEAL;
1891 				break;
1892 			case FN_WRAP_ANCHOR_ONLY:
1893 				aWrap.SetAnchorOnly(!aWrap.IsAnchorOnly());
1894                 // --> OD 2006-06-02 #b6432130#
1895                 // keep previous wrapping
1896                 // --> OD 2006-09-21 #138144# - adjust fix #b6432130#
1897                 // switch to wrap SURROUND_PARALLEL, if previous wrap is SURROUND_NONE
1898                 if ( nOldSurround != SURROUND_NONE )
1899                 {
1900                     nSurround = nOldSurround;
1901                 }
1902                 // <--
1903 				break;
1904 			case FN_FRAME_WRAP_CONTOUR:
1905 				aWrap.SetContour(!aWrap.IsContour());
1906 				if (nSurround == SURROUND_THROUGHT)
1907 					nSurround = SURROUND_PARALLEL;
1908 				break;
1909 			case FN_FRAME_WRAPTHRU_TRANSP:
1910 				if (aWrap.IsContour())
1911 					aWrap.SetContour(sal_False);
1912 				// kein break!!!
1913 			case FN_FRAME_WRAPTHRU:
1914 				nSurround = SURROUND_THROUGHT;
1915 				break;
1916 
1917 			case FN_FRAME_WRAP_LEFT:
1918 				nSurround = SURROUND_LEFT;
1919 				break;
1920 
1921 			case FN_FRAME_WRAP_RIGHT:
1922 				nSurround = SURROUND_RIGHT;
1923 				break;
1924 
1925 			default:
1926 				break;
1927 		}
1928 		aWrap.SetSurround(nSurround);
1929 
1930 		if (nSlot != FN_FRAME_WRAP_CONTOUR)
1931 		{
1932 			// Konturumfluss bei Draw-Objekten defaulten
1933 			if (bObj && nOldSurround != nSurround &&
1934 				(nOldSurround == SURROUND_NONE || nOldSurround == SURROUND_THROUGHT))
1935 			{
1936 				aWrap.SetContour(sal_True);
1937 			}
1938 		}
1939 
1940 		aSet.Put( aWrap );
1941 		aSet.Put(SvxOpaqueItem(RES_OPAQUE, nSlot != FN_FRAME_WRAPTHRU_TRANSP));
1942 		if(bObj)
1943 		{
1944 			rSh.SetObjAttr(aSet);
1945 			if (nSlot != FN_FRAME_WRAPTHRU_TRANSP)
1946 				rSh.SelectionToHeaven();
1947 			else
1948 				rSh.SelectionToHell();
1949 		}
1950 		else
1951 			rSh.SetFlyFrmAttr(aSet);
1952 	}
1953 }
1954 
1955 /*--------------------------------------------------------------------
1956 	Beschreibung:	Update der Statuszeile erzwingen
1957  --------------------------------------------------------------------*/
1958 
1959 void SwBaseShell::SetFrmMode(FlyMode eMode, SwWrtShell *pSh )
1960 {
1961     eFrameMode = eMode;
1962 	SfxBindings &rBnd = pSh->GetView().GetViewFrame()->GetBindings();
1963 
1964     if( eMode == FLY_DRAG ||
1965 		(pSh && (pSh->IsFrmSelected() || pSh->IsObjSelected())) )
1966 	{
1967 		const SfxPointItem aTmp1( SID_ATTR_POSITION, pSh->GetAnchorObjDiff());
1968 		const SvxSizeItem  aTmp2( SID_ATTR_SIZE,	 pSh->GetObjSize());
1969 		rBnd.SetState( aTmp1 );
1970 		rBnd.SetState( aTmp2 );
1971 	}
1972     else if( eMode == FLY_DRAG_END )
1973 	{
1974 		static sal_uInt16 __READONLY_DATA aInval[] =
1975 		{
1976 			SID_ATTR_POSITION, SID_ATTR_SIZE, 0
1977 		};
1978 		rBnd.Invalidate(aInval);
1979 	}
1980 }
1981 
1982 /*--------------------------------------------------------------------
1983 	Beschreibung:	Ctor
1984  --------------------------------------------------------------------*/
1985 
1986 SwBaseShell::SwBaseShell(SwView& rVw) :
1987 	SfxShell( &rVw ),
1988 	rView(rVw),
1989 	pGetStateSet(0)
1990 {
1991 	SwWrtShell& rWrtSh = rView.GetWrtShell();
1992 
1993 	SetPool(&rWrtSh.GetAttrPool());
1994 	SetName(C2S("Base"));
1995 	rWrtSh.SetGrfArrivedLnk( LINK( this, SwBaseShell, GraphicArrivedHdl));
1996 }
1997 
1998 
1999 SwBaseShell::~SwBaseShell()
2000 {
2001 	if( rView.GetCurShell() == this )
2002 		rView.ResetSubShell();
2003 
2004 	Link aTmp( LINK( this, SwBaseShell, GraphicArrivedHdl));
2005 	if( aTmp == rView.GetWrtShell().GetGrfArrivedLnk() )
2006 		rView.GetWrtShell().SetGrfArrivedLnk( Link() );
2007 }
2008 
2009 /*--------------------------------------------------------------------
2010 	Beschreibung:
2011  --------------------------------------------------------------------*/
2012 
2013 void SwBaseShell::ExecTxtCtrl( SfxRequest& rReq )
2014 {
2015 	const SfxItemSet *pArgs = rReq.GetArgs();
2016 
2017 	if( pArgs)
2018 	{
2019 		SwWrtShell &rSh = GetShell();
2020 		SvxScriptSetItem* pSSetItem = 0;
2021 		sal_uInt16 nSlot = rReq.GetSlot();
2022 		SfxItemPool& rPool = rSh.GetAttrPool();
2023 		sal_uInt16 nWhich = rPool.GetWhich( nSlot );
2024         sal_uInt16 nScripts = SCRIPTTYPE_LATIN | SCRIPTTYPE_ASIAN | SCRIPTTYPE_COMPLEX;
2025         SfxItemSet aHeightSet( GetPool(),  RES_CHRATR_FONTSIZE, RES_CHRATR_FONTSIZE,
2026                                             RES_CHRATR_CJK_FONTSIZE, RES_CHRATR_CJK_FONTSIZE,
2027                                             RES_CHRATR_CTL_FONTSIZE, RES_CHRATR_CTL_FONTSIZE,
2028                                         0L);
2029 
2030 		switch( nSlot )
2031 		{
2032 		    case SID_ATTR_CHAR_FONT:
2033             {
2034                 nScripts = rSh.GetScriptType();
2035                 // #i42732# input language should be preferred over
2036                 // current cursor position to detect script type
2037                 if(!rSh.HasSelection())
2038                 {
2039                     LanguageType nInputLang = GetView().GetEditWin().GetInputLanguage();
2040                     if(nInputLang != LANGUAGE_DONTKNOW && nInputLang != LANGUAGE_SYSTEM)
2041                         nScripts = SvtLanguageOptions::GetScriptTypeOfLanguage( nInputLang );
2042                 }
2043             }
2044 		    case SID_ATTR_CHAR_POSTURE:
2045 		    case SID_ATTR_CHAR_WEIGHT:
2046 			{
2047 				pSSetItem = new SvxScriptSetItem( nSlot, rPool );
2048 				pSSetItem->PutItemForScriptType( nScripts, pArgs->Get( nWhich ));
2049 				pArgs = &pSSetItem->GetItemSet();
2050 			}
2051 			break;
2052             case SID_ATTR_CHAR_FONTHEIGHT:
2053             {
2054 				if(rSh.HasSelection())
2055                 {
2056                     pSSetItem = new SvxScriptSetItem( nSlot, rPool );
2057 				    pSSetItem->PutItemForScriptType( nScripts, pArgs->Get( nWhich ));
2058 				    pArgs = &pSSetItem->GetItemSet();
2059                 }
2060                 else
2061                 {
2062                     nScripts = rSh.GetScriptType();
2063                     LanguageType nInputLang = GetView().GetEditWin().GetInputLanguage();
2064                     if(nInputLang != LANGUAGE_DONTKNOW && nInputLang != LANGUAGE_SYSTEM)
2065                         nScripts = SvtLanguageOptions::GetScriptTypeOfLanguage( nInputLang );
2066                     sal_uInt32 nHeight = static_cast< const SvxFontHeightItem& >(pArgs->Get( nWhich )).GetHeight();
2067                     SwStdFontConfig* pStdFont = SW_MOD()->GetStdFontConfig();
2068 
2069                     SfxItemSet aLangSet( GetPool(), RES_CHRATR_LANGUAGE, RES_CHRATR_LANGUAGE,
2070                                                     RES_CHRATR_CJK_LANGUAGE, RES_CHRATR_CJK_LANGUAGE,
2071                                                     RES_CHRATR_CTL_LANGUAGE, RES_CHRATR_CTL_LANGUAGE,
2072                                                     0L);
2073                     rSh.GetCurAttr( aLangSet );
2074 
2075                     sal_Int32 nWesternSize =
2076                             pStdFont->GetFontHeight(FONT_STANDARD, FONT_GROUP_DEFAULT,
2077                             static_cast<const SvxLanguageItem&>(aLangSet.Get( RES_CHRATR_LANGUAGE)).GetLanguage());
2078                     sal_Int32 nCJKSize =
2079                             pStdFont->GetFontHeight(FONT_STANDARD, FONT_GROUP_CJK,
2080                             static_cast<const SvxLanguageItem&>(aLangSet.Get( RES_CHRATR_CJK_LANGUAGE)).GetLanguage());
2081                     sal_Int32 nCTLSize =
2082                             pStdFont->GetFontHeight(FONT_STANDARD, FONT_GROUP_CTL,
2083                             static_cast<const SvxLanguageItem&>(aLangSet.Get( RES_CHRATR_CTL_LANGUAGE)).GetLanguage());
2084 
2085                     switch(nScripts)
2086                     {
2087                         case SCRIPTTYPE_LATIN:
2088                             nCJKSize = nHeight * nCJKSize / nWesternSize;
2089                             nCTLSize = nHeight * nCTLSize / nWesternSize;
2090                             nWesternSize = (sal_Int32) nHeight;
2091                         break;
2092                         case SCRIPTTYPE_ASIAN:
2093                             nCTLSize = nHeight* nCTLSize / nCJKSize;
2094                             nWesternSize = nHeight * nWesternSize / nCJKSize;
2095                             nCJKSize = (sal_Int32) nHeight;
2096                         break;
2097                         case SCRIPTTYPE_COMPLEX:
2098                             nCJKSize = nHeight * nCJKSize / nCTLSize;
2099                             nWesternSize = nHeight * nWesternSize / nCTLSize;
2100                             nCTLSize = (sal_Int32) nHeight;
2101                         break;
2102                     }
2103                     aHeightSet.Put( SvxFontHeightItem( (sal_uInt32)nWesternSize, 100, RES_CHRATR_FONTSIZE ));
2104                     aHeightSet.Put( SvxFontHeightItem( (sal_uInt32)nCJKSize, 100, RES_CHRATR_CJK_FONTSIZE ));
2105                     aHeightSet.Put( SvxFontHeightItem( (sal_uInt32)nCTLSize, 100, RES_CHRATR_CTL_FONTSIZE ));
2106                     pArgs = &aHeightSet;
2107                 }
2108             }
2109             break;
2110 		}
2111 
2112 		if( pArgs )
2113         {
2114             bool bAuto = false;
2115             if ( !isCHRATR(nWhich) ||
2116                  ( rSh.HasSelection() && rSh.IsSelFullPara() ) )
2117             {
2118                 SwTxtFmtColl * pColl = rSh.GetCurTxtFmtColl();
2119                 if ( pColl && pColl->IsAutoUpdateFmt() )
2120                 {
2121                     rSh.AutoUpdatePara( pColl, *pArgs );
2122                     bAuto = true;
2123                 }
2124             }
2125 
2126             if (!bAuto)
2127             {
2128                 rSh.SetAttr( *pArgs );
2129             }
2130         }
2131 		delete pSSetItem;
2132 	}
2133     else
2134         GetView().GetViewFrame()->GetDispatcher()->Execute( SID_CHAR_DLG, sal_False);
2135     rReq.Done();
2136 }
2137 
2138 /*--------------------------------------------------------------------
2139 	Beschreibung:
2140  --------------------------------------------------------------------*/
2141 
2142 void SwBaseShell::GetTxtCtrlState( SfxItemSet& rSet )
2143 {
2144 	SwWrtShell &rSh = GetShell();
2145     rSh.GetCurAttr( rSet );
2146 }
2147 
2148 void SwBaseShell::GetTxtFontCtrlState( SfxItemSet& rSet )
2149 {
2150 	SwWrtShell &rSh = GetShell();
2151 	sal_Bool bFirst = sal_True;
2152 	SfxItemSet* pFntCoreSet = 0;
2153     sal_uInt16 nScriptType = SCRIPTTYPE_LATIN;
2154 	SfxWhichIter aIter( rSet );
2155 	sal_uInt16 nWhich = aIter.FirstWhich();
2156 	while( nWhich )
2157 	{
2158 		switch( nWhich )
2159 		{
2160 		case RES_CHRATR_FONT:
2161 		case RES_CHRATR_FONTSIZE:
2162 		case RES_CHRATR_WEIGHT:
2163 		case RES_CHRATR_POSTURE:
2164 			{
2165 				if( !pFntCoreSet )
2166 				{
2167 					pFntCoreSet = new SfxItemSet( *rSet.GetPool(),
2168 									RES_CHRATR_BEGIN, RES_CHRATR_END-1 );
2169                     rSh.GetCurAttr( *pFntCoreSet );
2170                     nScriptType = rSh.GetScriptType();
2171                     // #i42732# input language should be preferred over
2172                     // current cursor position to detect script type
2173                     SwEditWin& rEditWin = GetView().GetEditWin();
2174                     if( rEditWin.IsUseInputLanguage() )
2175                     {
2176                         if(!rSh.HasSelection() && (
2177                             nWhich == RES_CHRATR_FONT ||
2178                             nWhich == RES_CHRATR_FONTSIZE ))
2179                         {
2180                             LanguageType nInputLang = rEditWin.GetInputLanguage();
2181                             if(nInputLang != LANGUAGE_DONTKNOW && nInputLang != LANGUAGE_SYSTEM)
2182                                 nScriptType = SvtLanguageOptions::GetScriptTypeOfLanguage( nInputLang );
2183                         }
2184                     }
2185 				}
2186 				SfxItemPool& rPool = *rSet.GetPool();
2187 				SvxScriptSetItem aSetItem( rPool.GetSlotId( nWhich ), rPool );
2188 				aSetItem.GetItemSet().Put( *pFntCoreSet, sal_False );
2189 				const SfxPoolItem* pI = aSetItem.GetItemOfScript( nScriptType );
2190 				if( pI )
2191 					rSet.Put( *pI, nWhich );
2192 				else
2193 					rSet.InvalidateItem( nWhich );
2194                 //set input context of the SwEditWin according to the selected font and script type
2195                 if(RES_CHRATR_FONT == nWhich)
2196                 {
2197                     Font aFont;
2198                     if(pI && pI->ISA(SvxFontItem))
2199                     {
2200                         aFont.SetName( ((const SvxFontItem*)pI)->GetFamilyName());
2201                         aFont.SetStyleName(((const SvxFontItem*)pI)->GetStyleName());
2202                         aFont.SetFamily(((const SvxFontItem*)pI)->GetFamily());
2203                         aFont.SetPitch(((const SvxFontItem*)pI)->GetPitch());
2204                         aFont.SetCharSet(((const SvxFontItem*)pI)->GetCharSet());
2205                     }
2206 
2207                     sal_Bool bVertical = rSh.IsInVerticalText();
2208                     aFont.SetOrientation(bVertical ? 2700 : 0);
2209                     aFont.SetVertical(bVertical);
2210                     GetView().GetEditWin().SetInputContext( InputContext( aFont, INPUTCONTEXT_TEXT |
2211                                                         INPUTCONTEXT_EXTTEXTINPUT ) );
2212                 }
2213 			}
2214 			break;
2215 
2216 		default:
2217 			if( bFirst )
2218 			{
2219                 rSh.GetCurAttr( rSet );
2220 				bFirst = sal_False;
2221 			}
2222 		}
2223 		nWhich = aIter.NextWhich();
2224 	}
2225 	delete pFntCoreSet;
2226 }
2227 
2228 /*--------------------------------------------------------------------
2229 	Beschreibung:
2230  --------------------------------------------------------------------*/
2231 
2232 void SwBaseShell::GetBckColState(SfxItemSet &rSet)
2233 {
2234 	SwWrtShell &rSh = GetShell();
2235 	SfxWhichIter aIter( rSet );
2236 	sal_uInt16 nWhich = aIter.FirstWhich();
2237 	int nSelType = rSh.GetSelectionType();
2238 
2239 //	if ( nSelType & nsSelectionType::SEL_GRF ||
2240 	if( nSelType & nsSelectionType::SEL_OLE )
2241 	{
2242 		rSet.DisableItem( SID_BACKGROUND_COLOR );
2243 		return;
2244 	}
2245 
2246 	if ( nSelType & nsSelectionType::SEL_FRM )
2247 	{
2248 		sal_Bool bParentCntProt = rSh.IsSelObjProtected( FLYPROTECT_CONTENT|FLYPROTECT_PARENT ) != 0;
2249 		if (bParentCntProt)
2250 		{
2251 			rSet.DisableItem( SID_BACKGROUND_COLOR );
2252 			return;
2253 		}
2254 	}
2255 
2256     SvxBrushItem aBrushItem( RES_BACKGROUND );
2257 
2258 	if( nsSelectionType::SEL_TBL_CELLS & nSelType )
2259 		rSh.GetBoxBackground( aBrushItem );
2260 	else
2261 	{
2262 		SfxItemSet aCoreSet(GetPool(), RES_BACKGROUND, RES_BACKGROUND);
2263 		if( nSelType & nsSelectionType::SEL_GRF || nsSelectionType::SEL_FRM & nSelType )
2264 			rSh.GetFlyFrmAttr( aCoreSet );
2265 		else
2266             rSh.GetCurAttr( aCoreSet );
2267 		aBrushItem = (const SvxBrushItem&)aCoreSet.Get(RES_BACKGROUND);
2268 	}
2269 
2270 	while ( nWhich )
2271 	{
2272 		switch(nWhich)
2273 		{
2274 			case SID_BACKGROUND_COLOR  :
2275 			{
2276                 SvxColorItem aColorItem(aBrushItem.GetColor(), SID_BACKGROUND_COLOR);
2277 				rSet.Put( aColorItem, SID_BACKGROUND_COLOR );
2278 			}
2279 			break;
2280 			case SID_ATTR_BRUSH:
2281 			case RES_BACKGROUND:
2282 				rSet.Put( aBrushItem, GetPool().GetWhich(nWhich) );
2283 			break;
2284 		}
2285 		nWhich = aIter.NextWhich();
2286 	}
2287 }
2288 
2289 /*--------------------------------------------------------------------
2290 	Beschreibung:
2291  --------------------------------------------------------------------*/
2292 
2293 void SwBaseShell::ExecBckCol(SfxRequest& rReq)
2294 {
2295 	SwWrtShell &rSh = GetShell();
2296 	int nSelType = rSh.GetSelectionType();
2297 	if ( nSelType & nsSelectionType::SEL_OLE )
2298 	{
2299 		return;
2300 	}
2301 
2302 	const SfxItemSet* pArgs = rReq.GetArgs();
2303 	sal_uInt16 nSlot = rReq.GetSlot();
2304 	if( !pArgs  && nSlot != SID_BACKGROUND_COLOR)
2305 		return ;
2306 
2307     SvxBrushItem aBrushItem( RES_BACKGROUND );
2308 
2309     if( nsSelectionType::SEL_TBL_CELLS & nSelType )
2310 	{
2311 		rSh.GetBoxBackground( aBrushItem );
2312 	}
2313 	else
2314 	{
2315 		SfxItemSet aCoreSet(GetPool(), RES_BACKGROUND, RES_BACKGROUND);
2316 		if( (nsSelectionType::SEL_FRM & nSelType) || (nsSelectionType::SEL_GRF & nSelType) )
2317 			rSh.GetFlyFrmAttr( aCoreSet );
2318 		else
2319             rSh.GetCurAttr( aCoreSet );
2320 		aBrushItem = (const SvxBrushItem&)aCoreSet.Get(RES_BACKGROUND);
2321 	}
2322 
2323 //	sal_Bool bMsgOk = sal_False;
2324 
2325 	switch (nSlot)
2326 	{
2327 		// RES_BACKGROUND (=SID_ATTR_BRUSH) muss ueber zwei IDs
2328 		// gesetzt werden:
2329 		case SID_BACKGROUND_COLOR:
2330 			{
2331 				aBrushItem.SetGraphicPos(GPOS_NONE);
2332 
2333 				//Brush &rBrush = aBrushItem.GetBrush();
2334 				if(pArgs)
2335 				{
2336 					const SvxColorItem&	rNewColorItem = (const SvxColorItem&)
2337 											pArgs->Get(SID_BACKGROUND_COLOR);
2338 					const Color& rNewColor = rNewColorItem.GetValue();
2339 					aBrushItem.SetColor( rNewColor );
2340 					GetView().GetViewFrame()->GetBindings().SetState(rNewColorItem);
2341 				}
2342 				else
2343                 {
2344 					aBrushItem.SetColor( COL_TRANSPARENT );
2345                     rReq.AppendItem( SvxColorItem( Color( COL_TRANSPARENT ), nSlot ) );
2346                 }
2347 			}
2348 			break;
2349 
2350 		case SID_ATTR_BRUSH:
2351 		case RES_BACKGROUND:
2352 		{
2353 			const SvxBrushItem& rNewBrushItem = (const SvxBrushItem&)
2354 									pArgs->Get( GetPool().GetWhich(nSlot) );
2355 			aBrushItem = rNewBrushItem;
2356 		}
2357 		break;
2358 		default:
2359 //			bMsgOk = sal_False;
2360             rReq.Ignore();
2361 			DBG_ERROR( "Unbekannte Message bei ExecuteAttr!" );
2362 			return;
2363 	}
2364 
2365     if( nsSelectionType::SEL_TBL_CELLS & nSelType )
2366 	{
2367 		rSh.SetBoxBackground( aBrushItem );
2368 	}
2369 	else if( (nsSelectionType::SEL_FRM & nSelType) ||
2370 		(nsSelectionType::SEL_GRF & nSelType)  )
2371 	{
2372 		SfxItemSet aCoreSet(GetPool(), RES_BACKGROUND, RES_BACKGROUND);
2373 		aCoreSet.Put( aBrushItem );
2374 		// Vorlagen-AutoUpdate
2375 		SwFrmFmt* pFmt = rSh.GetCurFrmFmt();
2376 		if(pFmt && pFmt->IsAutoUpdateFmt())
2377 			rSh.AutoUpdateFrame( pFmt, aCoreSet);
2378 		else
2379 			rSh.SetFlyFrmAttr( aCoreSet );
2380 	}
2381 	else
2382 	{
2383 		SwTxtFmtColl* pColl = rSh.GetCurTxtFmtColl();
2384 		if(	pColl && pColl->IsAutoUpdateFmt())
2385 		{
2386 			SfxItemSet aSet(GetPool(), RES_BACKGROUND, RES_BACKGROUND );
2387 			aSet.Put(aBrushItem);
2388 			rSh.AutoUpdatePara( pColl, aSet);
2389 		}
2390 		else
2391 			rSh.SetAttr( aBrushItem );
2392 	}
2393 
2394     rReq.Done();
2395 }
2396 
2397 /*--------------------------------------------------------------------
2398 	Beschreibung:
2399  --------------------------------------------------------------------*/
2400 
2401 
2402 void SwBaseShell::GetBorderState(SfxItemSet &rSet)
2403 {
2404 	SwWrtShell &rSh = GetShell();
2405 	// Tabellenzelle(n) selektiert?
2406 	sal_Bool bPrepare = sal_True;
2407     sal_Bool bTableMode = rSh.IsTableMode();
2408     if ( bTableMode )
2409 	{
2410 		SfxItemSet aCoreSet( GetPool(),
2411 							 RES_BOX, RES_BOX,
2412 							 SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER, 0 );
2413         SvxBoxInfoItem aBoxInfo( SID_ATTR_BORDER_INNER );
2414 		aCoreSet.Put( aBoxInfo );
2415 		rSh.GetTabBorders( aCoreSet );
2416 		rSet.Put( aCoreSet );
2417 	}
2418 	else if ( rSh.IsFrmSelected() )
2419 	{
2420 		SwFlyFrmAttrMgr aMgr( sal_False, &rSh, FRMMGR_TYPE_NONE );
2421 		rSet.Put( aMgr.GetAttrSet() );
2422 		bPrepare = sal_False;
2423 	}
2424 	else
2425 		// Umrandungsattribute ganz normal ueber Shell holen
2426         rSh.GetCurAttr( rSet );
2427     if ( bPrepare )
2428 		::PrepareBoxInfo( rSet, rSh );
2429     // switch the border toolbox controller mode
2430     rSet.Put( SfxBoolItem( SID_BORDER_REDUCED_MODE, !bTableMode ));
2431 }
2432 
2433 /*--------------------------------------------------------------------
2434 	Beschreibung:
2435  --------------------------------------------------------------------*/
2436 
2437 
2438 void SwBaseShell::ExecDlg(SfxRequest &rReq)
2439 {
2440 	SwWrtShell &rSh = GetShell();
2441 	Window *pMDI = &GetView().GetViewFrame()->GetWindow();
2442 	//Damit aus dem Basic keine Dialoge fuer Hintergrund-Views aufgerufen werden:
2443 	sal_Bool bBackground = (&GetView() != GetActiveView());
2444 	const SfxPoolItem* pItem = 0;
2445 	const SfxItemSet* pArgs = rReq.GetArgs();
2446 
2447 	sal_uInt16 nSlot = rReq.GetSlot();
2448 	const SfxItemSet* pOutSet = 0;
2449     bool bDone = false;
2450 	if(pArgs)
2451 		pArgs->GetItemState( GetPool().GetWhich(nSlot), sal_False, &pItem );
2452 
2453     switch ( nSlot )
2454     {
2455         case FN_FORMAT_PAGE_DLG:
2456         case FN_FORMAT_PAGE_COLUMN_DLG:
2457         case FN_FORMAT_PAGE_SETTING_DLG:
2458         {
2459             if( !bBackground )
2460             {
2461                 const sal_uInt16 nCurIdx = rSh.GetCurPageDesc();
2462                 const SwPageDesc& rPageDesc = rSh.GetPageDesc( nCurIdx );
2463                 //temp. View, weil die Shell nach dem Dialog nicht mehr gueltig sein muss
2464                 //z.B. Kopfzeile ausschalten
2465                 SwView& rTempView = GetView();
2466                 rTempView.GetDocShell()->FormatPage(
2467                     rPageDesc.GetName(),
2468                     nSlot,
2469                     rSh );
2470                 rTempView.InvalidateRulerPos();
2471             }
2472         }
2473         break;
2474         case FN_FORMAT_BORDER_DLG:
2475 		{
2476 			SfxItemSet	 aSet( rSh.GetAttrPool(),
2477 							   RES_BOX	  			, RES_SHADOW,
2478 							   SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER,
2479 							   0 );
2480 			SfxAbstractDialog * pDlg = 0;
2481 			// Tabellenzelle(n) selektiert?
2482 			if ( rSh.IsTableMode() )
2483 			{
2484 				// Umrandungattribute Get/SetTabBorders() setzen
2485 				::PrepareBoxInfo( aSet, rSh );
2486 				rSh.GetTabBorders( aSet );
2487                 SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
2488                 DBG_ASSERT(pFact, "SwAbstractDialogFactory fail!");
2489 
2490                 pDlg = pFact->CreateSwBorderDlg( pMDI, aSet, SW_BORDER_MODE_TABLE, RC_DLG_SWBORDERDLG );
2491                 DBG_ASSERT(pDlg, "Dialogdiet fail!");
2492 				if ( pDlg->Execute() == RET_OK )
2493 				{
2494 					rSh.SetTabBorders( *pDlg->GetOutputItemSet() );
2495 					pOutSet = pDlg->GetOutputItemSet();
2496 				}
2497 			}
2498 			else if ( rSh.IsFrmSelected() )
2499 			{
2500 				// Umrandungsattribute ueber Frame-Manager setzen
2501 				SwFlyFrmAttrMgr aMgr( sal_False, &rSh, FRMMGR_TYPE_NONE );
2502 				aSet.Put( aMgr.GetAttrSet() );
2503 
2504                 SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
2505                 DBG_ASSERT(pFact, "SwAbstractDialogFactory fail!");
2506 
2507                 pDlg = pFact->CreateSwBorderDlg( pMDI, aSet, SW_BORDER_MODE_FRAME, RC_DLG_SWBORDERDLG );
2508                 DBG_ASSERT(pDlg, "Dialogdiet fail!");
2509 				if ( pDlg->Execute() == RET_OK )
2510 				{
2511 					aMgr.SetAttrSet( *pDlg->GetOutputItemSet() );
2512 					aMgr.UpdateFlyFrm();
2513 					pOutSet = pDlg->GetOutputItemSet();
2514 				}
2515 			}
2516 			else
2517 			{
2518 				// Umrandungsattribute ganz normal ueber Shell setzen
2519                 rSh.GetCurAttr( aSet );
2520 				::PrepareBoxInfo( aSet, rSh );
2521 
2522                 SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
2523                 DBG_ASSERT(pFact, "SwAbstractDialogFactory fail!");
2524 
2525                 pDlg = pFact->CreateSwBorderDlg( pMDI, aSet, SW_BORDER_MODE_PARA, RC_DLG_SWBORDERDLG );
2526                 DBG_ASSERT(pDlg, "Dialogdiet fail!");
2527 				if ( pDlg->Execute() == RET_OK )
2528 				{
2529 					rSh.SetAttr( *pDlg->GetOutputItemSet() );
2530 					pOutSet = pDlg->GetOutputItemSet();
2531 				}
2532 			}
2533             if(pOutSet)
2534             {
2535                 rReq.Done(*pOutSet);
2536                 bDone = true;
2537             }
2538             delete pDlg;
2539 		}
2540 		break;
2541 		case FN_FORMAT_BACKGROUND_DLG:
2542 		{
2543 			SfxItemSet aSet( rSh.GetAttrPool(),
2544 							 RES_BACKGROUND, RES_BACKGROUND );
2545 
2546             SfxAbstractDialog * pDlg = 0;
2547             SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
2548             DBG_ASSERT(pFact, "SwAbstractDialogFactory fail!");
2549 
2550 
2551 			// Tabellenzelle(n) selektiert?
2552 			if ( rSh.IsTableMode() )
2553 			{
2554 				//Hintergrundattribute der Tabelle holen und in den Set packen
2555 				SvxBrushItem aBrush(RES_BACKGROUND);
2556 				rSh.GetBoxBackground( aBrush );
2557                 pDlg = pFact->CreateSfxDialog( pMDI, aSet,
2558 					rView.GetViewFrame()->GetFrame().GetFrameInterface(),
2559 					RC_SWDLG_BACKGROUND );
2560                 DBG_ASSERT(pDlg, "Dialogdiet fail!");
2561 				aSet.Put( aBrush );
2562 				if ( pDlg->Execute() == RET_OK )
2563 				{
2564 					//aBrush = (SvxBrushItem) pDlg->GetOutputItemSet()->Get( RES_BACKGROUND );
2565 
2566 					rSh.SetBoxBackground( (SvxBrushItem&)
2567 						pDlg->GetOutputItemSet()->Get( RES_BACKGROUND ));
2568 					pOutSet = pDlg->GetOutputItemSet();
2569 				}
2570 			}
2571 			else if ( rSh.IsFrmSelected() )
2572 			{
2573 
2574 				rSh.GetFlyFrmAttr( aSet );
2575 
2576                 pDlg = pFact->CreateSfxDialog( pMDI, aSet,
2577 					rView.GetViewFrame()->GetFrame().GetFrameInterface(),
2578 					RC_SWDLG_BACKGROUND );
2579                 DBG_ASSERT(pDlg, "Dialogdiet fail!");
2580 				if ( pDlg->Execute() == RET_OK )
2581 				{
2582 					rSh.SetFlyFrmAttr((SfxItemSet &) *pDlg->GetOutputItemSet() );
2583 					pOutSet = pDlg->GetOutputItemSet();
2584 				}
2585 			}
2586 			else
2587 			{
2588 				// Umrandungsattribute ganz normal ueber Shell setzen
2589                 rSh.GetCurAttr( aSet );
2590 
2591                 pDlg = pFact->CreateSfxDialog( pMDI, aSet,
2592 					rView.GetViewFrame()->GetFrame().GetFrameInterface(),
2593 					RC_SWDLG_BACKGROUND );
2594                 DBG_ASSERT(pDlg, "Dialogdiet fail!");
2595 				if ( pDlg->Execute() == RET_OK )
2596 				{
2597 					rSh.SetAttr( *pDlg->GetOutputItemSet() );
2598 					pOutSet = pDlg->GetOutputItemSet();
2599 				}
2600 			}
2601             if(pOutSet)
2602             {
2603                 rReq.Done(*pOutSet);
2604                 bDone = true;
2605             }
2606             delete pDlg;
2607 
2608 		}
2609 		break;
2610 		default:DBG_ERROR("falscher Dispatcher (basesh.cxx)");
2611 	}
2612     if(!bDone)
2613         rReq.Done();
2614 }
2615 
2616 // ----------------------------------------------------------------------------
2617 
2618 
2619 SwWrtShell& SwBaseShell::GetShell()
2620 {
2621 	return rView.GetWrtShell();
2622 }
2623 
2624 // ----------------------------------------------------------------------------
2625 
2626 SwWrtShell* SwBaseShell::GetShellPtr()
2627 {
2628 	return rView.GetWrtShellPtr();
2629 }
2630 
2631 // ----------------------------------------------------------------------------
2632 
2633 void SwBaseShell::InsertTable( SfxRequest& _rRequest )
2634 {
2635 	const SfxItemSet* pArgs = _rRequest.GetArgs();
2636 	SwWrtShell& rSh = GetShell();
2637 
2638 	if ( !( rSh.GetFrmType( 0, sal_True ) & FRMTYPE_FOOTNOTE ) )
2639 	{
2640         SwView &rTempView = GetView(); // Da GetView() nach Shellwechsel nicht mehr geht
2641         sal_Bool bHTMLMode = 0 != (::GetHtmlMode(rTempView.GetDocShell())&HTMLMODE_ON);
2642 		sal_Bool bCallEndUndo = sal_False;
2643 
2644 		if( !pArgs && rSh.IsSelection() && !rSh.IsInClickToEdit() &&
2645             !rSh.IsTableMode() )
2646 		{
2647 			const SwModuleOptions* pModOpt = SW_MOD()->GetModuleConfig();
2648             SwInsertTableOptions aInsTblOpts = pModOpt->GetInsTblFlags(bHTMLMode);
2649 
2650 			rSh.StartUndo(UNDO_INSTABLE);
2651 			bCallEndUndo = sal_True;
2652 
2653             sal_Bool bInserted = rSh.TextToTable( aInsTblOpts, '\t', text::HoriOrientation::FULL );
2654 			rSh.EnterStdMode();
2655 			if (bInserted)
2656                 rTempView.AutoCaption(TABLE_CAP);
2657 	        _rRequest.Done();
2658 		}
2659 		else
2660 		{
2661 			sal_uInt16 nCols = 0;
2662 			sal_uInt16 nRows = 0;
2663             SwInsertTableOptions aInsTblOpts( tabopts::ALL_TBL_INS_ATTR, 1 );
2664             String aTableName, aAutoName;
2665 			SwTableAutoFmt* pTAFmt = 0;
2666 
2667 			if( pArgs && pArgs->Count() >= 2 )
2668 			{
2669 	            SFX_REQUEST_ARG( _rRequest, pName, SfxStringItem, FN_INSERT_TABLE, sal_False );
2670 	            SFX_REQUEST_ARG( _rRequest, pCols, SfxUInt16Item, SID_ATTR_TABLE_COLUMN, sal_False );
2671 	            SFX_REQUEST_ARG( _rRequest, pRows, SfxUInt16Item, SID_ATTR_TABLE_ROW, sal_False );
2672 	            SFX_REQUEST_ARG( _rRequest, pFlags, SfxInt32Item, FN_PARAM_1, sal_False );
2673 	            SFX_REQUEST_ARG( _rRequest, pAuto, SfxStringItem, FN_PARAM_2, sal_False );
2674 
2675 	            if ( pName )
2676 	                aTableName = pName->GetValue();
2677 	            if ( pCols )
2678 	                nCols = pCols->GetValue();
2679 	            if ( pRows )
2680 	                nRows = pRows->GetValue();
2681 	            if ( pAuto )
2682 	            {
2683 	                aAutoName = pAuto->GetValue();
2684 	                if ( aAutoName.Len() )
2685 	                {
2686 	                    SwTableAutoFmtTbl aTableTbl;
2687 	                    aTableTbl.Load();
2688 	                    for ( sal_uInt16 n=0; n<aTableTbl.Count(); n++ )
2689 	                    {
2690 	                        if ( aTableTbl[n]->GetName() == aAutoName )
2691 	                        {
2692 	                            pTAFmt = new SwTableAutoFmt( *aTableTbl[n] );
2693 	                            break;
2694 	                        }
2695 	                    }
2696 	                }
2697 	            }
2698 
2699 	            if ( pFlags )
2700                     aInsTblOpts.mnInsMode = (sal_uInt16) pFlags->GetValue();
2701                 else
2702 	            {
2703 	                const SwModuleOptions* pModOpt = SW_MOD()->GetModuleConfig();
2704                     aInsTblOpts = pModOpt->GetInsTblFlags(bHTMLMode);
2705                 }
2706 			}
2707 
2708 			if( !nCols || !nRows )
2709 			{
2710                 SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
2711                 DBG_ASSERT(pFact, "Dialogdiet fail!");
2712                 AbstractInsTableDlg* pDlg = pFact->CreateInsTableDlg( DLG_INSERT_TABLE, rTempView );
2713                 DBG_ASSERT(pDlg, "Dialogdiet fail!");
2714                 if( RET_OK == pDlg->Execute() )
2715 				{
2716 	                pDlg->GetValues( aTableName, nRows, nCols, aInsTblOpts, aAutoName, pTAFmt );
2717 				}
2718 	            else
2719 	                _rRequest.Ignore();
2720 				delete pDlg;
2721             }
2722 
2723 			if( nCols && nRows )
2724 			{
2725 	            // record before shell change
2726 	            _rRequest.AppendItem( SfxStringItem( FN_INSERT_TABLE, aTableName ) );
2727 	            if ( aAutoName.Len() )
2728 	                _rRequest.AppendItem( SfxStringItem( FN_PARAM_2, aAutoName ) );
2729 	            _rRequest.AppendItem( SfxUInt16Item( SID_ATTR_TABLE_COLUMN, nCols ) );
2730 	            _rRequest.AppendItem( SfxUInt16Item( SID_ATTR_TABLE_ROW, nRows ) );
2731                 _rRequest.AppendItem( SfxInt32Item( FN_PARAM_1, (sal_Int32) aInsTblOpts.mnInsMode ) );
2732 	            _rRequest.Done();
2733 
2734 				rSh.StartUndo(UNDO_INSTABLE);
2735 				bCallEndUndo = sal_True;
2736 
2737 				rSh.StartAllAction();
2738 				if( rSh.HasSelection() )
2739 					rSh.DelRight();
2740 
2741                 rSh.InsertTable( aInsTblOpts, nRows, nCols, text::HoriOrientation::FULL, pTAFmt );
2742 				rSh.MoveTable( fnTablePrev, fnTableStart );
2743 
2744 				if( aTableName.Len() && !rSh.GetTblStyle( aTableName ) )
2745 					rSh.GetTableFmt()->SetName( aTableName );
2746 
2747 				rSh.EndAllAction();
2748                 rTempView.AutoCaption(TABLE_CAP);
2749 			}
2750 			delete pTAFmt;
2751 		}
2752 
2753 		if( bCallEndUndo )
2754         {
2755             SwRewriter aRewriter;
2756 
2757             if (rSh.GetTableFmt())
2758             {
2759                 aRewriter.AddRule(UNDO_ARG1, SW_RES(STR_START_QUOTE));
2760                 aRewriter.AddRule(UNDO_ARG2, rSh.GetTableFmt()->GetName());
2761                 aRewriter.AddRule(UNDO_ARG3, SW_RES(STR_END_QUOTE));
2762 
2763             }
2764             rSh.EndUndo(UNDO_INSTABLE, &aRewriter);	// wegen moegl. Shellwechsel
2765         }
2766 	}
2767 }
2768 
2769 // ----------------------------------------------------------------------------
2770 
2771 void SwBaseShell::GetGalleryState( SfxItemSet &rSet )
2772 {
2773 	SwWrtShell &rSh = GetShell();
2774 	SfxWhichIter aIter( rSet );
2775 	sal_uInt16 nWhich = aIter.FirstWhich();
2776 	switch ( nWhich )
2777 	{
2778 		case SID_GALLERY_BG_BRUSH:
2779 		{
2780 			int nSel = rSh.GetSelectionType();
2781 			SfxStringListItem aLst( nWhich );
2782 			List *pLst = aLst.GetList();
2783 			nParagraphPos = nGraphicPos = nOlePos = nFramePos = nTablePos =
2784 			nTableRowPos  = nTableCellPos = nPagePos =
2785 			nHeaderPos 	  = nFooterPos = 0;
2786 			sal_uInt8 nPos = 1;
2787 			pLst->Insert( (void*) new SW_RESSTR( STR_SWBG_PAGE ), pLst->Count() );
2788 			nPagePos = nPos++;
2789 			sal_uInt16 nHtmlMode = ::GetHtmlMode(GetView().GetDocShell());
2790 			sal_Bool bHtmlMode = 0 != (nHtmlMode & HTMLMODE_ON);
2791 
2792 			if ( (!bHtmlMode || (nHtmlMode & HTMLMODE_FULL_STYLES)) &&
2793 				 (nSel & nsSelectionType::SEL_TXT) )
2794 			{
2795 				pLst->Insert( (void*) new SW_RESSTR( STR_SWBG_PARAGRAPH ), pLst->Count() );
2796 				nParagraphPos = nPos++;
2797 			}
2798 			if ( (!bHtmlMode || (nHtmlMode & HTMLMODE_SOME_STYLES)) &&
2799 					nSel & (nsSelectionType::SEL_TBL|nsSelectionType::SEL_TBL_CELLS) )
2800 			{
2801 				pLst->Insert( (void*) new SW_RESSTR( STR_SWBG_TABLE ), pLst->Count() );
2802 				nTablePos = nPos++;
2803 
2804 				if(!bHtmlMode)
2805 				{
2806 					pLst->Insert( (void*) new SW_RESSTR( STR_SWBG_TABLE_ROW ), pLst->Count() );
2807 					nTableRowPos = nPos++;
2808 				}
2809 
2810 				pLst->Insert( (void*) new SW_RESSTR( STR_SWBG_TABLE_CELL), pLst->Count() );
2811 				nTableCellPos = nPos++;
2812 			}
2813 			if(!bHtmlMode)
2814 			{
2815 				if ( nSel & nsSelectionType::SEL_FRM )
2816 				{
2817 					pLst->Insert( (void*) new SW_RESSTR( STR_SWBG_FRAME ), pLst->Count() );
2818 					nFramePos = nPos++;
2819 				}
2820 				if ( nSel & nsSelectionType::SEL_GRF )
2821 				{
2822 					pLst->Insert( (void*) new SW_RESSTR( STR_SWBG_GRAPHIC ), pLst->Count() );
2823 					nGraphicPos = nPos++;
2824 				}
2825 				if ( nSel & nsSelectionType::SEL_OLE )
2826 				{
2827 					pLst->Insert( (void*) new SW_RESSTR( STR_SWBG_OLE ), pLst->Count() );
2828 					nOlePos = nPos++;
2829 				}
2830 				const sal_uInt16 nType = rSh.GetFrmType(0,sal_True);
2831 				if ( nType & FRMTYPE_HEADER )
2832 				{
2833 					pLst->Insert( (void*) new SW_RESSTR( STR_SWBG_HEADER ), pLst->Count() );
2834 					nHeaderPos = nPos++;
2835 				}
2836 				if ( nType & FRMTYPE_FOOTER )
2837 				{
2838 					pLst->Insert( (void*) new SW_RESSTR( STR_SWBG_FOOTER ), pLst->Count() );
2839 					nFooterPos = nPos;
2840 				}
2841 			}
2842 			if ( pLst->Count() )
2843 				rSet.Put( aLst );
2844 			else
2845 				rSet.DisableItem( nWhich );
2846 			break;
2847 		}
2848 	}
2849 }
2850 
2851 
2852 void SwBaseShell::ExecuteGallery(SfxRequest &rReq)
2853 {
2854 	SwWrtShell &rSh = GetShell();
2855 	rSh.StartAction();
2856 	const SfxItemSet* pArgs = rReq.GetArgs();
2857 	sal_uInt16 nSlot = rReq.GetSlot();
2858 	switch(nSlot)
2859 	{
2860 		case SID_GALLERY_BG_BRUSH:
2861 		{
2862 			int nSel = rSh.GetSelectionType();
2863 			if ( nSel & nsSelectionType::SEL_DRW_TXT )
2864 				break;
2865 
2866 			sal_uInt8 nPos = (sal_uInt8)((SfxUInt16Item &)pArgs->Get(SID_GALLERY_BG_POS)).GetValue();
2867 			++nPos;
2868 
2869 			SvxBrushItem aBrush( (SvxBrushItem&)pArgs->Get(SID_GALLERY_BG_BRUSH));
2870 			aBrush.SetWhich( RES_BACKGROUND );
2871 			if ( nPos == nParagraphPos )
2872 				rSh.SetAttr( aBrush );
2873 			else if ( nPos == nTablePos )
2874 				rSh.SetTabBackground( aBrush );
2875 			else if ( nPos == nTableRowPos )
2876 				rSh.SetRowBackground( aBrush );
2877 			else if ( nPos == nTableCellPos )
2878 				rSh.SetBoxBackground( aBrush );
2879 			else if ( nPos == nFramePos || nPos == nGraphicPos || nPos == nOlePos )
2880 			{
2881 				SfxItemSet aCoreSet(GetPool(), RES_BACKGROUND, RES_BACKGROUND);
2882 				aCoreSet.Put( aBrush );
2883 				rSh.SetFlyFrmAttr( aCoreSet );
2884 			}
2885 			else if ( nPos == nPagePos || nPos == nHeaderPos || nPos == nFooterPos )
2886 			{
2887 				sal_uInt16 nDesc = rSh.GetCurPageDesc();
2888 				SwPageDesc aDesc( rSh.GetPageDesc( nDesc ) );
2889 				if ( nPos == nPagePos )
2890                     aDesc.GetMaster().SetFmtAttr( aBrush );
2891 				else if ( nPos == nHeaderPos )
2892 				{
2893 					SwFmtHeader aHead( aDesc.GetMaster().GetHeader() );
2894                     aHead.GetHeaderFmt()->SetFmtAttr( aBrush );
2895                     aDesc.GetMaster().SetFmtAttr( aHead );
2896 				}
2897 				else if ( nPos == nFooterPos )
2898 				{
2899 					SwFmtFooter aFoot( aDesc.GetMaster().GetFooter() );
2900                     aFoot.GetFooterFmt()->SetFmtAttr( aBrush );
2901                     aDesc.GetMaster().SetFmtAttr( aFoot );
2902 				}
2903 				rSh.ChgPageDesc( nDesc, aDesc );
2904 			}
2905 			break;
2906 		}
2907 	}
2908 	rSh.EndAction();
2909     rReq.Done();
2910 }
2911 
2912 void SwBaseShell::ExecField( SfxRequest& rReq )
2913 {
2914 	sal_uInt16 nSlot = rReq.GetSlot();
2915 	switch( nSlot )
2916 	{
2917 		case FN_CHANGE_DBFIELD:
2918 		{
2919             SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
2920             DBG_ASSERT(pFact, "SwAbstractDialogFactory fail!");
2921 
2922             VclAbstractDialog* pDlg = pFact->CreateSwChangeDBDlg(GetView(), DLG_CHANGE_DB );
2923             DBG_ASSERT(pDlg, "Dialogdiet fail!");
2924 			pDlg->Execute();
2925 			delete pDlg;
2926 		}
2927 		break;
2928 		default:
2929 			ASSERT(sal_False, falscher Dispatcher);
2930 	}
2931 }
2932 
2933