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