Webradio plugin settings #75

Merged
0xFEEDC0DE64 merged 8 commits from webradio-plugin-settings into master 2018-03-16 01:26:33 +01:00
15 changed files with 180 additions and 22 deletions

3
.gitmodules vendored Normal file
View File

@@ -0,0 +1,3 @@
[submodule "zeiterfassungguilib/QStringListWidget"]
path = zeiterfassungguilib/QStringListWidget
url = https://github.com/0xFEEDC0DE64/QStringListWidget.git

View File

@@ -10,6 +10,7 @@ class StripsWidget;
class LunchMealWidget : public QToolButton
{
Q_OBJECT
public:
explicit LunchMealWidget(StripsWidget &stripsWidget);

View File

@@ -14,6 +14,7 @@ class ZeiterfassungSettings;
class WeatherSettingsWidget : public SettingsWidget
{
Q_OBJECT
public:
explicit WeatherSettingsWidget(ZeiterfassungSettings &settings, QWidget *parent = Q_NULLPTR);

View File

@@ -7,7 +7,8 @@
WebRadioDialog::WebRadioDialog(MainWindow &mainWindow) :
ZeiterfassungDialog(&mainWindow),
ui(new Ui::WebRadioDialog),
m_mainWindow(mainWindow)
m_mainWindow(mainWindow),
m_settings(m_mainWindow.settings())
{
ui->setupUi(this);
@@ -18,24 +19,10 @@ WebRadioDialog::WebRadioDialog(MainWindow &mainWindow) :
connect(m_player, &QMediaPlayer::mediaStatusChanged, this, &WebRadioDialog::updateWidgets);
connect(m_player, static_cast<void(QMediaPlayer::*)(QMediaPlayer::Error)>(&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"),
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")
}).toStringList())
{
for(const auto &url : m_settings.urls())
ui->comboBox->addItem(url, url);
}
ui->comboBox->setCurrentIndex(ui->comboBox->findData(m_mainWindow.settings().value(QStringLiteral("WebRadioPlugin/lastUrl")).toString()));
ui->comboBox->setCurrentIndex(ui->comboBox->findData(m_settings.lastUrl()));
connect(ui->comboBox, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
this, &WebRadioDialog::currentIndexChanged);
@@ -47,7 +34,7 @@ WebRadioDialog::WebRadioDialog(MainWindow &mainWindow) :
connect(ui->pushButtonPause, &QAbstractButton::pressed, m_player, &QMediaPlayer::pause);
connect(ui->pushButtonStop, &QAbstractButton::pressed, m_player, &QMediaPlayer::stop);
m_player->setVolume(m_mainWindow.settings().value(QStringLiteral("WebRadioPlugin/volume"), 100).toInt());
m_player->setVolume(m_settings.volume());
ui->horizontalSlider->setValue(m_player->volume());
connect(ui->horizontalSlider, &QAbstractSlider::valueChanged, this, &WebRadioDialog::volumeChanged);
@@ -119,7 +106,7 @@ void WebRadioDialog::play()
if(ui->comboBox->currentIndex() == -1)
return;
m_mainWindow.settings().setValue(QStringLiteral("WebRadioPlugin/lastUrl"), ui->comboBox->currentData().toString());
m_settings.setLastUrl(ui->comboBox->currentData().toString());
m_player->play();
}
@@ -136,6 +123,6 @@ void WebRadioDialog::updateWidgets()
void WebRadioDialog::volumeChanged(int volume)
{
m_mainWindow.settings().setValue(QStringLiteral("WebRadioPlugin/volume"), volume);
m_settings.setVolume(volume);
m_player->setVolume(volume);
}

View File

@@ -4,6 +4,8 @@
#include "zeiterfassungdialog.h"
#include "webradiosettings.h"
class MainWindow;
namespace Ui { class WebRadioDialog; }
@@ -30,5 +32,7 @@ private:
Ui::WebRadioDialog *ui;
MainWindow &m_mainWindow;
WebRadioSettings m_settings;
QMediaPlayer *m_player;
};

View File

@@ -10,6 +10,7 @@
#include "mainwindow.h"
#include "webradiodialog.h"
#include "webradiosettingswidget.h"
WebRadioPlugin::WebRadioPlugin(QObject *parent) :
ZeiterfassungPlugin(parent)
@@ -37,3 +38,8 @@ void WebRadioPlugin::attachTo(MainWindow &mainWindow)
mainWindow.menuTools()->addAction(QIcon(QStringLiteral(":/zeiterfassung/plugins/webradioplugin/images/web-radio.png")),
tr("Play webradio"), dialog, &QWidget::show);
}
SettingsWidget *WebRadioPlugin::settingsWidget(ZeiterfassungSettings &settings, QWidget *parent) const
{
return new WebRadioSettingsWidget(settings, parent);
}

View File

