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