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 <hintids.hxx> 28 #include <tools/list.hxx> 29 #include <svx/svdview.hxx> 30 #include <svx/svdobj.hxx> 31 #include <svl/ptitem.hxx> 32 #include <editeng/sizeitem.hxx> 33 #include <sfx2/request.hxx> 34 #include <sfx2/bindings.hxx> 35 #include <fmtclds.hxx> 36 #include <frmfmt.hxx> 37 #include "cmdid.h" 38 #include "basesh.hxx" 39 #include "view.hxx" 40 #include "wrtsh.hxx" 41 #include "drawbase.hxx" 42 #include "edtwin.hxx" 43 #include "caption.hxx" 44 #include "swundo.hxx" 45 #include <SwRewriter.hxx> 46 #include "comcore.hrc" 47 48 using namespace ::com::sun::star; 49 50 extern sal_Bool bNoInterrupt; // in mainwn.cxx 51 52 #define MINMOVE ((sal_uInt16)m_pSh->GetOut()->PixelToLogic(Size(m_pSh->GetDrawView()->GetMarkHdlSizePixel()/2,0)).Width()) 53 54 55 /************************************************************************* 56 |* 57 |* Konstruktor 58 |* 59 \************************************************************************/ 60 61 62 SwDrawBase::SwDrawBase(SwWrtShell* pSwWrtShell, SwEditWin* pWindow, SwView* pSwView) : 63 m_pView(pSwView), 64 m_pSh(pSwWrtShell), 65 m_pWin(pWindow), 66 m_nSlotId(USHRT_MAX), 67 m_bCreateObj(sal_True), 68 m_bInsForm(sal_False) 69 { 70 if ( !m_pSh->HasDrawView() ) 71 m_pSh->MakeDrawView(); 72 } 73 74 /************************************************************************* 75 |* 76 |* Destruktor 77 |* 78 \************************************************************************/ 79 80 __EXPORT SwDrawBase::~SwDrawBase() 81 { 82 if (m_pView->GetWrtShellPtr()) // Im view-Dtor koennte die wrtsh bereits geloescht worden sein... 83 m_pSh->GetDrawView()->SetEditMode(sal_True); 84 } 85 86 /************************************************************************* 87 |* 88 |* MouseButtonDown-event 89 |* 90 \************************************************************************/ 91 92 93 sal_Bool SwDrawBase::MouseButtonDown(const MouseEvent& rMEvt) 94 { 95 sal_Bool bReturn = sal_False; 96 97 SdrView *pSdrView = m_pSh->GetDrawView(); 98 99 // #i33136# 100 // pSdrView->SetOrtho(rMEvt.IsShift()); 101 pSdrView->SetOrtho(doConstructOrthogonal() ? !rMEvt.IsShift() : rMEvt.IsShift()); 102 pSdrView->SetAngleSnapEnabled(rMEvt.IsShift()); 103 104 if (rMEvt.IsMod2()) 105 { 106 pSdrView->SetCreate1stPointAsCenter(sal_True); 107 pSdrView->SetResizeAtCenter(sal_True); 108 } 109 else 110 { 111 pSdrView->SetCreate1stPointAsCenter(sal_False); 112 pSdrView->SetResizeAtCenter(sal_False); 113 } 114 115 SdrViewEvent aVEvt; 116 SdrHitKind eHit = pSdrView->PickAnything(rMEvt, SDRMOUSEBUTTONDOWN, aVEvt); 117 118 // Nur neues Objekt, wenn nicht im Basismode (bzw reinem Selektionsmode) 119 if (rMEvt.IsLeft() && !m_pWin->IsDrawAction()) 120 { 121 if (IsCreateObj() && (eHit == SDRHIT_UNMARKEDOBJECT || eHit == SDRHIT_NONE || m_pSh->IsDrawCreate())) 122 { 123 bNoInterrupt = sal_True; 124 m_pWin->CaptureMouse(); 125 126 m_aStartPos = m_pWin->PixelToLogic(rMEvt.GetPosPixel()); 127 128 bReturn = m_pSh->BeginCreate( static_cast< sal_uInt16 >(m_pWin->GetSdrDrawMode()), m_aStartPos); 129 130 SetDrawPointer(); 131 132 if ( bReturn ) 133 m_pWin->SetDrawAction(sal_True); 134 } 135 else if (!pSdrView->IsAction()) 136 { 137 /********************************************************************** 138 * BEZIER-EDITOR 139 **********************************************************************/ 140 m_pWin->CaptureMouse(); 141 m_aStartPos = m_pWin->PixelToLogic(rMEvt.GetPosPixel()); 142 sal_uInt16 nEditMode = m_pWin->GetBezierMode(); 143 144 if (eHit == SDRHIT_HANDLE && aVEvt.pHdl->GetKind() == HDL_BWGT) 145 { 146 /****************************************************************** 147 * Handle draggen 148 ******************************************************************/ 149 bNoInterrupt = sal_True; 150 bReturn = pSdrView->BegDragObj(m_aStartPos, (OutputDevice*) NULL, aVEvt.pHdl); 151 m_pWin->SetDrawAction(sal_True); 152 } 153 else if (eHit == SDRHIT_MARKEDOBJECT && nEditMode == SID_BEZIER_INSERT) 154 { 155 /****************************************************************** 156 * Klebepunkt einfuegen 157 ******************************************************************/ 158 bNoInterrupt = sal_True; 159 bReturn = pSdrView->BegInsObjPoint(m_aStartPos, rMEvt.IsMod1()); 160 m_pWin->SetDrawAction(sal_True); 161 } 162 else if (eHit == SDRHIT_MARKEDOBJECT && rMEvt.IsMod1()) 163 { 164 /****************************************************************** 165 * Klebepunkt selektieren 166 ******************************************************************/ 167 if (!rMEvt.IsShift()) 168 pSdrView->UnmarkAllPoints(); 169 170 bReturn = pSdrView->BegMarkPoints(m_aStartPos); 171 m_pWin->SetDrawAction(sal_True); 172 } 173 else if (eHit == SDRHIT_MARKEDOBJECT && !rMEvt.IsShift() && !rMEvt.IsMod2()) 174 { 175 /****************************************************************** 176 * Objekt verschieben 177 ******************************************************************/ 178 return sal_False; 179 } 180 else if (eHit == SDRHIT_HANDLE) 181 { 182 /****************************************************************** 183 * Klebepunkt selektieren 184 ******************************************************************/ 185 if (pSdrView->HasMarkablePoints() && (!pSdrView->IsPointMarked(*aVEvt.pHdl) || rMEvt.IsShift())) 186 { 187 SdrHdl* pHdl = NULL; 188 189 if (!rMEvt.IsShift()) 190 { 191 pSdrView->UnmarkAllPoints(); 192 pHdl = pSdrView->PickHandle(m_aStartPos); 193 } 194 else 195 { 196 if (pSdrView->IsPointMarked(*aVEvt.pHdl)) 197 { 198 bReturn = pSdrView->UnmarkPoint(*aVEvt.pHdl); 199 pHdl = NULL; 200 } 201 else 202 { 203 pHdl = pSdrView->PickHandle(m_aStartPos); 204 } 205 } 206 207 if (pHdl) 208 { 209 bNoInterrupt = sal_True; 210 pSdrView->MarkPoint(*pHdl); 211 // bReturn = pSdrView->BegDragObj(m_aStartPos, (OutputDevice*) NULL, pHdl); 212 // m_pWin->SetDrawAction(sal_True); 213 } 214 } 215 } 216 else 217 { 218 /****************************************************************** 219 * Objekt selektieren oder draggen 220 ******************************************************************/ 221 if (m_pSh->IsObjSelectable(m_aStartPos) && eHit == SDRHIT_UNMARKEDOBJECT) 222 { 223 if (pSdrView->HasMarkablePoints()) 224 pSdrView->UnmarkAllPoints(); 225 226 bNoInterrupt = sal_False; 227 // Drag im edtwin verwenden 228 return sal_False; 229 } 230 231 bNoInterrupt = sal_True; 232 233 if (m_pSh->IsObjSelected()) 234 { 235 if (!rMEvt.IsShift()) 236 { 237 if (!pSdrView->HasMarkablePoints()) 238 { 239 //JP 10.10.2001: Bug 89619 - don't scroll the 240 // cursor into the visible area 241 sal_Bool bUnlockView = !m_pSh->IsViewLocked(); 242 m_pSh->LockView( sal_True ); //lock visible section 243 m_pSh->SelectObj(Point(LONG_MAX, LONG_MAX)); // Alles deselektieren 244 if( bUnlockView ) 245 m_pSh->LockView( sal_False ); 246 } 247 else 248 pSdrView->UnmarkAllPoints(); 249 } 250 } 251 if (!m_pSh->IsSelFrmMode()) 252 m_pSh->EnterSelFrmMode(NULL); 253 254 if( 0 != (bReturn = m_pSh->BeginMark(m_aStartPos)) ) 255 m_pWin->SetDrawAction(sal_True); 256 257 SetDrawPointer(); 258 } 259 } 260 } 261 return bReturn; 262 } 263 264 /************************************************************************* 265 |* 266 |* MouseMove-event 267 |* 268 \************************************************************************/ 269 270 271 sal_Bool SwDrawBase::MouseMove(const MouseEvent& rMEvt) 272 { 273 SdrView *pSdrView = m_pSh->GetDrawView(); 274 Point aPnt(m_pWin->PixelToLogic(rMEvt.GetPosPixel())); 275 sal_Bool bRet = sal_False; 276 277 if (IsCreateObj() && !m_pWin->IsDrawSelMode() && pSdrView->IsCreateObj()) 278 { 279 // #i33136# 280 // pSdrView->SetOrtho(rMEvt.IsShift()); 281 pSdrView->SetOrtho(doConstructOrthogonal() ? !rMEvt.IsShift() : rMEvt.IsShift()); 282 pSdrView->SetAngleSnapEnabled(rMEvt.IsShift()); 283 284 m_pSh->MoveCreate(aPnt); 285 bRet = sal_True; 286 } 287 else if (pSdrView->IsAction() || pSdrView->IsInsObjPoint() || pSdrView->IsMarkPoints()) 288 { 289 m_pSh->MoveMark(aPnt); 290 bRet = sal_True; 291 } 292 293 return (bRet); 294 } 295 296 /************************************************************************* 297 |* 298 |* MouseButtonUp-event 299 |* 300 \************************************************************************/ 301 302 303 sal_Bool SwDrawBase::MouseButtonUp(const MouseEvent& rMEvt) 304 { 305 sal_Bool bReturn = sal_False; 306 sal_Bool bCheckShell = sal_False; 307 sal_Bool bAutoCap = sal_False; 308 309 Point aPnt(m_pWin->PixelToLogic(rMEvt.GetPosPixel())); 310 311 if (IsCreateObj() && m_pSh->IsDrawCreate() && !m_pWin->IsDrawSelMode()) 312 { 313 const SdrObjKind nDrawMode = m_pWin->GetSdrDrawMode(); 314 //objects with multiple point may end at the start position 315 sal_Bool bMultiPoint = OBJ_PLIN == nDrawMode || 316 OBJ_PATHLINE == nDrawMode || 317 OBJ_FREELINE == nDrawMode; 318 if(rMEvt.IsRight() || (aPnt == m_aStartPos && !bMultiPoint)) 319 { 320 m_pSh->BreakCreate(); 321 m_pView->LeaveDrawCreate(); 322 } 323 else 324 { 325 if (OBJ_NONE == nDrawMode) 326 { 327 SwRewriter aRewriter; 328 329 aRewriter.AddRule(UNDO_ARG1, SW_RES(STR_FRAME)); 330 m_pSh->StartUndo(UNDO_INSERT, &aRewriter); 331 } 332 333 m_pSh->EndCreate(SDRCREATE_FORCEEND); 334 if (OBJ_NONE == nDrawMode) // Textrahmen eingefuegt 335 { 336 uno::Reference< frame::XDispatchRecorder > xRecorder = 337 m_pSh->GetView().GetViewFrame()->GetBindings().GetRecorder(); 338 if ( xRecorder.is() ) 339 { 340 SfxRequest aReq(m_pSh->GetView().GetViewFrame(),FN_INSERT_FRAME); 341 aReq.AppendItem(SfxUInt16Item( FN_INSERT_FRAME, 342 static_cast<sal_uInt16>(FLY_AT_PARA) )); 343 aReq.AppendItem(SfxPointItem( FN_PARAM_1, m_pSh->GetAnchorObjDiff())); 344 aReq.AppendItem(SvxSizeItem( FN_PARAM_2, m_pSh->GetObjSize())); 345 aReq.Done(); 346 } 347 bAutoCap = sal_True; 348 if(m_pWin->GetFrmColCount() > 1) 349 { 350 SfxItemSet aSet(m_pView->GetPool(),RES_COL,RES_COL); 351 SwFmtCol aCol((const SwFmtCol&)aSet.Get(RES_COL)); 352 aCol.Init(m_pWin->GetFrmColCount(), aCol.GetGutterWidth(), aCol.GetWishWidth()); 353 aSet.Put(aCol); 354 // Vorlagen-AutoUpdate 355 SwFrmFmt* pFmt = m_pSh->GetCurFrmFmt(); 356 if(pFmt && pFmt->IsAutoUpdateFmt()) 357 m_pSh->AutoUpdateFrame(pFmt, aSet); 358 else 359 m_pSh->SetFlyFrmAttr( aSet ); 360 } 361 } 362 if (m_pWin->GetSdrDrawMode() == OBJ_NONE) 363 { 364 m_pSh->EndUndo(); 365 } 366 } 367 368 bReturn = sal_True; 369 370 EnterSelectMode(rMEvt); 371 } 372 else 373 { 374 SdrView *pSdrView = m_pSh->GetDrawView(); 375 376 if (!pSdrView->HasMarkablePoints()) 377 { 378 /********************************************************************** 379 * KEIN BEZIER_EDITOR 380 **********************************************************************/ 381 if ((m_pSh->GetDrawView()->IsMarkObj() || m_pSh->GetDrawView()->IsMarkPoints()) 382 && rMEvt.IsLeft()) 383 { 384 bReturn = m_pSh->EndMark(); 385 386 m_pWin->SetDrawAction(sal_False); 387 388 if (aPnt == m_aStartPos && m_pSh->IsObjSelectable(aPnt)) 389 { 390 m_pSh->SelectObj(aPnt, ( rMEvt.IsShift() && 391 m_pSh->IsSelFrmMode()) ? SW_ADD_SELECT : 0); 392 393 if (!m_pSh->IsObjSelected()) 394 { 395 m_pView->LeaveDrawCreate(); // In Selektionsmode wechseln 396 397 m_pSh->GetView().GetViewFrame()->GetBindings().Invalidate(SID_INSERT_DRAW); 398 399 if (m_pSh->IsSelFrmMode()) 400 m_pSh->LeaveSelFrmMode(); 401 } 402 m_pView->NoRotate(); 403 404 bCheckShell = sal_True; // ggf BezierShell anwerfen 405 } 406 else if (!m_pSh->IsObjSelected() && !m_pWin->IsDrawAction()) 407 { 408 if (m_pSh->IsObjSelectable(aPnt)) 409 m_pSh->SelectObj(aPnt, ( rMEvt.IsShift() && 410 m_pSh->IsSelFrmMode() ) ? SW_ADD_SELECT : 0 ); 411 else 412 { 413 m_pView->LeaveDrawCreate(); 414 if (m_pSh->IsSelFrmMode()) 415 m_pSh->LeaveSelFrmMode(); 416 } 417 m_pView->NoRotate(); 418 419 bReturn = sal_True; 420 } 421 } 422 } 423 else 424 { 425 /********************************************************************** 426 * BEZIER_EDITOR 427 **********************************************************************/ 428 if ( pSdrView->IsAction() ) 429 { 430 if ( pSdrView->IsInsObjPoint() ) 431 bReturn = pSdrView->EndInsObjPoint(SDRCREATE_FORCEEND); 432 else if (pSdrView->IsMarkPoints() ) 433 bReturn = pSdrView->EndMarkPoints(); 434 else 435 { 436 pSdrView->EndAction(); 437 bReturn = sal_True; 438 } 439 m_pWin->SetDrawAction(sal_False); 440 441 if (aPnt == m_aStartPos) 442 { 443 if (!m_pSh->IsObjSelectable(aPnt)) 444 m_pSh->SelectObj(Point(LONG_MAX, LONG_MAX)); 445 else if (!bReturn) 446 { 447 if (!rMEvt.IsShift()) 448 pSdrView->UnmarkAllPoints(); 449 m_pSh->SelectObj(aPnt, (rMEvt.IsShift() && 450 m_pSh->IsSelFrmMode()) ? SW_ADD_SELECT :0); 451 } 452 453 if (!m_pSh->IsObjSelected()) 454 { 455 m_pView->LeaveDrawCreate(); // In Selektionsmode wechseln 456 457 m_pSh->GetView().GetViewFrame()->GetBindings().Invalidate(SID_INSERT_DRAW); 458 459 if (m_pSh->IsSelFrmMode()) 460 m_pSh->LeaveSelFrmMode(); 461 } 462 m_pView->NoRotate(); 463 464 bCheckShell = sal_True; // ggf BezierShell anwerfen 465 } 466 } 467 468 SetDrawPointer(); 469 470 if (!m_pSh->IsObjSelected() && !m_pWin->IsDrawAction()) 471 { 472 m_pView->LeaveDrawCreate(); 473 if (m_pSh->IsSelFrmMode()) 474 m_pSh->LeaveSelFrmMode(); 475 476 m_pView->NoRotate(); 477 bReturn = sal_True; 478 } 479 } 480 } 481 482 if (bCheckShell) 483 m_pView->AttrChangedNotify( m_pSh ); // ggf BezierShell anwerfen 484 485 //!!!!!!!!!! Achtung Suizid !!!!!!!!!!! Sollte alles mal erneuert werden 486 if ( bAutoCap ) 487 m_pView->AutoCaption(FRAME_CAP); //Kann derzeit nur FRAME sein, sonst auf 488 //enums umstellen 489 return (bReturn); 490 } 491 492 /************************************************************************* 493 |* 494 |* Function aktivieren 495 |* 496 \************************************************************************/ 497 498 499 void SwDrawBase::Activate(const sal_uInt16 nSlot) 500 { 501 SetSlotId(nSlot); 502 SdrView *pSdrView = m_pSh->GetDrawView(); 503 504 pSdrView->SetCurrentObj( static_cast< sal_uInt16 >(m_pWin->GetSdrDrawMode()) ); 505 pSdrView->SetEditMode(sal_False); 506 507 SetDrawPointer(); 508 m_pSh->NoEdit(); 509 } 510 511 /************************************************************************* 512 |* 513 |* Function deaktivieren 514 |* 515 \************************************************************************/ 516 517 518 void __EXPORT SwDrawBase::Deactivate() 519 { 520 SdrView *pSdrView = m_pSh->GetDrawView(); 521 pSdrView->SetOrtho(sal_False); 522 pSdrView->SetAngleSnapEnabled(sal_False); 523 524 if (m_pWin->IsDrawAction() && m_pSh->IsDrawCreate()) 525 m_pSh->BreakCreate(); 526 527 m_pWin->SetDrawAction(sal_False); 528 529 m_pWin->ReleaseMouse(); 530 bNoInterrupt = sal_False; 531 532 // if(!m_pSh->IsObjSelected()) 533 // m_pSh->Edit(); 534 535 if(m_pWin->GetApplyTemplate()) 536 m_pWin->SetApplyTemplate(SwApplyTemplate()); 537 m_pSh->GetView().GetViewFrame()->GetBindings().Invalidate(SID_INSERT_DRAW); 538 } 539 540 /************************************************************************* 541 |* 542 |* Tastaturereignisse bearbeiten 543 |* 544 |* Wird ein KeyEvent bearbeitet, so ist der Return-Wert sal_True, andernfalls 545 |* sal_False. 546 |* 547 \************************************************************************/ 548 549 550 sal_Bool SwDrawBase::KeyInput(const KeyEvent& rKEvt) 551 { 552 sal_Bool bReturn = sal_False; 553 sal_uInt16 nCode = rKEvt.GetKeyCode().GetCode(); 554 555 switch (nCode) 556 { 557 case KEY_ESCAPE: 558 { 559 if (m_pWin->IsDrawAction()) 560 { 561 BreakCreate(); 562 m_pView->LeaveDrawCreate(); 563 } 564 565 bReturn = sal_True; 566 } 567 break; 568 569 case KEY_DELETE: 570 { 571 m_pSh->DelSelectedObj(); 572 bReturn = sal_True; 573 } 574 break; 575 576 case KEY_UP: 577 case KEY_DOWN: 578 case KEY_LEFT: 579 case KEY_RIGHT: 580 { 581 SdrView *pSdrView = m_pSh->GetDrawView(); 582 583 if (!pSdrView->IsTextEdit()) 584 { 585 long nX = 0; 586 long nY = 0; 587 588 if (nCode == KEY_UP) 589 { 590 // Scroll nach oben 591 nX = 0; 592 nY =-1; 593 } 594 else if (nCode == KEY_DOWN) 595 { 596 // Scroll nach unten 597 nX = 0; 598 nY = 1; 599 } 600 else if (nCode == KEY_LEFT) 601 { 602 // Scroll nach links 603 nX =-1; 604 nY = 0; 605 } 606 else if (nCode == KEY_RIGHT) 607 { 608 // Scroll nach rechts 609 nX = 1; 610 nY = 0; 611 } 612 613 if (pSdrView->AreObjectsMarked() && rKEvt.GetKeyCode().IsMod2()) 614 { 615 // Objekte verschieben 616 nX *= 100; 617 nY *= 100; 618 pSdrView->MoveAllMarked(Size(nX, nY)); 619 } 620 621 bReturn = sal_True; 622 } 623 } 624 break; 625 } 626 627 return (bReturn); 628 } 629 630 631 /************************************************************************* 632 |* 633 |* Tastaturereignisse bearbeiten 634 |* 635 |* Wird ein KeyEvent bearbeitet, so ist der Return-Wert sal_True, andernfalls 636 |* sal_False. 637 |* 638 \************************************************************************/ 639 640 641 void SwDrawBase::BreakCreate() 642 { 643 m_pSh->BreakCreate(); 644 m_pWin->SetDrawAction(sal_False); 645 m_pWin->ReleaseMouse(); 646 647 Deactivate(); 648 // m_pView->LeaveDrawCreate(); 649 } 650 651 /************************************************************************* 652 |* 653 |* Mauspointer umschalten 654 |* 655 \************************************************************************/ 656 657 658 void SwDrawBase::SetDrawPointer() 659 { 660 SdrView *pSdrView = m_pSh->GetDrawView(); 661 Point aPnt(m_pWin->OutputToScreenPixel(m_pWin->GetPointerPosPixel())); 662 aPnt = m_pWin->PixelToLogic(m_pWin->ScreenToOutputPixel(aPnt)); 663 const Pointer aPointTyp = pSdrView->GetPreferedPointer(aPnt, m_pSh->GetOut()); 664 const Pointer aDrawPt(aPointTyp); 665 m_pWin->SetPointer(aDrawPt); 666 } 667 668 /************************************************************************* 669 |* 670 |* Ggf in Selektionsmode wechseln 671 |* 672 \************************************************************************/ 673 674 void SwDrawBase::EnterSelectMode(const MouseEvent& rMEvt) 675 { 676 m_pWin->SetDrawAction(sal_False); 677 678 if (!m_pSh->IsObjSelected() && !m_pWin->IsDrawAction()) 679 { 680 Point aPnt(m_pWin->PixelToLogic(rMEvt.GetPosPixel())); 681 682 if (m_pSh->IsObjSelectable(aPnt)) 683 { 684 m_pSh->SelectObj(aPnt); 685 if (rMEvt.GetModifier() == KEY_SHIFT || !m_pSh->IsObjSelected()) 686 { 687 m_pView->LeaveDrawCreate(); // In Selektionsmode wechseln 688 689 m_pSh->GetView().GetViewFrame()->GetBindings().Invalidate(SID_INSERT_DRAW); 690 } 691 } 692 else 693 { 694 m_pView->LeaveDrawCreate(); 695 if (m_pSh->IsSelFrmMode()) 696 m_pSh->LeaveSelFrmMode(); 697 } 698 m_pView->NoRotate(); 699 } 700 } 701 /* -----------------------------03.04.2002 10:52------------------------------ 702 703 ---------------------------------------------------------------------------*/ 704 void SwDrawBase::CreateDefaultObject() 705 { 706 Point aStartPos = GetDefaultCenterPos(); 707 Point aEndPos(aStartPos); 708 aStartPos.X() -= 8 * MM50; 709 aStartPos.Y() -= 4 * MM50; 710 aEndPos.X() += 8 * MM50; 711 aEndPos.Y() += 4 * MM50; 712 Rectangle aRect(aStartPos, aEndPos); 713 m_pSh->CreateDefaultShape( static_cast< sal_uInt16 >(m_pWin->GetSdrDrawMode()), aRect, m_nSlotId); 714 } 715 /* -----------------25.10.2002 14:14----------------- 716 * 717 * --------------------------------------------------*/ 718 Point SwDrawBase::GetDefaultCenterPos() 719 { 720 Size aDocSz(m_pSh->GetDocSize()); 721 const SwRect& rVisArea = m_pSh->VisArea(); 722 Point aStartPos = rVisArea.Center(); 723 if(rVisArea.Width() > aDocSz.Width()) 724 aStartPos.X() = aDocSz.Width() / 2 + rVisArea.Left(); 725 if(rVisArea.Height() > aDocSz.Height()) 726 aStartPos.Y() = aDocSz.Height() / 2 + rVisArea.Top(); 727 return aStartPos; 728 } 729 730 // #i33136# 731 bool SwDrawBase::doConstructOrthogonal() const 732 { 733 return false; 734 } 735 736 // eof 737