File indexing completed on 2024-12-01 06:41:25

0001 /*
0002     SPDX-FileCopyrightText: 2010 Daniel Laidig <d.laidig@gmx.de>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #include "audiobutton.h"
0007 
0008 #include <KLocalizedString>
0009 #include <QAudioOutput>
0010 
0011 using namespace Practice;
0012 
0013 AudioButton::AudioButton(QWidget *parent)
0014     : QToolButton(parent)
0015     , m_player(nullptr)
0016 {
0017     setEnabled(false);
0018     setIcon(QIcon::fromTheme(QStringLiteral("media-playback-start")));
0019     setText(i18n("Play"));
0020     setToolTip(i18n("Play"));
0021     connect(this, &AudioButton::clicked, this, &AudioButton::playAudio);
0022     connect(parent, SIGNAL(stopAudio()), this, SLOT(stopAudio()));
0023 }
0024 
0025 void AudioButton::setSoundFile(const QUrl &soundFile)
0026 {
0027     m_url = soundFile;
0028     setEnabled(!m_url.isEmpty() && m_url.isLocalFile());
0029 }
0030 
0031 void AudioButton::playAudio()
0032 {
0033     if (!m_player) {
0034         m_player = new QMediaPlayer(this);
0035         connect(m_player, &QMediaPlayer::playbackStateChanged, this, &AudioButton::playerStateChanged);
0036         m_player->setAudioOutput(new QAudioOutput);
0037     } else {
0038         if (m_player->playbackState() == QMediaPlayer::PlayingState) {
0039             m_player->stop();
0040         }
0041     }
0042     m_player->setSource(m_url);
0043     m_player->audioOutput()->setVolume(50);
0044     m_player->play();
0045 }
0046 
0047 void AudioButton::stopAudio()
0048 {
0049     if (m_player && m_player->playbackState() == QMediaPlayer::PlayingState) {
0050         m_player->stop();
0051     }
0052 }
0053 
0054 void AudioButton::playerStateChanged(QMediaPlayer::PlaybackState newState)
0055 {
0056     switch (newState) {
0057     case QMediaPlayer::PlayingState:
0058         setIcon(QIcon::fromTheme(QStringLiteral("media-playback-stop")));
0059         setText(i18n("Stop"));
0060         setToolTip(i18n("Stop"));
0061         break;
0062     case QMediaPlayer::StoppedState:
0063     case QMediaPlayer::PausedState:
0064         setIcon(QIcon::fromTheme(QStringLiteral("media-playback-start")));
0065         setToolTip(i18n("Play"));
0066         setText(i18n("Play"));
0067         break;
0068     }
0069 }
0070 
0071 #include "moc_audiobutton.cpp"