20 #include <config_features.h>
24 #include <rtl/ustring.hxx>
25 #include <osl/file.hxx>
28 #include <com/sun/star/document/XStorageBasedDocument.hpp>
29 #include <com/sun/star/embed/XStorage.hpp>
39 #include <svx/strings.hrc>
83 return std::make_unique<sdr::contact::ViewContactOfSdrMediaObj>( *this );
119 if (!aName.isEmpty())
127 return sName.makeStringAndClear();
132 return SvxResId(STR_ObjNamePluralMEDIA);
137 return CloneHelper< SdrMediaObj >(rTargetModel);
154 #if HAVE_FEATURE_AVMEDIA
155 if( !
m_xImpl->m_xCachedSnapshot.is() )
157 OUString aRealURL =
m_xImpl->m_MediaProperties.getTempURL();
158 if( aRealURL.isEmpty() )
159 aRealURL =
m_xImpl->m_MediaProperties.getURL();
163 return m_xImpl->m_xCachedSnapshot;
169 static_cast< sdr::contact::ViewContactOfSdrMediaObj& >(
GetViewContact() ).getPreferredSize(),
170 MapMode(MapUnit::Map100thMM)) );
178 if ( (!bShrinkOnly ||
179 ( aSize.
Height() > aMaxSize.Height() ) ||
180 ( aSize.
Width() > aMaxSize.Width() ) )&&
181 aSize.
Height() && aMaxSize.Height() )
183 float fGrfWH =
static_cast<float>(aSize.
Width()) /
184 static_cast<float>(aSize.
Height());
185 float fWinWH =
static_cast<float>(aMaxSize.Width()) /
186 static_cast<float>(aMaxSize.Height());
189 if ( fGrfWH < fWinWH )
191 aSize.
setWidth( static_cast<long>(aMaxSize.Height() * fGrfWH) );
194 else if ( fGrfWH > 0.
F )
197 aSize.
setHeight( static_cast<long>(aMaxSize.Width() / fGrfWH) );
207 aPos.AdjustY( -(aSize.
Height() / 2) );
215 #if HAVE_FEATURE_AVMEDIA
216 if( !rMimeType.isEmpty() )
217 m_xImpl->m_MediaProperties.setMimeType(rMimeType);
218 aURLItem.
setURL( rURL,
"", rReferer );
229 #if HAVE_FEATURE_AVMEDIA
230 return m_xImpl->m_MediaProperties.getURL();
245 return m_xImpl->m_MediaProperties;
252 SAL_WARN(
"svx",
"this is only intended for embedded media");
256 uno::Reference<ucb::XCommandEnvironment>(),
263 if (
m_xImpl->m_pTempFile ||
m_xImpl->m_LastFailedPkgURL.isEmpty())
265 SAL_WARN(
"svx",
"this is only intended for embedded media");
269 OUString tempFileURL;
278 m_xImpl->m_pTempFile.reset(new ::avmedia::MediaTempFile(tempFileURL));
279 #if HAVE_FEATURE_AVMEDIA
280 m_xImpl->m_MediaProperties.setURL(
281 m_xImpl->m_LastFailedPkgURL, tempFileURL,
"");
284 m_xImpl->m_LastFailedPkgURL.clear();
288 #if HAVE_FEATURE_AVMEDIA
289 static bool lcl_HandlePackageURL(
290 OUString
const & rURL,
292 OUString & o_rTempFileURL)
295 uno::Reference<io::XInputStream> xInStream;
299 catch (container::NoSuchElementException
const&)
301 SAL_INFO(
"svx",
"not found: '" << rURL <<
"'");
304 catch (uno::Exception
const&)
317 sal_Int32 nLastDot = rURL.lastIndexOf(
'.');
318 sal_Int32 nLastSlash = rURL.lastIndexOf(
'/');
319 OUString sDesiredExtension;
320 if (nLastDot > nLastSlash && nLastDot+1 < rURL.getLength())
321 sDesiredExtension = rURL.copy(nLastDot);
322 return ::avmedia::CreateMediaTempFile(xInStream, o_rTempFileURL, sDesiredExtension);
328 bool bBroadcastChanged =
false;
329 #if HAVE_FEATURE_AVMEDIA
333 if( AVMediaSetMask::MIME_TYPE & nMaskSet )
334 m_xImpl->m_MediaProperties.setMimeType( rNewProperties.getMimeType() );
336 if( ( AVMediaSetMask::URL & nMaskSet ) &&
337 ( rNewProperties.getURL() !=
getURL() ))
339 m_xImpl->m_xCachedSnapshot.clear();
340 OUString
const& url(rNewProperties.getURL());
341 if (url.startsWithIgnoreAsciiCase(
"vnd.sun.star.Package:"))
344 || (
m_xImpl->m_pTempFile->m_TempFileURL !=
345 rNewProperties.getTempURL()))
347 OUString tempFileURL;
349 lcl_HandlePackageURL(
357 new ::avmedia::MediaTempFile(tempFileURL));
358 m_xImpl->m_MediaProperties.setURL(url, tempFileURL,
"");
363 m_xImpl->m_MediaProperties.setURL(
"",
"",
"");
366 m_xImpl->m_LastFailedPkgURL = url;
371 m_xImpl->m_MediaProperties.setURL(url,
372 rNewProperties.getTempURL(),
"");
378 m_xImpl->m_MediaProperties.setURL(url,
"", rNewProperties.getReferer());
380 bBroadcastChanged =
true;
383 if( AVMediaSetMask::LOOP & nMaskSet )
384 m_xImpl->m_MediaProperties.setLoop( rNewProperties.isLoop() );
386 if( AVMediaSetMask::MUTE & nMaskSet )
387 m_xImpl->m_MediaProperties.setMute( rNewProperties.isMute() );
389 if( AVMediaSetMask::VOLUMEDB & nMaskSet )
390 m_xImpl->m_MediaProperties.setVolumeDB( rNewProperties.getVolumeDB() );
392 if( AVMediaSetMask::ZOOM & nMaskSet )
393 m_xImpl->m_MediaProperties.setZoom( rNewProperties.getZoom() );
395 (
void) rNewProperties;
398 if( bBroadcastChanged )
long AdjustX(long nHorzMove)
sdr::contact::ViewContact & GetViewContact() const
Rectangle objects (rectangle, circle, ...)
static OutputDevice * GetDefaultDevice()
OUString SvxResId(const char *pId)
#define TOOLS_WARN_EXCEPTION(area, stream)
void BroadcastObjectChange() const
SdrModel & getSdrModelFromSdrObject() const
virtual void SetLogicRect(const tools::Rectangle &rRect)
SdrRectObj & operator=(const SdrRectObj &rCopy)
css::uno::Reference< css::io::XInputStream > openStream()
#define SAL_INFO(area, stream)
Reference< XComponentContext > getProcessComponentContext()
#define SAL_WARN(area, stream)
virtual void SetChanged()
void setWidth(long nWidth)
css::uno::Reference< css::io::XInputStream > GetDocumentStream(OUString const &rURL,::comphelper::LifecycleProxy const &rProxy) const
void setHeight(long nHeight)