mirror of
https://github.com/CalcProgrammer1/OpenRGB.git
synced 2026-01-02 20:27:52 -05:00
283 lines
11 KiB
C++
283 lines
11 KiB
C++
#include "OpenRGBE131SettingsPage.h"
|
|
#include "ui_OpenRGBE131SettingsPage.h"
|
|
#include "ResourceManager.h"
|
|
|
|
using namespace Ui;
|
|
|
|
OpenRGBE131SettingsPage::OpenRGBE131SettingsPage(QWidget *parent) :
|
|
QWidget(parent),
|
|
ui(new Ui::OpenRGBE131SettingsPageUi)
|
|
{
|
|
ui->setupUi(this);
|
|
|
|
json e131_settings;
|
|
|
|
/*-------------------------------------------------*\
|
|
| Get E1.31 settings from settings manager |
|
|
\*-------------------------------------------------*/
|
|
e131_settings = ResourceManager::get()->GetSettingsManager()->GetSettings("E131Devices");
|
|
|
|
/*-------------------------------------------------*\
|
|
| If the E1.31 settings contains devices, process |
|
|
\*-------------------------------------------------*/
|
|
if(e131_settings.contains("devices"))
|
|
{
|
|
for(unsigned int device_idx = 0; device_idx < e131_settings["devices"].size(); device_idx++)
|
|
{
|
|
OpenRGBE131SettingsEntry* entry = new OpenRGBE131SettingsEntry;
|
|
|
|
if(e131_settings["devices"][device_idx].contains("name"))
|
|
{
|
|
entry->ui->NameEdit->setText(QString::fromStdString(e131_settings["devices"][device_idx]["name"]));
|
|
}
|
|
|
|
if(e131_settings["devices"][device_idx].contains("ip"))
|
|
{
|
|
entry->ui->IPEdit->setText(QString::fromStdString(e131_settings["devices"][device_idx]["ip"]));
|
|
}
|
|
|
|
if(e131_settings["devices"][device_idx].contains("start_universe"))
|
|
{
|
|
entry->ui->StartUniverseEdit->setText(QString::number((int)e131_settings["devices"][device_idx]["start_universe"]));
|
|
}
|
|
|
|
if(e131_settings["devices"][device_idx].contains("start_channel"))
|
|
{
|
|
entry->ui->StartChannelEdit->setText(QString::number((int)e131_settings["devices"][device_idx]["start_channel"]));
|
|
}
|
|
|
|
if(e131_settings["devices"][device_idx].contains("num_leds"))
|
|
{
|
|
entry->ui->NumLEDsEdit->setText(QString::number((int)e131_settings["devices"][device_idx]["num_leds"]));
|
|
}
|
|
|
|
if(e131_settings["devices"][device_idx].contains("type"))
|
|
{
|
|
if(e131_settings["devices"][device_idx]["type"].is_string())
|
|
{
|
|
std::string type_val = e131_settings["devices"][device_idx]["type"];
|
|
|
|
if(type_val == "SINGLE")
|
|
{
|
|
entry->ui->TypeComboBox->setCurrentIndex(0);
|
|
}
|
|
else if(type_val == "LINEAR")
|
|
{
|
|
entry->ui->TypeComboBox->setCurrentIndex(1);
|
|
}
|
|
else if(type_val == "MATRIX")
|
|
{
|
|
entry->ui->TypeComboBox->setCurrentIndex(2);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
entry->ui->TypeComboBox->setCurrentIndex(e131_settings["devices"][device_idx]["type"]);
|
|
}
|
|
}
|
|
|
|
if(e131_settings["devices"][device_idx].contains("rgb_order"))
|
|
{
|
|
if(e131_settings["devices"][device_idx]["rgb_order"].is_string())
|
|
{
|
|
std::string rgb_order_val = e131_settings["devices"][device_idx]["rgb_order"];
|
|
|
|
if(rgb_order_val == "RGB")
|
|
{
|
|
entry->ui->RGBOrderComboBox->setCurrentIndex(0);
|
|
}
|
|
else if(rgb_order_val == "RBG")
|
|
{
|
|
entry->ui->RGBOrderComboBox->setCurrentIndex(1);
|
|
}
|
|
else if(rgb_order_val == "GRB")
|
|
{
|
|
entry->ui->RGBOrderComboBox->setCurrentIndex(2);
|
|
}
|
|
else if(rgb_order_val == "GBR")
|
|
{
|
|
entry->ui->RGBOrderComboBox->setCurrentIndex(3);
|
|
}
|
|
else if(rgb_order_val == "BRG")
|
|
{
|
|
entry->ui->RGBOrderComboBox->setCurrentIndex(4);
|
|
}
|
|
else if(rgb_order_val == "BGR")
|
|
{
|
|
entry->ui->RGBOrderComboBox->setCurrentIndex(5);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
entry->ui->RGBOrderComboBox->setCurrentIndex(e131_settings["devices"][device_idx]["rgb_order"]);
|
|
}
|
|
}
|
|
|
|
if(e131_settings["devices"][device_idx].contains("matrix_width"))
|
|
{
|
|
entry->ui->MatrixWidthEdit->setText(QString::number((int)e131_settings["devices"][device_idx]["matrix_width"]));
|
|
}
|
|
|
|
if(e131_settings["devices"][device_idx].contains("matrix_height"))
|
|
{
|
|
entry->ui->MatrixWidthEdit->setText(QString::number((int)e131_settings["devices"][device_idx]["matrix_height"]));
|
|
}
|
|
|
|
if(e131_settings["devices"][device_idx].contains("matrix_order"))
|
|
{
|
|
if(e131_settings["devices"][device_idx]["matrix_order"].is_string())
|
|
{
|
|
std::string matrix_order_val = e131_settings["devices"][device_idx]["matrix_order"];
|
|
|
|
if(matrix_order_val == "HORIZONTAL_TOP_LEFT")
|
|
{
|
|
entry->ui->MatrixOrderComboBox->setCurrentIndex(0);
|
|
}
|
|
else if(matrix_order_val == "HORIZONTAL_TOP_RIGHT")
|
|
{
|
|
entry->ui->MatrixOrderComboBox->setCurrentIndex(1);
|
|
}
|
|
else if(matrix_order_val == "HORIZONTAL_BOTTOM_LEFT")
|
|
{
|
|
entry->ui->MatrixOrderComboBox->setCurrentIndex(2);
|
|
}
|
|
else if(matrix_order_val == "HORIZONTAL_BOTTOM_RIGHT")
|
|
{
|
|
entry->ui->MatrixOrderComboBox->setCurrentIndex(3);
|
|
}
|
|
else if(matrix_order_val == "VERTICAL_TOP_LEFT")
|
|
{
|
|
entry->ui->MatrixOrderComboBox->setCurrentIndex(4);
|
|
}
|
|
else if(matrix_order_val == "VERTICAL_TOP_RIGHT")
|
|
{
|
|
entry->ui->MatrixOrderComboBox->setCurrentIndex(5);
|
|
}
|
|
else if(matrix_order_val == "VERTICAL_BOTTOM_LEFT")
|
|
{
|
|
entry->ui->MatrixOrderComboBox->setCurrentIndex(6);
|
|
}
|
|
else if(matrix_order_val == "VERTICAL_BOTTOM_RIGHT")
|
|
{
|
|
entry->ui->MatrixOrderComboBox->setCurrentIndex(7);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
entry->ui->MatrixOrderComboBox->setCurrentIndex(e131_settings["devices"][device_idx]["matrix_order"]);
|
|
}
|
|
}
|
|
|
|
if(e131_settings["devices"][device_idx].contains("universe_size"))
|
|
{
|
|
entry->ui->UniverseSizeEdit->setText(QString::number((int)e131_settings["devices"][device_idx]["universe_size"]));
|
|
}
|
|
|
|
if(e131_settings["devices"][device_idx].contains("keepalive_time"))
|
|
{
|
|
entry->ui->KeepaliveTimeEdit->setText(QString::number((int)e131_settings["devices"][device_idx]["keepalive_time"]));
|
|
}
|
|
|
|
entries.push_back(entry);
|
|
|
|
QListWidgetItem* item = new QListWidgetItem;
|
|
|
|
item->setSizeHint(entry->sizeHint());
|
|
|
|
ui->E131DeviceList->addItem(item);
|
|
ui->E131DeviceList->setItemWidget(item, entry);
|
|
ui->E131DeviceList->show();
|
|
}
|
|
}
|
|
}
|
|
|
|
OpenRGBE131SettingsPage::~OpenRGBE131SettingsPage()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
void Ui::OpenRGBE131SettingsPage::on_AddE131DeviceButton_clicked()
|
|
{
|
|
OpenRGBE131SettingsEntry* entry = new OpenRGBE131SettingsEntry;
|
|
entries.push_back(entry);
|
|
|
|
QListWidgetItem* item = new QListWidgetItem;
|
|
|
|
item->setSizeHint(entry->sizeHint());
|
|
|
|
ui->E131DeviceList->addItem(item);
|
|
ui->E131DeviceList->setItemWidget(item, entry);
|
|
ui->E131DeviceList->show();
|
|
}
|
|
|
|
void Ui::OpenRGBE131SettingsPage::on_RemoveE131DeviceButton_clicked()
|
|
{
|
|
int cur_row = ui->E131DeviceList->currentRow();
|
|
|
|
if(cur_row < 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
QListWidgetItem* item = ui->E131DeviceList->takeItem(cur_row);
|
|
|
|
ui->E131DeviceList->removeItemWidget(item);
|
|
delete item;
|
|
|
|
delete entries[cur_row];
|
|
entries.erase(entries.begin() + cur_row);
|
|
}
|
|
|
|
void Ui::OpenRGBE131SettingsPage::on_SaveE131ConfigurationButton_clicked()
|
|
{
|
|
json e131_settings;
|
|
|
|
/*-------------------------------------------------*\
|
|
| Get E1.31 settings from settings manager |
|
|
\*-------------------------------------------------*/
|
|
e131_settings = ResourceManager::get()->GetSettingsManager()->GetSettings("E131Devices");
|
|
|
|
e131_settings["devices"].clear();
|
|
|
|
for(unsigned int device_idx = 0; device_idx < entries.size(); device_idx++)
|
|
{
|
|
/*-------------------------------------------------*\
|
|
| Required parameters |
|
|
\*-------------------------------------------------*/
|
|
e131_settings["devices"][device_idx]["name"] = entries[device_idx]->ui->NameEdit->text().toStdString();
|
|
e131_settings["devices"][device_idx]["start_universe"] = entries[device_idx]->ui->StartUniverseEdit->text().toUInt();
|
|
e131_settings["devices"][device_idx]["start_channel"] = entries[device_idx]->ui->StartChannelEdit->text().toUInt();
|
|
e131_settings["devices"][device_idx]["num_leds"] = entries[device_idx]->ui->NumLEDsEdit->text().toUInt();
|
|
e131_settings["devices"][device_idx]["type"] = entries[device_idx]->ui->TypeComboBox->currentIndex();
|
|
e131_settings["devices"][device_idx]["rgb_order"] = entries[device_idx]->ui->RGBOrderComboBox->currentIndex();
|
|
|
|
/*-------------------------------------------------*\
|
|
| Optional parameters |
|
|
\*-------------------------------------------------*/
|
|
if(entries[device_idx]->ui->IPEdit->text() != "")
|
|
{
|
|
e131_settings["devices"][device_idx]["ip"] = entries[device_idx]->ui->IPEdit->text().toStdString();
|
|
}
|
|
|
|
if(e131_settings["devices"][device_idx]["type"] == 2)
|
|
{
|
|
e131_settings["devices"][device_idx]["matrix_width"] = entries[device_idx]->ui->MatrixWidthEdit->text().toUInt();
|
|
e131_settings["devices"][device_idx]["matrix_height"] = entries[device_idx]->ui->MatrixHeightEdit->text().toUInt();
|
|
e131_settings["devices"][device_idx]["matrix_order"] = entries[device_idx]->ui->MatrixOrderComboBox->currentIndex();
|
|
}
|
|
|
|
if(entries[device_idx]->ui->UniverseSizeEdit->text() != "")
|
|
{
|
|
e131_settings["devices"][device_idx]["universe_size"] = entries[device_idx]->ui->UniverseSizeEdit->text().toUInt();
|
|
}
|
|
|
|
if(entries[device_idx]->ui->KeepaliveTimeEdit->text() != "")
|
|
{
|
|
e131_settings["devices"][device_idx]["keepalive_time"] = entries[device_idx]->ui->KeepaliveTimeEdit->text().toUInt();
|
|
}
|
|
}
|
|
|
|
ResourceManager::get()->GetSettingsManager()->SetSettings("E131Devices", e131_settings);
|
|
ResourceManager::get()->GetSettingsManager()->SaveSettings();
|
|
}
|