Add function to load universe map from a saved json file

This commit is contained in:
Adam Honse 2021-01-17 18:36:15 -06:00
parent 05362ae8a7
commit 2339f3a813
3 changed files with 253 additions and 86 deletions

View file

@ -719,6 +719,9 @@ void OpenRGBE131ReceiverDialog::on_ButtonSaveMap_clicked()
}
}
/*-----------------------------------------------------*\
| Write out the JSON structure to a file |
\*-----------------------------------------------------*/
std::ofstream universe_file("E131UniverseMap.json", std::ios::out | std::ios::binary);
if(universe_file)
@ -735,3 +738,158 @@ void OpenRGBE131ReceiverDialog::on_ButtonSaveMap_clicked()
universe_file.close();
}
}
void OpenRGBE131ReceiverDialog::on_ButtonLoadMap_clicked()
{
/*-----------------------------------------------------*\
| Read in the JSON map from a file |
\*-----------------------------------------------------*/
json universe_map;
/*---------------------------------------------------------*\
| Open input file in binary mode |
\*---------------------------------------------------------*/
std::ifstream universe_file("E131UniverseMap.json", std::ios::in | std::ios::binary);
/*---------------------------------------------------------*\
| Read settings into JSON store |
\*---------------------------------------------------------*/
if(universe_file)
{
try
{
universe_file >> universe_map;
}
catch(std::exception e)
{
/*-------------------------------------------------*\
| If an exception was caught, that means the JSON |
| parsing failed. Clear out any data in the store |
| as it is corrupt. |
\*-------------------------------------------------*/
universe_map.clear();
}
}
/*---------------------------------------------------------*\
| Clear the universe map |
\*---------------------------------------------------------*/
universe_list.clear();
/*---------------------------------------------------------*\
| Loop through all saved universes and create list entries |
\*---------------------------------------------------------*/
if(universe_map.contains("universes"))
{
for(unsigned int universe_index = 0; universe_index < universe_map["universes"].size(); universe_index++)
{
if(universe_map["universes"][universe_index].contains("universe"))
{
universe_entry new_universe;
new_universe.universe = universe_map["universes"][universe_index]["universe"];
if(universe_map["universes"][universe_index].contains("members"))
{
for(unsigned int member_index = 0; member_index < universe_map["universes"][universe_index]["members"].size(); member_index++)
{
universe_member new_member;
/*---------------------------------------------------------*\
| Fill in default values in case entries are missing |
\*---------------------------------------------------------*/
new_member.controller = NULL;
new_member.start_channel = 1;
new_member.start_led = 0;
new_member.num_leds = 0;
new_member.update = false;
if(universe_map["universes"][universe_index]["members"][member_index].contains("start_channel"))
{
new_member.start_channel = universe_map["universes"][universe_index]["members"][member_index]["start_channel"];
}
if(universe_map["universes"][universe_index]["members"][member_index].contains("start_led"))
{
new_member.start_led = universe_map["universes"][universe_index]["members"][member_index]["start_led"];
}
if(universe_map["universes"][universe_index]["members"][member_index].contains("num_leds"))
{
new_member.num_leds = universe_map["universes"][universe_index]["members"][member_index]["num_leds"];
}
if(universe_map["universes"][universe_index]["members"][member_index].contains("update"))
{
new_member.update = universe_map["universes"][universe_index]["members"][member_index]["update"];
}
/*---------------------------------------------------------*\
| Get controller information |
\*---------------------------------------------------------*/
std::string controller_name = "";
std::string controller_description = "";
std::string controller_location = "";
std::string controller_serial = "";
unsigned int controller_led_count = 0;
if(universe_map["universes"][universe_index]["members"][member_index].contains("controller_name"))
{
controller_name = universe_map["universes"][universe_index]["members"][member_index]["controller_name"];
}
if(universe_map["universes"][universe_index]["members"][member_index].contains("controller_description"))
{
controller_description = universe_map["universes"][universe_index]["members"][member_index]["controller_description"];
}
if(universe_map["universes"][universe_index]["members"][member_index].contains("controller_location"))
{
controller_location = universe_map["universes"][universe_index]["members"][member_index]["controller_location"];
}
if(universe_map["universes"][universe_index]["members"][member_index].contains("controller_serial"))
{
controller_serial = universe_map["universes"][universe_index]["members"][member_index]["controller_serial"];
}
if(universe_map["universes"][universe_index]["members"][member_index].contains("controller_led_count"))
{
controller_led_count = universe_map["universes"][universe_index]["members"][member_index]["controller_led_count"];
}
/*---------------------------------------------------------*\
| Search the controller list for a matching controller |
\*---------------------------------------------------------*/
for(unsigned int controller_index = 0; controller_index < resource_manager->GetRGBControllers().size(); controller_index++)
{
if((resource_manager->GetRGBControllers()[controller_index]->name == controller_name)
&&(resource_manager->GetRGBControllers()[controller_index]->description == controller_description)
&&(resource_manager->GetRGBControllers()[controller_index]->location == controller_location)
&&(resource_manager->GetRGBControllers()[controller_index]->serial == controller_serial)
&&(resource_manager->GetRGBControllers()[controller_index]->colors.size() == controller_led_count))
{
new_member.controller = resource_manager->GetRGBControllers()[controller_index];
}
}
/*---------------------------------------------------------*\
| If a controller was found, add the member to the universe |
\*---------------------------------------------------------*/
if(new_member.controller != NULL)
{
new_universe.members.push_back(new_member);
}
}
}
universe_list.push_back(new_universe);
}
}
}
/*-----------------------------------------------------*\
| Update the universe tree view |
\*-----------------------------------------------------*/
UpdateTreeView();
}

