/* * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "UBGraphicsAudioItemDelegate.h" #include "domain/UBGraphicsAudioItem.h" #include "domain/UBGraphicsDelegateFrame.h" #include "UBGraphicsScene.h" #include "core/memcheck.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 if (media->state() == Phonon::ErrorState){ qDebug() << "Error appeared." << media->errorString(); } } } 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 ); }