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