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