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