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