1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#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 );
}