Moved WebRadioDialog from heap to stack

This commit is contained in:
Daniel Brunner
2018-11-18 15:27:07 +01:00
parent 2b4afe687e
commit 28d1bc1c6b
5 changed files with 69 additions and 67 deletions

View File

@@ -24,68 +24,68 @@
<translation>Stop</translation> <translation>Stop</translation>
</message> </message>
<message> <message>
<location filename="../webradiodialog.cpp" line="63"/> <location filename="../webradiodialog.cpp" line="54"/>
<source>Stopped</source> <source>Stopped</source>
<translation>Gestoppt</translation> <translation>Gestoppt</translation>
</message> </message>
<message> <message>
<location filename="../webradiodialog.cpp" line="64"/> <location filename="../webradiodialog.cpp" line="55"/>
<source>Playing</source> <source>Playing</source>
<translation>Wird abgespielt</translation> <translation>Wird abgespielt</translation>
</message> </message>
<message> <message>
<location filename="../webradiodialog.cpp" line="65"/> <location filename="../webradiodialog.cpp" line="56"/>
<source>Paused</source> <source>Paused</source>
<translation>Pausiert</translation> <translation>Pausiert</translation>
</message> </message>
<message> <message>
<location filename="../webradiodialog.cpp" line="68"/> <location filename="../webradiodialog.cpp" line="59"/>
<location filename="../webradiodialog.cpp" line="87"/> <location filename="../webradiodialog.cpp" line="78"/>
<source>Unknown</source> <source>Unknown</source>
<translation>Unbekannt</translation> <translation>Unbekannt</translation>
</message> </message>
<message> <message>
<location filename="../webradiodialog.cpp" line="76"/> <location filename="../webradiodialog.cpp" line="67"/>
<source>Unknown media</source> <source>Unknown media</source>
<translation>Unbekanntes Medium</translation> <translation>Unbekanntes Medium</translation>
</message> </message>
<message> <message>
<location filename="../webradiodialog.cpp" line="77"/> <location filename="../webradiodialog.cpp" line="68"/>
<source>No media</source> <source>No media</source>
<translation>Kein Medium</translation> <translation>Kein Medium</translation>
</message> </message>
<message> <message>
<location filename="../webradiodialog.cpp" line="78"/> <location filename="../webradiodialog.cpp" line="69"/>
<source>Loading media...</source> <source>Loading media...</source>
<translation>Lade Medium...</translation> <translation>Lade Medium...</translation>
</message> </message>
<message> <message>
<location filename="../webradiodialog.cpp" line="79"/> <location filename="../webradiodialog.cpp" line="70"/>
<source>Loaded media</source> <source>Loaded media</source>
<translation>Medium geladen</translation> <translation>Medium geladen</translation>
</message> </message>
<message> <message>
<location filename="../webradiodialog.cpp" line="80"/> <location filename="../webradiodialog.cpp" line="71"/>
<source>Stalled media</source> <source>Stalled media</source>
<translation>Medium angehalten</translation> <translation>Medium angehalten</translation>
</message> </message>
<message> <message>
<location filename="../webradiodialog.cpp" line="81"/> <location filename="../webradiodialog.cpp" line="72"/>
<source>Buffering media</source> <source>Buffering media</source>
<translation>Puffere Medium</translation> <translation>Puffere Medium</translation>
</message> </message>
<message> <message>
<location filename="../webradiodialog.cpp" line="82"/> <location filename="../webradiodialog.cpp" line="73"/>
<source>Buffered media</source> <source>Buffered media</source>
<translation>Medium gepuffert</translation> <translation>Medium gepuffert</translation>
</message> </message>
<message> <message>
<location filename="../webradiodialog.cpp" line="83"/> <location filename="../webradiodialog.cpp" line="74"/>
<source>End of media</source> <source>End of media</source>
<translation>Ende des Mediums</translation> <translation>Ende des Mediums</translation>
</message> </message>
<message> <message>
<location filename="../webradiodialog.cpp" line="84"/> <location filename="../webradiodialog.cpp" line="75"/>
<source>Invalid media</source> <source>Invalid media</source>
<translation>Ungültiges Medium</translation> <translation>Ungültiges Medium</translation>
</message> </message>
@@ -93,7 +93,7 @@
<context> <context>
<name>WebRadioPlugin</name> <name>WebRadioPlugin</name>
<message> <message>
<location filename="../webradioplugin.cpp" line="39"/> <location filename="../webradioplugin.cpp" line="48"/>
<source>Play webradio</source> <source>Play webradio</source>
<translation>Webradio spielen</translation> <translation>Webradio spielen</translation>
</message> </message>

