xref: /AOO41X/main/sw/source/ui/shells/basesh.cxx (revision 23d8f725f835233b771f2c90cead7f17182414a9)
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