From 686ef011f8134b6561bc399c2e6c191488fa051e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=A4rkl?= Date: Fri, 16 Aug 2019 16:48:28 +0200 Subject: [PATCH] Add Resolution and FPS Settings --- gui/include/settings.h | 8 +++++ gui/include/settingsdialog.h | 7 +++++ gui/src/mainwindow.cpp | 1 + gui/src/settings.cpp | 42 ++++++++++++++++++++++++++ gui/src/settingsdialog.cpp | 57 ++++++++++++++++++++++++++++++++++++ 5 files changed, 115 insertions(+) diff --git a/gui/include/settings.h b/gui/include/settings.h index f8c1d7f..ef026e8 100644 --- a/gui/include/settings.h +++ b/gui/include/settings.h @@ -20,6 +20,8 @@ #include "host.h" +#include + #include class Settings : public QObject @@ -40,6 +42,12 @@ class Settings : public QObject bool GetDiscoveryEnabled() { return settings.value("settings/auto_discovery", true).toBool(); } void SetDiscoveryEnabled(bool enabled) { settings.setValue("settings/auto_discovery", enabled); } + ChiakiVideoResolutionPreset GetResolution() const; + void SetResolution(ChiakiVideoResolutionPreset resolution); + + ChiakiVideoFPSPreset GetFPS() const; + void SetFPS(ChiakiVideoFPSPreset fps); + QList GetRegisteredHosts() const { return registered_hosts.values(); } void AddRegisteredHost(const RegisteredHost &host); void RemoveRegisteredHost(const HostMAC &mac); diff --git a/gui/include/settingsdialog.h b/gui/include/settingsdialog.h index 74a33f1..1b3d3ae 100644 --- a/gui/include/settingsdialog.h +++ b/gui/include/settingsdialog.h @@ -22,6 +22,7 @@ class Settings; class QListWidget; +class QComboBox; class SettingsDialog : public QDialog { @@ -30,10 +31,16 @@ class SettingsDialog : public QDialog private: Settings *settings; + QComboBox *resolution_combo_box; + QComboBox *fps_combo_box; + QListWidget *registered_hosts_list_widget; QPushButton *delete_registered_host_button; private slots: + void ResolutionSelected(); + void FPSSelected(); + void UpdateRegisteredHosts(); void UpdateRegisteredHostsButtons(); void RegisterNewHost(); diff --git a/gui/src/mainwindow.cpp b/gui/src/mainwindow.cpp index d64c4cb..2d38823 100644 --- a/gui/src/mainwindow.cpp +++ b/gui/src/mainwindow.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include diff --git a/gui/src/settings.cpp b/gui/src/settings.cpp index 7bb443d..184a908 100644 --- a/gui/src/settings.cpp +++ b/gui/src/settings.cpp @@ -17,11 +17,53 @@ #include +#define SETTINGS_VERSION 1 + Settings::Settings(QObject *parent) : QObject(parent) { + settings.setValue("version", SETTINGS_VERSION); LoadRegisteredHosts(); } +static const QMap resolutions = { + { CHIAKI_VIDEO_RESOLUTION_PRESET_360p, "360p"}, + { CHIAKI_VIDEO_RESOLUTION_PRESET_540p, "540p"}, + { CHIAKI_VIDEO_RESOLUTION_PRESET_720p, "720p"}, + { CHIAKI_VIDEO_RESOLUTION_PRESET_1080p, "1080p"} +}; + +static const ChiakiVideoResolutionPreset resolution_default = CHIAKI_VIDEO_RESOLUTION_PRESET_720p; + +ChiakiVideoResolutionPreset Settings::GetResolution() const +{ + auto s = settings.value("settings/resolution", resolutions[resolution_default]).toString(); + return resolutions.key(s, resolution_default); +} + +void Settings::SetResolution(ChiakiVideoResolutionPreset resolution) +{ + settings.setValue("settings/resolution", resolutions[resolution]); +} + +static const QMap fps_values = { + { CHIAKI_VIDEO_FPS_PRESET_30, 30 }, + { CHIAKI_VIDEO_FPS_PRESET_60, 60 } +}; + +static const ChiakiVideoFPSPreset fps_default = CHIAKI_VIDEO_FPS_PRESET_60; + +ChiakiVideoFPSPreset Settings::GetFPS() const +{ + auto v = settings.value("settings/fps", fps_values[fps_default]).toInt(); + return fps_values.key(v, fps_default); +} + +void Settings::SetFPS(ChiakiVideoFPSPreset fps) +{ + settings.setValue("settings/fps", fps_values[fps]); +} + + void Settings::LoadRegisteredHosts() { registered_hosts.clear(); diff --git a/gui/src/settingsdialog.cpp b/gui/src/settingsdialog.cpp index 785a6d7..51084f6 100644 --- a/gui/src/settingsdialog.cpp +++ b/gui/src/settingsdialog.cpp @@ -25,6 +25,9 @@ #include #include #include +#include +#include +#include SettingsDialog::SettingsDialog(Settings *settings, QWidget *parent) : QDialog(parent) { @@ -33,6 +36,50 @@ SettingsDialog::SettingsDialog(Settings *settings, QWidget *parent) : QDialog(pa auto layout = new QVBoxLayout(this); setLayout(layout); + + // Stream Settings + + auto stream_settings_group_box = new QGroupBox(tr("Stream Settings")); + layout->addWidget(stream_settings_group_box); + + auto stream_settings_layout = new QFormLayout(); + stream_settings_group_box->setLayout(stream_settings_layout); + + resolution_combo_box = new QComboBox(this); + static const QList> resolution_strings = { + { CHIAKI_VIDEO_RESOLUTION_PRESET_360p, "360p"}, + { CHIAKI_VIDEO_RESOLUTION_PRESET_540p, "540p"}, + { CHIAKI_VIDEO_RESOLUTION_PRESET_720p, "720p"}, + { CHIAKI_VIDEO_RESOLUTION_PRESET_1080p, "1080p"} + }; + auto current_res = settings->GetResolution(); + for(const auto &p : resolution_strings) + { + resolution_combo_box->addItem(tr(p.second), (int)p.first); + if(current_res == p.first) + resolution_combo_box->setCurrentIndex(resolution_combo_box->count() - 1); + } + connect(resolution_combo_box, SIGNAL(currentIndexChanged(int)), this, SLOT(ResolutionSelected())); + stream_settings_layout->addRow(tr("Resolution:"), resolution_combo_box); + + fps_combo_box = new QComboBox(this); + static const QList> fps_strings = { + { CHIAKI_VIDEO_FPS_PRESET_30, "30" }, + { CHIAKI_VIDEO_FPS_PRESET_60, "60" } + }; + auto current_fps = settings->GetFPS(); + for(const auto &p : fps_strings) + { + fps_combo_box->addItem(p.second, (int)p.first); + if(current_fps == p.first) + fps_combo_box->setCurrentIndex(fps_combo_box->count() - 1); + } + connect(fps_combo_box, SIGNAL(currentIndexChanged(int)), this, SLOT(FPSSelected())); + stream_settings_layout->addRow(tr("FPS:"), fps_combo_box); + + + // Registered Consoles + auto registered_hosts_group_box = new QGroupBox(tr("Registered Consoles")); layout->addWidget(registered_hosts_group_box); @@ -66,6 +113,16 @@ SettingsDialog::SettingsDialog(Settings *settings, QWidget *parent) : QDialog(pa connect(registered_hosts_list_widget, &QListWidget::itemSelectionChanged, this, &SettingsDialog::UpdateRegisteredHostsButtons); } +void SettingsDialog::ResolutionSelected() +{ + settings->SetResolution((ChiakiVideoResolutionPreset)resolution_combo_box->currentData().toInt()); +} + +void SettingsDialog::FPSSelected() +{ + settings->SetFPS((ChiakiVideoFPSPreset)fps_combo_box->currentData().toInt()); +} + void SettingsDialog::UpdateRegisteredHosts() { registered_hosts_list_widget->clear();