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