From c43c2c981371fc0b494f7a2968ee9d2a0d1172ef Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Sun, 17 Jan 2021 17:36:51 -0600 Subject: [PATCH] Don't automatically map universes when controllers become available, instead move auto-map to a button --- OpenRGBE131ReceiverDialog.cpp | 139 +++++++++++++++++++--------------- OpenRGBE131ReceiverDialog.h | 4 + OpenRGBE131ReceiverDialog.ui | 7 ++ 3 files changed, 87 insertions(+), 63 deletions(-) diff --git a/OpenRGBE131ReceiverDialog.cpp b/OpenRGBE131ReceiverDialog.cpp index d93f5cd..75d06cc 100644 --- a/OpenRGBE131ReceiverDialog.cpp +++ b/OpenRGBE131ReceiverDialog.cpp @@ -99,69 +99,6 @@ void OpenRGBE131ReceiverDialog::DeviceListChanged() ui->E131TreeView->clear(); universe_list.clear(); - for(unsigned int controller_idx = 0; controller_idx < resource_manager->GetRGBControllers().size(); controller_idx++) - { - RGBController* controller = resource_manager->GetRGBControllers()[controller_idx]; - - // Determine if the controller has a Direct mode - bool has_direct = false; - for(unsigned int mode_idx = 0; mode_idx < controller->modes.size(); mode_idx++) - { - if(controller->modes[mode_idx].name == "Direct") - { - has_direct = true; - break; - } - } - - // Only map controllers that have a Direct mode - if(has_direct) - { - unsigned int num_universes = 1 + ((controller->leds.size() * 3) / 512); - unsigned int remaining_leds = controller->leds.size(); - unsigned int start_led = 0; - - for(unsigned int universe_idx = 0; universe_idx < num_universes; universe_idx++) - { - // For now, create universes sequentially per controller - universe_entry new_entry; - - new_entry.universe = universe_list.size() + 1; - - // Add members as needed - universe_member new_member; - - new_member.controller = resource_manager->GetRGBControllers()[controller_idx]; - new_member.start_channel = 1; - new_member.start_led = start_led; - new_member.num_leds = remaining_leds; - new_member.update = false; - - // Limit the number of LEDs - if(new_member.num_leds > MAX_LEDS_PER_UNIVERSE) - { - new_member.num_leds = MAX_LEDS_PER_UNIVERSE; - } - - // Update start LED - start_led = start_led + new_member.num_leds; - - // Update remaining LED count - remaining_leds = remaining_leds - new_member.num_leds; - - // Only set the update flag for the last universe of the controller - if(universe_idx == (num_universes - 1)) - { - new_member.update = true; - } - - new_entry.members.push_back(new_member); - - universe_list.push_back(new_entry); - } - } - } - UpdateControllersTreeView(); UpdateTreeView(); } @@ -285,6 +222,72 @@ void OpenRGBE131ReceiverDialog::UpdateTreeView() ui->E131TreeView->expandAll(); } +void OpenRGBE131ReceiverDialog::AutoMap() +{ + for(unsigned int controller_idx = 0; controller_idx < resource_manager->GetRGBControllers().size(); controller_idx++) + { + RGBController* controller = resource_manager->GetRGBControllers()[controller_idx]; + + // Determine if the controller has a Direct mode + bool has_direct = false; + for(unsigned int mode_idx = 0; mode_idx < controller->modes.size(); mode_idx++) + { + if(controller->modes[mode_idx].name == "Direct") + { + has_direct = true; + break; + } + } + + // Only map controllers that have a Direct mode + if(has_direct) + { + unsigned int num_universes = 1 + ((controller->leds.size() * 3) / 512); + unsigned int remaining_leds = controller->leds.size(); + unsigned int start_led = 0; + + for(unsigned int universe_idx = 0; universe_idx < num_universes; universe_idx++) + { + // For now, create universes sequentially per controller + universe_entry new_entry; + + new_entry.universe = universe_list.size() + 1; + + // Add members as needed + universe_member new_member; + + new_member.controller = resource_manager->GetRGBControllers()[controller_idx]; + new_member.start_channel = 1; + new_member.start_led = start_led; + new_member.num_leds = remaining_leds; + new_member.update = false; + + // Limit the number of LEDs + if(new_member.num_leds > MAX_LEDS_PER_UNIVERSE) + { + new_member.num_leds = MAX_LEDS_PER_UNIVERSE; + } + + // Update start LED + start_led = start_led + new_member.num_leds; + + // Update remaining LED count + remaining_leds = remaining_leds - new_member.num_leds; + + // Only set the update flag for the last universe of the controller + if(universe_idx == (num_universes - 1)) + { + new_member.update = true; + } + + new_entry.members.push_back(new_member); + + universe_list.push_back(new_entry); + } + } + } +} + void OpenRGBE131ReceiverDialog::E131ReceiverThreadFunction() { int sockfd; @@ -668,3 +671,13 @@ void OpenRGBE131ReceiverDialog::on_ButtonRemoveUniverse_clicked() \*-----------------------------------------------------*/ UpdateTreeView(); } + +void OpenRGBE131ReceiverDialog::on_ButtonAutoMap_clicked() +{ + AutoMap(); + + /*-----------------------------------------------------*\ + | Update the universe tree view | + \*-----------------------------------------------------*/ + UpdateTreeView(); +} diff --git a/OpenRGBE131ReceiverDialog.h b/OpenRGBE131ReceiverDialog.h index 7d6b17b..591ab65 100644 --- a/OpenRGBE131ReceiverDialog.h +++ b/OpenRGBE131ReceiverDialog.h @@ -17,6 +17,8 @@ public: explicit OpenRGBE131ReceiverDialog(ResourceManager* manager, QWidget *parent = nullptr); ~OpenRGBE131ReceiverDialog(); + void AutoMap(); + void E131ReceiverThreadFunction(); public slots: @@ -39,6 +41,8 @@ private slots: void on_ButtonRemoveUniverse_clicked(); + void on_ButtonAutoMap_clicked(); + private: ResourceManager* resource_manager; Ui::OpenRGBE131ReceiverDialog *ui; diff --git a/OpenRGBE131ReceiverDialog.ui b/OpenRGBE131ReceiverDialog.ui index eff004c..2c5f173 100644 --- a/OpenRGBE131ReceiverDialog.ui +++ b/OpenRGBE131ReceiverDialog.ui @@ -135,6 +135,13 @@ + + + + Auto-Map + + +