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