@@ -17,6 +17,8 @@ public:
// ZeiterfassungPlugin interface
void attachTo(MainWindow &mainWindow) Q_DECL_OVERRIDE;
SettingsWidget *settingsWidget(ZeiterfassungSettings &settings, QWidget *parent = Q_NULLPTR) const Q_DECL_OVERRIDE;
private:
QTranslator m_translator;
};

View File

@@ -17,10 +17,14 @@ DEPENDPATH += $$PWD/$${PROJECT_ROOT}/zeiterfassungcorelib $$PWD/$${PROJECT_ROOT}
DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSAGELOGCONTEXT
HEADERS += webradiodialog.h \
webradioplugin.h
webradioplugin.h \
webradiosettings.h \
webradiosettingswidget.h
SOURCES += webradiodialog.cpp \
webradioplugin.cpp
webradioplugin.cpp \
webradiosettings.cpp \
webradiosettingswidget.cpp
FORMS += webradiodialog.ui

View File

@@ -0,0 +1,50 @@
#include "webradiosettings.h"
#include "zeiterfassungsettings.h"
WebRadioSettings::WebRadioSettings(ZeiterfassungSettings &settings) :
m_settings(settings)
{
}
QStringList WebRadioSettings::urls() const
{
return m_settings.value(QStringLiteral("WebRadioPlugin/urls"), 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")
}).toStringList();
}
void WebRadioSettings::setUrls(const QStringList &urls)
{
m_settings.setValue(QStringLiteral("WebRadioPlugin/urls"), urls);
}
QString WebRadioSettings::lastUrl() const
{
return m_settings.value(QStringLiteral("WebRadioPlugin/lastUrl")).toString();
}
void WebRadioSettings::setLastUrl(const QString &lastUrl)
{
m_settings.setValue(QStringLiteral("WebRadioPlugin/lastUrl"), lastUrl);
}
int WebRadioSettings::volume() const
{
return m_settings.value(QStringLiteral("WebRadioPlugin/volume"), 100).toInt();
}
void WebRadioSettings::setVolume(int volume)
{
m_settings.setValue(QStringLiteral("WebRadioPlugin/volume"), volume);
}

View File

@@ -0,0 +1,26 @@
#ifndef WEBRADIOSETTINGS_H
#define WEBRADIOSETTINGS_H
#include <QUrl>
class ZeiterfassungSettings;
class WebRadioSettings
{
public:
WebRadioSettings(ZeiterfassungSettings &settings);
QStringList urls() const;
void setUrls(const QStringList &urls);
QString lastUrl() const;
void setLastUrl(const QString &lastUrl);
int volume() const;
void setVolume(int volume);
private:
ZeiterfassungSettings &m_settings;
};
#endif // WEBRADIOSETTINGS_H

View File

@@ -0,0 +1,38 @@
#include "webradiosettingswidget.h"
#include <QFormLayout>
#include "QStringListWidget/qstringlistwidget.h"
WebRadioSettingsWidget::WebRadioSettingsWidget(ZeiterfassungSettings &settings, QWidget *parent) :
SettingsWidget(parent),
m_settings(settings)
{
auto layout = new QFormLayout(this);
layout->setMargin(0);
m_urlsWidget = new QStringListWidget(m_settings.urls(), this);
layout->addRow(tr("URLs:"), m_urlsWidget);
setLayout(layout);
}
bool WebRadioSettingsWidget::isValid(QString &message) const
{
for(const auto &url : m_urlsWidget->stringList())
{
if(!QUrl::fromUserInput(url).isValid())
{
message = tr("A web radio url is invalid!");
return false;
}
}
return true;
}
void WebRadioSettingsWidget::apply()
{
if(m_urlsWidget->stringList() != m_settings.urls())
m_settings.setUrls(m_urlsWidget->stringList());
}

View File

@@ -0,0 +1,32 @@
#ifndef WEBRADIOSETTINGSWIDGET_H
#define WEBRADIOSETTINGSWIDGET_H
#include <QWidget>
#include "settingswidget.h"
#include "webradiosettings.h"
class QStringListWidget;
class ZeiterfassungSettings;
class WebRadioSettingsWidget : public SettingsWidget
{
Q_OBJECT
public:
explicit WebRadioSettingsWidget(ZeiterfassungSettings &settings, QWidget *parent = Q_NULLPTR);
bool isValid(QString &message) const Q_DECL_OVERRIDE;
public Q_SLOTS:
void apply() Q_DECL_OVERRIDE;
private:
WebRadioSettings m_settings;
QStringListWidget *m_urlsWidget;
};
#endif // WEBRADIOSETTINGSWIDGET_H

View File

@@ -9,6 +9,7 @@
class ZEITERFASSUNGGUILIBSHARED_EXPORT SettingsWidget : public QWidget
{
Q_OBJECT
public:
explicit SettingsWidget(QWidget *parent = Q_NULLPTR);

View File

@@ -49,3 +49,5 @@ TRANSLATIONS += translations/zeiterfassungguilib_en.ts \
translations/zeiterfassungguilib_de.ts
include($${PROJECT_ROOT}/lrelease.pri)
include(QStringListWidget/QStringListWidget.pri)