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_svx.hxx"
26
27 #include <vcl/svapp.hxx>
28
29 #include <svx/svdomedia.hxx>
30 #include "svx/svdglob.hxx"
31 #include "svx/svdstr.hrc"
32 #include <svx/sdr/contact/viewcontactofsdrmediaobj.hxx>
33 #include <avmedia/mediawindow.hxx>
34
35 // ---------------
36 // - SdrMediaObj -
37 // ---------------
38
39 TYPEINIT1( SdrMediaObj, SdrRectObj );
40
41 // ------------------------------------------------------------------------------
42
SdrMediaObj()43 SdrMediaObj::SdrMediaObj()
44 {
45 }
46
47 // ------------------------------------------------------------------------------
48
SdrMediaObj(const Rectangle & rRect)49 SdrMediaObj::SdrMediaObj( const Rectangle& rRect ) :
50 SdrRectObj( rRect )
51 {
52 }
53
54 // ------------------------------------------------------------------------------
55
~SdrMediaObj()56 SdrMediaObj::~SdrMediaObj()
57 {
58 }
59
60 // ------------------------------------------------------------------------------
61
HasTextEdit() const62 FASTBOOL SdrMediaObj::HasTextEdit() const
63 {
64 return sal_False;
65 }
66
67 // ------------------------------------------------------------------------------
68
CreateObjectSpecificViewContact()69 sdr::contact::ViewContact* SdrMediaObj::CreateObjectSpecificViewContact()
70 {
71 return new ::sdr::contact::ViewContactOfSdrMediaObj( *this );
72 }
73
74 // ------------------------------------------------------------------------------
75
TakeObjInfo(SdrObjTransformInfoRec & rInfo) const76 void SdrMediaObj::TakeObjInfo( SdrObjTransformInfoRec& rInfo ) const
77 {
78 rInfo.bSelectAllowed = true;
79 rInfo.bMoveAllowed = true;
80 rInfo.bResizeFreeAllowed = true;
81 rInfo.bResizePropAllowed = true;
82 rInfo.bRotateFreeAllowed = false;
83 rInfo.bRotate90Allowed = false;
84 rInfo.bMirrorFreeAllowed = false;
85 rInfo.bMirror45Allowed = false;
86 rInfo.bMirror90Allowed = false;
87 rInfo.bTransparenceAllowed = false;
88 rInfo.bGradientAllowed = false;
89 rInfo.bShearAllowed = false;
90 rInfo.bEdgeRadiusAllowed = false;
91 rInfo.bNoOrthoDesired = false;
92 rInfo.bNoContortion = false;
93 rInfo.bCanConvToPath = false;
94 rInfo.bCanConvToPoly = false;
95 rInfo.bCanConvToContour = false;
96 rInfo.bCanConvToPathLineToArea = false;
97 rInfo.bCanConvToPolyLineToArea = false;
98 }
99
100 // ------------------------------------------------------------------------------
101
GetObjIdentifier() const102 sal_uInt16 SdrMediaObj::GetObjIdentifier() const
103 {
104 return sal_uInt16( OBJ_MEDIA );
105 }
106
107 // ------------------------------------------------------------------------------
108
TakeObjNameSingul(XubString & rName) const109 void SdrMediaObj::TakeObjNameSingul(XubString& rName) const
110 {
111 rName=ImpGetResStr(STR_ObjNameSingulMEDIA);
112
113 String aName( GetName() );
114
115 if(aName.Len())
116 {
117 rName += sal_Unicode(' ');
118 rName += sal_Unicode('\'');
119 rName += aName;
120 rName += sal_Unicode('\'');
121 }
122 }
123
124 // ------------------------------------------------------------------------------
125
TakeObjNamePlural(XubString & rName) const126 void SdrMediaObj::TakeObjNamePlural(XubString& rName) const
127 {
128 rName=ImpGetResStr(STR_ObjNamePluralMEDIA);
129 }
130
131 // ------------------------------------------------------------------------------
132
operator =(const SdrObject & rObj)133 void SdrMediaObj::operator=(const SdrObject& rObj)
134 {
135 SdrRectObj::operator=( rObj );
136
137 if( rObj.ISA( SdrMediaObj ) )
138 {
139 const SdrMediaObj& rMediaObj = static_cast< const SdrMediaObj& >( rObj );
140
141 setMediaProperties( rMediaObj.getMediaProperties() );
142 setGraphic( rMediaObj.mapGraphic.get() );
143 }
144 }
145
146 // ------------------------------------------------------------------------------
147
AdjustToMaxRect(const Rectangle & rMaxRect,bool bShrinkOnly)148 void SdrMediaObj::AdjustToMaxRect( const Rectangle& rMaxRect, bool bShrinkOnly /* = false */ )
149 {
150 Size aSize( Application::GetDefaultDevice()->PixelToLogic( getPreferredSize(), MAP_100TH_MM ) );
151 Size aMaxSize( rMaxRect.GetSize() );
152
153 if( aSize.Height() != 0 && aSize.Width() != 0 )
154 {
155 Point aPos( rMaxRect.TopLeft() );
156
157 // Falls Grafik zu gross, wird die Grafik
158 // in die Seite eingepasst
159 if ( (!bShrinkOnly ||
160 ( aSize.Height() > aMaxSize.Height() ) ||
161 ( aSize.Width() > aMaxSize.Width() ) )&&
162 aSize.Height() && aMaxSize.Height() )
163 {
164 float fGrfWH = (float)aSize.Width() /
165 (float)aSize.Height();
166 float fWinWH = (float)aMaxSize.Width() /
167 (float)aMaxSize.Height();
168
169 // Grafik an Pagesize anpassen (skaliert)
170 if ( fGrfWH < fWinWH )
171 {
172 aSize.Width() = (long)(aMaxSize.Height() * fGrfWH);
173 aSize.Height()= aMaxSize.Height();
174 }
175 else if ( fGrfWH > 0.F )
176 {
177 aSize.Width() = aMaxSize.Width();
178 aSize.Height()= (long)(aMaxSize.Width() / fGrfWH);
179 }
180
181 aPos = rMaxRect.Center();
182 }
183
184 if( bShrinkOnly )
185 aPos = aRect.TopLeft();
186
187 aPos.X() -= aSize.Width() / 2;
188 aPos.Y() -= aSize.Height() / 2;
189 SetLogicRect( Rectangle( aPos, aSize ) );
190 }
191 }
192
193 // ------------------------------------------------------------------------------
194
setURL(const::rtl::OUString & rURL)195 void SdrMediaObj::setURL( const ::rtl::OUString& rURL )
196 {
197 ::avmedia::MediaItem aURLItem;
198
199 aURLItem.setURL( rURL );
200 setMediaProperties( aURLItem );
201 }
202
203 // ------------------------------------------------------------------------------
204
getURL() const205 const ::rtl::OUString& SdrMediaObj::getURL() const
206 {
207 return getMediaProperties().getURL();
208 }
209
210 // ------------------------------------------------------------------------------
211
setMediaProperties(const::avmedia::MediaItem & rState)212 void SdrMediaObj::setMediaProperties( const ::avmedia::MediaItem& rState )
213 {
214 mediaPropertiesChanged( rState );
215 static_cast< ::sdr::contact::ViewContactOfSdrMediaObj& >( GetViewContact() ).executeMediaItem( getMediaProperties() );
216 }
217
218 // ------------------------------------------------------------------------------
219
getMediaProperties() const220 const ::avmedia::MediaItem& SdrMediaObj::getMediaProperties() const
221 {
222 return maMediaProperties;
223 }
224
225 // ------------------------------------------------------------------------------
226
hasPreferredSize() const227 bool SdrMediaObj::hasPreferredSize() const
228 {
229 return static_cast< ::sdr::contact::ViewContactOfSdrMediaObj& >( GetViewContact() ).hasPreferredSize();
230 }
231
232 // ------------------------------------------------------------------------------
233
getPreferredSize() const234 Size SdrMediaObj::getPreferredSize() const
235 {
236 return static_cast< ::sdr::contact::ViewContactOfSdrMediaObj& >( GetViewContact() ).getPreferredSize();
237 }
238
239 // ------------------------------------------------------------------------------
240
getGraphic() const241 const Graphic& SdrMediaObj::getGraphic() const
242 {
243 if( !mapGraphic.get() )
244 const_cast< SdrMediaObj* >( this )->mapGraphic.reset( new Graphic( ::avmedia::MediaWindow::grabFrame( getURL(), true ) ) );
245
246 return *mapGraphic;
247 }
248
249 // ------------------------------------------------------------------------------
250
setGraphic(const Graphic * pGraphic)251 void SdrMediaObj::setGraphic( const Graphic* pGraphic )
252 {
253 mapGraphic.reset( pGraphic ? new Graphic( *pGraphic ) : NULL );
254 }
255
256 // ------------------------------------------------------------------------------
257
mediaPropertiesChanged(const::avmedia::MediaItem & rNewProperties)258 void SdrMediaObj::mediaPropertiesChanged( const ::avmedia::MediaItem& rNewProperties )
259 {
260 const sal_uInt32 nMaskSet = rNewProperties.getMaskSet();
261
262 // use only a subset of MediaItem properties for own own properties
263 if( ( AVMEDIA_SETMASK_URL & nMaskSet ) &&
264 ( rNewProperties.getURL() != getURL() ) )
265 {
266 setGraphic();
267 maMediaProperties.setURL( rNewProperties.getURL() );
268 }
269
270 if( AVMEDIA_SETMASK_LOOP & nMaskSet )
271 maMediaProperties.setLoop( rNewProperties.isLoop() );
272
273 if( AVMEDIA_SETMASK_MUTE & nMaskSet )
274 maMediaProperties.setMute( rNewProperties.isMute() );
275
276 if( AVMEDIA_SETMASK_VOLUMEDB & nMaskSet )
277 maMediaProperties.setVolumeDB( rNewProperties.getVolumeDB() );
278
279 if( AVMEDIA_SETMASK_ZOOM & nMaskSet )
280 maMediaProperties.setZoom( rNewProperties.getZoom() );
281 }
282