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