void UBGraphicsMediaItem::hasMediaChanged(bool hasMedia) { if(hasMedia && mMediaObject->isSeekable()) { Q_UNUSED(hasMedia); mMediaObject->seek(mInitialPos); UBGraphicsMediaItemDelegate *med = dynamic_cast<UBGraphicsMediaItemDelegate *>(Delegate()); if (med) med->updateTicker(initialPos()); } }
UBGraphicsMediaItem::UBGraphicsMediaItem(const QUrl& pMediaFileUrl, QGraphicsItem *parent) : UBGraphicsProxyWidget(parent) , mMuted(sIsMutedByDefault) , mMutedByUserAction(sIsMutedByDefault) , mMediaFileUrl(pMediaFileUrl) , mInitialPos(0) , mVideoWidget(NULL) , mAudioWidget(NULL) , mLinkedImage(NULL) { update(); mMediaObject = new Phonon::MediaObject(this); if (pMediaFileUrl.toLocalFile().contains("videos")) { mMediaType = mediaType_Video; mAudioOutput = new Phonon::AudioOutput(Phonon::VideoCategory, this); mMediaObject->setTickInterval(50); mVideoWidget = new Phonon::VideoWidget(); // owned and destructed by the scene ... Phonon::createPath(mMediaObject, mVideoWidget); /* * The VideoVidget should recover the size from the original movie, but this is not always true expecially on * windows and linux os. I don't know why? * In this case the wiget size is equal to QSize(1,1). */ if(mVideoWidget->sizeHint() == QSize(1,1)){ mVideoWidget->resize(320,240); } setWidget(mVideoWidget); haveLinkedImage = true; } else if (pMediaFileUrl.toLocalFile().contains("audios")) { mMediaType = mediaType_Audio; mAudioOutput = new Phonon::AudioOutput(Phonon::MusicCategory, this); mMediaObject->setTickInterval(1000); mAudioWidget = new QWidget(); mAudioWidget->resize(320,26); setWidget(mAudioWidget); haveLinkedImage = false; } Phonon::createPath(mMediaObject, mAudioOutput); mSource = Phonon::MediaSource(pMediaFileUrl); mMediaObject->setCurrentSource(mSource); UBGraphicsMediaItemDelegate* itemDelegate = new UBGraphicsMediaItemDelegate(this, mMediaObject); itemDelegate->init(); setDelegate(itemDelegate); mDelegate->frame()->setOperationMode(UBGraphicsDelegateFrame::Resizing); setData(UBGraphicsItemData::itemLayerType, QVariant(itemLayerType::ObjectItem)); //Necessary to set if we want z value to be assigned correctly connect(mDelegate, SIGNAL(showOnDisplayChanged(bool)), this, SLOT(showOnDisplayChanged(bool))); connect(mMediaObject, SIGNAL(hasVideoChanged(bool)), this, SLOT(hasMediaChanged(bool))); }
UBGraphicsMediaItem::UBGraphicsMediaItem(const QUrl& pMediaFileUrl, QGraphicsItem *parent) : UBGraphicsProxyWidget(parent) , mVideoWidget(NULL) , mAudioWidget(NULL) , mMuted(sIsMutedByDefault) , mMutedByUserAction(sIsMutedByDefault) , mMediaFileUrl(pMediaFileUrl) , mLinkedImage(NULL) , mInitialPos(0) { update(); mMediaObject = new Phonon::MediaObject(this); if (pMediaFileUrl.toLocalFile().contains("videos")) { mMediaType = mediaType_Video; mAudioOutput = new Phonon::AudioOutput(Phonon::VideoCategory, this); mMediaObject->setTickInterval(50); mVideoWidget = new Phonon::VideoWidget(); // owned and destructed by the scene ... Phonon::createPath(mMediaObject, mVideoWidget); if(mVideoWidget->sizeHint() == QSize(1,1)){ mVideoWidget->resize(320,240); } mVideoWidget->setMinimumSize(140,26); setWidget(mVideoWidget); haveLinkedImage = true; } else if (pMediaFileUrl.toLocalFile().contains("audios")) { mMediaType = mediaType_Audio; mAudioOutput = new Phonon::AudioOutput(Phonon::MusicCategory, this); mMediaObject->setTickInterval(1000); mAudioWidget = new UBAudioPresentationWidget(); int borderSize = 0; UBAudioPresentationWidget* pAudioWidget = dynamic_cast<UBAudioPresentationWidget*>(mAudioWidget); if (pAudioWidget) { borderSize = pAudioWidget->borderSize(); } mAudioWidget->resize(320,26+3*borderSize); mAudioWidget->setMinimumSize(150,26+borderSize); setWidget(mAudioWidget); haveLinkedImage = false; } Phonon::createPath(mMediaObject, mAudioOutput); mSource = Phonon::MediaSource(pMediaFileUrl); mMediaObject->setCurrentSource(mSource); UBGraphicsMediaItemDelegate* itemDelegate = new UBGraphicsMediaItemDelegate(this, mMediaObject); itemDelegate->init(); setDelegate(itemDelegate); if (mediaType_Audio == mMediaType) mDelegate->frame()->setOperationMode(UBGraphicsDelegateFrame::ResizingHorizontally); else mDelegate->frame()->setOperationMode(UBGraphicsDelegateFrame::Resizing); setData(UBGraphicsItemData::itemLayerType, QVariant(itemLayerType::ObjectItem)); //Necessary to set if we want z value to be assigned correctly connect(mDelegate, SIGNAL(showOnDisplayChanged(bool)), this, SLOT(showOnDisplayChanged(bool))); connect(mMediaObject, SIGNAL(hasVideoChanged(bool)), this, SLOT(hasMediaChanged(bool))); }