xref: /aoo42x/main/svx/source/svdraw/svdomedia.cxx (revision f6e50924)
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