1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_sw.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir 32*cdf0e10cSrcweir #include <sfx2/bindings.hxx> 33*cdf0e10cSrcweir #include <svx/htmlmode.hxx> 34*cdf0e10cSrcweir #include <svx/sdtacitm.hxx> 35*cdf0e10cSrcweir #include <svx/svdobj.hxx> 36*cdf0e10cSrcweir #include <svx/sdtagitm.hxx> 37*cdf0e10cSrcweir #include <svx/sdtakitm.hxx> 38*cdf0e10cSrcweir #include <svx/sdtaditm.hxx> 39*cdf0e10cSrcweir #include <svx/sdtaaitm.hxx> 40*cdf0e10cSrcweir #include <svx/svdview.hxx> 41*cdf0e10cSrcweir #include <svx/svdocapt.hxx> 42*cdf0e10cSrcweir #include <editeng/outlobj.hxx> 43*cdf0e10cSrcweir #ifndef _CMDID_H 44*cdf0e10cSrcweir #include <cmdid.h> 45*cdf0e10cSrcweir #endif 46*cdf0e10cSrcweir #ifndef _VIEW_HXX 47*cdf0e10cSrcweir #include <view.hxx> 48*cdf0e10cSrcweir #endif 49*cdf0e10cSrcweir #include <edtwin.hxx> 50*cdf0e10cSrcweir #include <wrtsh.hxx> 51*cdf0e10cSrcweir #include <viewopt.hxx> 52*cdf0e10cSrcweir #ifndef _DRAWBASE_HXX 53*cdf0e10cSrcweir #include <drawbase.hxx> 54*cdf0e10cSrcweir #endif 55*cdf0e10cSrcweir #include <concustomshape.hxx> 56*cdf0e10cSrcweir #include <svx/gallery.hxx> 57*cdf0e10cSrcweir #include <sfx2/request.hxx> 58*cdf0e10cSrcweir #ifndef _FM_FMMODEL_HXX 59*cdf0e10cSrcweir #include <svx/fmmodel.hxx> 60*cdf0e10cSrcweir #endif 61*cdf0e10cSrcweir #include <svl/itempool.hxx> 62*cdf0e10cSrcweir #include <svx/svdpage.hxx> 63*cdf0e10cSrcweir #include <svx/svdoashp.hxx> 64*cdf0e10cSrcweir #include <editeng/adjitem.hxx> 65*cdf0e10cSrcweir 66*cdf0e10cSrcweir #include <math.h> 67*cdf0e10cSrcweir 68*cdf0e10cSrcweir /************************************************************************* 69*cdf0e10cSrcweir |* 70*cdf0e10cSrcweir |* C'Tor 71*cdf0e10cSrcweir |* 72*cdf0e10cSrcweir \************************************************************************/ 73*cdf0e10cSrcweir ConstCustomShape::ConstCustomShape( SwWrtShell* pWrtShell, SwEditWin* pEditWin, SwView* pSwView, SfxRequest& rReq ) 74*cdf0e10cSrcweir : SwDrawBase( pWrtShell, pEditWin, pSwView ) 75*cdf0e10cSrcweir { 76*cdf0e10cSrcweir aCustomShape = ConstCustomShape::GetShapeTypeFromRequest( rReq ); 77*cdf0e10cSrcweir } 78*cdf0e10cSrcweir 79*cdf0e10cSrcweir /************************************************************************* 80*cdf0e10cSrcweir |* 81*cdf0e10cSrcweir \************************************************************************/ 82*cdf0e10cSrcweir 83*cdf0e10cSrcweir rtl::OUString ConstCustomShape::GetShapeType() const 84*cdf0e10cSrcweir { 85*cdf0e10cSrcweir return aCustomShape; 86*cdf0e10cSrcweir } 87*cdf0e10cSrcweir 88*cdf0e10cSrcweir //static 89*cdf0e10cSrcweir rtl::OUString ConstCustomShape::GetShapeTypeFromRequest( SfxRequest& rReq ) 90*cdf0e10cSrcweir { 91*cdf0e10cSrcweir rtl::OUString aRet; 92*cdf0e10cSrcweir const SfxItemSet* pArgs = rReq.GetArgs(); 93*cdf0e10cSrcweir if ( pArgs ) 94*cdf0e10cSrcweir { 95*cdf0e10cSrcweir const SfxStringItem& rItm = (const SfxStringItem&)pArgs->Get( rReq.GetSlot() ); 96*cdf0e10cSrcweir aRet = rItm.GetValue(); 97*cdf0e10cSrcweir } 98*cdf0e10cSrcweir return aRet; 99*cdf0e10cSrcweir } 100*cdf0e10cSrcweir 101*cdf0e10cSrcweir /************************************************************************* 102*cdf0e10cSrcweir |* 103*cdf0e10cSrcweir |* MouseButtonDown-event 104*cdf0e10cSrcweir |* 105*cdf0e10cSrcweir \************************************************************************/ 106*cdf0e10cSrcweir 107*cdf0e10cSrcweir sal_Bool ConstCustomShape::MouseButtonDown(const MouseEvent& rMEvt) 108*cdf0e10cSrcweir { 109*cdf0e10cSrcweir sal_Bool bReturn = SwDrawBase::MouseButtonDown(rMEvt); 110*cdf0e10cSrcweir if ( bReturn ) 111*cdf0e10cSrcweir { 112*cdf0e10cSrcweir SdrView *pSdrView = m_pSh->GetDrawView(); 113*cdf0e10cSrcweir if ( pSdrView ) 114*cdf0e10cSrcweir { 115*cdf0e10cSrcweir SdrObject* pObj = pSdrView->GetCreateObj(); 116*cdf0e10cSrcweir if ( pObj ) 117*cdf0e10cSrcweir { 118*cdf0e10cSrcweir SetAttributes( pObj ); 119*cdf0e10cSrcweir sal_Bool bForceFillStyle = sal_True; 120*cdf0e10cSrcweir sal_Bool bForceNoFillStyle = sal_False; 121*cdf0e10cSrcweir if ( ((SdrObjCustomShape*)pObj)->UseNoFillStyle() ) 122*cdf0e10cSrcweir { 123*cdf0e10cSrcweir bForceFillStyle = sal_False; 124*cdf0e10cSrcweir bForceNoFillStyle = sal_True; 125*cdf0e10cSrcweir } 126*cdf0e10cSrcweir 127*cdf0e10cSrcweir SfxItemSet aAttr( m_pView->GetPool() ); 128*cdf0e10cSrcweir if ( bForceNoFillStyle ) 129*cdf0e10cSrcweir aAttr.Put( XFillStyleItem( XFILL_NONE ) ); 130*cdf0e10cSrcweir pObj->SetMergedItemSet(aAttr); 131*cdf0e10cSrcweir } 132*cdf0e10cSrcweir } 133*cdf0e10cSrcweir } 134*cdf0e10cSrcweir return bReturn; 135*cdf0e10cSrcweir } 136*cdf0e10cSrcweir 137*cdf0e10cSrcweir /************************************************************************* 138*cdf0e10cSrcweir |* 139*cdf0e10cSrcweir |* MouseButtonUp-event 140*cdf0e10cSrcweir |* 141*cdf0e10cSrcweir \************************************************************************/ 142*cdf0e10cSrcweir 143*cdf0e10cSrcweir sal_Bool ConstCustomShape::MouseButtonUp(const MouseEvent& rMEvt) 144*cdf0e10cSrcweir { 145*cdf0e10cSrcweir return SwDrawBase::MouseButtonUp(rMEvt); 146*cdf0e10cSrcweir } 147*cdf0e10cSrcweir 148*cdf0e10cSrcweir /************************************************************************* 149*cdf0e10cSrcweir |* 150*cdf0e10cSrcweir |* activate function 151*cdf0e10cSrcweir |* 152*cdf0e10cSrcweir \************************************************************************/ 153*cdf0e10cSrcweir 154*cdf0e10cSrcweir void ConstCustomShape::Activate(const sal_uInt16 nSlotId) 155*cdf0e10cSrcweir { 156*cdf0e10cSrcweir m_pWin->SetSdrDrawMode( OBJ_CUSTOMSHAPE ); 157*cdf0e10cSrcweir 158*cdf0e10cSrcweir SwDrawBase::Activate(nSlotId); 159*cdf0e10cSrcweir } 160*cdf0e10cSrcweir 161*cdf0e10cSrcweir /************************************************************************* 162*cdf0e10cSrcweir |* 163*cdf0e10cSrcweir |* applying attributes 164*cdf0e10cSrcweir |* 165*cdf0e10cSrcweir \************************************************************************/ 166*cdf0e10cSrcweir 167*cdf0e10cSrcweir void ConstCustomShape::SetAttributes( SdrObject* pObj ) 168*cdf0e10cSrcweir { 169*cdf0e10cSrcweir sal_Bool bAttributesAppliedFromGallery = sal_False; 170*cdf0e10cSrcweir 171*cdf0e10cSrcweir if ( GalleryExplorer::GetSdrObjCount( GALLERY_THEME_POWERPOINT ) ) 172*cdf0e10cSrcweir { 173*cdf0e10cSrcweir std::vector< rtl::OUString > aObjList; 174*cdf0e10cSrcweir if ( GalleryExplorer::FillObjListTitle( GALLERY_THEME_POWERPOINT, aObjList ) ) 175*cdf0e10cSrcweir { 176*cdf0e10cSrcweir sal_uInt16 i; 177*cdf0e10cSrcweir for ( i = 0; i < aObjList.size(); i++ ) 178*cdf0e10cSrcweir { 179*cdf0e10cSrcweir if ( aObjList[ i ].equalsIgnoreAsciiCase( aCustomShape ) ) 180*cdf0e10cSrcweir { 181*cdf0e10cSrcweir FmFormModel aFormModel; 182*cdf0e10cSrcweir SfxItemPool& rPool = aFormModel.GetItemPool(); 183*cdf0e10cSrcweir rPool.FreezeIdRanges(); 184*cdf0e10cSrcweir if ( GalleryExplorer::GetSdrObj( GALLERY_THEME_POWERPOINT, i, &aFormModel ) ) 185*cdf0e10cSrcweir { 186*cdf0e10cSrcweir const SdrObject* pSourceObj = aFormModel.GetPage( 0 )->GetObj( 0 ); 187*cdf0e10cSrcweir if( pSourceObj ) 188*cdf0e10cSrcweir { 189*cdf0e10cSrcweir const SfxItemSet& rSource = pSourceObj->GetMergedItemSet(); 190*cdf0e10cSrcweir SfxItemSet aDest( pObj->GetModel()->GetItemPool(), // ranges from SdrAttrObj 191*cdf0e10cSrcweir SDRATTR_START, SDRATTR_SHADOW_LAST, 192*cdf0e10cSrcweir SDRATTR_MISC_FIRST, SDRATTR_MISC_LAST, 193*cdf0e10cSrcweir SDRATTR_TEXTDIRECTION, SDRATTR_TEXTDIRECTION, 194*cdf0e10cSrcweir // Graphic Attributes 195*cdf0e10cSrcweir SDRATTR_GRAF_FIRST, SDRATTR_GRAF_LAST, 196*cdf0e10cSrcweir // 3d Properties 197*cdf0e10cSrcweir SDRATTR_3D_FIRST, SDRATTR_3D_LAST, 198*cdf0e10cSrcweir // CustomShape properties 199*cdf0e10cSrcweir SDRATTR_CUSTOMSHAPE_FIRST, SDRATTR_CUSTOMSHAPE_LAST, 200*cdf0e10cSrcweir // range from SdrTextObj 201*cdf0e10cSrcweir EE_ITEMS_START, EE_ITEMS_END, 202*cdf0e10cSrcweir // end 203*cdf0e10cSrcweir 0, 0); 204*cdf0e10cSrcweir aDest.Set( rSource ); 205*cdf0e10cSrcweir pObj->SetMergedItemSet( aDest ); 206*cdf0e10cSrcweir sal_Int32 nAngle = pSourceObj->GetRotateAngle(); 207*cdf0e10cSrcweir if ( nAngle ) 208*cdf0e10cSrcweir { 209*cdf0e10cSrcweir double a = nAngle * F_PI18000; 210*cdf0e10cSrcweir pObj->NbcRotate( pObj->GetSnapRect().Center(), nAngle, sin( a ), cos( a ) ); 211*cdf0e10cSrcweir } 212*cdf0e10cSrcweir bAttributesAppliedFromGallery = sal_True; 213*cdf0e10cSrcweir } 214*cdf0e10cSrcweir } 215*cdf0e10cSrcweir break; 216*cdf0e10cSrcweir } 217*cdf0e10cSrcweir } 218*cdf0e10cSrcweir } 219*cdf0e10cSrcweir } 220*cdf0e10cSrcweir if ( !bAttributesAppliedFromGallery ) 221*cdf0e10cSrcweir { 222*cdf0e10cSrcweir pObj->SetMergedItem( SvxAdjustItem( SVX_ADJUST_CENTER, RES_PARATR_ADJUST ) ); 223*cdf0e10cSrcweir pObj->SetMergedItem( SdrTextVertAdjustItem( SDRTEXTVERTADJUST_CENTER ) ); 224*cdf0e10cSrcweir pObj->SetMergedItem( SdrTextHorzAdjustItem( SDRTEXTHORZADJUST_BLOCK ) ); 225*cdf0e10cSrcweir pObj->SetMergedItem( SdrTextAutoGrowHeightItem( sal_False ) ); 226*cdf0e10cSrcweir ((SdrObjCustomShape*)pObj)->MergeDefaultAttributes( &aCustomShape ); 227*cdf0e10cSrcweir } 228*cdf0e10cSrcweir } 229*cdf0e10cSrcweir 230*cdf0e10cSrcweir void ConstCustomShape::CreateDefaultObject() 231*cdf0e10cSrcweir { 232*cdf0e10cSrcweir SwDrawBase::CreateDefaultObject(); 233*cdf0e10cSrcweir SdrView *pSdrView = m_pSh->GetDrawView(); 234*cdf0e10cSrcweir if ( pSdrView ) 235*cdf0e10cSrcweir { 236*cdf0e10cSrcweir const SdrMarkList& rMarkList = pSdrView->GetMarkedObjectList(); 237*cdf0e10cSrcweir if ( rMarkList.GetMarkCount() == 1 ) 238*cdf0e10cSrcweir { 239*cdf0e10cSrcweir SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); 240*cdf0e10cSrcweir if ( pObj && pObj->ISA( SdrObjCustomShape ) ) 241*cdf0e10cSrcweir SetAttributes( pObj ); 242*cdf0e10cSrcweir } 243*cdf0e10cSrcweir } 244*cdf0e10cSrcweir } 245*cdf0e10cSrcweir 246*cdf0e10cSrcweir // #i33136# 247*cdf0e10cSrcweir bool ConstCustomShape::doConstructOrthogonal() const 248*cdf0e10cSrcweir { 249*cdf0e10cSrcweir return SdrObjCustomShape::doConstructOrthogonal(aCustomShape); 250*cdf0e10cSrcweir } 251*cdf0e10cSrcweir 252*cdf0e10cSrcweir // eof 253