generic: Add SettingsDialog and Config

This commit is contained in:
tt2468 2021-04-26 19:59:50 -07:00
parent 17f3137b40
commit a8ca912044
11 changed files with 282 additions and 30 deletions

View File

@ -64,10 +64,14 @@ configure_file(
# Inlude sources # Inlude sources
set(obs-websocket_SOURCES set(obs-websocket_SOURCES
src/obs-websocket.cpp) src/obs-websocket.cpp
src/Config.cpp
src/forms/SettingsDialog.cpp)
set(obs-websocket_HEADERS set(obs-websocket_HEADERS
src/obs-websocket.h) src/obs-websocket.h
src/Config.h
src/forms/SettingsDialog.h)
# Platform-independent build settings # Platform-independent build settings

View File

@ -2,7 +2,7 @@
## YOU HAVE STUMBLED UPON THE DEV BRANCH FOR V5.0.0 ## YOU HAVE STUMBLED UPON THE DEV BRANCH FOR V5.0.0
- You can find the main API sheet [here](https://gist.github.com/tt2468/59390b99e7841b28f56dffb3dd622ec9) - You can find the main protocol spec here: [PROTOCOL.md](docs/generated/protocol.md).
- You can find the planned requests sheet [here](https://docs.google.com/spreadsheets/d/1LfCZrbT8e7cSaKo_TuPDd-CJiptL7RSuo8iE63vMmMs/edit?usp=sharing) - You can find the planned requests sheet [here](https://docs.google.com/spreadsheets/d/1LfCZrbT8e7cSaKo_TuPDd-CJiptL7RSuo8iE63vMmMs/edit?usp=sharing)

81
src/Config.cpp Normal file
View File

@ -0,0 +1,81 @@
#include <QTime>
#include <obs-frontend-api.h>
#include "Config.h"
#define CONFIG_SECTION_NAME "obs-websocket"
#define PARAM_ENABLED "ServerEnabled"
#define PARAM_PORT "ServerPort"
#define PARAM_DEBUG "DebugEnabled"
#define PARAM_ALERTS "AlertsEnabled"
#define PARAM_AUTHREQUIRED "AuthRequred"
#define PARAM_PASSWORD "ServerPassword"
Config::Config() :
ServerEnabled(true),
ServerPort(4444),
DebugEnabled(false),
AlertsEnabled(false),
AuthRequired(true),
ServerPassword("")
{
qsrand(QTime::currentTime().msec());
SetDefaultsToGlobalStore();
}
void Config::Load()
{
config_t* obsConfig = GetConfigStore();
if (!obsConfig) {
blog(LOG_ERROR, "Unable to fetch OBS config!");
return;
}
ServerEnabled = config_get_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_ENABLED);
ServerPort = config_get_uint(obsConfig, CONFIG_SECTION_NAME, PARAM_PORT);
DebugEnabled = config_get_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_DEBUG);
AlertsEnabled = config_get_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_ALERTS);
AuthRequired = config_get_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_AUTHREQUIRED);
ServerPassword = config_get_string(obsConfig, CONFIG_SECTION_NAME, PARAM_PASSWORD);
}
void Config::Save()
{
config_t* obsConfig = GetConfigStore();
if (!obsConfig) {
blog(LOG_ERROR, "Unable to fetch OBS config!");
return;
}
config_set_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_ENABLED, ServerEnabled);
config_set_uint(obsConfig, CONFIG_SECTION_NAME, PARAM_PORT, ServerPort);
config_set_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_DEBUG, DebugEnabled);
config_set_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_ALERTS, AlertsEnabled);
config_set_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_AUTHREQUIRED, AuthRequired);
config_set_string(obsConfig, CONFIG_SECTION_NAME, PARAM_PASSWORD, QT_TO_UTF8(ServerPassword));
config_save(obsConfig);
}
void Config::SetDefaultsToGlobalStore()
{
config_t* obsConfig = GetConfigStore();
if (!obsConfig) {
blog(LOG_ERROR, "Unable to fetch OBS config!");
return;
}
config_set_default_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_ENABLED, ServerEnabled);
config_set_default_uint(obsConfig, CONFIG_SECTION_NAME, PARAM_PORT, ServerPort);
config_set_default_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_DEBUG, DebugEnabled);
config_set_default_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_ALERTS, AlertsEnabled);
config_set_default_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_AUTHREQUIRED, AuthRequired);
config_set_default_string(obsConfig, CONFIG_SECTION_NAME, PARAM_PASSWORD, QT_TO_UTF8(ServerPassword));
}
config_t* Config::GetConfigStore()
{
return obs_frontend_get_global_config();
}

25
src/Config.h Normal file
View File

@ -0,0 +1,25 @@
#pragma once
#include <QString>
#include <util/config-file.h>
#include "plugin-macros.generated.h"
class Config {
public:
Config();
void Load();
void Save();
void SetDefaultsToGlobalStore();
config_t* GetConfigStore();
bool ServerEnabled;
uint16_t ServerPort;
bool DebugEnabled;
bool AlertsEnabled;
bool AuthRequired;
QString ServerPassword;
private:
;
};

View File

@ -0,0 +1,34 @@
#include <obs-frontend-api.h>
#include <QtWidgets/QMessageBox>
#include "SettingsDialog.h"
#include "../obs-websocket.h"
SettingsDialog::SettingsDialog(QWidget* parent) :
QDialog(parent, Qt::Dialog),
ui(new Ui::SettingsDialog)
{
ui->setupUi(this);
connect(ui->buttonBox, &QDialogButtonBox::accepted,
this, &SettingsDialog::FormAccepted);
}
void SettingsDialog::showEvent(QShowEvent* event) {
;
}
void SettingsDialog::ToggleShowHide() {
if (!isVisible())
setVisible(true);
else
setVisible(false);
}
void SettingsDialog::FormAccepted() {
;
}
SettingsDialog::~SettingsDialog() {
delete ui;
}

