Don't automatically map universes when controllers become available, instead move auto-map to a button

This commit is contained in:
Adam Honse 2021-01-17 17:36:51 -06:00
parent 02d013b44a
commit c43c2c9813
3 changed files with 87 additions and 63 deletions

View file

@ -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();
}

View file

@ -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;

View file

@ -135,6 +135,13 @@
</property>
</widget>
</item>
<item row="4" column="4">
<widget class="QPushButton" name="ButtonAutoMap">
<property name="text">
<string>Auto-Map</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>