новые иконки в OpenBoard
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
OpenBoard/src/domain/UBGraphicsAudioItemDelegate...

119 lines
3.6 KiB

#include "UBGraphicsAudioItemDelegate.h"
#include "domain/UBGraphicsAudioItem.h"
#include "domain/UBGraphicsDelegateFrame.h"
#include "UBGraphicsScene.h"
UBGraphicsAudioItemDelegate::UBGraphicsAudioItemDelegate ( UBGraphicsAudioItem* pDelegated, QObject *parent )
: UBGraphicsItemDelegate ( pDelegated, parent )
, mDelegated ( pDelegated )
{
//NOOP
}
UBGraphicsAudioItemDelegate::~UBGraphicsAudioItemDelegate()
{
//NNOP
}
void UBGraphicsAudioItemDelegate::buildButtons()
{
mPlayPauseButton = new DelegateButton ( ":/images/play.svg", mDelegated, mFrame );
mStopButton = new DelegateButton ( ":/images/stop.svg", mDelegated, mFrame );
mStopButton->hide();
if ( mDelegated->isMuted() )
mMuteButton = new DelegateButton ( ":/images/soundOff.svg", mDelegated, mFrame );
else
mMuteButton = new DelegateButton ( ":/images/soundOn.svg", mDelegated, mFrame );
mMuteButton->hide();
connect ( mPlayPauseButton, SIGNAL ( clicked ( bool ) ), this, SLOT ( togglePlayPause() ) );
connect ( mStopButton, SIGNAL ( clicked ( bool ) ), mDelegated->mediaObject(), SLOT ( stop() ) );
connect ( mMuteButton, SIGNAL ( clicked ( bool ) ), mDelegated, SLOT ( toggleMute() ) );
connect ( mMuteButton, SIGNAL ( clicked ( bool ) ), this, SLOT ( toggleMute() ) );
connect ( mDelegated->mediaObject(), SIGNAL ( stateChanged ( Phonon::State, Phonon::State ) ), this, SLOT ( mediaStateChanged ( Phonon::State, Phonon::State ) ) );
connect ( mDelegated->mediaObject(), SIGNAL ( finished() ), this, SLOT ( updatePlayPauseState() ) );
mButtons << mPlayPauseButton << mStopButton << mMuteButton;
}
void UBGraphicsAudioItemDelegate::togglePlayPause()
{
if ( mDelegated && mDelegated->mediaObject() )
{
Phonon::MediaObject* media = mDelegated->mediaObject();
if ( media->state() == Phonon::StoppedState )
{
media->play();
}
else if ( media->state() == Phonon::PlayingState )
{
if ( media->remainingTime() <= 0 )
{
media->stop();
media->play();
}
else
{
media->pause();
if ( mDelegated->scene() )
mDelegated->scene()->setModified ( true );
}
}
else if ( media->state() == Phonon::PausedState )
{
if ( media->remainingTime() <= 0 )
{
media->stop();
}
media->play();
}
else if ( media->state() == Phonon::LoadingState ){
mDelegated->mediaObject()->setCurrentSource(mDelegated->mediaFileUrl());
media->play();
}
else{
qDebug() << "Media state "<< media->state() << " not supported";
}
}
}
void UBGraphicsAudioItemDelegate::toggleMute()
{
if ( mDelegated->isMuted() )
mMuteButton->setFileName ( ":/images/soundOff.svg" );
else
mMuteButton->setFileName ( ":/images/soundOn.svg" );
}
void UBGraphicsAudioItemDelegate::updatePlayPauseState()
{
Phonon::MediaObject* media = mDelegated->mediaObject();
if ( media->state() == Phonon::PlayingState )
mPlayPauseButton->setFileName ( ":/images/pause.svg" );
else
mPlayPauseButton->setFileName ( ":/images/play.svg" );
}
void UBGraphicsAudioItemDelegate::mediaStateChanged ( Phonon::State newstate, Phonon::State oldstate )
{
Q_UNUSED ( newstate );
Q_UNUSED ( oldstate );
updatePlayPauseState();
}
void UBGraphicsAudioItemDelegate::remove ( bool canUndo )
{
mDelegated->mediaObject()->stop();
UBGraphicsItemDelegate::remove ( canUndo );
}