View file

@ -45,6 +45,8 @@ private slots:
void on_ButtonSaveMap_clicked();
void on_ButtonLoadMap_clicked();
private:
ResourceManager* resource_manager;
Ui::OpenRGBE131ReceiverDialog *ui;

View file

@ -20,14 +20,36 @@
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="3" column="4">
<widget class="QPushButton" name="ButtonStopReceiver">
<item row="3" column="3">
<widget class="QCheckBox" name="EnableMulticastBox">
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<property name="text">
<string>Stop Receiver</string>
<string>Enable Multicast</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="5" column="2" colspan="3">
<item row="6" column="0" colspan="2">
<widget class="QTreeWidget" name="ControllersTreeView">
<column>
<property name="text">
<string notr="true">1</string>
</property>
</column>
</widget>
</item>
<item row="4" column="2">
<widget class="QPushButton" name="ButtonAddUniverse">
<property name="text">
<string>Add Universe</string>
</property>
</widget>
</item>
<item row="6" column="2" colspan="3">
<widget class="QTreeWidget" name="E131TreeView">
<column>
<property name="text">
@ -36,6 +58,13 @@
</column>
</widget>
</item>
<item row="4" column="4">
<widget class="QPushButton" name="ButtonAutoMap">
<property name="text">
<string>Auto-Map</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="ReceiverStatusLabel">
<property name="text">
@ -43,6 +72,62 @@
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QLabel" name="ReceiverSourceValue">
<property name="text">
<string>Source</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QPushButton" name="ButtonRemoveController">
<property name="text">
<string>Remove Controller</string>
</property>
</widget>
</item>
<item row="0" column="4">
<widget class="QPushButton" name="ButtonStartReceiver">
<property name="text">
<string>Start Receiver</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLabel" name="PacketsReceivedValue">
<property name="text">
<string>0</string>
</property>
</widget>
</item>
<item row="4" column="3">
<widget class="QPushButton" name="ButtonRemoveUniverse">
<property name="text">
<string>Remove Universe</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="PacketsReceivedLabel">
<property name="text">
<string>Packets Received:</string>
</property>
</widget>
</item>
<item row="3" column="4">
<widget class="QPushButton" name="ButtonStopReceiver">
<property name="text">
<string>Stop Receiver</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QPushButton" name="ButtonAddController">
<property name="text">
<string>Add Controller</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="ReceiverStatusValue">
<property name="text">
@ -57,92 +142,14 @@
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QLabel" name="ReceiverSourceValue">
<item row="5" column="4">
<widget class="QPushButton" name="ButtonLoadMap">
<property name="text">
<string>Source</string>
<string>Load Map</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="PacketsReceivedLabel">
<property name="text">
<string>Packets Received:</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLabel" name="PacketsReceivedValue">
<property name="text">
<string>0</string>
</property>
</widget>
</item>
<item row="0" column="4">
<widget class="QPushButton" name="ButtonStartReceiver">
<property name="text">
<string>Start Receiver</string>
</property>
</widget>
</item>
<item row="3" column="3">
<widget class="QCheckBox" name="EnableMulticastBox">
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<property name="text">
<string>Enable Multicast</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="5" column="0" colspan="2">
<widget class="QTreeWidget" name="ControllersTreeView">
<column>
<property name="text">
<string notr="true">1</string>
</property>
</column>
</widget>
</item>
<item row="4" column="0">
<widget class="QPushButton" name="ButtonAddController">
<property name="text">
<string>Add Controller</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QPushButton" name="ButtonRemoveController">
<property name="text">
<string>Remove Controller</string>
</property>
</widget>
</item>
<item row="4" column="2">
<widget class="QPushButton" name="ButtonAddUniverse">
<property name="text">
<string>Add Universe</string>
</property>
</widget>
</item>
<item row="4" column="3">
<widget class="QPushButton" name="ButtonRemoveUniverse">
<property name="text">
<string>Remove Universe</string>
</property>
</widget>
</item>
<item row="4" column="4">
<widget class="QPushButton" name="ButtonAutoMap">
<property name="text">
<string>Auto-Map</string>
</property>
</widget>
</item>
<item row="3" column="2">
<item row="5" column="3">
<widget class="QPushButton" name="ButtonSaveMap">
<property name="text">
<string>Save Map</string>