| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_svx.hxx" |
| |
| #include <vcl/svapp.hxx> |
| |
| #include <svx/svdomedia.hxx> |
| #include "svx/svdglob.hxx" |
| #include "svx/svdstr.hrc" |
| #include <svx/sdr/contact/viewcontactofsdrmediaobj.hxx> |
| #include <avmedia/mediawindow.hxx> |
| |
| // --------------- |
| // - SdrMediaObj - |
| // --------------- |
| |
| TYPEINIT1( SdrMediaObj, SdrRectObj ); |
| |
| // ------------------------------------------------------------------------------ |
| |
| SdrMediaObj::SdrMediaObj() |
| { |
| } |
| |
| // ------------------------------------------------------------------------------ |
| |
| SdrMediaObj::SdrMediaObj( const Rectangle& rRect ) : |
| SdrRectObj( rRect ) |
| { |
| } |
| |
| // ------------------------------------------------------------------------------ |
| |
| SdrMediaObj::~SdrMediaObj() |
| { |
| } |
| |
| // ------------------------------------------------------------------------------ |
| |
| FASTBOOL SdrMediaObj::HasTextEdit() const |
| { |
| return sal_False; |
| } |
| |
| // ------------------------------------------------------------------------------ |
| |
| sdr::contact::ViewContact* SdrMediaObj::CreateObjectSpecificViewContact() |
| { |
| return new ::sdr::contact::ViewContactOfSdrMediaObj( *this ); |
| } |
| |
| // ------------------------------------------------------------------------------ |
| |
| void SdrMediaObj::TakeObjInfo( SdrObjTransformInfoRec& rInfo ) const |
| { |
| rInfo.bSelectAllowed = true; |
| rInfo.bMoveAllowed = true; |
| rInfo.bResizeFreeAllowed = true; |
| rInfo.bResizePropAllowed = true; |
| rInfo.bRotateFreeAllowed = false; |
| rInfo.bRotate90Allowed = false; |
| rInfo.bMirrorFreeAllowed = false; |
| rInfo.bMirror45Allowed = false; |
| rInfo.bMirror90Allowed = false; |
| rInfo.bTransparenceAllowed = false; |
| rInfo.bGradientAllowed = false; |
| rInfo.bShearAllowed = false; |
| rInfo.bEdgeRadiusAllowed = false; |
| rInfo.bNoOrthoDesired = false; |
| rInfo.bNoContortion = false; |
| rInfo.bCanConvToPath = false; |
| rInfo.bCanConvToPoly = false; |
| rInfo.bCanConvToContour = false; |
| rInfo.bCanConvToPathLineToArea = false; |
| rInfo.bCanConvToPolyLineToArea = false; |
| } |
| |
| // ------------------------------------------------------------------------------ |
| |
| sal_uInt16 SdrMediaObj::GetObjIdentifier() const |
| { |
| return sal_uInt16( OBJ_MEDIA ); |
| } |
| |
| // ------------------------------------------------------------------------------ |
| |
| void SdrMediaObj::TakeObjNameSingul(XubString& rName) const |
| { |
| rName=ImpGetResStr(STR_ObjNameSingulMEDIA); |
| |
| String aName( GetName() ); |
| |
| if(aName.Len()) |
| { |
| rName += sal_Unicode(' '); |
| rName += sal_Unicode('\''); |
| rName += aName; |
| rName += sal_Unicode('\''); |
| } |
| } |
| |
| // ------------------------------------------------------------------------------ |
| |
| void SdrMediaObj::TakeObjNamePlural(XubString& rName) const |
| { |
| rName=ImpGetResStr(STR_ObjNamePluralMEDIA); |
| } |
| |
| // ------------------------------------------------------------------------------ |
| |
| void SdrMediaObj::operator=(const SdrObject& rObj) |
| { |
| SdrRectObj::operator=( rObj ); |
| |
| if( rObj.ISA( SdrMediaObj ) ) |
| { |
| const SdrMediaObj& rMediaObj = static_cast< const SdrMediaObj& >( rObj ); |
| |
| setMediaProperties( rMediaObj.getMediaProperties() ); |
| setGraphic( rMediaObj.mapGraphic.get() ); |
| } |
| } |
| |
| // ------------------------------------------------------------------------------ |
| |
| void SdrMediaObj::AdjustToMaxRect( const Rectangle& rMaxRect, bool bShrinkOnly /* = false */ ) |
| { |
| Size aSize( Application::GetDefaultDevice()->PixelToLogic( getPreferredSize(), MAP_100TH_MM ) ); |
| Size aMaxSize( rMaxRect.GetSize() ); |
| |
| if( aSize.Height() != 0 && aSize.Width() != 0 ) |
| { |
| Point aPos( rMaxRect.TopLeft() ); |
| |
| // Falls Grafik zu gross, wird die Grafik |
| // in die Seite eingepasst |
| if ( (!bShrinkOnly || |
| ( aSize.Height() > aMaxSize.Height() ) || |
| ( aSize.Width() > aMaxSize.Width() ) )&& |
| aSize.Height() && aMaxSize.Height() ) |
| { |
| float fGrfWH = (float)aSize.Width() / |
| (float)aSize.Height(); |
| float fWinWH = (float)aMaxSize.Width() / |
| (float)aMaxSize.Height(); |
| |
| // Grafik an Pagesize anpassen (skaliert) |
| if ( fGrfWH < fWinWH ) |
| { |
| aSize.Width() = (long)(aMaxSize.Height() * fGrfWH); |
| aSize.Height()= aMaxSize.Height(); |
| } |
| else if ( fGrfWH > 0.F ) |
| { |
| aSize.Width() = aMaxSize.Width(); |
| aSize.Height()= (long)(aMaxSize.Width() / fGrfWH); |
| } |
| |
| aPos = rMaxRect.Center(); |
| } |
| |
| if( bShrinkOnly ) |
| aPos = aRect.TopLeft(); |
| |
| aPos.X() -= aSize.Width() / 2; |
| aPos.Y() -= aSize.Height() / 2; |
| SetLogicRect( Rectangle( aPos, aSize ) ); |
| } |
| } |
| |
| // ------------------------------------------------------------------------------ |
| |
| void SdrMediaObj::setURL( const ::rtl::OUString& rURL ) |
| { |
| ::avmedia::MediaItem aURLItem; |
| |
| aURLItem.setURL( rURL ); |
| setMediaProperties( aURLItem ); |
| } |
| |
| // ------------------------------------------------------------------------------ |
| |
| const ::rtl::OUString& SdrMediaObj::getURL() const |
| { |
| return getMediaProperties().getURL(); |
| } |
| |
| // ------------------------------------------------------------------------------ |
| |
| void SdrMediaObj::setMediaProperties( const ::avmedia::MediaItem& rState ) |
| { |
| mediaPropertiesChanged( rState ); |
| static_cast< ::sdr::contact::ViewContactOfSdrMediaObj& >( GetViewContact() ).executeMediaItem( getMediaProperties() ); |
| } |
| |
| // ------------------------------------------------------------------------------ |
| |
| const ::avmedia::MediaItem& SdrMediaObj::getMediaProperties() const |
| { |
| return maMediaProperties; |
| } |
| |
| // ------------------------------------------------------------------------------ |
| |
| bool SdrMediaObj::hasPreferredSize() const |
| { |
| return static_cast< ::sdr::contact::ViewContactOfSdrMediaObj& >( GetViewContact() ).hasPreferredSize(); |
| } |
| |
| // ------------------------------------------------------------------------------ |
| |
| Size SdrMediaObj::getPreferredSize() const |
| { |
| return static_cast< ::sdr::contact::ViewContactOfSdrMediaObj& >( GetViewContact() ).getPreferredSize(); |
| } |
| |
| // ------------------------------------------------------------------------------ |
| |
| const Graphic& SdrMediaObj::getGraphic() const |
| { |
| if( !mapGraphic.get() ) |
| const_cast< SdrMediaObj* >( this )->mapGraphic.reset( new Graphic( ::avmedia::MediaWindow::grabFrame( getURL(), true ) ) ); |
| |
| return *mapGraphic; |
| } |
| |
| // ------------------------------------------------------------------------------ |
| |
| void SdrMediaObj::setGraphic( const Graphic* pGraphic ) |
| { |
| mapGraphic.reset( pGraphic ? new Graphic( *pGraphic ) : NULL ); |
| } |
| |
| // ------------------------------------------------------------------------------ |
| |
| void SdrMediaObj::mediaPropertiesChanged( const ::avmedia::MediaItem& rNewProperties ) |
| { |
| const sal_uInt32 nMaskSet = rNewProperties.getMaskSet(); |
| |
| // use only a subset of MediaItem properties for own own properties |
| if( ( AVMEDIA_SETMASK_URL & nMaskSet ) && |
| ( rNewProperties.getURL() != getURL() ) ) |
| { |
| setGraphic(); |
| maMediaProperties.setURL( rNewProperties.getURL() ); |
| } |
| |
| if( AVMEDIA_SETMASK_LOOP & nMaskSet ) |
| maMediaProperties.setLoop( rNewProperties.isLoop() ); |
| |
| if( AVMEDIA_SETMASK_MUTE & nMaskSet ) |
| maMediaProperties.setMute( rNewProperties.isMute() ); |
| |
| if( AVMEDIA_SETMASK_VOLUMEDB & nMaskSet ) |
| maMediaProperties.setVolumeDB( rNewProperties.getVolumeDB() ); |
| |
| if( AVMEDIA_SETMASK_ZOOM & nMaskSet ) |
| maMediaProperties.setZoom( rNewProperties.getZoom() ); |
| } |