diff --git a/src/midisequencer.h b/src/midisequencer.h --- a/src/midisequencer.h +++ b/src/midisequencer.h @@ -64,6 +64,7 @@ void volumeChanged(unsigned int vol); void tempoChanged(unsigned int vol); void pitchChanged(unsigned int vol); + void playPauseStateChanged(QString state); public Q_SLOTS: void play(); @@ -95,7 +96,7 @@ void eventReceived(drumstick::SequencerEvent *ev); void outputThreadStopped(); - void resetTimer(); + void resetMidiPlayer(); private: void appendEvent(drumstick::SequencerEvent *ev); diff --git a/src/midisequencer.cpp b/src/midisequencer.cpp --- a/src/midisequencer.cpp +++ b/src/midisequencer.cpp @@ -105,7 +105,7 @@ // OutputThread m_midiSequencerOutputThread = new MidiSequencerOutputThread(m_client, m_outputPortId); connect(m_midiSequencerOutputThread, &MidiSequencerOutputThread::stopped, this, &MidiSequencer::outputThreadStopped); - connect(m_midiSequencerOutputThread, &MidiSequencerOutputThread::finished, this, &MidiSequencer::resetTimer); + connect(m_midiSequencerOutputThread, &MidiSequencerOutputThread::finished, this, &MidiSequencer::resetMidiPlayer); // Subscribe to Minuet's virtual piano try { @@ -177,9 +177,10 @@ return availableOutputPorts; } -void MidiSequencer::resetTimer() +void MidiSequencer::resetMidiPlayer() { emit timeLabelChanged(QStringLiteral("00:00.00")); + emit playPauseStateChanged("Play"); } void MidiSequencer::play() @@ -190,7 +191,9 @@ m_midiSequencerOutputThread->setSong(m_song); } m_midiSequencerOutputThread->start(); + emit playPauseStateChanged("Pause"); } + } void MidiSequencer::pause() @@ -199,6 +202,7 @@ m_midiSequencerOutputThread->stop(); m_midiSequencerOutputThread->setPosition(m_queue->getStatus().getTickTime()); } + emit playPauseStateChanged("Play"); } void MidiSequencer::stop() @@ -207,6 +211,7 @@ m_midiSequencerOutputThread->resetPosition(); emit allNotesOff(); emit timeLabelChanged(QStringLiteral("00:00.00")); + emit playPauseStateChanged("Play"); } void MidiSequencer::setVolumeFactor(unsigned int vol) diff --git a/src/qml/Main.qml b/src/qml/Main.qml --- a/src/qml/Main.qml +++ b/src/qml/Main.qml @@ -71,6 +71,7 @@ sequencer.volumeChanged.connect(midiPlayer.volumeChanged) sequencer.tempoChanged.connect(midiPlayer.tempoChanged) sequencer.pitchChanged.connect(midiPlayer.pitchChanged) + sequencer.playPauseStateChanged.connect(midiPlayer.playPauseStateChanged) exerciseView.answerHoverEnter.connect(pianoView.noteMark) exerciseView.answerHoverExit.connect(pianoView.noteUnmark) diff --git a/src/qml/midiplayer/MidiPlayer.qml b/src/qml/midiplayer/MidiPlayer.qml --- a/src/qml/midiplayer/MidiPlayer.qml +++ b/src/qml/midiplayer/MidiPlayer.qml @@ -28,6 +28,7 @@ function volumeChanged(value) { volumeLabel.text = i18n("Volume: %1\%").arg(value) } function tempoChanged(value) { tempoLabel.text = i18n("Tempo: %1 bpm").arg(value) } function pitchChanged(value) { pitchLabel.text = i18n("Pitch: %1").arg(value) } + function playPauseStateChanged(state) { item12.state = state } height: childrenRect.height + 15 anchors { left: parent.left; bottom: parent.bottom } @@ -83,22 +84,36 @@ font.pointSize: 24 color: "#008000" } - MultimediaButton { - id: item12 - anchors { top: playbackTime.bottom; horizontalCenter: playbackTime.horizontalCenter } - source: "../images/multimedia-pause.png" - text: i18n("Pause") - onActivated: sequencer.pause() - } MultimediaButton { - anchors { top: playbackTime.bottom; right: item12.left; rightMargin: -2 } - source: "../images/multimedia-play.png" - text: i18n("Play") - onActivated: sequencer.play() + id: item12 + anchors.horizontalCenterOffset: -30 + anchors { top: playbackTime.bottom; horizontalCenter: playbackTime.horizontalCenter;} + state: "Play" + states: [ + State { + name: "Play" + PropertyChanges { + target: item12; + text: i18n("Play") + onActivated: sequencer.play(); + source: "../images/multimedia-play.png" + } + }, + State { + name: "Pause" + PropertyChanges { + target: item12; + text: i18n("Pause") + onActivated: sequencer.pause(); + source: "../images/multimedia-pause.png" + } + } + ] } MultimediaButton { - anchors { top: playbackTime.bottom; left: item12.right; leftMargin: -2 } + anchors.horizontalCenterOffset: +30 + anchors { top: playbackTime.bottom; horizontalCenter: playbackTime.horizontalCenter;} source: "../images/multimedia-stop.png" text: i18n("Stop") onActivated: sequencer.stop()