From f397c64e9a1c3e1549aa784b5f4dcf87962f6bb5 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Thu, 21 Dec 2017 21:42:23 +0100 Subject: [PATCH 1/5] Added webradioplugin --- plugins/plugins.pro | 3 +- plugins/webradioplugin/images/web-radio.png | Bin 0 -> 4209 bytes .../translations/webradioplugin_de.ts | 12 ++++++ .../translations/webradioplugin_en.ts | 12 ++++++ plugins/webradioplugin/webradioplugin.cpp | 40 ++++++++++++++++++ plugins/webradioplugin/webradioplugin.h | 22 ++++++++++ plugins/webradioplugin/webradioplugin.json | 0 plugins/webradioplugin/webradioplugin.pro | 35 +++++++++++++++ .../webradioplugin_resources.qrc | 5 +++ 9 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 plugins/webradioplugin/images/web-radio.png create mode 100644 plugins/webradioplugin/translations/webradioplugin_de.ts create mode 100644 plugins/webradioplugin/translations/webradioplugin_en.ts create mode 100644 plugins/webradioplugin/webradioplugin.cpp create mode 100644 plugins/webradioplugin/webradioplugin.h create mode 100644 plugins/webradioplugin/webradioplugin.json create mode 100644 plugins/webradioplugin/webradioplugin.pro create mode 100644 plugins/webradioplugin/webradioplugin_resources.qrc diff --git a/plugins/plugins.pro b/plugins/plugins.pro index dab007d..5a6d1f5 100644 --- a/plugins/plugins.pro +++ b/plugins/plugins.pro @@ -6,4 +6,5 @@ SUBDIRS += advancedviewplugin \ presenceplugin \ reportsplugin \ updaterplugin \ - weatherplugin + weatherplugin \ + webradioplugin diff --git a/plugins/webradioplugin/images/web-radio.png b/plugins/webradioplugin/images/web-radio.png new file mode 100644 index 0000000000000000000000000000000000000000..c68d7c11690f317fe2d334bf8705d11bc5e390d5 GIT binary patch literal 4209 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 + + + + WebRadioPlugin + + + Play webradio + + + + diff --git a/plugins/webradioplugin/translations/webradioplugin_en.ts b/plugins/webradioplugin/translations/webradioplugin_en.ts new file mode 100644 index 0000000..9db9347 --- /dev/null +++ b/plugins/webradioplugin/translations/webradioplugin_en.ts @@ -0,0 +1,12 @@ + + + + + WebRadioPlugin + + + Play webradio + + + + diff --git a/plugins/webradioplugin/webradioplugin.cpp b/plugins/webradioplugin/webradioplugin.cpp new file mode 100644 index 0000000..98a0b99 --- /dev/null +++ b/plugins/webradioplugin/webradioplugin.cpp @@ -0,0 +1,40 @@ +#include "webradioplugin.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "mainwindow.h" + +WebRadioPlugin::WebRadioPlugin(QObject *parent) : + ZeiterfassungPlugin(parent) +{ + qDebug() << "called"; + + static auto dir = QDir(QCoreApplication::applicationDirPath()).absoluteFilePath(QStringLiteral("translations")); + + if(m_translator.load(QLocale(), QStringLiteral("webradioplugin"), QStringLiteral("_"), dir)) + { + if(!QCoreApplication::installTranslator(&m_translator)) + { + qWarning() << "could not install translation webradioplugin"; + } + } + else + { + qWarning() << "could not load translation webradioplugin"; + } +} + +void WebRadioPlugin::attachTo(MainWindow &mainWindow) +{ + auto dialog = new QDialog(&mainWindow); + dialog->setWindowFlag(Qt::WindowCloseButtonHint, true); + dialog->setWindowFlag(Qt::WindowContextHelpButtonHint, false); + mainWindow.menuTools()->addAction(QIcon(QStringLiteral(":/zeiterfassung/plugins/webradioplugin/images/web-radio.png")), + tr("Play webradio"), dialog, &QWidget::show); +} diff --git a/plugins/webradioplugin/webradioplugin.h b/plugins/webradioplugin/webradioplugin.h new file mode 100644 index 0000000..e11932d --- /dev/null +++ b/plugins/webradioplugin/webradioplugin.h @@ -0,0 +1,22 @@ +#pragma once + +#include +#include + +#include "zeiterfassungplugin.h" + +class Q_DECL_EXPORT WebRadioPlugin : public ZeiterfassungPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "dbsoftware.zeiterfassung.plugin/1.0" FILE "webradioplugin.json") + Q_INTERFACES(ZeiterfassungPlugin) + +public: + explicit WebRadioPlugin(QObject *parent = Q_NULLPTR); + + // ZeiterfassungPlugin interface + void attachTo(MainWindow &mainWindow) Q_DECL_OVERRIDE; + +private: + QTranslator m_translator; +}; diff --git a/plugins/webradioplugin/webradioplugin.json b/plugins/webradioplugin/webradioplugin.json new file mode 100644 index 0000000..e69de29 diff --git a/plugins/webradioplugin/webradioplugin.pro b/plugins/webradioplugin/webradioplugin.pro new file mode 100644 index 0000000..d56f0d6 --- /dev/null +++ b/plugins/webradioplugin/webradioplugin.pro @@ -0,0 +1,35 @@ +QT += core network gui widgets multimedia + +TARGET = webradioplugin +TEMPLATE = lib + +CONFIG += shared c++14 + +DESTDIR = $${OUT_PWD}/../../bin/plugins/zeiterfassung + +LIBS += -L$$OUT_PWD/../../lib -lzeiterfassungcorelib -lzeiterfassungguilib + +INCLUDEPATH += $$PWD/../../zeiterfassungcorelib $$PWD/../../zeiterfassungguilib +DEPENDPATH += $$PWD/../../zeiterfassungcorelib $$PWD/../../zeiterfassungguilib + +DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSAGELOGCONTEXT + +HEADERS += webradioplugin.h + +SOURCES += webradioplugin.cpp + +FORMS += + +RESOURCES += webradioplugin_resources.qrc + +TRANSLATIONS += translations/webradioplugin_en.ts \ + translations/webradioplugin_de.ts + +OTHER_FILES += webradioplugin.json + +include(../../lrelease.pri) + +COMPILED_TRANSLATIONS += $${OUT_PWD}/translations/webradioplugin_en.qm \ + $${OUT_PWD}/translations/webradioplugin_de.qm + +include(../copy_translations.pri) diff --git a/plugins/webradioplugin/webradioplugin_resources.qrc b/plugins/webradioplugin/webradioplugin_resources.qrc new file mode 100644 index 0000000..f7b12b5 --- /dev/null +++ b/plugins/webradioplugin/webradioplugin_resources.qrc @@ -0,0 +1,5 @@ + + + images/web-radio.png + + From 75f5825d2b08aecbe314494da3e8421e01dd1639 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Thu, 21 Dec 2017 21:46:47 +0100 Subject: [PATCH 2/5] Added WebRadioDialog --- .../translations/webradioplugin_de.ts | 15 +++- .../translations/webradioplugin_en.ts | 15 +++- plugins/webradioplugin/webradiodialog.cpp | 26 ++++++ plugins/webradioplugin/webradiodialog.h | 27 +++++++ plugins/webradioplugin/webradiodialog.ui | 81 +++++++++++++++++++ plugins/webradioplugin/webradioplugin.cpp | 7 +- plugins/webradioplugin/webradioplugin.pro | 9 ++- 7 files changed, 171 insertions(+), 9 deletions(-) create mode 100644 plugins/webradioplugin/webradiodialog.cpp create mode 100644 plugins/webradioplugin/webradiodialog.h create mode 100644 plugins/webradioplugin/webradiodialog.ui diff --git a/plugins/webradioplugin/translations/webradioplugin_de.ts b/plugins/webradioplugin/translations/webradioplugin_de.ts index 3e2f9c2..b0a61dd 100644 --- a/plugins/webradioplugin/translations/webradioplugin_de.ts +++ b/plugins/webradioplugin/translations/webradioplugin_de.ts @@ -1,10 +1,23 @@ + + WebRadioDialog + + + Dialog + + + + + PushButton + + + WebRadioPlugin - + Play webradio diff --git a/plugins/webradioplugin/translations/webradioplugin_en.ts b/plugins/webradioplugin/translations/webradioplugin_en.ts index 9db9347..6ed3a57 100644 --- a/plugins/webradioplugin/translations/webradioplugin_en.ts +++ b/plugins/webradioplugin/translations/webradioplugin_en.ts @@ -1,10 +1,23 @@ + + WebRadioDialog + + + Dialog + + + + + PushButton + + + WebRadioPlugin - + Play webradio diff --git a/plugins/webradioplugin/webradiodialog.cpp b/plugins/webradioplugin/webradiodialog.cpp new file mode 100644 index 0000000..8625153 --- /dev/null +++ b/plugins/webradioplugin/webradiodialog.cpp @@ -0,0 +1,26 @@ +#include "webradiodialog.h" +#include "ui_webradiodialog.h" + +#include + +WebRadioDialog::WebRadioDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::WebRadioDialog), + m_player(new QMediaPlayer(this)) +{ + ui->setupUi(this); + + m_player->setMedia(QMediaContent(QUrl(QStringLiteral("http://stream.drumandbass.fm:9002")))); + + connect(ui->pushButton, &QAbstractButton::pressed, m_player, &QMediaPlayer::play); +} + +WebRadioDialog::~WebRadioDialog() +{ + delete ui; +} + +void WebRadioDialog::play() +{ + +} diff --git a/plugins/webradioplugin/webradiodialog.h b/plugins/webradioplugin/webradiodialog.h new file mode 100644 index 0000000..2bdd804 --- /dev/null +++ b/plugins/webradioplugin/webradiodialog.h @@ -0,0 +1,27 @@ +#ifndef WEBRADIODIALOG_H +#define WEBRADIODIALOG_H + +#include + +class QMediaPlayer; + +namespace Ui { class WebRadioDialog; } + +class WebRadioDialog : public QDialog +{ + Q_OBJECT + +public: + explicit WebRadioDialog(QWidget *parent = 0); + ~WebRadioDialog(); + +private Q_SLOTS: + void play(); + +private: + Ui::WebRadioDialog *ui; + + QMediaPlayer *m_player; +}; + +#endif // WEBRADIODIALOG_H diff --git a/plugins/webradioplugin/webradiodialog.ui b/plugins/webradioplugin/webradiodialog.ui new file mode 100644 index 0000000..90cbbfb --- /dev/null +++ b/plugins/webradioplugin/webradiodialog.ui @@ -0,0 +1,81 @@ + + + WebRadioDialog + + + + 0 + 0 + 433 + 300 + + + + Dialog + + + + + 30 + 240 + 341 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Close + + + + + + 110 + 60 + 191 + 51 + + + + PushButton + + + + + + + buttonBox + accepted() + WebRadioDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + WebRadioDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/plugins/webradioplugin/webradioplugin.cpp b/plugins/webradioplugin/webradioplugin.cpp index 98a0b99..d6bd079 100644 --- a/plugins/webradioplugin/webradioplugin.cpp +++ b/plugins/webradioplugin/webradioplugin.cpp @@ -4,12 +4,13 @@ #include #include #include -#include #include #include #include "mainwindow.h" +#include "webradiodialog.h" + WebRadioPlugin::WebRadioPlugin(QObject *parent) : ZeiterfassungPlugin(parent) { @@ -32,9 +33,7 @@ WebRadioPlugin::WebRadioPlugin(QObject *parent) : void WebRadioPlugin::attachTo(MainWindow &mainWindow) { - auto dialog = new QDialog(&mainWindow); - dialog->setWindowFlag(Qt::WindowCloseButtonHint, true); - dialog->setWindowFlag(Qt::WindowContextHelpButtonHint, false); + auto dialog = new WebRadioDialog(&mainWindow); mainWindow.menuTools()->addAction(QIcon(QStringLiteral(":/zeiterfassung/plugins/webradioplugin/images/web-radio.png")), tr("Play webradio"), dialog, &QWidget::show); } diff --git a/plugins/webradioplugin/webradioplugin.pro b/plugins/webradioplugin/webradioplugin.pro index d56f0d6..b6ae942 100644 --- a/plugins/webradioplugin/webradioplugin.pro +++ b/plugins/webradioplugin/webradioplugin.pro @@ -14,11 +14,14 @@ DEPENDPATH += $$PWD/../../zeiterfassungcorelib $$PWD/../../zeiterfassungguilib DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSAGELOGCONTEXT -HEADERS += webradioplugin.h +HEADERS += webradioplugin.h \ + webradiodialog.h -SOURCES += webradioplugin.cpp +SOURCES += webradioplugin.cpp \ + webradiodialog.cpp -FORMS += +FORMS += \ + webradiodialog.ui RESOURCES += webradioplugin_resources.qrc From 59c877f9fc4707fdb19408ccc794b8606fb11465 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Fri, 22 Dec 2017 19:33:46 +0100 Subject: [PATCH 3/5] Added comboBox to choose from webradios --- plugins/webradioplugin/webradiodialog.cpp | 34 ++++++++++- plugins/webradioplugin/webradiodialog.ui | 72 +++++++++++++++++++++-- plugins/webradioplugin/webradioplugin.pro | 11 ++-- 3 files changed, 104 insertions(+), 13 deletions(-) diff --git a/plugins/webradioplugin/webradiodialog.cpp b/plugins/webradioplugin/webradiodialog.cpp index 8625153..39dd264 100644 --- a/plugins/webradioplugin/webradiodialog.cpp +++ b/plugins/webradioplugin/webradiodialog.cpp @@ -10,9 +10,39 @@ WebRadioDialog::WebRadioDialog(QWidget *parent) : { ui->setupUi(this); - m_player->setMedia(QMediaContent(QUrl(QStringLiteral("http://stream.drumandbass.fm:9002")))); + for(const auto &url : QStringList { + QStringLiteral("http://stream.drumandbass.fm:9002"), + QStringLiteral("http://stream.trap.fm:6002"), + QStringLiteral("http://stream.dubbase.fm:7002"), + QStringLiteral("http://lw1.mp3.tb-group.fm/hb.mp3"), + QStringLiteral("http://lw1.mp3.tb-group.fm/tb.mp3"), + QStringLiteral("http://lw1.mp3.tb-group.fm/tt.mp3"), + QStringLiteral("http://lw1.mp3.tb-group.fm/ht.mp3"), + QStringLiteral("http://lw1.mp3.tb-group.fm/trb.mp3"), + QStringLiteral("http://lw1.mp3.tb-group.fm/ct.mp3"), + QStringLiteral("http://lw1.mp3.tb-group.fm/clt.mp3"), + QStringLiteral("https://live.helsinki.at:8088/live160.ogg") + }) + { + ui->comboBox->addItem(url); + } - connect(ui->pushButton, &QAbstractButton::pressed, m_player, &QMediaPlayer::play); + connect(ui->comboBox, &QComboBox::currentTextChanged, this, [=](const QString &url){ m_player->setMedia(QMediaContent(QUrl(url))); }); + + Q_EMIT ui->comboBox->currentTextChanged(ui->comboBox->currentText()); + + connect(ui->pushButtonPlay, &QAbstractButton::pressed, m_player, &QMediaPlayer::play); + connect(ui->pushButtonPause, &QAbstractButton::pressed, m_player, &QMediaPlayer::pause); + connect(ui->pushButtonStop, &QAbstractButton::pressed, m_player, &QMediaPlayer::stop); + connect(ui->horizontalSlider, &QAbstractSlider::valueChanged, m_player, &QMediaPlayer::setVolume); + + connect(m_player, &QMediaPlayer::stateChanged, [](QMediaPlayer::State newState){ qDebug() << newState; }); + connect(m_player, &QMediaPlayer::mediaStatusChanged, [](QMediaPlayer::MediaStatus status){ qDebug() << status; }); + connect(m_player, static_cast(&QMediaPlayer::error), + [](QMediaPlayer::Error error){ qDebug() << error; }); + connect(m_player, SIGNAL(volumeChanged(int)), ui->horizontalSlider, SLOT(setValue(int))); + + Q_EMIT m_player->volumeChanged(m_player->volume()); } WebRadioDialog::~WebRadioDialog() diff --git a/plugins/webradioplugin/webradiodialog.ui b/plugins/webradioplugin/webradiodialog.ui index 90cbbfb..8d7d9eb 100644 --- a/plugins/webradioplugin/webradiodialog.ui +++ b/plugins/webradioplugin/webradiodialog.ui @@ -6,7 +6,7 @@ 0 0 - 433 + 539 300 @@ -29,17 +29,79 @@ QDialogButtonBox::Close - + - 110 + 20 60 - 191 + 131 51 - PushButton + play() + + + + + + 50 + 160 + 351 + 23 + + + + 24 + + + + + + 160 + 60 + 131 + 51 + + + + pause() + + + + + + 300 + 60 + 131 + 51 + + + + stop() + + + + + + 270 + 130 + 160 + 16 + + + + Qt::Horizontal + + + + + + 40 + 20 + 271 + 25 + diff --git a/plugins/webradioplugin/webradioplugin.pro b/plugins/webradioplugin/webradioplugin.pro index b6ae942..28eb042 100644 --- a/plugins/webradioplugin/webradioplugin.pro +++ b/plugins/webradioplugin/webradioplugin.pro @@ -14,14 +14,13 @@ DEPENDPATH += $$PWD/../../zeiterfassungcorelib $$PWD/../../zeiterfassungguilib DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSAGELOGCONTEXT -HEADERS += webradioplugin.h \ - webradiodialog.h +HEADERS += webradiodialog.h \ + webradioplugin.h -SOURCES += webradioplugin.cpp \ - webradiodialog.cpp +SOURCES += webradiodialog.cpp \ + webradioplugin.cpp -FORMS += \ - webradiodialog.ui +FORMS += webradiodialog.ui RESOURCES += webradioplugin_resources.qrc From c3c1b486ba193b4d415863e77332ee92b94d27f4 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Fri, 22 Dec 2017 20:14:01 +0100 Subject: [PATCH 4/5] WebRadioDialog now stores last used radio station in config --- plugins/webradioplugin/webradiodialog.cpp | 67 ++++++--- plugins/webradioplugin/webradiodialog.h | 11 +- plugins/webradioplugin/webradiodialog.ui | 169 ++++++++++------------ plugins/webradioplugin/webradioplugin.cpp | 2 +- 4 files changed, 134 insertions(+), 115 deletions(-) diff --git a/plugins/webradioplugin/webradiodialog.cpp b/plugins/webradioplugin/webradiodialog.cpp index 39dd264..81dcab3 100644 --- a/plugins/webradioplugin/webradiodialog.cpp +++ b/plugins/webradioplugin/webradiodialog.cpp @@ -1,16 +1,22 @@ #include "webradiodialog.h" #include "ui_webradiodialog.h" -#include +#include "mainwindow.h" +#include "zeiterfassungsettings.h" -WebRadioDialog::WebRadioDialog(QWidget *parent) : - QDialog(parent), +WebRadioDialog::WebRadioDialog(MainWindow &mainWindow) : + QDialog(&mainWindow), ui(new Ui::WebRadioDialog), + m_mainWindow(mainWindow), m_player(new QMediaPlayer(this)) { ui->setupUi(this); - for(const auto &url : QStringList { + connect(m_player, &QMediaPlayer::stateChanged, this, &WebRadioDialog::stateChanged); + connect(m_player, &QMediaPlayer::mediaStatusChanged, this, &WebRadioDialog::mediaStatusChanged); + connect(m_player, static_cast(&QMediaPlayer::error), this, &WebRadioDialog::error); + + for(const auto &url : m_mainWindow.settings().value(QStringLiteral("WebRadioPlugin/urls"), QStringList { QStringLiteral("http://stream.drumandbass.fm:9002"), QStringLiteral("http://stream.trap.fm:6002"), QStringLiteral("http://stream.dubbase.fm:7002"), @@ -22,27 +28,24 @@ WebRadioDialog::WebRadioDialog(QWidget *parent) : QStringLiteral("http://lw1.mp3.tb-group.fm/ct.mp3"), QStringLiteral("http://lw1.mp3.tb-group.fm/clt.mp3"), QStringLiteral("https://live.helsinki.at:8088/live160.ogg") - }) + }).toStringList()) { - ui->comboBox->addItem(url); + ui->comboBox->addItem(url, url); } - connect(ui->comboBox, &QComboBox::currentTextChanged, this, [=](const QString &url){ m_player->setMedia(QMediaContent(QUrl(url))); }); + auto lastUrl = m_mainWindow.settings().value(QStringLiteral("WebRadioPlugin/lastUrl")).toString(); + qDebug() << lastUrl; + auto index = ui->comboBox->findData(lastUrl); + qDebug() << index; + ui->comboBox->setCurrentIndex(index); - Q_EMIT ui->comboBox->currentTextChanged(ui->comboBox->currentText()); - - connect(ui->pushButtonPlay, &QAbstractButton::pressed, m_player, &QMediaPlayer::play); + connect(ui->pushButtonPlay, &QAbstractButton::pressed, this, &WebRadioDialog::play); connect(ui->pushButtonPause, &QAbstractButton::pressed, m_player, &QMediaPlayer::pause); connect(ui->pushButtonStop, &QAbstractButton::pressed, m_player, &QMediaPlayer::stop); - connect(ui->horizontalSlider, &QAbstractSlider::valueChanged, m_player, &QMediaPlayer::setVolume); - connect(m_player, &QMediaPlayer::stateChanged, [](QMediaPlayer::State newState){ qDebug() << newState; }); - connect(m_player, &QMediaPlayer::mediaStatusChanged, [](QMediaPlayer::MediaStatus status){ qDebug() << status; }); - connect(m_player, static_cast(&QMediaPlayer::error), - [](QMediaPlayer::Error error){ qDebug() << error; }); - connect(m_player, SIGNAL(volumeChanged(int)), ui->horizontalSlider, SLOT(setValue(int))); - - Q_EMIT m_player->volumeChanged(m_player->volume()); + m_player->setVolume(m_mainWindow.settings().value(QStringLiteral("WebRadioPlugin/volume"), 100).toInt()); + ui->horizontalSlider->setValue(m_player->volume()); + connect(ui->horizontalSlider, &QAbstractSlider::valueChanged, this, &WebRadioDialog::volumeChanged); } WebRadioDialog::~WebRadioDialog() @@ -50,7 +53,35 @@ WebRadioDialog::~WebRadioDialog() delete ui; } +void WebRadioDialog::stateChanged(QMediaPlayer::State newState) +{ + qDebug() << newState; +} + +void WebRadioDialog::mediaStatusChanged(QMediaPlayer::MediaStatus status) +{ + qDebug() << status; +} + +void WebRadioDialog::error(QMediaPlayer::Error error) +{ + qDebug() << error; +} + void WebRadioDialog::play() { + qDebug() << "called"; + if(ui->comboBox->currentIndex() == -1) + return; + m_mainWindow.settings().setValue(QStringLiteral("WebRadioPlugin/lastUrl"), ui->comboBox->currentData().toString()); + + m_player->setMedia(QMediaContent(QUrl(ui->comboBox->currentData().toString()))); + m_player->play(); +} + +void WebRadioDialog::volumeChanged(int volume) +{ + m_mainWindow.settings().setValue(QStringLiteral("WebRadioPlugin/volume"), volume); + m_player->setVolume(volume); } diff --git a/plugins/webradioplugin/webradiodialog.h b/plugins/webradioplugin/webradiodialog.h index 2bdd804..6a2d1df 100644 --- a/plugins/webradioplugin/webradiodialog.h +++ b/plugins/webradioplugin/webradiodialog.h @@ -2,8 +2,9 @@ #define WEBRADIODIALOG_H #include +#include -class QMediaPlayer; +class MainWindow; namespace Ui { class WebRadioDialog; } @@ -12,15 +13,21 @@ class WebRadioDialog : public QDialog Q_OBJECT public: - explicit WebRadioDialog(QWidget *parent = 0); + explicit WebRadioDialog(MainWindow &mainWindow); ~WebRadioDialog(); private Q_SLOTS: + void stateChanged(QMediaPlayer::State newState); + void mediaStatusChanged(QMediaPlayer::MediaStatus status); + void error(QMediaPlayer::Error error); + + void volumeChanged(int volume); void play(); private: Ui::WebRadioDialog *ui; + MainWindow &m_mainWindow; QMediaPlayer *m_player; }; diff --git a/plugins/webradioplugin/webradiodialog.ui b/plugins/webradioplugin/webradiodialog.ui index 8d7d9eb..07f2387 100644 --- a/plugins/webradioplugin/webradiodialog.ui +++ b/plugins/webradioplugin/webradiodialog.ui @@ -6,104 +6,85 @@ 0 0 - 539 - 300 + 494 + 155 - Dialog + Radio - - - - 30 - 240 - 341 - 32 - - - - Qt::Horizontal - - - QDialogButtonBox::Close - - - - - - 20 - 60 - 131 - 51 - - - - play() - - - - - - 50 - 160 - 351 - 23 - - - - 24 - - - - - - 160 - 60 - 131 - 51 - - - - pause() - - - - - - 300 - 60 - 131 - 51 - - - - stop() - - - - - - 270 - 130 - 160 - 16 - - - - Qt::Horizontal - - - - - - 40 - 20 - 271 - 25 - - - + + + + + + + + + + + 0 + 50 + + + + play() + + + + + + + + 0 + 50 + + + + pause() + + + + + + + + 0 + 50 + + + + stop() + + + + + + + Qt::Horizontal + + + + + + + + + TextLabel + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Close + + + + diff --git a/plugins/webradioplugin/webradioplugin.cpp b/plugins/webradioplugin/webradioplugin.cpp index d6bd079..9a749d7 100644 --- a/plugins/webradioplugin/webradioplugin.cpp +++ b/plugins/webradioplugin/webradioplugin.cpp @@ -33,7 +33,7 @@ WebRadioPlugin::WebRadioPlugin(QObject *parent) : void WebRadioPlugin::attachTo(MainWindow &mainWindow) { - auto dialog = new WebRadioDialog(&mainWindow); + auto dialog = new WebRadioDialog(mainWindow); mainWindow.menuTools()->addAction(QIcon(QStringLiteral(":/zeiterfassung/plugins/webradioplugin/images/web-radio.png")), tr("Play webradio"), dialog, &QWidget::show); } From eb9627d8a5f54c10adf8e3eb81d8cd9d71a25808 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Fri, 22 Dec 2017 20:44:58 +0100 Subject: [PATCH 5/5] Buttons are now disabled when not available in webradioplugin --- .../translations/webradioplugin_de.ts | 88 +++++++++++++++++-- .../translations/webradioplugin_en.ts | 82 ++++++++++++++++- plugins/webradioplugin/webradiodialog.cpp | 67 +++++++++++--- plugins/webradioplugin/webradiodialog.h | 4 +- plugins/webradioplugin/webradiodialog.ui | 27 ++++-- 5 files changed, 240 insertions(+), 28 deletions(-) diff --git a/plugins/webradioplugin/translations/webradioplugin_de.ts b/plugins/webradioplugin/translations/webradioplugin_de.ts index b0a61dd..c21f851 100644 --- a/plugins/webradioplugin/translations/webradioplugin_de.ts +++ b/plugins/webradioplugin/translations/webradioplugin_de.ts @@ -5,13 +5,89 @@ WebRadioDialog - Dialog - + Radio + Radio - - PushButton - + + Play + Abspielen + + + + Pause + Pause + + + + Stop + Stop + + + + Stopped + Gestoppt + + + + Playing + Wird abgespielt + + + + Paused + Pausiert + + + + + Unknown + Unbekannt + + + + Unknown media + Unbekanntes Medium + + + + No media + Kein Medium + + + + Loading media... + Lade Medium... + + + + Loaded media + Medium geladen + + + + Stalled media + Medium angehalten + + + + Buffering media + Puffere Medium + + + + Buffered media + Medium gepuffert + + + + End of media + Ende des Mediums + + + + Invalid media + Ungültiges Medium @@ -19,7 +95,7 @@ Play webradio - + Webradio spielen diff --git a/plugins/webradioplugin/translations/webradioplugin_en.ts b/plugins/webradioplugin/translations/webradioplugin_en.ts index 6ed3a57..e84a249 100644 --- a/plugins/webradioplugin/translations/webradioplugin_en.ts +++ b/plugins/webradioplugin/translations/webradioplugin_en.ts @@ -5,12 +5,88 @@ WebRadioDialog - Dialog + Radio - - PushButton + + Play + + + + + Pause + + + + + Stop + + + + + Stopped + + + + + Playing + + + + + Paused + + + + + + Unknown + + + + + Unknown media + + + + + No media + + + + + Loading media... + + + + + Loaded media + + + + + Stalled media + + + + + Buffering media + + + + + Buffered media + + + + + End of media + + + + + Invalid media diff --git a/plugins/webradioplugin/webradiodialog.cpp b/plugins/webradioplugin/webradiodialog.cpp index 81dcab3..b8ddc01 100644 --- a/plugins/webradioplugin/webradiodialog.cpp +++ b/plugins/webradioplugin/webradiodialog.cpp @@ -13,7 +13,9 @@ WebRadioDialog::WebRadioDialog(MainWindow &mainWindow) : ui->setupUi(this); connect(m_player, &QMediaPlayer::stateChanged, this, &WebRadioDialog::stateChanged); + connect(m_player, &QMediaPlayer::stateChanged, this, &WebRadioDialog::updateWidgets); connect(m_player, &QMediaPlayer::mediaStatusChanged, this, &WebRadioDialog::mediaStatusChanged); + connect(m_player, &QMediaPlayer::mediaStatusChanged, this, &WebRadioDialog::updateWidgets); connect(m_player, static_cast(&QMediaPlayer::error), this, &WebRadioDialog::error); for(const auto &url : m_mainWindow.settings().value(QStringLiteral("WebRadioPlugin/urls"), QStringList { @@ -33,11 +35,13 @@ WebRadioDialog::WebRadioDialog(MainWindow &mainWindow) : ui->comboBox->addItem(url, url); } - auto lastUrl = m_mainWindow.settings().value(QStringLiteral("WebRadioPlugin/lastUrl")).toString(); - qDebug() << lastUrl; - auto index = ui->comboBox->findData(lastUrl); - qDebug() << index; - ui->comboBox->setCurrentIndex(index); + ui->comboBox->setCurrentIndex(ui->comboBox->findData(m_mainWindow.settings().value(QStringLiteral("WebRadioPlugin/lastUrl")).toString())); + + connect(ui->comboBox, static_cast(&QComboBox::currentIndexChanged), + this, &WebRadioDialog::currentIndexChanged); + + connect(ui->comboBox, static_cast(&QComboBox::currentIndexChanged), + this, &WebRadioDialog::updateWidgets); connect(ui->pushButtonPlay, &QAbstractButton::pressed, this, &WebRadioDialog::play); connect(ui->pushButtonPause, &QAbstractButton::pressed, m_player, &QMediaPlayer::pause); @@ -46,6 +50,11 @@ WebRadioDialog::WebRadioDialog(MainWindow &mainWindow) : m_player->setVolume(m_mainWindow.settings().value(QStringLiteral("WebRadioPlugin/volume"), 100).toInt()); ui->horizontalSlider->setValue(m_player->volume()); connect(ui->horizontalSlider, &QAbstractSlider::valueChanged, this, &WebRadioDialog::volumeChanged); + + stateChanged(m_player->state()); + mediaStatusChanged(m_player->mediaStatus()); + currentIndexChanged(ui->comboBox->currentIndex()); + updateWidgets(); } WebRadioDialog::~WebRadioDialog() @@ -55,31 +64,69 @@ WebRadioDialog::~WebRadioDialog() void WebRadioDialog::stateChanged(QMediaPlayer::State newState) { - qDebug() << newState; + switch(newState) + { + case QMediaPlayer::StoppedState: ui->labelState->setText(tr("Stopped")); break; + case QMediaPlayer::PlayingState: ui->labelState->setText(tr("Playing")); break; + case QMediaPlayer::PausedState: ui->labelState->setText(tr("Paused")); break; + default: + qWarning() << "unknown state" << newState; + ui->labelState->setText(tr("Unknown")); + } } void WebRadioDialog::mediaStatusChanged(QMediaPlayer::MediaStatus status) { - qDebug() << status; + switch(status) + { + case QMediaPlayer::UnknownMediaStatus: ui->labelMediaStatus->setText(tr("Unknown media")); break; + case QMediaPlayer::NoMedia: ui->labelMediaStatus->setText(tr("No media")); break; + case QMediaPlayer::LoadingMedia: ui->labelMediaStatus->setText(tr("Loading media...")); break; + case QMediaPlayer::LoadedMedia: ui->labelMediaStatus->setText(tr("Loaded media")); break; + case QMediaPlayer::StalledMedia: ui->labelMediaStatus->setText(tr("Stalled media")); break; + case QMediaPlayer::BufferingMedia: ui->labelMediaStatus->setText(tr("Buffering media")); break; + case QMediaPlayer::BufferedMedia: ui->labelMediaStatus->setText(tr("Buffered media")); break; + case QMediaPlayer::EndOfMedia: ui->labelMediaStatus->setText(tr("End of media")); break; + case QMediaPlayer::InvalidMedia: ui->labelMediaStatus->setText(tr("Invalid media")); break; + default: + qWarning() << "unknown mediaStatus" << status; + ui->labelMediaStatus->setText(tr("Unknown")); + } } void WebRadioDialog::error(QMediaPlayer::Error error) { - qDebug() << error; + qWarning() << error; +} + +void WebRadioDialog::currentIndexChanged(int index) +{ + if(index == -1) + m_player->setMedia(QMediaContent()); + else + m_player->setMedia(QMediaContent(QUrl(ui->comboBox->currentData().toString()))); } void WebRadioDialog::play() { - qDebug() << "called"; if(ui->comboBox->currentIndex() == -1) return; m_mainWindow.settings().setValue(QStringLiteral("WebRadioPlugin/lastUrl"), ui->comboBox->currentData().toString()); - m_player->setMedia(QMediaContent(QUrl(ui->comboBox->currentData().toString()))); m_player->play(); } +void WebRadioDialog::updateWidgets() +{ + ui->comboBox->setEnabled(m_player->state() != QMediaPlayer::PlayingState); + ui->pushButtonPlay->setEnabled(ui->comboBox->currentIndex() > -1 && + (m_player->state() == QMediaPlayer::StoppedState || m_player->state() == QMediaPlayer::PausedState) && + (m_player->mediaStatus() == QMediaPlayer::LoadedMedia || m_player->mediaStatus() == QMediaPlayer::BufferedMedia)); + 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); +} + void WebRadioDialog::volumeChanged(int volume) { m_mainWindow.settings().setValue(QStringLiteral("WebRadioPlugin/volume"), volume); diff --git a/plugins/webradioplugin/webradiodialog.h b/plugins/webradioplugin/webradiodialog.h index 6a2d1df..ed40035 100644 --- a/plugins/webradioplugin/webradiodialog.h +++ b/plugins/webradioplugin/webradiodialog.h @@ -20,11 +20,13 @@ private Q_SLOTS: void stateChanged(QMediaPlayer::State newState); void mediaStatusChanged(QMediaPlayer::MediaStatus status); void error(QMediaPlayer::Error error); - + void currentIndexChanged(int index); void volumeChanged(int volume); void play(); private: + void updateWidgets(); + Ui::WebRadioDialog *ui; MainWindow &m_mainWindow; diff --git a/plugins/webradioplugin/webradiodialog.ui b/plugins/webradioplugin/webradiodialog.ui index 07f2387..5758e10 100644 --- a/plugins/webradioplugin/webradiodialog.ui +++ b/plugins/webradioplugin/webradiodialog.ui @@ -28,7 +28,7 @@ - play() + Play @@ -41,7 +41,7 @@ - pause() + Pause @@ -54,7 +54,7 @@ - stop() + Stop @@ -68,11 +68,22 @@ - - - TextLabel - - + + + + + state + + + + + + + mediaStatus + + + +