View File

@ -0,0 +1,22 @@
#pragma once
#include <QtWidgets/QDialog>
#include "ui_SettingsDialog.h"
class SettingsDialog : public QDialog
{
Q_OBJECT
public:
explicit SettingsDialog(QWidget* parent = 0);
~SettingsDialog();
void showEvent(QShowEvent* event);
void ToggleShowHide();
private Q_SLOTS:
void FormAccepted();
private:
Ui::SettingsDialog* ui;
};

View File

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>SettingsDialog</class>
<widget class="QDialog" name="SettingsDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="geometry">
<rect>
<x>30</x>
<y>240</y>
<width>341</width>
<height>32</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>SettingsDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>SettingsDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -6,8 +6,9 @@
#include <QtWidgets/QAction> #include <QtWidgets/QAction>
#include <QtWidgets/QMainWindow> #include <QtWidgets/QMainWindow>
#include "plugin-macros.generated.h"
#include "obs-websocket.h" #include "obs-websocket.h"
#include "Config.h"
#include "forms/SettingsDialog.h"
// Auto release definitions // Auto release definitions
void ___source_dummy_addref(obs_source_t*) {} void ___source_dummy_addref(obs_source_t*) {}
@ -25,6 +26,8 @@ void ___data_item_release(obs_data_item_t* dataItem) {
OBS_DECLARE_MODULE() OBS_DECLARE_MODULE()
OBS_MODULE_USE_DEFAULT_LOCALE("obs-websocket", "en-US") OBS_MODULE_USE_DEFAULT_LOCALE("obs-websocket", "en-US")
ConfigPtr _config;
bool obs_module_load(void) { bool obs_module_load(void) {
blog(LOG_INFO, "you can haz websockets (version %s)", OBS_WEBSOCKET_VERSION); blog(LOG_INFO, "you can haz websockets (version %s)", OBS_WEBSOCKET_VERSION);
blog(LOG_INFO, "Qt version (compile-time): %s | Qt version (run-time): %s", blog(LOG_INFO, "Qt version (compile-time): %s | Qt version (run-time): %s",
@ -38,4 +41,8 @@ bool obs_module_load(void) {
void obs_module_unload() { void obs_module_unload() {
blog(LOG_INFO, "Finished shutting down."); blog(LOG_INFO, "Finished shutting down.");
}
ConfigPtr GetConfig() {
return _config;
} }

View File

@ -3,6 +3,8 @@
#include <obs.hpp> #include <obs.hpp>
#include <memory> #include <memory>
#include "plugin-macros.generated.h"
// Autorelease object declarations // Autorelease object declarations
void ___source_dummy_addref(obs_source_t*); void ___source_dummy_addref(obs_source_t*);
void ___sceneitem_dummy_addref(obs_sceneitem_t*); void ___sceneitem_dummy_addref(obs_sceneitem_t*);
@ -24,4 +26,9 @@ using OBSOutputAutoRelease =
void ___data_item_dummy_addref(obs_data_item_t*); void ___data_item_dummy_addref(obs_data_item_t*);
void ___data_item_release(obs_data_item_t*); void ___data_item_release(obs_data_item_t*);
using OBSDataItemAutoRelease = using OBSDataItemAutoRelease =
OBSRef<obs_data_item_t*, ___data_item_dummy_addref, ___data_item_release>; OBSRef<obs_data_item_t*, ___data_item_dummy_addref, ___data_item_release>;
class Config;
typedef std::shared_ptr<Config> ConfigPtr;
ConfigPtr GetConfig();

View File

@ -21,6 +21,8 @@ with this program. If not, see <https://www.gnu.org/licenses/>
#define OBS_WEBSOCKET_VERSION "5.0.0" #define OBS_WEBSOCKET_VERSION "5.0.0"
#define QT_TO_UTF8(str) str.toUtf8().constData()
#define blog(level, msg, ...) blog(level, "[obs-websocket] " msg, ##__VA_ARGS__) #define blog(level, msg, ...) blog(level, "[obs-websocket] " msg, ##__VA_ARGS__)
#endif // PLUGINNAME_H #endif // PLUGINNAME_H

View File

@ -1,26 +1,28 @@
/* /*
obs-websocket obs-websocket
Copyright (C) 2021 Kyle Manning <tt2468@irltoolkit.com> Copyright (C) 2021 Kyle Manning <tt2468@irltoolkit.com>
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or the Free Software Foundation; either version 2 of the License, or
(at your option) any later version. (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License along You should have received a copy of the GNU General Public License along
with this program. If not, see <https://www.gnu.org/licenses/> with this program. If not, see <https://www.gnu.org/licenses/>
*/ */
#ifndef PLUGINNAME_H #ifndef PLUGINNAME_H
#define PLUGINNAME_H #define PLUGINNAME_H
#define OBS_WEBSOCKET_VERSION "@CMAKE_PROJECT_VERSION@" #define OBS_WEBSOCKET_VERSION "@CMAKE_PROJECT_VERSION@"
#define blog(level, msg, ...) blog(level, "[obs-websocket] " msg, ##__VA_ARGS__) #define QT_TO_UTF8(str) str.toUtf8().constData()
#define blog(level, msg, ...) blog(level, "[obs-websocket] " msg, ##__VA_ARGS__)
#endif // PLUGINNAME_H #endif // PLUGINNAME_H