mirror of
https://github.com/sudoxnym/open-hyperion.git
synced 2026-04-14 11:36:31 +00:00
Add function to load universe map from a saved json file
This commit is contained in:
parent
05362ae8a7
commit
2339f3a813
3 changed files with 253 additions and 86 deletions
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,6 +45,8 @@ private slots:
|
|||
|
||||
void on_ButtonSaveMap_clicked();
|
||||
|
||||
void on_ButtonLoadMap_clicked();
|
||||
|
||||
private:
|
||||
ResourceManager* resource_manager;
|
||||
Ui::OpenRGBE131ReceiverDialog *ui;
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Reference in a new issue