View File

@@ -24,68 +24,68 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../webradiodialog.cpp" line="63"/> <location filename="../webradiodialog.cpp" line="54"/>
<source>Stopped</source> <source>Stopped</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../webradiodialog.cpp" line="64"/> <location filename="../webradiodialog.cpp" line="55"/>
<source>Playing</source> <source>Playing</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../webradiodialog.cpp" line="65"/> <location filename="../webradiodialog.cpp" line="56"/>
<source>Paused</source> <source>Paused</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../webradiodialog.cpp" line="68"/> <location filename="../webradiodialog.cpp" line="59"/>
<location filename="../webradiodialog.cpp" line="87"/> <location filename="../webradiodialog.cpp" line="78"/>
<source>Unknown</source> <source>Unknown</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../webradiodialog.cpp" line="76"/> <location filename="../webradiodialog.cpp" line="67"/>
<source>Unknown media</source> <source>Unknown media</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../webradiodialog.cpp" line="77"/> <location filename="../webradiodialog.cpp" line="68"/>
<source>No media</source> <source>No media</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../webradiodialog.cpp" line="78"/> <location filename="../webradiodialog.cpp" line="69"/>
<source>Loading media...</source> <source>Loading media...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../webradiodialog.cpp" line="79"/> <location filename="../webradiodialog.cpp" line="70"/>
<source>Loaded media</source> <source>Loaded media</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../webradiodialog.cpp" line="80"/> <location filename="../webradiodialog.cpp" line="71"/>
<source>Stalled media</source> <source>Stalled media</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../webradiodialog.cpp" line="81"/> <location filename="../webradiodialog.cpp" line="72"/>
<source>Buffering media</source> <source>Buffering media</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../webradiodialog.cpp" line="82"/> <location filename="../webradiodialog.cpp" line="73"/>
<source>Buffered media</source> <source>Buffered media</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../webradiodialog.cpp" line="83"/> <location filename="../webradiodialog.cpp" line="74"/>
<source>End of media</source> <source>End of media</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../webradiodialog.cpp" line="84"/> <location filename="../webradiodialog.cpp" line="75"/>
<source>Invalid media</source> <source>Invalid media</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -93,7 +93,7 @@
<context> <context>
<name>WebRadioPlugin</name> <name>WebRadioPlugin</name>
<message> <message>
<location filename="../webradioplugin.cpp" line="39"/> <location filename="../webradioplugin.cpp" line="48"/>
<source>Play webradio</source> <source>Play webradio</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

View File

