1*5b190011SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*5b190011SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*5b190011SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*5b190011SAndrew Rist * distributed with this work for additional information 6*5b190011SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*5b190011SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*5b190011SAndrew Rist * "License"); you may not use this file except in compliance 9*5b190011SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*5b190011SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*5b190011SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*5b190011SAndrew Rist * software distributed under the License is distributed on an 15*5b190011SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*5b190011SAndrew Rist * KIND, either express or implied. See the License for the 17*5b190011SAndrew Rist * specific language governing permissions and limitations 18*5b190011SAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*5b190011SAndrew Rist *************************************************************/ 21*5b190011SAndrew Rist 22*5b190011SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_sd.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir #include "fuconrec.hxx" 28cdf0e10cSrcweir #include <svx/svdpagv.hxx> 29cdf0e10cSrcweir 30cdf0e10cSrcweir 31cdf0e10cSrcweir #include <svx/svxids.hrc> 32cdf0e10cSrcweir #include <svx/dialogs.hrc> 33cdf0e10cSrcweir #include <svx/dialmgr.hxx> 34cdf0e10cSrcweir 35cdf0e10cSrcweir #include "app.hrc" 36cdf0e10cSrcweir #include <svl/aeitem.hxx> 37cdf0e10cSrcweir #include <svx/xlnstwit.hxx> 38cdf0e10cSrcweir #include <svx/xlnedwit.hxx> 39cdf0e10cSrcweir #include <svx/xlnedit.hxx> 40cdf0e10cSrcweir #include <svx/xlnstit.hxx> 41cdf0e10cSrcweir #include <svx/xlnwtit.hxx> 42cdf0e10cSrcweir #include <sfx2/viewfrm.hxx> 43cdf0e10cSrcweir #include <svx/sdtmfitm.hxx> 44cdf0e10cSrcweir #include <svx/sxekitm.hxx> 45cdf0e10cSrcweir #include <svx/sderitm.hxx> 46cdf0e10cSrcweir #include <sfx2/dispatch.hxx> 47cdf0e10cSrcweir #include <svx/svdopath.hxx> 48cdf0e10cSrcweir #include <svx/svdocirc.hxx> 49cdf0e10cSrcweir #include <svl/intitem.hxx> 50cdf0e10cSrcweir #include <sfx2/request.hxx> 51cdf0e10cSrcweir #include <editeng/adjitem.hxx> 52cdf0e10cSrcweir #include <svx/xtable.hxx> 53cdf0e10cSrcweir 54cdf0e10cSrcweir // #88751# 55cdf0e10cSrcweir #include <svx/svdocapt.hxx> 56cdf0e10cSrcweir 57cdf0e10cSrcweir // #97016# 58cdf0e10cSrcweir #include <svx/svdomeas.hxx> 59cdf0e10cSrcweir #include "ViewShell.hxx" 60cdf0e10cSrcweir #include "ViewShellBase.hxx" 61cdf0e10cSrcweir #include "ToolBarManager.hxx" 62cdf0e10cSrcweir // #109583# 63cdf0e10cSrcweir #include <editeng/writingmodeitem.hxx> 64cdf0e10cSrcweir #include <basegfx/polygon/b2dpolygontools.hxx> 65cdf0e10cSrcweir #include <basegfx/polygon/b2dpolygon.hxx> 66cdf0e10cSrcweir 67cdf0e10cSrcweir #include "sdresid.hxx" 68cdf0e10cSrcweir #include "View.hxx" 69cdf0e10cSrcweir #include "sdpage.hxx" 70cdf0e10cSrcweir #include "Window.hxx" 71cdf0e10cSrcweir #include "stlpool.hxx" 72cdf0e10cSrcweir #include "drawdoc.hxx" 73cdf0e10cSrcweir #include "res_bmp.hrc" 74cdf0e10cSrcweir #include "glob.hrc" 75cdf0e10cSrcweir 76cdf0e10cSrcweir namespace sd { 77cdf0e10cSrcweir 78cdf0e10cSrcweir TYPEINIT1( FuConstructRectangle, FuConstruct ); 79cdf0e10cSrcweir 80cdf0e10cSrcweir /************************************************************************* 81cdf0e10cSrcweir |* 82cdf0e10cSrcweir |* Konstruktor 83cdf0e10cSrcweir |* 84cdf0e10cSrcweir \************************************************************************/ 85cdf0e10cSrcweir 86cdf0e10cSrcweir FuConstructRectangle::FuConstructRectangle ( 87cdf0e10cSrcweir ViewShell* pViewSh, 88cdf0e10cSrcweir ::sd::Window* pWin, 89cdf0e10cSrcweir ::sd::View* pView, 90cdf0e10cSrcweir SdDrawDocument* pDoc, 91cdf0e10cSrcweir SfxRequest& rReq) 92cdf0e10cSrcweir : FuConstruct(pViewSh, pWin, pView, pDoc, rReq) 93cdf0e10cSrcweir { 94cdf0e10cSrcweir } 95cdf0e10cSrcweir 96cdf0e10cSrcweir FunctionReference FuConstructRectangle::Create( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq, bool bPermanent ) 97cdf0e10cSrcweir { 98cdf0e10cSrcweir FuConstructRectangle* pFunc; 99cdf0e10cSrcweir FunctionReference xFunc( pFunc = new FuConstructRectangle( pViewSh, pWin, pView, pDoc, rReq ) ); 100cdf0e10cSrcweir xFunc->DoExecute(rReq); 101cdf0e10cSrcweir pFunc->SetPermanent(bPermanent); 102cdf0e10cSrcweir return xFunc; 103cdf0e10cSrcweir } 104cdf0e10cSrcweir 105cdf0e10cSrcweir void FuConstructRectangle::DoExecute( SfxRequest& rReq ) 106cdf0e10cSrcweir { 107cdf0e10cSrcweir FuConstruct::DoExecute( rReq ); 108cdf0e10cSrcweir 109cdf0e10cSrcweir mpViewShell->GetViewShellBase().GetToolBarManager()->SetToolBar( 110cdf0e10cSrcweir ToolBarManager::TBG_FUNCTION, 111cdf0e10cSrcweir ToolBarManager::msDrawingObjectToolBar); 112cdf0e10cSrcweir 113cdf0e10cSrcweir const SfxItemSet *pArgs = rReq.GetArgs (); 114cdf0e10cSrcweir 115cdf0e10cSrcweir if (pArgs) 116cdf0e10cSrcweir { 117cdf0e10cSrcweir switch (nSlotId) 118cdf0e10cSrcweir { 119cdf0e10cSrcweir case SID_DRAW_ELLIPSE : 120cdf0e10cSrcweir { 121cdf0e10cSrcweir SFX_REQUEST_ARG (rReq, pCenterX, SfxUInt32Item, ID_VAL_CENTER_X, sal_False); 122cdf0e10cSrcweir SFX_REQUEST_ARG (rReq, pCenterY, SfxUInt32Item, ID_VAL_CENTER_Y, sal_False); 123cdf0e10cSrcweir SFX_REQUEST_ARG (rReq, pAxisX, SfxUInt32Item, ID_VAL_AXIS_X, sal_False); 124cdf0e10cSrcweir SFX_REQUEST_ARG (rReq, pAxisY, SfxUInt32Item, ID_VAL_AXIS_Y, sal_False); 125cdf0e10cSrcweir 126cdf0e10cSrcweir Rectangle aNewRectangle (pCenterX->GetValue () - pAxisX->GetValue () / 2, 127cdf0e10cSrcweir pCenterY->GetValue () - pAxisY->GetValue () / 2, 128cdf0e10cSrcweir pCenterX->GetValue () + pAxisX->GetValue () / 2, 129cdf0e10cSrcweir pCenterY->GetValue () + pAxisY->GetValue () / 2); 130cdf0e10cSrcweir SdrCircObj *pNewCircle = new SdrCircObj (OBJ_CIRC, aNewRectangle); 131cdf0e10cSrcweir SdrPageView *pPV = mpView->GetSdrPageView(); 132cdf0e10cSrcweir 133cdf0e10cSrcweir mpView->InsertObjectAtView(pNewCircle, *pPV, SDRINSERT_SETDEFLAYER | SDRINSERT_SETDEFATTR); 134cdf0e10cSrcweir } 135cdf0e10cSrcweir break; 136cdf0e10cSrcweir 137cdf0e10cSrcweir case SID_DRAW_RECT : 138cdf0e10cSrcweir { 139cdf0e10cSrcweir SFX_REQUEST_ARG (rReq, pMouseStartX, SfxUInt32Item, ID_VAL_MOUSESTART_X, sal_False); 140cdf0e10cSrcweir SFX_REQUEST_ARG (rReq, pMouseStartY, SfxUInt32Item, ID_VAL_MOUSESTART_Y, sal_False); 141cdf0e10cSrcweir SFX_REQUEST_ARG (rReq, pMouseEndX, SfxUInt32Item, ID_VAL_MOUSEEND_X, sal_False); 142cdf0e10cSrcweir SFX_REQUEST_ARG (rReq, pMouseEndY, SfxUInt32Item, ID_VAL_MOUSEEND_Y, sal_False); 143cdf0e10cSrcweir 144cdf0e10cSrcweir Rectangle aNewRectangle (pMouseStartX->GetValue (), 145cdf0e10cSrcweir pMouseStartY->GetValue (), 146cdf0e10cSrcweir pMouseEndX->GetValue (), 147cdf0e10cSrcweir pMouseEndY->GetValue ()); 148cdf0e10cSrcweir SdrRectObj *pNewRect = new SdrRectObj (aNewRectangle); 149cdf0e10cSrcweir SdrPageView *pPV = mpView->GetSdrPageView(); 150cdf0e10cSrcweir 151cdf0e10cSrcweir mpView->InsertObjectAtView(pNewRect, *pPV, SDRINSERT_SETDEFLAYER | SDRINSERT_SETDEFATTR); 152cdf0e10cSrcweir } 153cdf0e10cSrcweir break; 154cdf0e10cSrcweir } 155cdf0e10cSrcweir } 156cdf0e10cSrcweir 157cdf0e10cSrcweir if (nSlotId == SID_TOOL_CONNECTOR || 158cdf0e10cSrcweir nSlotId == SID_CONNECTOR_ARROW_START || 159cdf0e10cSrcweir nSlotId == SID_CONNECTOR_ARROW_END || 160cdf0e10cSrcweir nSlotId == SID_CONNECTOR_ARROWS || 161cdf0e10cSrcweir nSlotId == SID_CONNECTOR_CIRCLE_START || 162cdf0e10cSrcweir nSlotId == SID_CONNECTOR_CIRCLE_END || 163cdf0e10cSrcweir nSlotId == SID_CONNECTOR_CIRCLES || 164cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINE || 165cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINE_ARROW_START || 166cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINE_ARROW_END || 167cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINE_ARROWS || 168cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINE_CIRCLE_START || 169cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINE_CIRCLE_END || 170cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINE_CIRCLES || 171cdf0e10cSrcweir nSlotId == SID_CONNECTOR_CURVE || 172cdf0e10cSrcweir nSlotId == SID_CONNECTOR_CURVE_ARROW_START || 173cdf0e10cSrcweir nSlotId == SID_CONNECTOR_CURVE_ARROW_END || 174cdf0e10cSrcweir nSlotId == SID_CONNECTOR_CURVE_ARROWS || 175cdf0e10cSrcweir nSlotId == SID_CONNECTOR_CURVE_CIRCLE_START || 176cdf0e10cSrcweir nSlotId == SID_CONNECTOR_CURVE_CIRCLE_END || 177cdf0e10cSrcweir nSlotId == SID_CONNECTOR_CURVE_CIRCLES || 178cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINES || 179cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINES_ARROW_START || 180cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINES_ARROW_END || 181cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINES_ARROWS || 182cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINES_CIRCLE_START || 183cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINES_CIRCLE_END || 184cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINES_CIRCLES || 185cdf0e10cSrcweir nSlotId == SID_LINE_ARROW_START || 186cdf0e10cSrcweir nSlotId == SID_LINE_ARROW_END || 187cdf0e10cSrcweir nSlotId == SID_LINE_ARROWS || 188cdf0e10cSrcweir nSlotId == SID_LINE_ARROW_CIRCLE || 189cdf0e10cSrcweir nSlotId == SID_LINE_CIRCLE_ARROW || 190cdf0e10cSrcweir nSlotId == SID_LINE_ARROW_SQUARE || 191cdf0e10cSrcweir nSlotId == SID_LINE_SQUARE_ARROW ) 192cdf0e10cSrcweir { 193cdf0e10cSrcweir mpView->UnmarkAll(); 194cdf0e10cSrcweir } 195cdf0e10cSrcweir } 196cdf0e10cSrcweir 197cdf0e10cSrcweir /************************************************************************* 198cdf0e10cSrcweir |* 199cdf0e10cSrcweir |* MouseButtonDown-event 200cdf0e10cSrcweir |* 201cdf0e10cSrcweir \************************************************************************/ 202cdf0e10cSrcweir 203cdf0e10cSrcweir sal_Bool FuConstructRectangle::MouseButtonDown(const MouseEvent& rMEvt) 204cdf0e10cSrcweir { 205cdf0e10cSrcweir sal_Bool bReturn = FuConstruct::MouseButtonDown(rMEvt); 206cdf0e10cSrcweir 207cdf0e10cSrcweir if ( rMEvt.IsLeft() && !mpView->IsAction() ) 208cdf0e10cSrcweir { 209cdf0e10cSrcweir Point aPnt( mpWindow->PixelToLogic( rMEvt.GetPosPixel() ) ); 210cdf0e10cSrcweir 211cdf0e10cSrcweir mpWindow->CaptureMouse(); 212cdf0e10cSrcweir sal_uInt16 nDrgLog = sal_uInt16 ( mpWindow->PixelToLogic(Size(DRGPIX,0)).Width() ); 213cdf0e10cSrcweir 214cdf0e10cSrcweir if (mpView->GetCurrentObjIdentifier() == OBJ_CAPTION) 215cdf0e10cSrcweir { 216cdf0e10cSrcweir Size aCaptionSize(846, 846); // (4x2)cm 217cdf0e10cSrcweir bReturn = mpView->BegCreateCaptionObj(aPnt, aCaptionSize, 218cdf0e10cSrcweir (OutputDevice*) NULL, nDrgLog); 219cdf0e10cSrcweir } 220cdf0e10cSrcweir else 221cdf0e10cSrcweir { 222cdf0e10cSrcweir mpView->BegCreateObj(aPnt, (OutputDevice*) NULL, nDrgLog); 223cdf0e10cSrcweir } 224cdf0e10cSrcweir 225cdf0e10cSrcweir SdrObject* pObj = mpView->GetCreateObj(); 226cdf0e10cSrcweir 227cdf0e10cSrcweir if (pObj) 228cdf0e10cSrcweir { 229cdf0e10cSrcweir SfxItemSet aAttr(mpDoc->GetPool()); 230cdf0e10cSrcweir SetStyleSheet(aAttr, pObj); 231cdf0e10cSrcweir SetAttributes(aAttr, pObj); 232cdf0e10cSrcweir SetLineEnds(aAttr, pObj); 233cdf0e10cSrcweir pObj->SetMergedItemSet(aAttr); 234cdf0e10cSrcweir 235cdf0e10cSrcweir if( nSlotId == SID_DRAW_CAPTION_VERTICAL ) 236cdf0e10cSrcweir ( (SdrTextObj*) pObj)->SetVerticalWriting( sal_True ); 237cdf0e10cSrcweir } 238cdf0e10cSrcweir } 239cdf0e10cSrcweir return bReturn; 240cdf0e10cSrcweir } 241cdf0e10cSrcweir 242cdf0e10cSrcweir /************************************************************************* 243cdf0e10cSrcweir |* 244cdf0e10cSrcweir |* MouseMove-event 245cdf0e10cSrcweir |* 246cdf0e10cSrcweir \************************************************************************/ 247cdf0e10cSrcweir 248cdf0e10cSrcweir sal_Bool FuConstructRectangle::MouseMove(const MouseEvent& rMEvt) 249cdf0e10cSrcweir { 250cdf0e10cSrcweir return FuConstruct::MouseMove(rMEvt); 251cdf0e10cSrcweir } 252cdf0e10cSrcweir 253cdf0e10cSrcweir /************************************************************************* 254cdf0e10cSrcweir |* 255cdf0e10cSrcweir |* MouseButtonUp-event 256cdf0e10cSrcweir |* 257cdf0e10cSrcweir \************************************************************************/ 258cdf0e10cSrcweir 259cdf0e10cSrcweir sal_Bool FuConstructRectangle::MouseButtonUp(const MouseEvent& rMEvt) 260cdf0e10cSrcweir { 261cdf0e10cSrcweir sal_Bool bReturn(sal_False); 262cdf0e10cSrcweir 263cdf0e10cSrcweir if(mpView->IsCreateObj() && rMEvt.IsLeft()) 264cdf0e10cSrcweir { 265cdf0e10cSrcweir SdrObject* pObj = mpView->GetCreateObj(); 266cdf0e10cSrcweir 267cdf0e10cSrcweir if(pObj && mpView->EndCreateObj(SDRCREATE_FORCEEND)) 268cdf0e10cSrcweir { 269cdf0e10cSrcweir if(SID_DRAW_MEASURELINE == nSlotId) 270cdf0e10cSrcweir { 271cdf0e10cSrcweir SdrLayerAdmin& rAdmin = mpDoc->GetLayerAdmin(); 272cdf0e10cSrcweir String aStr(SdResId(STR_LAYER_MEASURELINES)); 273cdf0e10cSrcweir pObj->SetLayer(rAdmin.GetLayerID(aStr, sal_False)); 274cdf0e10cSrcweir } 275cdf0e10cSrcweir 276cdf0e10cSrcweir // #88751# init text position when vertica caption object is created 277cdf0e10cSrcweir if(pObj->ISA(SdrCaptionObj) && SID_DRAW_CAPTION_VERTICAL == nSlotId) 278cdf0e10cSrcweir { 279cdf0e10cSrcweir // draw text object, needs to be initialized when vertical text is used 280cdf0e10cSrcweir SfxItemSet aSet(pObj->GetMergedItemSet()); 281cdf0e10cSrcweir 282cdf0e10cSrcweir aSet.Put(SdrTextVertAdjustItem(SDRTEXTVERTADJUST_CENTER)); 283cdf0e10cSrcweir aSet.Put(SdrTextHorzAdjustItem(SDRTEXTHORZADJUST_RIGHT)); 284cdf0e10cSrcweir 285cdf0e10cSrcweir // #109583# 286cdf0e10cSrcweir // Correct the value of SDRATTR_TEXTDIRECTION to avoid SetItemSet 287cdf0e10cSrcweir // calling SetVerticalWriting() again since this item may not yet 288cdf0e10cSrcweir // be set at the object and thus may differ from verical state of 289cdf0e10cSrcweir // the object. 290cdf0e10cSrcweir aSet.Put(SvxWritingModeItem(com::sun::star::text::WritingMode_TB_RL, SDRATTR_TEXTDIRECTION)); 291cdf0e10cSrcweir pObj->SetMergedItemSet(aSet); 292cdf0e10cSrcweir } 293cdf0e10cSrcweir 294cdf0e10cSrcweir bReturn = sal_True; 295cdf0e10cSrcweir } 296cdf0e10cSrcweir } 297cdf0e10cSrcweir 298cdf0e10cSrcweir bReturn = FuConstruct::MouseButtonUp (rMEvt) || bReturn; 299cdf0e10cSrcweir 300cdf0e10cSrcweir if (!bPermanent) 301cdf0e10cSrcweir mpViewShell->GetViewFrame()->GetDispatcher()->Execute(SID_OBJECT_SELECT, SFX_CALLMODE_ASYNCHRON); 302cdf0e10cSrcweir 303cdf0e10cSrcweir return bReturn; 304cdf0e10cSrcweir } 305cdf0e10cSrcweir 306cdf0e10cSrcweir /************************************************************************* 307cdf0e10cSrcweir |* 308cdf0e10cSrcweir |* Tastaturereignisse bearbeiten 309cdf0e10cSrcweir |* 310cdf0e10cSrcweir |* Wird ein KeyEvent bearbeitet, so ist der Return-Wert sal_True, andernfalls 311cdf0e10cSrcweir |* sal_False. 312cdf0e10cSrcweir |* 313cdf0e10cSrcweir \************************************************************************/ 314cdf0e10cSrcweir 315cdf0e10cSrcweir sal_Bool FuConstructRectangle::KeyInput(const KeyEvent& rKEvt) 316cdf0e10cSrcweir { 317cdf0e10cSrcweir sal_Bool bReturn = FuConstruct::KeyInput(rKEvt); 318cdf0e10cSrcweir return(bReturn); 319cdf0e10cSrcweir } 320cdf0e10cSrcweir 321cdf0e10cSrcweir /************************************************************************* 322cdf0e10cSrcweir |* 323cdf0e10cSrcweir |* Function aktivieren 324cdf0e10cSrcweir |* 325cdf0e10cSrcweir \************************************************************************/ 326cdf0e10cSrcweir 327cdf0e10cSrcweir void FuConstructRectangle::Activate() 328cdf0e10cSrcweir { 329cdf0e10cSrcweir SdrObjKind aObjKind; 330cdf0e10cSrcweir 331cdf0e10cSrcweir switch (nSlotId) 332cdf0e10cSrcweir { 333cdf0e10cSrcweir case SID_LINE_ARROW_START: 334cdf0e10cSrcweir case SID_LINE_ARROW_END: 335cdf0e10cSrcweir case SID_LINE_ARROWS: 336cdf0e10cSrcweir case SID_LINE_ARROW_CIRCLE: 337cdf0e10cSrcweir case SID_LINE_CIRCLE_ARROW: 338cdf0e10cSrcweir case SID_LINE_ARROW_SQUARE: 339cdf0e10cSrcweir case SID_LINE_SQUARE_ARROW: 340cdf0e10cSrcweir mpView->SetGlueVisible(); 341cdf0e10cSrcweir // keine break ! 342cdf0e10cSrcweir case SID_DRAW_LINE : 343cdf0e10cSrcweir case SID_DRAW_XLINE: 344cdf0e10cSrcweir aObjKind = OBJ_LINE; 345cdf0e10cSrcweir break; 346cdf0e10cSrcweir 347cdf0e10cSrcweir case SID_DRAW_MEASURELINE: 348cdf0e10cSrcweir { 349cdf0e10cSrcweir aObjKind = OBJ_MEASURE; 350cdf0e10cSrcweir } 351cdf0e10cSrcweir break; 352cdf0e10cSrcweir 353cdf0e10cSrcweir case SID_DRAW_RECT : 354cdf0e10cSrcweir case SID_DRAW_RECT_NOFILL : 355cdf0e10cSrcweir case SID_DRAW_RECT_ROUND : 356cdf0e10cSrcweir case SID_DRAW_RECT_ROUND_NOFILL: 357cdf0e10cSrcweir case SID_DRAW_SQUARE : 358cdf0e10cSrcweir case SID_DRAW_SQUARE_NOFILL : 359cdf0e10cSrcweir case SID_DRAW_SQUARE_ROUND : 360cdf0e10cSrcweir case SID_DRAW_SQUARE_ROUND_NOFILL: 361cdf0e10cSrcweir { 362cdf0e10cSrcweir aObjKind = OBJ_RECT; 363cdf0e10cSrcweir } 364cdf0e10cSrcweir break; 365cdf0e10cSrcweir 366cdf0e10cSrcweir case SID_DRAW_ELLIPSE : 367cdf0e10cSrcweir case SID_DRAW_ELLIPSE_NOFILL: 368cdf0e10cSrcweir case SID_DRAW_CIRCLE : 369cdf0e10cSrcweir case SID_DRAW_CIRCLE_NOFILL : 370cdf0e10cSrcweir { 371cdf0e10cSrcweir aObjKind = OBJ_CIRC; 372cdf0e10cSrcweir } 373cdf0e10cSrcweir break; 374cdf0e10cSrcweir 375cdf0e10cSrcweir case SID_DRAW_CAPTION: 376cdf0e10cSrcweir case SID_DRAW_CAPTION_VERTICAL: 377cdf0e10cSrcweir { 378cdf0e10cSrcweir aObjKind = OBJ_CAPTION; 379cdf0e10cSrcweir } 380cdf0e10cSrcweir break; 381cdf0e10cSrcweir 382cdf0e10cSrcweir case SID_TOOL_CONNECTOR: 383cdf0e10cSrcweir case SID_CONNECTOR_ARROW_START: 384cdf0e10cSrcweir case SID_CONNECTOR_ARROW_END: 385cdf0e10cSrcweir case SID_CONNECTOR_ARROWS: 386cdf0e10cSrcweir case SID_CONNECTOR_CIRCLE_START: 387cdf0e10cSrcweir case SID_CONNECTOR_CIRCLE_END: 388cdf0e10cSrcweir case SID_CONNECTOR_CIRCLES: 389cdf0e10cSrcweir case SID_CONNECTOR_LINE: 390cdf0e10cSrcweir case SID_CONNECTOR_LINE_ARROW_START: 391cdf0e10cSrcweir case SID_CONNECTOR_LINE_ARROW_END: 392cdf0e10cSrcweir case SID_CONNECTOR_LINE_ARROWS: 393cdf0e10cSrcweir case SID_CONNECTOR_LINE_CIRCLE_START: 394cdf0e10cSrcweir case SID_CONNECTOR_LINE_CIRCLE_END: 395cdf0e10cSrcweir case SID_CONNECTOR_LINE_CIRCLES: 396cdf0e10cSrcweir case SID_CONNECTOR_CURVE: 397cdf0e10cSrcweir case SID_CONNECTOR_CURVE_ARROW_START: 398cdf0e10cSrcweir case SID_CONNECTOR_CURVE_ARROW_END: 399cdf0e10cSrcweir case SID_CONNECTOR_CURVE_ARROWS: 400cdf0e10cSrcweir case SID_CONNECTOR_CURVE_CIRCLE_START: 401cdf0e10cSrcweir case SID_CONNECTOR_CURVE_CIRCLE_END: 402cdf0e10cSrcweir case SID_CONNECTOR_CURVE_CIRCLES: 403cdf0e10cSrcweir case SID_CONNECTOR_LINES: 404cdf0e10cSrcweir case SID_CONNECTOR_LINES_ARROW_START: 405cdf0e10cSrcweir case SID_CONNECTOR_LINES_ARROW_END: 406cdf0e10cSrcweir case SID_CONNECTOR_LINES_ARROWS: 407cdf0e10cSrcweir case SID_CONNECTOR_LINES_CIRCLE_START: 408cdf0e10cSrcweir case SID_CONNECTOR_LINES_CIRCLE_END: 409cdf0e10cSrcweir case SID_CONNECTOR_LINES_CIRCLES: 410cdf0e10cSrcweir { 411cdf0e10cSrcweir aObjKind = OBJ_EDGE; 412cdf0e10cSrcweir mpView->SetGlueVisible(); 413cdf0e10cSrcweir } 414cdf0e10cSrcweir break; 415cdf0e10cSrcweir 416cdf0e10cSrcweir default: 417cdf0e10cSrcweir { 418cdf0e10cSrcweir aObjKind = OBJ_RECT; 419cdf0e10cSrcweir } 420cdf0e10cSrcweir break; 421cdf0e10cSrcweir } 422cdf0e10cSrcweir 423cdf0e10cSrcweir mpView->SetCurrentObj((sal_uInt16)aObjKind); 424cdf0e10cSrcweir 425cdf0e10cSrcweir FuConstruct::Activate(); 426cdf0e10cSrcweir } 427cdf0e10cSrcweir 428cdf0e10cSrcweir /************************************************************************* 429cdf0e10cSrcweir |* 430cdf0e10cSrcweir |* Function deaktivieren 431cdf0e10cSrcweir |* 432cdf0e10cSrcweir \************************************************************************/ 433cdf0e10cSrcweir 434cdf0e10cSrcweir void FuConstructRectangle::Deactivate() 435cdf0e10cSrcweir { 436cdf0e10cSrcweir if( nSlotId == SID_TOOL_CONNECTOR || 437cdf0e10cSrcweir nSlotId == SID_CONNECTOR_ARROW_START || 438cdf0e10cSrcweir nSlotId == SID_CONNECTOR_ARROW_END || 439cdf0e10cSrcweir nSlotId == SID_CONNECTOR_ARROWS || 440cdf0e10cSrcweir nSlotId == SID_CONNECTOR_CIRCLE_START || 441cdf0e10cSrcweir nSlotId == SID_CONNECTOR_CIRCLE_END || 442cdf0e10cSrcweir nSlotId == SID_CONNECTOR_CIRCLES || 443cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINE || 444cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINE_ARROW_START || 445cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINE_ARROW_END || 446cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINE_ARROWS || 447cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINE_CIRCLE_START || 448cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINE_CIRCLE_END || 449cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINE_CIRCLES || 450cdf0e10cSrcweir nSlotId == SID_CONNECTOR_CURVE || 451cdf0e10cSrcweir nSlotId == SID_CONNECTOR_CURVE_ARROW_START || 452cdf0e10cSrcweir nSlotId == SID_CONNECTOR_CURVE_ARROW_END || 453cdf0e10cSrcweir nSlotId == SID_CONNECTOR_CURVE_ARROWS || 454cdf0e10cSrcweir nSlotId == SID_CONNECTOR_CURVE_CIRCLE_START || 455cdf0e10cSrcweir nSlotId == SID_CONNECTOR_CURVE_CIRCLE_END || 456cdf0e10cSrcweir nSlotId == SID_CONNECTOR_CURVE_CIRCLES || 457cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINES || 458cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINES_ARROW_START || 459cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINES_ARROW_END || 460cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINES_ARROWS || 461cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINES_CIRCLE_START || 462cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINES_CIRCLE_END || 463cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINES_CIRCLES || 464cdf0e10cSrcweir nSlotId == SID_LINE_ARROW_START || 465cdf0e10cSrcweir nSlotId == SID_LINE_ARROW_END || 466cdf0e10cSrcweir nSlotId == SID_LINE_ARROWS || 467cdf0e10cSrcweir nSlotId == SID_LINE_ARROW_CIRCLE || 468cdf0e10cSrcweir nSlotId == SID_LINE_CIRCLE_ARROW || 469cdf0e10cSrcweir nSlotId == SID_LINE_ARROW_SQUARE || 470cdf0e10cSrcweir nSlotId == SID_LINE_SQUARE_ARROW ) 471cdf0e10cSrcweir { 472cdf0e10cSrcweir mpView->SetGlueVisible( sal_False ); 473cdf0e10cSrcweir } 474cdf0e10cSrcweir FuConstruct::Deactivate(); 475cdf0e10cSrcweir } 476cdf0e10cSrcweir 477cdf0e10cSrcweir 478cdf0e10cSrcweir /************************************************************************* 479cdf0e10cSrcweir |* 480cdf0e10cSrcweir |* Attribute fuer das zu erzeugende Objekt setzen 481cdf0e10cSrcweir |* 482cdf0e10cSrcweir \************************************************************************/ 483cdf0e10cSrcweir 484cdf0e10cSrcweir void FuConstructRectangle::SetAttributes(SfxItemSet& rAttr, SdrObject* pObj) 485cdf0e10cSrcweir { 486cdf0e10cSrcweir if (nSlotId == SID_DRAW_RECT_ROUND || 487cdf0e10cSrcweir nSlotId == SID_DRAW_RECT_ROUND_NOFILL || 488cdf0e10cSrcweir nSlotId == SID_DRAW_SQUARE_ROUND || 489cdf0e10cSrcweir nSlotId == SID_DRAW_SQUARE_ROUND_NOFILL) 490cdf0e10cSrcweir { 491cdf0e10cSrcweir /********************************************************************** 492cdf0e10cSrcweir * Abgerundete Ecken 493cdf0e10cSrcweir **********************************************************************/ 494cdf0e10cSrcweir rAttr.Put(SdrEckenradiusItem(500)); 495cdf0e10cSrcweir } 496cdf0e10cSrcweir else if (nSlotId == SID_CONNECTOR_LINE || 497cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINE_ARROW_START || 498cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINE_ARROW_END || 499cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINE_ARROWS || 500cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINE_CIRCLE_START || 501cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINE_CIRCLE_END || 502cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINE_CIRCLES) 503cdf0e10cSrcweir { 504cdf0e10cSrcweir /********************************************************************** 505cdf0e10cSrcweir * Direkt-Verbinder 506cdf0e10cSrcweir **********************************************************************/ 507cdf0e10cSrcweir rAttr.Put(SdrEdgeKindItem(SDREDGE_ONELINE)); 508cdf0e10cSrcweir } 509cdf0e10cSrcweir else if (nSlotId == SID_CONNECTOR_LINES || 510cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINES_ARROW_START || 511cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINES_ARROW_END || 512cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINES_ARROWS || 513cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINES_CIRCLE_START || 514cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINES_CIRCLE_END || 515cdf0e10cSrcweir nSlotId == SID_CONNECTOR_LINES_CIRCLES) 516cdf0e10cSrcweir { 517cdf0e10cSrcweir /********************************************************************** 518cdf0e10cSrcweir * Linien-Verbinder 519cdf0e10cSrcweir **********************************************************************/ 520cdf0e10cSrcweir rAttr.Put(SdrEdgeKindItem(SDREDGE_THREELINES)); 521cdf0e10cSrcweir } 522cdf0e10cSrcweir else if (nSlotId == SID_CONNECTOR_CURVE || 523cdf0e10cSrcweir nSlotId == SID_CONNECTOR_CURVE_ARROW_START || 524cdf0e10cSrcweir nSlotId == SID_CONNECTOR_CURVE_ARROW_END || 525cdf0e10cSrcweir nSlotId == SID_CONNECTOR_CURVE_ARROWS || 526cdf0e10cSrcweir nSlotId == SID_CONNECTOR_CURVE_CIRCLE_START || 527cdf0e10cSrcweir nSlotId == SID_CONNECTOR_CURVE_CIRCLE_END || 528cdf0e10cSrcweir nSlotId == SID_CONNECTOR_CURVE_CIRCLES) 529cdf0e10cSrcweir { 530cdf0e10cSrcweir /********************************************************************** 531cdf0e10cSrcweir * Kurven-Verbinder 532cdf0e10cSrcweir **********************************************************************/ 533cdf0e10cSrcweir rAttr.Put(SdrEdgeKindItem(SDREDGE_BEZIER)); 534cdf0e10cSrcweir } 535cdf0e10cSrcweir else if ( nSlotId == SID_DRAW_CAPTION || nSlotId == SID_DRAW_CAPTION_VERTICAL ) 536cdf0e10cSrcweir { 537cdf0e10cSrcweir /********************************************************************** 538cdf0e10cSrcweir * Legendenobjekt 539cdf0e10cSrcweir **********************************************************************/ 540cdf0e10cSrcweir Size aSize(pObj->GetLogicRect().GetSize()); 541cdf0e10cSrcweir rAttr.Put( SdrTextMinFrameHeightItem( aSize.Height() ) ); 542cdf0e10cSrcweir rAttr.Put( SdrTextMinFrameWidthItem( aSize.Width() ) ); 543cdf0e10cSrcweir rAttr.Put( SdrTextAutoGrowHeightItem( sal_True ) ); 544cdf0e10cSrcweir rAttr.Put( SdrTextAutoGrowWidthItem( sal_True ) ); 545cdf0e10cSrcweir 546cdf0e10cSrcweir // #103516# Support full with for vertical caption objects, too 547cdf0e10cSrcweir if(SID_DRAW_CAPTION == nSlotId) 548cdf0e10cSrcweir rAttr.Put( SdrTextHorzAdjustItem( SDRTEXTHORZADJUST_BLOCK ) ); 549cdf0e10cSrcweir else 550cdf0e10cSrcweir rAttr.Put( SdrTextVertAdjustItem( SDRTEXTVERTADJUST_BLOCK ) ); 551cdf0e10cSrcweir 552cdf0e10cSrcweir rAttr.Put( SvxAdjustItem( SVX_ADJUST_CENTER, EE_PARA_JUST ) ); 553cdf0e10cSrcweir rAttr.Put( SdrTextLeftDistItem( 100 ) ); 554cdf0e10cSrcweir rAttr.Put( SdrTextRightDistItem( 100 ) ); 555cdf0e10cSrcweir rAttr.Put( SdrTextUpperDistItem( 100 ) ); 556cdf0e10cSrcweir rAttr.Put( SdrTextLowerDistItem( 100 ) ); 557cdf0e10cSrcweir } 558cdf0e10cSrcweir else if (nSlotId == SID_DRAW_MEASURELINE) 559cdf0e10cSrcweir { 560cdf0e10cSrcweir /********************************************************************** 561cdf0e10cSrcweir * Masslinie 562cdf0e10cSrcweir **********************************************************************/ 563cdf0e10cSrcweir SdPage* pPage = (SdPage*) mpView->GetSdrPageView()->GetPage(); 564cdf0e10cSrcweir String aName(SdResId(STR_POOLSHEET_MEASURE)); 565cdf0e10cSrcweir SfxStyleSheet* pSheet = (SfxStyleSheet*) pPage->GetModel()-> 566cdf0e10cSrcweir GetStyleSheetPool()-> 567cdf0e10cSrcweir Find(aName, SD_STYLE_FAMILY_GRAPHICS); 568cdf0e10cSrcweir DBG_ASSERT(pSheet, "Objektvorlage nicht gefunden"); 569cdf0e10cSrcweir 570cdf0e10cSrcweir if (pSheet) 571cdf0e10cSrcweir { 572cdf0e10cSrcweir pObj->SetStyleSheet(pSheet, sal_False); 573cdf0e10cSrcweir } 574cdf0e10cSrcweir 575cdf0e10cSrcweir SdrLayerAdmin& rAdmin = mpDoc->GetLayerAdmin(); 576cdf0e10cSrcweir String aStr(SdResId(STR_LAYER_MEASURELINES)); 577cdf0e10cSrcweir pObj->SetLayer(rAdmin.GetLayerID(aStr, sal_False)); 578cdf0e10cSrcweir } 579cdf0e10cSrcweir else if (nSlotId == OBJ_CUSTOMSHAPE ) 580cdf0e10cSrcweir { 581cdf0e10cSrcweir } 582cdf0e10cSrcweir } 583cdf0e10cSrcweir 584cdf0e10cSrcweir 585cdf0e10cSrcweir /************************************************************************* 586cdf0e10cSrcweir |* 587cdf0e10cSrcweir |* Linienanfaenge und -enden fuer das zu erzeugende Objekt setzen 588cdf0e10cSrcweir |* 589cdf0e10cSrcweir \************************************************************************/ 590cdf0e10cSrcweir 591cdf0e10cSrcweir ::basegfx::B2DPolyPolygon getPolygon( sal_uInt16 nResId, SdrModel* pDoc ) 592cdf0e10cSrcweir { 593cdf0e10cSrcweir ::basegfx::B2DPolyPolygon aRetval; 594cdf0e10cSrcweir XLineEndList* pLineEndList = pDoc->GetLineEndList(); 595cdf0e10cSrcweir 596cdf0e10cSrcweir if( pLineEndList ) 597cdf0e10cSrcweir { 598cdf0e10cSrcweir String aArrowName( SVX_RES(nResId) ); 599cdf0e10cSrcweir long nCount = pLineEndList->Count(); 600cdf0e10cSrcweir long nIndex; 601cdf0e10cSrcweir for( nIndex = 0L; nIndex < nCount; nIndex++ ) 602cdf0e10cSrcweir { 603cdf0e10cSrcweir XLineEndEntry* pEntry = pLineEndList->GetLineEnd(nIndex); 604cdf0e10cSrcweir if( pEntry->GetName() == aArrowName ) 605cdf0e10cSrcweir { 606cdf0e10cSrcweir aRetval = pEntry->GetLineEnd(); 607cdf0e10cSrcweir break; 608cdf0e10cSrcweir } 609cdf0e10cSrcweir } 610cdf0e10cSrcweir } 611cdf0e10cSrcweir 612cdf0e10cSrcweir return aRetval; 613cdf0e10cSrcweir } 614cdf0e10cSrcweir 615cdf0e10cSrcweir void FuConstructRectangle::SetLineEnds(SfxItemSet& rAttr, SdrObject* pObj) 616cdf0e10cSrcweir { 617cdf0e10cSrcweir if ( (pObj->GetObjIdentifier() == OBJ_EDGE && 618cdf0e10cSrcweir nSlotId != SID_TOOL_CONNECTOR && 619cdf0e10cSrcweir nSlotId != SID_CONNECTOR_LINE && 620cdf0e10cSrcweir nSlotId != SID_CONNECTOR_LINES && 621cdf0e10cSrcweir nSlotId != SID_CONNECTOR_CURVE) || 622cdf0e10cSrcweir nSlotId == SID_LINE_ARROW_START || 623cdf0e10cSrcweir nSlotId == SID_LINE_ARROW_END || 624cdf0e10cSrcweir nSlotId == SID_LINE_ARROWS || 625cdf0e10cSrcweir nSlotId == SID_LINE_ARROW_CIRCLE || 626cdf0e10cSrcweir nSlotId == SID_LINE_CIRCLE_ARROW || 627cdf0e10cSrcweir nSlotId == SID_LINE_ARROW_SQUARE || 628cdf0e10cSrcweir nSlotId == SID_LINE_SQUARE_ARROW ) 629cdf0e10cSrcweir { 630cdf0e10cSrcweir /************************************************************** 631cdf0e10cSrcweir * Linienanfaenge und -enden attributieren 632cdf0e10cSrcweir **************************************************************/ 633cdf0e10cSrcweir 634cdf0e10cSrcweir // Pfeilspitze 635cdf0e10cSrcweir ::basegfx::B2DPolyPolygon aArrow( getPolygon( RID_SVXSTR_ARROW, mpDoc ) ); 636cdf0e10cSrcweir if( !aArrow.count() ) 637cdf0e10cSrcweir { 638cdf0e10cSrcweir ::basegfx::B2DPolygon aNewArrow; 639cdf0e10cSrcweir aNewArrow.append(::basegfx::B2DPoint(10.0, 0.0)); 640cdf0e10cSrcweir aNewArrow.append(::basegfx::B2DPoint(0.0, 30.0)); 641cdf0e10cSrcweir aNewArrow.append(::basegfx::B2DPoint(20.0, 30.0)); 642cdf0e10cSrcweir aNewArrow.setClosed(true); 643cdf0e10cSrcweir aArrow.append(aNewArrow); 644cdf0e10cSrcweir } 645cdf0e10cSrcweir 646cdf0e10cSrcweir // Kreis 647cdf0e10cSrcweir ::basegfx::B2DPolyPolygon aCircle( getPolygon( RID_SVXSTR_CIRCLE, mpDoc ) ); 648cdf0e10cSrcweir if( !aCircle.count() ) 649cdf0e10cSrcweir { 650cdf0e10cSrcweir ::basegfx::B2DPolygon aNewCircle; 651cdf0e10cSrcweir aNewCircle = ::basegfx::tools::createPolygonFromEllipse(::basegfx::B2DPoint(0.0, 0.0), 250.0, 250.0); 652cdf0e10cSrcweir aNewCircle.setClosed(true); 653cdf0e10cSrcweir aCircle.append(aNewCircle); 654cdf0e10cSrcweir } 655cdf0e10cSrcweir 656cdf0e10cSrcweir // Quadrat 657cdf0e10cSrcweir ::basegfx::B2DPolyPolygon aSquare( getPolygon( RID_SVXSTR_SQUARE, mpDoc ) ); 658cdf0e10cSrcweir if( !aSquare.count() ) 659cdf0e10cSrcweir { 660cdf0e10cSrcweir ::basegfx::B2DPolygon aNewSquare; 661cdf0e10cSrcweir aNewSquare.append(::basegfx::B2DPoint(0.0, 0.0)); 662cdf0e10cSrcweir aNewSquare.append(::basegfx::B2DPoint(10.0, 0.0)); 663cdf0e10cSrcweir aNewSquare.append(::basegfx::B2DPoint(10.0, 10.0)); 664cdf0e10cSrcweir aNewSquare.append(::basegfx::B2DPoint(0.0, 10.0)); 665cdf0e10cSrcweir aNewSquare.setClosed(true); 666cdf0e10cSrcweir aSquare.append(aNewSquare); 667cdf0e10cSrcweir } 668cdf0e10cSrcweir 669cdf0e10cSrcweir SfxItemSet aSet( mpDoc->GetPool() ); 670cdf0e10cSrcweir mpView->GetAttributes( aSet ); 671cdf0e10cSrcweir 672cdf0e10cSrcweir // #i3908# Here, the default Line Start/End width for arrow construction is 673cdf0e10cSrcweir // set. To have the same value in all situations (construction) in i3908 674cdf0e10cSrcweir // it was decided to change the default to 0.03 cm for all situations. 675cdf0e10cSrcweir long nWidth = 300; // (1/100th mm) 676cdf0e10cSrcweir 677cdf0e10cSrcweir // Linienstaerke ermitteln und daraus die Linienendenstaerke berechnen 678cdf0e10cSrcweir if( aSet.GetItemState( XATTR_LINEWIDTH ) != SFX_ITEM_DONTCARE ) 679cdf0e10cSrcweir { 680cdf0e10cSrcweir long nValue = ( ( const XLineWidthItem& ) aSet.Get( XATTR_LINEWIDTH ) ).GetValue(); 681cdf0e10cSrcweir if( nValue > 0 ) 682cdf0e10cSrcweir nWidth = nValue * 3; 683cdf0e10cSrcweir } 684cdf0e10cSrcweir 685cdf0e10cSrcweir switch (nSlotId) 686cdf0e10cSrcweir { 687cdf0e10cSrcweir case SID_CONNECTOR_ARROWS: 688cdf0e10cSrcweir case SID_CONNECTOR_LINE_ARROWS: 689cdf0e10cSrcweir case SID_CONNECTOR_LINES_ARROWS: 690cdf0e10cSrcweir case SID_CONNECTOR_CURVE_ARROWS: 691cdf0e10cSrcweir case SID_LINE_ARROWS: 692cdf0e10cSrcweir { 693cdf0e10cSrcweir // Verbinder mit Pfeil-Enden 694cdf0e10cSrcweir rAttr.Put(XLineStartItem(SVX_RESSTR(RID_SVXSTR_ARROW), aArrow)); 695cdf0e10cSrcweir rAttr.Put(XLineStartWidthItem(nWidth)); 696cdf0e10cSrcweir rAttr.Put(XLineEndItem(SVX_RESSTR(RID_SVXSTR_ARROW), aArrow)); 697cdf0e10cSrcweir rAttr.Put(XLineEndWidthItem(nWidth)); 698cdf0e10cSrcweir } 699cdf0e10cSrcweir break; 700cdf0e10cSrcweir 701cdf0e10cSrcweir case SID_CONNECTOR_ARROW_START: 702cdf0e10cSrcweir case SID_CONNECTOR_LINE_ARROW_START: 703cdf0e10cSrcweir case SID_CONNECTOR_LINES_ARROW_START: 704cdf0e10cSrcweir case SID_CONNECTOR_CURVE_ARROW_START: 705cdf0e10cSrcweir case SID_LINE_ARROW_START: 706cdf0e10cSrcweir case SID_LINE_ARROW_CIRCLE: 707cdf0e10cSrcweir case SID_LINE_ARROW_SQUARE: 708cdf0e10cSrcweir { 709cdf0e10cSrcweir // Verbinder mit Pfeil-Anfang 710cdf0e10cSrcweir rAttr.Put(XLineStartItem(SVX_RESSTR(RID_SVXSTR_ARROW), aArrow)); 711cdf0e10cSrcweir rAttr.Put(XLineStartWidthItem(nWidth)); 712cdf0e10cSrcweir } 713cdf0e10cSrcweir break; 714cdf0e10cSrcweir 715cdf0e10cSrcweir case SID_CONNECTOR_ARROW_END: 716cdf0e10cSrcweir case SID_CONNECTOR_LINE_ARROW_END: 717cdf0e10cSrcweir case SID_CONNECTOR_LINES_ARROW_END: 718cdf0e10cSrcweir case SID_CONNECTOR_CURVE_ARROW_END: 719cdf0e10cSrcweir case SID_LINE_ARROW_END: 720cdf0e10cSrcweir case SID_LINE_CIRCLE_ARROW: 721cdf0e10cSrcweir case SID_LINE_SQUARE_ARROW: 722cdf0e10cSrcweir { 723cdf0e10cSrcweir // Verbinder mit Pfeil-Ende 724cdf0e10cSrcweir rAttr.Put(XLineEndItem(SVX_RESSTR(RID_SVXSTR_ARROW), aArrow)); 725cdf0e10cSrcweir rAttr.Put(XLineEndWidthItem(nWidth)); 726cdf0e10cSrcweir } 727cdf0e10cSrcweir break; 728cdf0e10cSrcweir 729cdf0e10cSrcweir case SID_CONNECTOR_CIRCLES: 730cdf0e10cSrcweir case SID_CONNECTOR_LINE_CIRCLES: 731cdf0e10cSrcweir case SID_CONNECTOR_LINES_CIRCLES: 732cdf0e10cSrcweir case SID_CONNECTOR_CURVE_CIRCLES: 733cdf0e10cSrcweir { 734cdf0e10cSrcweir // Verbinder mit Kreis-Enden 735cdf0e10cSrcweir rAttr.Put(XLineStartItem(SVX_RESSTR(RID_SVXSTR_CIRCLE), aCircle)); 736cdf0e10cSrcweir rAttr.Put(XLineStartWidthItem(nWidth)); 737cdf0e10cSrcweir rAttr.Put(XLineEndItem(SVX_RESSTR(RID_SVXSTR_CIRCLE), aCircle)); 738cdf0e10cSrcweir rAttr.Put(XLineEndWidthItem(nWidth)); 739cdf0e10cSrcweir } 740cdf0e10cSrcweir break; 741cdf0e10cSrcweir 742cdf0e10cSrcweir case SID_CONNECTOR_CIRCLE_START: 743cdf0e10cSrcweir case SID_CONNECTOR_LINE_CIRCLE_START: 744cdf0e10cSrcweir case SID_CONNECTOR_LINES_CIRCLE_START: 745cdf0e10cSrcweir case SID_CONNECTOR_CURVE_CIRCLE_START: 746cdf0e10cSrcweir { 747cdf0e10cSrcweir // Verbinder mit Kreis-Anfang 748cdf0e10cSrcweir rAttr.Put(XLineStartItem(SVX_RESSTR(RID_SVXSTR_CIRCLE), aCircle)); 749cdf0e10cSrcweir rAttr.Put(XLineStartWidthItem(nWidth)); 750cdf0e10cSrcweir } 751cdf0e10cSrcweir break; 752cdf0e10cSrcweir 753cdf0e10cSrcweir case SID_CONNECTOR_CIRCLE_END: 754cdf0e10cSrcweir case SID_CONNECTOR_LINE_CIRCLE_END: 755cdf0e10cSrcweir case SID_CONNECTOR_LINES_CIRCLE_END: 756cdf0e10cSrcweir case SID_CONNECTOR_CURVE_CIRCLE_END: 757cdf0e10cSrcweir { 758cdf0e10cSrcweir // Verbinder mit Kreis-Ende 759cdf0e10cSrcweir rAttr.Put(XLineEndItem(SVX_RESSTR(RID_SVXSTR_CIRCLE), aCircle)); 760cdf0e10cSrcweir rAttr.Put(XLineEndWidthItem(nWidth)); 761cdf0e10cSrcweir } 762cdf0e10cSrcweir break; 763cdf0e10cSrcweir }; 764cdf0e10cSrcweir 765cdf0e10cSrcweir // Und nochmal fuer die noch fehlenden Enden 766cdf0e10cSrcweir switch (nSlotId) 767cdf0e10cSrcweir { 768cdf0e10cSrcweir case SID_LINE_ARROW_CIRCLE: 769cdf0e10cSrcweir { 770cdf0e10cSrcweir // Kreis-Ende 771cdf0e10cSrcweir rAttr.Put(XLineEndItem(SVX_RESSTR(RID_SVXSTR_CIRCLE), aCircle)); 772cdf0e10cSrcweir rAttr.Put(XLineEndWidthItem(nWidth)); 773cdf0e10cSrcweir } 774cdf0e10cSrcweir break; 775cdf0e10cSrcweir 776cdf0e10cSrcweir case SID_LINE_CIRCLE_ARROW: 777cdf0e10cSrcweir { 778cdf0e10cSrcweir // Kreis-Anfang 779cdf0e10cSrcweir rAttr.Put(XLineStartItem(SVX_RESSTR(RID_SVXSTR_CIRCLE), aCircle)); 780cdf0e10cSrcweir rAttr.Put(XLineStartWidthItem(nWidth)); 781cdf0e10cSrcweir } 782cdf0e10cSrcweir break; 783cdf0e10cSrcweir 784cdf0e10cSrcweir case SID_LINE_ARROW_SQUARE: 785cdf0e10cSrcweir { 786cdf0e10cSrcweir // Quadrat-Ende 787cdf0e10cSrcweir rAttr.Put(XLineEndItem(SVX_RESSTR(RID_SVXSTR_SQUARE), aSquare)); 788cdf0e10cSrcweir rAttr.Put(XLineEndWidthItem(nWidth)); 789cdf0e10cSrcweir } 790cdf0e10cSrcweir break; 791cdf0e10cSrcweir 792cdf0e10cSrcweir case SID_LINE_SQUARE_ARROW: 793cdf0e10cSrcweir { 794cdf0e10cSrcweir // Quadrat-Anfang 795cdf0e10cSrcweir rAttr.Put(XLineStartItem(SVX_RESSTR(RID_SVXSTR_SQUARE), aSquare)); 796cdf0e10cSrcweir rAttr.Put(XLineStartWidthItem(nWidth)); 797cdf0e10cSrcweir } 798cdf0e10cSrcweir break; 799cdf0e10cSrcweir } 800cdf0e10cSrcweir } 801cdf0e10cSrcweir } 802cdf0e10cSrcweir 803cdf0e10cSrcweir // #97016# 804cdf0e10cSrcweir SdrObject* FuConstructRectangle::CreateDefaultObject(const sal_uInt16 nID, const Rectangle& rRectangle) 805cdf0e10cSrcweir { 806cdf0e10cSrcweir DBG_ASSERT( (nID != SID_DRAW_FONTWORK) && (nID != SID_DRAW_FONTWORK_VERTICAL ), "FuConstRectangle::CreateDefaultObject can not create Fontwork shapes!" ); 807cdf0e10cSrcweir 808cdf0e10cSrcweir // case SID_DRAW_LINE: 809cdf0e10cSrcweir // case SID_DRAW_XLINE: 810cdf0e10cSrcweir // case SID_DRAW_MEASURELINE: 811cdf0e10cSrcweir // case SID_LINE_ARROW_START: 812cdf0e10cSrcweir // case SID_LINE_ARROW_END: 813cdf0e10cSrcweir // case SID_LINE_ARROWS: 814cdf0e10cSrcweir // case SID_LINE_ARROW_CIRCLE: 815cdf0e10cSrcweir // case SID_LINE_CIRCLE_ARROW: 816cdf0e10cSrcweir // case SID_LINE_ARROW_SQUARE: 817cdf0e10cSrcweir // case SID_LINE_SQUARE_ARROW: 818cdf0e10cSrcweir // case SID_DRAW_RECT: 819cdf0e10cSrcweir // case SID_DRAW_RECT_NOFILL: 820cdf0e10cSrcweir // case SID_DRAW_RECT_ROUND: 821cdf0e10cSrcweir // case SID_DRAW_RECT_ROUND_NOFILL: 822cdf0e10cSrcweir // case SID_DRAW_SQUARE: 823cdf0e10cSrcweir // case SID_DRAW_SQUARE_NOFILL: 824cdf0e10cSrcweir // case SID_DRAW_SQUARE_ROUND: 825cdf0e10cSrcweir // case SID_DRAW_SQUARE_ROUND_NOFILL: 826cdf0e10cSrcweir // case SID_DRAW_ELLIPSE: 827cdf0e10cSrcweir // case SID_DRAW_ELLIPSE_NOFILL: 828cdf0e10cSrcweir // case SID_DRAW_CIRCLE: 829cdf0e10cSrcweir // case SID_DRAW_CIRCLE_NOFILL: 830cdf0e10cSrcweir // case SID_DRAW_CAPTION: 831cdf0e10cSrcweir // case SID_DRAW_CAPTION_VERTICAL: 832cdf0e10cSrcweir // case SID_TOOL_CONNECTOR: 833cdf0e10cSrcweir // case SID_CONNECTOR_ARROW_START: 834cdf0e10cSrcweir // case SID_CONNECTOR_ARROW_END: 835cdf0e10cSrcweir // case SID_CONNECTOR_ARROWS: 836cdf0e10cSrcweir // case SID_CONNECTOR_CIRCLE_START: 837cdf0e10cSrcweir // case SID_CONNECTOR_CIRCLE_END: 838cdf0e10cSrcweir // case SID_CONNECTOR_CIRCLES: 839cdf0e10cSrcweir // case SID_CONNECTOR_LINE: 840cdf0e10cSrcweir // case SID_CONNECTOR_LINE_ARROW_START: 841cdf0e10cSrcweir // case SID_CONNECTOR_LINE_ARROW_END: 842cdf0e10cSrcweir // case SID_CONNECTOR_LINE_ARROWS: 843cdf0e10cSrcweir // case SID_CONNECTOR_LINE_CIRCLE_START: 844cdf0e10cSrcweir // case SID_CONNECTOR_LINE_CIRCLE_END: 845cdf0e10cSrcweir // case SID_CONNECTOR_LINE_CIRCLES: 846cdf0e10cSrcweir // case SID_CONNECTOR_CURVE: 847cdf0e10cSrcweir // case SID_CONNECTOR_CURVE_ARROW_START: 848cdf0e10cSrcweir // case SID_CONNECTOR_CURVE_ARROW_END: 849cdf0e10cSrcweir // case SID_CONNECTOR_CURVE_ARROWS: 850cdf0e10cSrcweir // case SID_CONNECTOR_CURVE_CIRCLE_START: 851cdf0e10cSrcweir // case SID_CONNECTOR_CURVE_CIRCLE_END: 852cdf0e10cSrcweir // case SID_CONNECTOR_CURVE_CIRCLES: 853cdf0e10cSrcweir // case SID_CONNECTOR_LINES: 854cdf0e10cSrcweir // case SID_CONNECTOR_LINES_ARROW_START: 855cdf0e10cSrcweir // case SID_CONNECTOR_LINES_ARROW_END: 856cdf0e10cSrcweir // case SID_CONNECTOR_LINES_ARROWS: 857cdf0e10cSrcweir // case SID_CONNECTOR_LINES_CIRCLE_START: 858cdf0e10cSrcweir // case SID_CONNECTOR_LINES_CIRCLE_END: 859cdf0e10cSrcweir // case SID_CONNECTOR_LINES_CIRCLES: 860cdf0e10cSrcweir 861cdf0e10cSrcweir SdrObject* pObj = SdrObjFactory::MakeNewObject( 862cdf0e10cSrcweir mpView->GetCurrentObjInventor(), mpView->GetCurrentObjIdentifier(), 863cdf0e10cSrcweir 0L, mpDoc); 864cdf0e10cSrcweir 865cdf0e10cSrcweir if(pObj) 866cdf0e10cSrcweir { 867cdf0e10cSrcweir Rectangle aRect(rRectangle); 868cdf0e10cSrcweir 869cdf0e10cSrcweir if(SID_DRAW_SQUARE == nID || 870cdf0e10cSrcweir SID_DRAW_SQUARE_NOFILL == nID || 871cdf0e10cSrcweir SID_DRAW_SQUARE_ROUND == nID || 872cdf0e10cSrcweir SID_DRAW_SQUARE_ROUND_NOFILL == nID || 873cdf0e10cSrcweir SID_DRAW_CIRCLE == nID || 874cdf0e10cSrcweir SID_DRAW_CIRCLE_NOFILL == nID) 875cdf0e10cSrcweir { 876cdf0e10cSrcweir // force quadratic 877cdf0e10cSrcweir ImpForceQuadratic(aRect); 878cdf0e10cSrcweir } 879cdf0e10cSrcweir 880cdf0e10cSrcweir Point aStart = aRect.TopLeft(); 881cdf0e10cSrcweir Point aEnd = aRect.BottomRight(); 882cdf0e10cSrcweir 883cdf0e10cSrcweir switch(nID) 884cdf0e10cSrcweir { 885cdf0e10cSrcweir case SID_DRAW_LINE: 886cdf0e10cSrcweir case SID_DRAW_XLINE: 887cdf0e10cSrcweir case SID_LINE_ARROW_START: 888cdf0e10cSrcweir case SID_LINE_ARROW_END: 889cdf0e10cSrcweir case SID_LINE_ARROWS: 890cdf0e10cSrcweir case SID_LINE_ARROW_CIRCLE: 891cdf0e10cSrcweir case SID_LINE_CIRCLE_ARROW: 892cdf0e10cSrcweir case SID_LINE_ARROW_SQUARE: 893cdf0e10cSrcweir case SID_LINE_SQUARE_ARROW: 894cdf0e10cSrcweir { 895cdf0e10cSrcweir if(pObj->ISA(SdrPathObj)) 896cdf0e10cSrcweir { 897cdf0e10cSrcweir sal_Int32 nYMiddle((aRect.Top() + aRect.Bottom()) / 2); 898cdf0e10cSrcweir 899cdf0e10cSrcweir ::basegfx::B2DPolygon aB2DPolygon; 900cdf0e10cSrcweir aB2DPolygon.append(::basegfx::B2DPoint(aStart.X(), nYMiddle)); 901cdf0e10cSrcweir aB2DPolygon.append(::basegfx::B2DPoint(aEnd.X(), nYMiddle)); 902cdf0e10cSrcweir ((SdrPathObj*)pObj)->SetPathPoly(::basegfx::B2DPolyPolygon(aB2DPolygon)); 903cdf0e10cSrcweir } 904cdf0e10cSrcweir else 905cdf0e10cSrcweir { 906cdf0e10cSrcweir DBG_ERROR("Object is NO line object"); 907cdf0e10cSrcweir } 908cdf0e10cSrcweir 909cdf0e10cSrcweir break; 910cdf0e10cSrcweir } 911cdf0e10cSrcweir 912cdf0e10cSrcweir case SID_DRAW_MEASURELINE: 913cdf0e10cSrcweir { 914cdf0e10cSrcweir if(pObj->ISA(SdrMeasureObj)) 915cdf0e10cSrcweir { 916cdf0e10cSrcweir sal_Int32 nYMiddle((aRect.Top() + aRect.Bottom()) / 2); 917cdf0e10cSrcweir ((SdrMeasureObj*)pObj)->SetPoint(Point(aStart.X(), nYMiddle), 0); 918cdf0e10cSrcweir ((SdrMeasureObj*)pObj)->SetPoint(Point(aEnd.X(), nYMiddle), 1); 919cdf0e10cSrcweir } 920cdf0e10cSrcweir else 921cdf0e10cSrcweir { 922cdf0e10cSrcweir DBG_ERROR("Object is NO measure object"); 923cdf0e10cSrcweir } 924cdf0e10cSrcweir 925cdf0e10cSrcweir break; 926cdf0e10cSrcweir } 927cdf0e10cSrcweir 928cdf0e10cSrcweir case SID_TOOL_CONNECTOR: 929cdf0e10cSrcweir case SID_CONNECTOR_ARROW_START: 930cdf0e10cSrcweir case SID_CONNECTOR_ARROW_END: 931cdf0e10cSrcweir case SID_CONNECTOR_ARROWS: 932cdf0e10cSrcweir case SID_CONNECTOR_CIRCLE_START: 933cdf0e10cSrcweir case SID_CONNECTOR_CIRCLE_END: 934cdf0e10cSrcweir case SID_CONNECTOR_CIRCLES: 935cdf0e10cSrcweir case SID_CONNECTOR_LINE: 936cdf0e10cSrcweir case SID_CONNECTOR_LINE_ARROW_START: 937cdf0e10cSrcweir case SID_CONNECTOR_LINE_ARROW_END: 938cdf0e10cSrcweir case SID_CONNECTOR_LINE_ARROWS: 939cdf0e10cSrcweir case SID_CONNECTOR_LINE_CIRCLE_START: 940cdf0e10cSrcweir case SID_CONNECTOR_LINE_CIRCLE_END: 941cdf0e10cSrcweir case SID_CONNECTOR_LINE_CIRCLES: 942cdf0e10cSrcweir case SID_CONNECTOR_CURVE: 943cdf0e10cSrcweir case SID_CONNECTOR_CURVE_ARROW_START: 944cdf0e10cSrcweir case SID_CONNECTOR_CURVE_ARROW_END: 945cdf0e10cSrcweir case SID_CONNECTOR_CURVE_ARROWS: 946cdf0e10cSrcweir case SID_CONNECTOR_CURVE_CIRCLE_START: 947cdf0e10cSrcweir case SID_CONNECTOR_CURVE_CIRCLE_END: 948cdf0e10cSrcweir case SID_CONNECTOR_CURVE_CIRCLES: 949cdf0e10cSrcweir case SID_CONNECTOR_LINES: 950cdf0e10cSrcweir case SID_CONNECTOR_LINES_ARROW_START: 951cdf0e10cSrcweir case SID_CONNECTOR_LINES_ARROW_END: 952cdf0e10cSrcweir case SID_CONNECTOR_LINES_ARROWS: 953cdf0e10cSrcweir case SID_CONNECTOR_LINES_CIRCLE_START: 954cdf0e10cSrcweir case SID_CONNECTOR_LINES_CIRCLE_END: 955cdf0e10cSrcweir case SID_CONNECTOR_LINES_CIRCLES: 956cdf0e10cSrcweir { 957cdf0e10cSrcweir if(pObj->ISA(SdrEdgeObj)) 958cdf0e10cSrcweir { 959cdf0e10cSrcweir ((SdrEdgeObj*)pObj)->SetTailPoint(sal_False, aStart); 960cdf0e10cSrcweir ((SdrEdgeObj*)pObj)->SetTailPoint(sal_True, aEnd); 961cdf0e10cSrcweir } 962cdf0e10cSrcweir else 963cdf0e10cSrcweir { 964cdf0e10cSrcweir DBG_ERROR("Object is NO connector object"); 965cdf0e10cSrcweir } 966cdf0e10cSrcweir 967cdf0e10cSrcweir break; 968cdf0e10cSrcweir } 969cdf0e10cSrcweir case SID_DRAW_CAPTION: 970cdf0e10cSrcweir case SID_DRAW_CAPTION_VERTICAL: 971cdf0e10cSrcweir { 972cdf0e10cSrcweir if(pObj->ISA(SdrCaptionObj)) 973cdf0e10cSrcweir { 974cdf0e10cSrcweir sal_Bool bIsVertical(SID_DRAW_CAPTION_VERTICAL == nID); 975cdf0e10cSrcweir 976cdf0e10cSrcweir ((SdrTextObj*)pObj)->SetVerticalWriting(bIsVertical); 977cdf0e10cSrcweir 978cdf0e10cSrcweir if(bIsVertical) 979cdf0e10cSrcweir { 980cdf0e10cSrcweir SfxItemSet aSet(pObj->GetMergedItemSet()); 981cdf0e10cSrcweir aSet.Put(SdrTextVertAdjustItem(SDRTEXTVERTADJUST_CENTER)); 982cdf0e10cSrcweir aSet.Put(SdrTextHorzAdjustItem(SDRTEXTHORZADJUST_RIGHT)); 983cdf0e10cSrcweir pObj->SetMergedItemSet(aSet); 984cdf0e10cSrcweir } 985cdf0e10cSrcweir 986cdf0e10cSrcweir // For task #105815# the default text is not inserted anymore. 987cdf0e10cSrcweir // String aText(SdResId(STR_POOLSHEET_TEXT)); 988cdf0e10cSrcweir // ((SdrCaptionObj*)pObj)->SetText(aText); 989cdf0e10cSrcweir 990cdf0e10cSrcweir ((SdrCaptionObj*)pObj)->SetLogicRect(aRect); 991cdf0e10cSrcweir ((SdrCaptionObj*)pObj)->SetTailPos( 992cdf0e10cSrcweir aRect.TopLeft() - Point(aRect.GetWidth() / 2, aRect.GetHeight() / 2)); 993cdf0e10cSrcweir } 994cdf0e10cSrcweir else 995cdf0e10cSrcweir { 996cdf0e10cSrcweir DBG_ERROR("Object is NO caption object"); 997cdf0e10cSrcweir } 998cdf0e10cSrcweir 999cdf0e10cSrcweir break; 1000cdf0e10cSrcweir } 1001cdf0e10cSrcweir 1002cdf0e10cSrcweir default: 1003cdf0e10cSrcweir { 1004cdf0e10cSrcweir pObj->SetLogicRect(aRect); 1005cdf0e10cSrcweir 1006cdf0e10cSrcweir break; 1007cdf0e10cSrcweir } 1008cdf0e10cSrcweir } 1009cdf0e10cSrcweir 1010cdf0e10cSrcweir SfxItemSet aAttr(mpDoc->GetPool()); 1011cdf0e10cSrcweir SetStyleSheet(aAttr, pObj); 1012cdf0e10cSrcweir SetAttributes(aAttr, pObj); 1013cdf0e10cSrcweir SetLineEnds(aAttr, pObj); 1014cdf0e10cSrcweir pObj->SetMergedItemSet(aAttr); 1015cdf0e10cSrcweir } 1016cdf0e10cSrcweir 1017cdf0e10cSrcweir return pObj; 1018cdf0e10cSrcweir } 1019cdf0e10cSrcweir 1020cdf0e10cSrcweir } // end of namespace sd 1021