diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..464f0ed --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "zeiterfassungguilib/QStringListWidget"] + path = zeiterfassungguilib/QStringListWidget + url = https://github.com/0xFEEDC0DE64/QStringListWidget.git diff --git a/plugins/lunchmealplugin/lunchmealwidget.h b/plugins/lunchmealplugin/lunchmealwidget.h index fb7e3c7..a3a9f77 100644 --- a/plugins/lunchmealplugin/lunchmealwidget.h +++ b/plugins/lunchmealplugin/lunchmealwidget.h @@ -10,6 +10,7 @@ class StripsWidget; class LunchMealWidget : public QToolButton { Q_OBJECT + public: explicit LunchMealWidget(StripsWidget &stripsWidget); diff --git a/plugins/weatherplugin/weathersettingswidget.h b/plugins/weatherplugin/weathersettingswidget.h index d962a33..e291159 100644 --- a/plugins/weatherplugin/weathersettingswidget.h +++ b/plugins/weatherplugin/weathersettingswidget.h @@ -14,6 +14,7 @@ class ZeiterfassungSettings; class WeatherSettingsWidget : public SettingsWidget { Q_OBJECT + public: explicit WeatherSettingsWidget(ZeiterfassungSettings &settings, QWidget *parent = Q_NULLPTR); diff --git a/plugins/webradioplugin/webradiodialog.cpp b/plugins/webradioplugin/webradiodialog.cpp index fd5e855..236ee90 100644 --- a/plugins/webradioplugin/webradiodialog.cpp +++ b/plugins/webradioplugin/webradiodialog.cpp @@ -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(&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(&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); } diff --git a/plugins/webradioplugin/webradiodialog.h b/plugins/webradioplugin/webradiodialog.h index 6dbda8d..b1c6c73 100644 --- a/plugins/webradioplugin/webradiodialog.h +++ b/plugins/webradioplugin/webradiodialog.h @@ -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; }; diff --git a/plugins/webradioplugin/webradioplugin.cpp b/plugins/webradioplugin/webradioplugin.cpp index 9a749d7..d75bfcb 100644 --- a/plugins/webradioplugin/webradioplugin.cpp +++ b/plugins/webradioplugin/webradioplugin.cpp @@ -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); +} diff --git a/plugins/webradioplugin/webradioplugin.h b/plugins/webradioplugin/webradioplugin.h index e11932d..6644b3f 100644 --- a/plugins/webradioplugin/webradioplugin.h +++ b/plugins/webradioplugin/webradioplugin.h @@ -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; }; diff --git a/plugins/webradioplugin/webradioplugin.pro b/plugins/webradioplugin/webradioplugin.pro index 1024a95..0c8ee81 100644 --- a/plugins/webradioplugin/webradioplugin.pro +++ b/plugins/webradioplugin/webradioplugin.pro @@ -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 diff --git a/plugins/webradioplugin/webradiosettings.cpp b/plugins/webradioplugin/webradiosettings.cpp new file mode 100644 index 0000000..eb6bb44 --- /dev/null +++ b/plugins/webradioplugin/webradiosettings.cpp @@ -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); +} diff --git a/plugins/webradioplugin/webradiosettings.h b/plugins/webradioplugin/webradiosettings.h new file mode 100644 index 0000000..0f1cc4c --- /dev/null +++ b/plugins/webradioplugin/webradiosettings.h @@ -0,0 +1,26 @@ +#ifndef WEBRADIOSETTINGS_H +#define WEBRADIOSETTINGS_H + +#include + +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 diff --git a/plugins/webradioplugin/webradiosettingswidget.cpp b/plugins/webradioplugin/webradiosettingswidget.cpp new file mode 100644 index 0000000..84ab61c --- /dev/null +++ b/plugins/webradioplugin/webradiosettingswidget.cpp @@ -0,0 +1,38 @@ +#include "webradiosettingswidget.h" + +#include + +#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()); +} diff --git a/plugins/webradioplugin/webradiosettingswidget.h b/plugins/webradioplugin/webradiosettingswidget.h new file mode 100644 index 0000000..1499985 --- /dev/null +++ b/plugins/webradioplugin/webradiosettingswidget.h @@ -0,0 +1,32 @@ +#ifndef WEBRADIOSETTINGSWIDGET_H +#define WEBRADIOSETTINGSWIDGET_H + +#include + +#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 diff --git a/zeiterfassungguilib/QStringListWidget b/zeiterfassungguilib/QStringListWidget new file mode 160000 index 0000000..0090c29 --- /dev/null +++ b/zeiterfassungguilib/QStringListWidget @@ -0,0 +1 @@ +Subproject commit 0090c29663d23293d6d0b90f8dd9f7ac57170df1 diff --git a/zeiterfassungguilib/settingswidget.h b/zeiterfassungguilib/settingswidget.h index 56fee50..ed671be 100644 --- a/zeiterfassungguilib/settingswidget.h +++ b/zeiterfassungguilib/settingswidget.h @@ -9,6 +9,7 @@ class ZEITERFASSUNGGUILIBSHARED_EXPORT SettingsWidget : public QWidget { Q_OBJECT + public: explicit SettingsWidget(QWidget *parent = Q_NULLPTR); diff --git a/zeiterfassungguilib/zeiterfassungguilib.pro b/zeiterfassungguilib/zeiterfassungguilib.pro index 30e4962..15c428a 100644 --- a/zeiterfassungguilib/zeiterfassungguilib.pro +++ b/zeiterfassungguilib/zeiterfassungguilib.pro @@ -49,3 +49,5 @@ TRANSLATIONS += translations/zeiterfassungguilib_en.ts \ translations/zeiterfassungguilib_de.ts include($${PROJECT_ROOT}/lrelease.pri) + +include(QStringListWidget/QStringListWidget.pri)