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