@@ -4,20 +4,20 @@
#include "mainwindow.h" #include "mainwindow.h"
#include "zeiterfassungsettings.h" #include "zeiterfassungsettings.h"
WebRadioDialog::WebRadioDialog(MainWindow &mainWindow) : WebRadioDialog::WebRadioDialog(QMediaPlayer &player, MainWindow &mainWindow) :
ZeiterfassungDialog(&mainWindow), ZeiterfassungDialog(&mainWindow),
ui(new Ui::WebRadioDialog), ui(new Ui::WebRadioDialog),
m_mainWindow(mainWindow), m_mainWindow(mainWindow),
m_settings(m_mainWindow.settings()) m_settings(m_mainWindow.settings()),
m_player(player)
{ {
ui->setupUi(this); ui->setupUi(this);
m_player = new QMediaPlayer(this); connect(&m_player, &QMediaPlayer::stateChanged, this, &WebRadioDialog::stateChanged);
connect(m_player, &QMediaPlayer::stateChanged, this, &WebRadioDialog::stateChanged); connect(&m_player, &QMediaPlayer::stateChanged, this, &WebRadioDialog::updateWidgets);
connect(m_player, &QMediaPlayer::stateChanged, this, &WebRadioDialog::updateWidgets); connect(&m_player, &QMediaPlayer::mediaStatusChanged, this, &WebRadioDialog::mediaStatusChanged);
connect(m_player, &QMediaPlayer::mediaStatusChanged, this, &WebRadioDialog::mediaStatusChanged); connect(&m_player, &QMediaPlayer::mediaStatusChanged, this, &WebRadioDialog::updateWidgets);
connect(m_player, &QMediaPlayer::mediaStatusChanged, this, &WebRadioDialog::updateWidgets); connect(&m_player, static_cast<void(QMediaPlayer::*)(QMediaPlayer::Error)>(&QMediaPlayer::error), this, &WebRadioDialog::error);
connect(m_player, static_cast<void(QMediaPlayer::*)(QMediaPlayer::Error)>(&QMediaPlayer::error), this, &WebRadioDialog::error);
for(const auto &url : m_settings.urls()) for(const auto &url : m_settings.urls())
ui->comboBox->addItem(url, url); ui->comboBox->addItem(url, url);
@@ -31,28 +31,19 @@ WebRadioDialog::WebRadioDialog(MainWindow &mainWindow) :
this, &WebRadioDialog::updateWidgets); this, &WebRadioDialog::updateWidgets);
connect(ui->pushButtonPlay, &QAbstractButton::pressed, this, &WebRadioDialog::play); connect(ui->pushButtonPlay, &QAbstractButton::pressed, this, &WebRadioDialog::play);
connect(ui->pushButtonPause, &QAbstractButton::pressed, m_player, &QMediaPlayer::pause); connect(ui->pushButtonPause, &QAbstractButton::pressed, &m_player, &QMediaPlayer::pause);
connect(ui->pushButtonStop, &QAbstractButton::pressed, m_player, &QMediaPlayer::stop); connect(ui->pushButtonStop, &QAbstractButton::pressed, &m_player, &QMediaPlayer::stop);
m_player->setVolume(m_settings.volume()); ui->horizontalSlider->setValue(m_player.volume());
ui->horizontalSlider->setValue(m_player->volume());
connect(ui->horizontalSlider, &QAbstractSlider::valueChanged, this, &WebRadioDialog::volumeChanged); connect(ui->horizontalSlider, &QAbstractSlider::valueChanged, this, &WebRadioDialog::volumeChanged);
stateChanged(m_player->state()); stateChanged(m_player.state());
mediaStatusChanged(m_player->mediaStatus()); mediaStatusChanged(m_player.mediaStatus());
currentIndexChanged(ui->comboBox->currentIndex());
updateWidgets(); updateWidgets();
} }
WebRadioDialog::~WebRadioDialog() WebRadioDialog::~WebRadioDialog()
{ {
// To avoid crash on app close
disconnect(m_player, &QMediaPlayer::stateChanged, this, &WebRadioDialog::stateChanged);
disconnect(m_player, &QMediaPlayer::stateChanged, this, &WebRadioDialog::updateWidgets);
disconnect(m_player, &QMediaPlayer::mediaStatusChanged, this, &WebRadioDialog::mediaStatusChanged);
disconnect(m_player, &QMediaPlayer::mediaStatusChanged, this, &WebRadioDialog::updateWidgets);
disconnect(m_player, static_cast<void(QMediaPlayer::*)(QMediaPlayer::Error)>(&QMediaPlayer::error), this, &WebRadioDialog::error);
delete ui; delete ui;
} }
@@ -96,9 +87,10 @@ void WebRadioDialog::error(QMediaPlayer::Error error)
void WebRadioDialog::currentIndexChanged(int index) void WebRadioDialog::currentIndexChanged(int index)
{ {
if(index == -1) if(index == -1)
m_player->setMedia(QMediaContent()); m_player.setMedia(QMediaContent());
else else
m_player->setMedia(QMediaContent(QUrl(ui->comboBox->currentData().toString()))); m_player.setMedia(QMediaContent(QUrl(ui->comboBox->currentData().toString())));
m_settings.setLastUrl(ui->comboBox->currentData().toString());
} }
void WebRadioDialog::play() void WebRadioDialog::play()
@@ -106,23 +98,21 @@ void WebRadioDialog::play()
if(ui->comboBox->currentIndex() == -1) if(ui->comboBox->currentIndex() == -1)
return; return;
m_settings.setLastUrl(ui->comboBox->currentData().toString()); m_player.play();
m_player->play();
} }
void WebRadioDialog::updateWidgets() void WebRadioDialog::updateWidgets()
{ {
ui->comboBox->setEnabled(m_player->state() != QMediaPlayer::PlayingState); ui->comboBox->setEnabled(m_player.state() != QMediaPlayer::PlayingState);
ui->pushButtonPlay->setEnabled(ui->comboBox->currentIndex() > -1 && ui->pushButtonPlay->setEnabled(ui->comboBox->currentIndex() > -1 &&
(m_player->state() == QMediaPlayer::StoppedState || m_player->state() == QMediaPlayer::PausedState) && (m_player.state() == QMediaPlayer::StoppedState || m_player.state() == QMediaPlayer::PausedState) &&
(m_player->mediaStatus() == QMediaPlayer::LoadedMedia || m_player->mediaStatus() == QMediaPlayer::BufferedMedia)); (m_player.mediaStatus() == QMediaPlayer::LoadedMedia || m_player.mediaStatus() == QMediaPlayer::BufferedMedia));
ui->pushButtonPause->setEnabled(m_player->state() == QMediaPlayer::PlayingState || m_player->state() == QMediaPlayer::PausedState); ui->pushButtonPause->setEnabled(m_player.state() == QMediaPlayer::PlayingState || m_player.state() == QMediaPlayer::PausedState);
ui->pushButtonStop->setEnabled(m_player->state() == QMediaPlayer::PlayingState || m_player->state() == QMediaPlayer::PausedState); ui->pushButtonStop->setEnabled(m_player.state() == QMediaPlayer::PlayingState || m_player.state() == QMediaPlayer::PausedState);
} }
void WebRadioDialog::volumeChanged(int volume) void WebRadioDialog::volumeChanged(int volume)
{ {
m_settings.setVolume(volume); m_settings.setVolume(volume);
m_player->setVolume(volume); m_player.setVolume(volume);
} }

