diff --git a/OpenRGBE131ReceiverDialog.cpp b/OpenRGBE131ReceiverDialog.cpp index 75d06cc..08052d8 100644 --- a/OpenRGBE131ReceiverDialog.cpp +++ b/OpenRGBE131ReceiverDialog.cpp @@ -5,6 +5,8 @@ #include #include +#include + #ifndef _WIN32 #include #define closesocket ::close @@ -681,3 +683,55 @@ void OpenRGBE131ReceiverDialog::on_ButtonAutoMap_clicked() \*-----------------------------------------------------*/ UpdateTreeView(); } + +void OpenRGBE131ReceiverDialog::on_ButtonSaveMap_clicked() +{ + /*-----------------------------------------------------*\ + | Create a JSON structure to hold the universe map | + \*-----------------------------------------------------*/ + json universe_map; + + /*-----------------------------------------------------*\ + | Loop through the universe list and add universe fields| + \*-----------------------------------------------------*/ + for(unsigned int universe_index = 0; universe_index < universe_list.size(); universe_index++) + { + universe_entry universe = universe_list[universe_index]; + + universe_map["universes"][universe_index]["universe"] = universe.universe; + + /*-----------------------------------------------------*\ + | Loop through all members and add info fields | + \*-----------------------------------------------------*/ + for(unsigned int member_index = 0; member_index < universe.members.size(); member_index++) + { + universe_member member = universe.members[member_index]; + + universe_map["universes"][universe_index]["members"][member_index]["start_channel"] = member.start_channel; + universe_map["universes"][universe_index]["members"][member_index]["start_led"] = member.start_led; + universe_map["universes"][universe_index]["members"][member_index]["num_leds"] = member.num_leds; + universe_map["universes"][universe_index]["members"][member_index]["update"] = member.update; + universe_map["universes"][universe_index]["members"][member_index]["controller_name"] = member.controller->name; + universe_map["universes"][universe_index]["members"][member_index]["controller_description"] = member.controller->description; + universe_map["universes"][universe_index]["members"][member_index]["controller_location"] = member.controller->location; + universe_map["universes"][universe_index]["members"][member_index]["controller_serial"] = member.controller->serial; + universe_map["universes"][universe_index]["members"][member_index]["controller_led_count"] = member.controller->colors.size(); + } + } + + std::ofstream universe_file("E131UniverseMap.json", std::ios::out | std::ios::binary); + + if(universe_file) + { + try + { + universe_file << universe_map.dump(4); + } + catch(std::exception e) + { + + } + + universe_file.close(); + } +} diff --git a/OpenRGBE131ReceiverDialog.h b/OpenRGBE131ReceiverDialog.h index 591ab65..9d5be49 100644 --- a/OpenRGBE131ReceiverDialog.h +++ b/OpenRGBE131ReceiverDialog.h @@ -43,6 +43,8 @@ private slots: void on_ButtonAutoMap_clicked(); + void on_ButtonSaveMap_clicked(); + private: ResourceManager* resource_manager; Ui::OpenRGBE131ReceiverDialog *ui; diff --git a/OpenRGBE131ReceiverDialog.ui b/OpenRGBE131ReceiverDialog.ui index 2c5f173..0f10aa2 100644 --- a/OpenRGBE131ReceiverDialog.ui +++ b/OpenRGBE131ReceiverDialog.ui @@ -142,6 +142,13 @@ + + + + Save Map + + +