1*f6e50924SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*f6e50924SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*f6e50924SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*f6e50924SAndrew Rist * distributed with this work for additional information
6*f6e50924SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*f6e50924SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*f6e50924SAndrew Rist * "License"); you may not use this file except in compliance
9*f6e50924SAndrew Rist * with the License. You may obtain a copy of the License at
10*f6e50924SAndrew Rist *
11*f6e50924SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*f6e50924SAndrew Rist *
13*f6e50924SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*f6e50924SAndrew Rist * software distributed under the License is distributed on an
15*f6e50924SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*f6e50924SAndrew Rist * KIND, either express or implied. See the License for the
17*f6e50924SAndrew Rist * specific language governing permissions and limitations
18*f6e50924SAndrew Rist * under the License.
19*f6e50924SAndrew Rist *
20*f6e50924SAndrew Rist *************************************************************/
21*f6e50924SAndrew Rist
22*f6e50924SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_svx.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include <vcl/svapp.hxx>
28cdf0e10cSrcweir
29cdf0e10cSrcweir #include <svx/svdomedia.hxx>
30cdf0e10cSrcweir #include "svx/svdglob.hxx"
31cdf0e10cSrcweir #include "svx/svdstr.hrc"
32cdf0e10cSrcweir #include <svx/sdr/contact/viewcontactofsdrmediaobj.hxx>
33cdf0e10cSrcweir #include <avmedia/mediawindow.hxx>
34cdf0e10cSrcweir
35cdf0e10cSrcweir // ---------------
36cdf0e10cSrcweir // - SdrMediaObj -
37cdf0e10cSrcweir // ---------------
38cdf0e10cSrcweir
39cdf0e10cSrcweir TYPEINIT1( SdrMediaObj, SdrRectObj );
40cdf0e10cSrcweir
41cdf0e10cSrcweir // ------------------------------------------------------------------------------
42cdf0e10cSrcweir
SdrMediaObj()43cdf0e10cSrcweir SdrMediaObj::SdrMediaObj()
44cdf0e10cSrcweir {
45cdf0e10cSrcweir }
46cdf0e10cSrcweir
47cdf0e10cSrcweir // ------------------------------------------------------------------------------
48cdf0e10cSrcweir
SdrMediaObj(const Rectangle & rRect)49cdf0e10cSrcweir SdrMediaObj::SdrMediaObj( const Rectangle& rRect ) :
50cdf0e10cSrcweir SdrRectObj( rRect )
51cdf0e10cSrcweir {
52cdf0e10cSrcweir }
53cdf0e10cSrcweir
54cdf0e10cSrcweir // ------------------------------------------------------------------------------
55cdf0e10cSrcweir
~SdrMediaObj()56cdf0e10cSrcweir SdrMediaObj::~SdrMediaObj()
57cdf0e10cSrcweir {
58cdf0e10cSrcweir }
59cdf0e10cSrcweir
60cdf0e10cSrcweir // ------------------------------------------------------------------------------
61cdf0e10cSrcweir
HasTextEdit() const62cdf0e10cSrcweir FASTBOOL SdrMediaObj::HasTextEdit() const
63cdf0e10cSrcweir {
64cdf0e10cSrcweir return sal_False;
65cdf0e10cSrcweir }
66cdf0e10cSrcweir
67cdf0e10cSrcweir // ------------------------------------------------------------------------------
68cdf0e10cSrcweir
CreateObjectSpecificViewContact()69cdf0e10cSrcweir sdr::contact::ViewContact* SdrMediaObj::CreateObjectSpecificViewContact()
70cdf0e10cSrcweir {
71cdf0e10cSrcweir return new ::sdr::contact::ViewContactOfSdrMediaObj( *this );
72cdf0e10cSrcweir }
73cdf0e10cSrcweir
74cdf0e10cSrcweir // ------------------------------------------------------------------------------
75cdf0e10cSrcweir
TakeObjInfo(SdrObjTransformInfoRec & rInfo) const76cdf0e10cSrcweir void SdrMediaObj::TakeObjInfo( SdrObjTransformInfoRec& rInfo ) const
77cdf0e10cSrcweir {
78cdf0e10cSrcweir rInfo.bSelectAllowed = true;
79cdf0e10cSrcweir rInfo.bMoveAllowed = true;
80cdf0e10cSrcweir rInfo.bResizeFreeAllowed = true;
81cdf0e10cSrcweir rInfo.bResizePropAllowed = true;
82cdf0e10cSrcweir rInfo.bRotateFreeAllowed = false;
83cdf0e10cSrcweir rInfo.bRotate90Allowed = false;
84cdf0e10cSrcweir rInfo.bMirrorFreeAllowed = false;
85cdf0e10cSrcweir rInfo.bMirror45Allowed = false;
86cdf0e10cSrcweir rInfo.bMirror90Allowed = false;
87cdf0e10cSrcweir rInfo.bTransparenceAllowed = false;
88cdf0e10cSrcweir rInfo.bGradientAllowed = false;
89cdf0e10cSrcweir rInfo.bShearAllowed = false;
90cdf0e10cSrcweir rInfo.bEdgeRadiusAllowed = false;
91cdf0e10cSrcweir rInfo.bNoOrthoDesired = false;
92cdf0e10cSrcweir rInfo.bNoContortion = false;
93cdf0e10cSrcweir rInfo.bCanConvToPath = false;
94cdf0e10cSrcweir rInfo.bCanConvToPoly = false;
95cdf0e10cSrcweir rInfo.bCanConvToContour = false;
96cdf0e10cSrcweir rInfo.bCanConvToPathLineToArea = false;
97cdf0e10cSrcweir rInfo.bCanConvToPolyLineToArea = false;
98cdf0e10cSrcweir }
99cdf0e10cSrcweir
100cdf0e10cSrcweir // ------------------------------------------------------------------------------
101cdf0e10cSrcweir
GetObjIdentifier() const102cdf0e10cSrcweir sal_uInt16 SdrMediaObj::GetObjIdentifier() const
103cdf0e10cSrcweir {
104cdf0e10cSrcweir return sal_uInt16( OBJ_MEDIA );
105cdf0e10cSrcweir }
106cdf0e10cSrcweir
107cdf0e10cSrcweir // ------------------------------------------------------------------------------
108cdf0e10cSrcweir
TakeObjNameSingul(XubString & rName) const109cdf0e10cSrcweir void SdrMediaObj::TakeObjNameSingul(XubString& rName) const
110cdf0e10cSrcweir {
111cdf0e10cSrcweir rName=ImpGetResStr(STR_ObjNameSingulMEDIA);
112cdf0e10cSrcweir
113cdf0e10cSrcweir String aName( GetName() );
114cdf0e10cSrcweir
115cdf0e10cSrcweir if(aName.Len())
116cdf0e10cSrcweir {
117cdf0e10cSrcweir rName += sal_Unicode(' ');
118cdf0e10cSrcweir rName += sal_Unicode('\'');
119cdf0e10cSrcweir rName += aName;
120cdf0e10cSrcweir rName += sal_Unicode('\'');
121cdf0e10cSrcweir }
122cdf0e10cSrcweir }
123cdf0e10cSrcweir
124cdf0e10cSrcweir // ------------------------------------------------------------------------------
125cdf0e10cSrcweir
TakeObjNamePlural(XubString & rName) const126cdf0e10cSrcweir void SdrMediaObj::TakeObjNamePlural(XubString& rName) const
127cdf0e10cSrcweir {
128cdf0e10cSrcweir rName=ImpGetResStr(STR_ObjNamePluralMEDIA);
129cdf0e10cSrcweir }
130cdf0e10cSrcweir
131cdf0e10cSrcweir // ------------------------------------------------------------------------------
132cdf0e10cSrcweir
operator =(const SdrObject & rObj)133cdf0e10cSrcweir void SdrMediaObj::operator=(const SdrObject& rObj)
134cdf0e10cSrcweir {
135cdf0e10cSrcweir SdrRectObj::operator=( rObj );
136cdf0e10cSrcweir
137cdf0e10cSrcweir if( rObj.ISA( SdrMediaObj ) )
138cdf0e10cSrcweir {
139cdf0e10cSrcweir const SdrMediaObj& rMediaObj = static_cast< const SdrMediaObj& >( rObj );
140cdf0e10cSrcweir
141cdf0e10cSrcweir setMediaProperties( rMediaObj.getMediaProperties() );
142cdf0e10cSrcweir setGraphic( rMediaObj.mapGraphic.get() );
143cdf0e10cSrcweir }
144cdf0e10cSrcweir }
145cdf0e10cSrcweir
146cdf0e10cSrcweir // ------------------------------------------------------------------------------
147cdf0e10cSrcweir
AdjustToMaxRect(const Rectangle & rMaxRect,bool bShrinkOnly)148cdf0e10cSrcweir void SdrMediaObj::AdjustToMaxRect( const Rectangle& rMaxRect, bool bShrinkOnly /* = false */ )
149cdf0e10cSrcweir {
150cdf0e10cSrcweir Size aSize( Application::GetDefaultDevice()->PixelToLogic( getPreferredSize(), MAP_100TH_MM ) );
151cdf0e10cSrcweir Size aMaxSize( rMaxRect.GetSize() );
152cdf0e10cSrcweir
153cdf0e10cSrcweir if( aSize.Height() != 0 && aSize.Width() != 0 )
154cdf0e10cSrcweir {
155cdf0e10cSrcweir Point aPos( rMaxRect.TopLeft() );
156cdf0e10cSrcweir
157cdf0e10cSrcweir // Falls Grafik zu gross, wird die Grafik
158cdf0e10cSrcweir // in die Seite eingepasst
159cdf0e10cSrcweir if ( (!bShrinkOnly ||
160cdf0e10cSrcweir ( aSize.Height() > aMaxSize.Height() ) ||
161cdf0e10cSrcweir ( aSize.Width() > aMaxSize.Width() ) )&&
162cdf0e10cSrcweir aSize.Height() && aMaxSize.Height() )
163cdf0e10cSrcweir {
164cdf0e10cSrcweir float fGrfWH = (float)aSize.Width() /
165cdf0e10cSrcweir (float)aSize.Height();
166cdf0e10cSrcweir float fWinWH = (float)aMaxSize.Width() /
167cdf0e10cSrcweir (float)aMaxSize.Height();
168cdf0e10cSrcweir
169cdf0e10cSrcweir // Grafik an Pagesize anpassen (skaliert)
170cdf0e10cSrcweir if ( fGrfWH < fWinWH )
171cdf0e10cSrcweir {
172cdf0e10cSrcweir aSize.Width() = (long)(aMaxSize.Height() * fGrfWH);
173cdf0e10cSrcweir aSize.Height()= aMaxSize.Height();
174cdf0e10cSrcweir }
175cdf0e10cSrcweir else if ( fGrfWH > 0.F )
176cdf0e10cSrcweir {
177cdf0e10cSrcweir aSize.Width() = aMaxSize.Width();
178cdf0e10cSrcweir aSize.Height()= (long)(aMaxSize.Width() / fGrfWH);
179cdf0e10cSrcweir }
180cdf0e10cSrcweir
181cdf0e10cSrcweir aPos = rMaxRect.Center();
182cdf0e10cSrcweir }
183cdf0e10cSrcweir
184cdf0e10cSrcweir if( bShrinkOnly )
185cdf0e10cSrcweir aPos = aRect.TopLeft();
186cdf0e10cSrcweir
187cdf0e10cSrcweir aPos.X() -= aSize.Width() / 2;
188cdf0e10cSrcweir aPos.Y() -= aSize.Height() / 2;
189cdf0e10cSrcweir SetLogicRect( Rectangle( aPos, aSize ) );
190cdf0e10cSrcweir }
191cdf0e10cSrcweir }
192cdf0e10cSrcweir
193cdf0e10cSrcweir // ------------------------------------------------------------------------------
194cdf0e10cSrcweir
setURL(const::rtl::OUString & rURL)195cdf0e10cSrcweir void SdrMediaObj::setURL( const ::rtl::OUString& rURL )
196cdf0e10cSrcweir {
197cdf0e10cSrcweir ::avmedia::MediaItem aURLItem;
198cdf0e10cSrcweir
199cdf0e10cSrcweir aURLItem.setURL( rURL );
200cdf0e10cSrcweir setMediaProperties( aURLItem );
201cdf0e10cSrcweir }
202cdf0e10cSrcweir
203cdf0e10cSrcweir // ------------------------------------------------------------------------------
204cdf0e10cSrcweir
getURL() const205cdf0e10cSrcweir const ::rtl::OUString& SdrMediaObj::getURL() const
206cdf0e10cSrcweir {
207cdf0e10cSrcweir return getMediaProperties().getURL();
208cdf0e10cSrcweir }
209cdf0e10cSrcweir
210cdf0e10cSrcweir // ------------------------------------------------------------------------------
211cdf0e10cSrcweir
setMediaProperties(const::avmedia::MediaItem & rState)212cdf0e10cSrcweir void SdrMediaObj::setMediaProperties( const ::avmedia::MediaItem& rState )
213cdf0e10cSrcweir {
214cdf0e10cSrcweir mediaPropertiesChanged( rState );
215cdf0e10cSrcweir static_cast< ::sdr::contact::ViewContactOfSdrMediaObj& >( GetViewContact() ).executeMediaItem( getMediaProperties() );
216cdf0e10cSrcweir }
217cdf0e10cSrcweir
218cdf0e10cSrcweir // ------------------------------------------------------------------------------
219cdf0e10cSrcweir
getMediaProperties() const220cdf0e10cSrcweir const ::avmedia::MediaItem& SdrMediaObj::getMediaProperties() const
221cdf0e10cSrcweir {
222cdf0e10cSrcweir return maMediaProperties;
223cdf0e10cSrcweir }
224cdf0e10cSrcweir
225cdf0e10cSrcweir // ------------------------------------------------------------------------------
226cdf0e10cSrcweir
hasPreferredSize() const227cdf0e10cSrcweir bool SdrMediaObj::hasPreferredSize() const
228cdf0e10cSrcweir {
229cdf0e10cSrcweir return static_cast< ::sdr::contact::ViewContactOfSdrMediaObj& >( GetViewContact() ).hasPreferredSize();
230cdf0e10cSrcweir }
231cdf0e10cSrcweir
232cdf0e10cSrcweir // ------------------------------------------------------------------------------
233cdf0e10cSrcweir
getPreferredSize() const234cdf0e10cSrcweir Size SdrMediaObj::getPreferredSize() const
235cdf0e10cSrcweir {
236cdf0e10cSrcweir return static_cast< ::sdr::contact::ViewContactOfSdrMediaObj& >( GetViewContact() ).getPreferredSize();
237cdf0e10cSrcweir }
238cdf0e10cSrcweir
239cdf0e10cSrcweir // ------------------------------------------------------------------------------
240cdf0e10cSrcweir
getGraphic() const241cdf0e10cSrcweir const Graphic& SdrMediaObj::getGraphic() const
242cdf0e10cSrcweir {
243cdf0e10cSrcweir if( !mapGraphic.get() )
244cdf0e10cSrcweir const_cast< SdrMediaObj* >( this )->mapGraphic.reset( new Graphic( ::avmedia::MediaWindow::grabFrame( getURL(), true ) ) );
245cdf0e10cSrcweir
246cdf0e10cSrcweir return *mapGraphic;
247cdf0e10cSrcweir }
248cdf0e10cSrcweir
249cdf0e10cSrcweir // ------------------------------------------------------------------------------
250cdf0e10cSrcweir
setGraphic(const Graphic * pGraphic)251cdf0e10cSrcweir void SdrMediaObj::setGraphic( const Graphic* pGraphic )
252cdf0e10cSrcweir {
253cdf0e10cSrcweir mapGraphic.reset( pGraphic ? new Graphic( *pGraphic ) : NULL );
254cdf0e10cSrcweir }
255cdf0e10cSrcweir
256cdf0e10cSrcweir // ------------------------------------------------------------------------------
257cdf0e10cSrcweir
mediaPropertiesChanged(const::avmedia::MediaItem & rNewProperties)258cdf0e10cSrcweir void SdrMediaObj::mediaPropertiesChanged( const ::avmedia::MediaItem& rNewProperties )
259cdf0e10cSrcweir {
260cdf0e10cSrcweir const sal_uInt32 nMaskSet = rNewProperties.getMaskSet();
261cdf0e10cSrcweir
262cdf0e10cSrcweir // use only a subset of MediaItem properties for own own properties
263cdf0e10cSrcweir if( ( AVMEDIA_SETMASK_URL & nMaskSet ) &&
264cdf0e10cSrcweir ( rNewProperties.getURL() != getURL() ) )
265cdf0e10cSrcweir {
266cdf0e10cSrcweir setGraphic();
267cdf0e10cSrcweir maMediaProperties.setURL( rNewProperties.getURL() );
268cdf0e10cSrcweir }
269cdf0e10cSrcweir
270cdf0e10cSrcweir if( AVMEDIA_SETMASK_LOOP & nMaskSet )
271cdf0e10cSrcweir maMediaProperties.setLoop( rNewProperties.isLoop() );
272cdf0e10cSrcweir
273cdf0e10cSrcweir if( AVMEDIA_SETMASK_MUTE & nMaskSet )
274cdf0e10cSrcweir maMediaProperties.setMute( rNewProperties.isMute() );
275cdf0e10cSrcweir
276cdf0e10cSrcweir if( AVMEDIA_SETMASK_VOLUMEDB & nMaskSet )
277cdf0e10cSrcweir maMediaProperties.setVolumeDB( rNewProperties.getVolumeDB() );
278cdf0e10cSrcweir
279cdf0e10cSrcweir if( AVMEDIA_SETMASK_ZOOM & nMaskSet )
280cdf0e10cSrcweir maMediaProperties.setZoom( rNewProperties.getZoom() );
281cdf0e10cSrcweir }
282