View File

@@ -15,7 +15,7 @@ class WebRadioDialog : public ZeiterfassungDialog
Q_OBJECT Q_OBJECT
public: public:
explicit WebRadioDialog(MainWindow &mainWindow); explicit WebRadioDialog(QMediaPlayer &player, MainWindow &mainWindow);
~WebRadioDialog(); ~WebRadioDialog();
private Q_SLOTS: private Q_SLOTS:
@@ -34,5 +34,5 @@ private:
MainWindow &m_mainWindow; MainWindow &m_mainWindow;
WebRadioSettings m_settings; WebRadioSettings m_settings;
QMediaPlayer *m_player; QMediaPlayer &m_player;
}; };

View File

@@ -4,6 +4,7 @@
#include <QDir> #include <QDir>
#include <QCoreApplication> #include <QCoreApplication>
#include <QLocale> #include <QLocale>
#include <QMediaPlayer>
#include <QMenu> #include <QMenu>
#include <QAction> #include <QAction>
@@ -11,6 +12,7 @@
#include "mainwindow.h" #include "mainwindow.h"
#include "webradiosettings.h"
#include "webradiodialog.h" #include "webradiodialog.h"
#include "webradiosettingswidget.h" #include "webradiosettingswidget.h"
@@ -34,9 +36,19 @@ WebRadioPlugin::WebRadioPlugin(QObject *parent) :
void WebRadioPlugin::attachTo(MainWindow &mainWindow) void WebRadioPlugin::attachTo(MainWindow &mainWindow)
{ {
auto dialog = new WebRadioDialog(mainWindow); auto mediaPlayer = [&mainWindow](){
auto mediaPlayer = new QMediaPlayer(&mainWindow);
WebRadioSettings settings(mainWindow.settings());
mediaPlayer->setVolume(settings.volume());
mediaPlayer->setMedia(QMediaContent(QUrl(settings.lastUrl())));
return mediaPlayer;
}();
mainWindow.menuTools()->addAction(QIcon(QStringLiteral(":/zeiterfassung/plugins/webradioplugin/images/web-radio.png")), mainWindow.menuTools()->addAction(QIcon(QStringLiteral(":/zeiterfassung/plugins/webradioplugin/images/web-radio.png")),
tr("Play webradio"), dialog, &QWidget::show); tr("Play webradio"), &mainWindow, [mediaPlayer, &mainWindow](){
WebRadioDialog dialog(*mediaPlayer, mainWindow);
dialog.exec();
});
} }
SettingsWidget *WebRadioPlugin::settingsWidget(ZeiterfassungSettings &settings, QWidget *parent) const SettingsWidget *WebRadioPlugin::settingsWidget(ZeiterfassungSettings &settings, QWidget *parent) const